You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

点击DocuSign URL按钮后如何更新Salesforce Opportunity字段?

解决Opportunity详情页DocuSign Gen按钮触发字段更新的问题

直接修改URL按钮的参数没法实现字段更新——URL按钮本质只是跳转请求,没有执行数据更新的能力。给你两个可行方案,按需选择:

方案一:点击按钮先更新字段,再跳转DocuSign Gen

适合需要提前设置固定字段值(比如给xyz__c标记"已触发文档生成")的场景:

  1. 新建Apex控制器,负责更新字段并生成跳转链接
public class DSGRedirectController {
    public PageReference redirectToDSG() {
        String oppId = ApexPages.currentPage().getParameters().get('oppId');
        if(String.isNotBlank(oppId)) {
            Opportunity opp = [SELECT Id, xyz__c FROM Opportunity WHERE Id = :oppId LIMIT 1];
            // 替换成你要设置的xyz__c具体值
            opp.xyz__c = '文档生成中';
            update opp;
        }
        // 复用你原来的DocuSign Gen URL逻辑
        String sitePrefix = Site.getPrefix();
        String dsgUrl = (sitePrefix == '/s' ? '/apex/dfsle__gendocumentgenerator' : sitePrefix + '/apex/dfsle__gendocumentgenerator');
        PageReference dsgPage = new PageReference(dsgUrl);
        dsgPage.getParameters().put('sId', oppId);
        dsgPage.getParameters().put('templateId', 'a0KAs000003F4b4MAC');
        dsgPage.getParameters().put('recordId', oppId);
        dsgPage.getParameters().put('title', 'AAF-Template');
        return dsgPage;
    }
}
  1. 创建Visualforce页面,绑定这个控制器(用来触发控制器逻辑)
<apex:page controller="DSGRedirectController" action="{!redirectToDSG}" />
  1. 修改原URL按钮的目标地址,指向这个新建的Visualforce页面,传递Opportunity ID:
{!URLFOR($Page.DSGRedirectPage, null, [oppId = Opportunity.Id])}

方案二:文档生成完成后更新关联字段(比如documentid__c)

如果documentid__c是要存储DocuSign生成的文档ID,就得用DocuSign Gen的回调机制,等文档生成成功后再更新:

  1. 新建Apex Rest类,接收DocuSign的回调数据并更新字段
@RestResource(urlMapping='/DSGCallback/*')
global class DSGCallbackController {
    @HttpPost
    global static void handleCallback() {
        RestRequest req = RestContext.request;
        Map<String, Object> callbackData = (Map<String, Object>)JSON.deserializeUntyped(req.requestBody.toString());
        
        // 从回调数据里提取关联的Opportunity ID和生成的文档ID
        String oppId = (String)callbackData.get('sId');
        String docId = (String)callbackData.get('documentId');
        
        if(String.isNotBlank(oppId) && String.isNotBlank(docId)) {
            Opportunity opp = new Opportunity(Id = oppId, documentid__c = docId);
            update opp;
        }
    }
}
  1. 把这个Rest API的URL(格式类似https://你的Salesforce域名/services/apexrest/DSGCallback)配置到DocuSign Gen模板的回调设置里,确保DocuSign有权访问该地址。

  2. 权限配置:给按钮用户分配Apex类的访问权限,以及Opportunity的编辑权限,避免更新操作失败。

内容的提问来源于stack exchange,提问作者Dips

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 10:32:38