AJAX工具包--使用webservice执行时出现问题

3

我很难理解这里发生了什么。我正在尝试在Force.com自定义对象的列表视图上为一个按钮编写onClick JavaScript代码。

以下是JS代码:

{!REQUIRESCRIPT("/soap/ajax/15.0/apex.js")}
{!REQUIRESCRIPT("/soap/ajax/15.0/connection.js")}


var myURL = sforce.apex.execute("MyWebServices", "myUrl", {});

这是我尝试调用的网络服务。

global class MyWebServices {

    webservice static String myUrl(){
    return 'www.foo.com';
    }

}

当我点击按钮时,会弹出一个小警告窗口,上面写着:“遇到OnClick JavaScript按钮或链接的问题:无法调用未定义的“execute”方法”。当我遍历“sforce”的成员时,没有“apex”。在这个组织中,我使用了完全相同的语法来创建另一个按钮,唯一的区别是我调用的方法不同。那个按钮可以正常工作。事实上,如果我将有问题的脚本代码复制到另一个按钮的工作脚本头部,它也可以正常工作。我错过了什么?这个问题涉及两个按钮元素的详细信息:一个(工作正常)是帐户上的列表视图按钮,另一个(损坏的)是Foo__c自定义对象列表按钮。我对两个按钮都使用了这个代码:
 {!REQUIRESCRIPT("/soap/ajax/10.0/apex.js")}
 {!REQUIRESCRIPT("/soap/ajax/10.0/connection.js")}
 alert( sforce.apex.execute("HammockWebServices", "crossCoverageUrl", {}));

在账户上它完美地运作,但在Foo__c上却不行。我已经尝试交换!REQUIRE...语句的顺序,但没有观察到任何效果。除了按钮的标签和名称外,它们似乎被定义为相同的内容:列表按钮、显示复选框、执行JavaScript、OnClickJavaScript。是否存在对象级别的权限、配置文件或共享规则来影响可以访问哪些JavaScript包?(请注意,即使是系统管理员也无法实现此目的)。

在我看来,你应该使用Visualforce来完成这个任务。相比于处理Salesforce最初构建的工具集中非常难用的Ajax Toolkit,它可以为你节省很多麻烦。 - Ralph Callaway
3个回答

0

我认为需要先加载connection.js再加载apex.js,尝试更改顺序。

编辑:来自apex.js

if (!sforce) {
    throw "unable to find sforce. Make sure that connection.js is loaded before apex.js script";
}

但是既然更改脚本的顺序似乎没有任何效果,也许问题出在 API 版本上?我看到您正在使用版本 10,这相当古老了,您的 Apex 类也使用相同的版本吗?尝试更改版本以查看哪个有效。


切换后没有效果。此外,在另一个按钮中它可以正常工作,或者如果我将这段代码移到另一个按钮,它可以按照发布的顺序工作。 - Ben
当我首先加载apex.js并尝试使用它时,我会收到一个JavaScript错误。但是,这可能取决于自定义按钮所在的页面-哪个SF页面有效,哪个无效? - Adam Butler
另一个有趣的想法,但遗憾的是,我更新了最新的版本,但没有效果。而且,考虑到另一个按钮可以与任何API版本一起使用,这可能与那个无关。不过,我非常感谢这些建议。 - Ben

0

你的组织使用命名空间吗?如果是这样,那么调用函数的语法会稍微有所改变:

var myURL = sforce.apex.execute("MyWebServices", "myUrl", {});

to:

var myURL = sforce.apex.execute("MyNamespace.MyWebServices", "myUrl", {});

我有点惊讶,即使问题是一个 Apex Web 服务方法的命名空间,它也会告诉我 "apex" 未定义。 - Ben

0

在引用"apex"之前必须引用"connection"。这将设置核心sforce对象。


2
此答案已经被提出。在这种情况下,更好的做法是,而不是重新阅读此答案,一旦您获得足够的声望(15),请投票支持您认为可以解决问题的答案。 - LoveAndCoding

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接