2012-04-27 88 views
2

对于Salesforce来说一般来说我是新手,我试图决定如何处理调用SOAP Web服务。目前,当用户点击商机页面上的按钮时,通过AJAX执行web服务。我被要求从按钮中移动web服务调用,并将其放入自定义控制器页面。因此,在满足特定条件时需要无缝调用Web服务,而不是让用户单击按钮。Salesforce - 通过Apex控制器执行Javascript

我想使用相同的ajax语句启动webservice,因为它会节省我的时间。尽管通过Apex调用web服务似乎更有意义,但我仍在研究该主题。所以这里是我的问题:

是否有可能在Apex控制器内执行以下JavaScript?如果是这样如何?

{!REQUIRESCRIPT("/soap/ajax/24.0/connection.js")} 
{!REQUIRESCRIPT("/soap/ajax/24.0/apex.js")} 
var xfolder = "MyNewFolder" 
var parentid = "999999999999999" 
var myvar = sforce.apex.execute("myWS","invokeExternalWs", {folderName:xfolder,ObjectID:parentid}); 
window.alert('Folder created: ' + myvar); 

回答

4

彻底首先阅读这些参考文献:Action FunctionsApex in Ajax,或Visualforce JavaScript Remoting

最简单的做法是将connection.jsapex.js文件包含在页面中,使用<apex:includeScript>标签(如下所示)。

<apex:includeScript value="/soap/ajax/24.0/connection.js"/> 
<apex:includeScript value="/soap/ajax/24.0/apex.js"/> 

然后,把你的JavaScript函数在<script>标签<page>标签下。

<script> 
    function invokeWebService() 
    { 
     var xfolder = "MyNewFolder" 
     var parentid = "999999999999999" 
     var myvar = sforce.apex.execute("myWS","invokeExternalWs", {folderName:xfolder,ObjectID:parentid}); 
     window.alert('Folder created: ' + myvar); 
    } 
</script> 

最后,在输入按钮上调用具有onclick属性的函数。

<button type="button" onclick="invokeWebService();" style="btn">Invoke</button> 

注意..我没有测试过任何这一点,但它应该与小的调整工作(我已经使用了类似的方法很多次)。

+0

看着这个答案可能对我有帮助:http://stackoverflow.com/a/7715982/549141 – 2012-04-27 19:11:02

+0

感谢您的答复。我真的希望有一种方法可以在Apex控制器内执行javascript,而不使用VisualForce。我越想这个控制器版本就越好。我需要无缝地关闭JavaScript,并且我不想在当前进程之间添加一个页面。无论如何,再次感谢您的建议和信息,我将来肯定能够使用它。 – user891859 2012-04-30 14:41:48

+1

不客气。顺便说一下,您实际上并不需要在Apex控制器内执行JavaScript来调用Web服务。你可以在Apex中调用'myWS.invokeExternalWs(folderName,objectId);'。我没有意识到这就是你想要做的。 – 2012-04-30 16:40:09