我很难理解这里发生了什么。我正在尝试为自定义对象的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”的成员时,没有“顶点”。
我在同一个组织中的另一个按钮中使用完全相同的语法,唯一的区别是我调用的方法。那个按钮有效。事实上,如果我从问题脚本中复制代码并将其放在另一个按钮上的工作脚本的头部,它就可以工作。我在这里缺少什么?
这个问题的两个按钮元素的更多细节:一个按钮(有效)是Account上的列表视图按钮,另一个(已损坏)按钮位于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包的对象级权限,配置文件或共享规则? (请注意,即使是这种情况,我也尝试将其作为系统管理员,并且无处可寻......)
答案 0 :(得分:0)
您的组织是否使用命名空间?如果是这样,那么调用函数的语法会稍微改变:
var myURL = sforce.apex.execute("MyWebServices", "myUrl", {});
为:
var myURL = sforce.apex.execute("MyNamespace.MyWebServices", "myUrl", {});
答案 1 :(得分: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类也使用相同的版本?尝试更改版本以查看哪些有效。
答案 2 :(得分:0)
“连接”必须在“apex”之前引用。它设置了核心的sforce对象。