【问题标题】:Call a apex method from a custom button从自定义按钮调用顶点方法
【发布时间】:2012-03-15 05:53:59
【问题描述】:

我想从自定义按钮调用 apex 方法

我意识到我们可以通过两种方式实现这一目标

  1. 调用 VF 页面,该页面又调用页面属性上的方法
    <apex:page standardController="Opportunity" extensions="oppExt" action="{!changeStatus}"/>

  2. 使用javascript调用webservices方法

我的问题是,对于这种情况,哪种方法是最佳实践。

谢谢

【问题讨论】:

  • 对不起,我指的是从自定义按钮而不是控制器调用 apex。编辑了问题

标签: salesforce apex-code


【解决方案1】:

这取决于您的用例。 API 支持Controllers and ExtensionsJavaScript RemotingJavaScript with Web Services。这些方法都基于定义的标准;这真的取决于开发人员或开发团队。

JavaScript 更适合显示少量数据的界面,但它通常对用户更友好。

我会推荐 AJAX Toolkit 而不是 JavaScript Remoting 来完成这项任务。它更适合单字段更新; JavaScript Remoting 更适合通过 JavaScript 访问 Apex 方法。但是,两者都可以达到相同的结果。

【讨论】:

  • 感谢 Matthew... 在数据安全方面,我们使用 javascript 的安全性如何?
  • 如果您直接在 Salesforce 上的 Visualforce 页面上使用 JavaScript,我敢肯定它与您的 https 连接一样安全。不过,我不是安全专家。
【解决方案2】:

Prady,您的问题措辞令人困惑,但如果我从您的帖子标题中正确理解了您,您正试图从自定义按钮的 OnClick JavaScript 调用 Apex。在这种情况下,您对选项的评估几乎完成。以下是选项,按最优选到最不优选的顺序排列:

  1. 使用 AJAX 工具包的 sforce.connection.[update|insert|delete] 对您正在处理的记录执行标准 DML 操作。如果您需要采取的行动不是非常简单(即,如果您所做的不仅仅是更新某些字段、插入新记录或删除记录),那么您可以在有问题的记录上设置一个特殊的“触发”字段可以使用 AJAX 工具包进行更新,然后这反过来会在后端启动一些 Apex 触发器代码,这将执行您更复杂的逻辑。
  2. 使用 AJAX 工具包的 sforce.apex.execute() 方法执行自定义 Apex WebService 方法。我很想把它放在第 3 位,因为它需要编写一个基于 SOAP 的 WebService,因此比基于 REST 的方法稍慢。但是,在自定义按钮 On-Click JS 中使用更为直接,并且对于使用标准页面布局的开发人员来说是一种经过时间考验的标准实践。此外,如果您在托管包中包含此自定义按钮代码,这将比基于 REST-API 的方法更可取,因为要使用 REST API,管理员必须配置与其特定 SFDC 实例相对应的远程站点 --- 不是很重要,但还是有点麻烦。
  3. 使用 JavaScript/AJAX 异步调用 REST API 或自定义 Apex REST 端点。使用 jQuery 的 $.get() 或 $.ajax() 方法对这些端点执行 GET/POST。这是可行的,因为 REST API 将始终与包含您的自定义按钮的任何标准页面布局位于同一域中。
  4. 将用户重定向到 Visualforce 页面,此时您可以使用页面的控制器在 Apex 中做任何您想做的事情,然后将用户发送回原始页面。最不受欢迎,因为它需要对用户进行双重重定向。

【讨论】:

  • 我只需要更新一个字段,仅此而已..所以您的建议是使用 AJAX 工具包的 sforce.connection。非常感谢您的详细解答
【解决方案3】:

我没有听懂你的问题。从控制器调用 apex 方法就像键入 controllerObj.methodName(假设该方法在另一个控制器中)一样简单,或者如果该方法在同一个控制器中,则只需键入 methodName。或者我可能误解了你的问题。可以补充更多细节吗?

【讨论】:

    猜你喜欢
    • 2019-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-20
    • 2012-07-31
    • 2012-10-27
    相关资源
    最近更新 更多