当前位置: 首页 > 知识库问答 >
问题:

从Salesforce数据更新Docusign中的数据字段标记

罗浩然
2023-03-14

请注意,我已经阅读了Docusign RestAPI guide Version2中的Modify tabs for Receiver文章。那是用来修改标记类型还是标记值的?

共有1个答案

司寇凯
2023-03-14

这在Salesforce和DS中是可能的,但不是你正在进行的方式。我回答了你关于后台的问题,在另一个问题上正确地发送(加载)一个URL到web浏览器,并在APEX的后台运行它

合并字段是问题的一部分,但它们只在“发送”时显示为值,并且只有在信封成功完成时才更新Salesforce,所以对于您的场景来说,这实际上只是一个一半的解决方案。

下面是我为另一个DocuSign客户所做的,作为如何做到这一点的示例,但请联系您的DocuSign客户经理,因为我认为如果您正在进行这些类型的高级工作流,您可以从DocuSign的专业服务小组那里受益,我是其中的一部分。

1. Components added: 
    DocuSign Connect Object - dseRecipientConnectUpdate
    custom Object - dseRecipientConnectUpdate__c​
    Trigger - dseRCU_AfterUpdate​
    Class - desController (in Sandbox and code below as well)
    Class - CheckRecursive (in sandbox and code below as well)
    DS Template Example -Agreement with ContractID  960BD14E-6A09-4A9E-89E6-77B1D8444B72


2. What you need yet to do
    Replace Send on Behalf user with Sender of envelope via code (hard Coded as david.grigsby@docusign.com in code) lookup using envelopeID in DocuSign Status and get sender, then lookup in user that sender's email
    Classify any stringified body's you want
    Error Condition handling
    Test Classes
    Testing, Testing, testing

How I tested:
    0. Turn on debugging for API user and Myself
    a. Sent Envelope from Template
    b. Signed the first three recipients 
    c. Code updated the dseRecipientConnectUpdate__c​ record (a36) that was the autoresponse blocking user aka just changed record by editing but no real change, then save.

    d. It would then fire trigger again (as mentioned you will need to change the send on behalf of user to automatically for final code to be sending user, but you can make it your email you send envelope by) and it will read recipients, get the contract id recipient and tab, add new recipient and tab with value, delete old reciepents (tag recipient and blocking)

Salesforce自定义对象:

<?xml version="1.0" encoding="UTF-8"?>
<CustomObject xmlns="http://soap.sforce.com/2006/04/metadata">
    <!--actionoverrides removed for sake of SO answer size/>
    <compactLayoutAssignment>SYSTEM</compactLayoutAssignment>
    <deploymentStatus>Deployed</deploymentStatus>
    <description>DocuSign Recipient Connect Update</description>
    <enableActivities>true</enableActivities>
    <enableFeeds>false</enableFeeds>
    <enableHistory>true</enableHistory>
    <enableReports>true</enableReports>
    <fields>
        <fullName>RecipStatus__c</fullName>
        <externalId>false</externalId>
        <label>RecipStatus</label>
        <length>50</length>
        <required>false</required>
        <trackHistory>false</trackHistory>
        <trackTrending>false</trackTrending>
        <type>Text</type>
        <unique>false</unique>
    </fields>
    <fields>
        <fullName>RecipientEmail__c</fullName>
        <description>Recipient Email</description>
        <externalId>false</externalId>
        <label>RecipientEmail</label>
        <required>false</required>
        <trackHistory>false</trackHistory>
        <trackTrending>false</trackTrending>
        <type>Email</type>
        <unique>false</unique>
    </fields>
    <fields>
        <fullName>RecipientID__c</fullName>
        <externalId>false</externalId>
        <label>RecipientID</label>
        <length>50</length>
        <required>false</required>
        <trackHistory>false</trackHistory>
        <trackTrending>false</trackTrending>
        <type>Text</type>
        <unique>false</unique>
    </fields>
    <fields>
        <fullName>dsEnvelopeID__c</fullName>
        <description>dsfs__DocuSign_Envelope_ID__c</description>
        <externalId>false</externalId>
        <label>dsEnvelopeID</label>
        <length>56</length>
        <required>false</required>
        <trackHistory>false</trackHistory>
        <trackTrending>false</trackTrending>
        <type>Text</type>
        <unique>false</unique>
    </fields>
    <label>dseRecipientConnectUpdate</label>
    <listViews>
        <fullName>All</fullName>
        <filterScope>Everything</filterScope>
        <label>All</label>
    </listViews>
    <nameField>
        <displayFormat>dseRCU-{0000000000}</displayFormat>
        <label>dseRecipientConnectUpdate Name</label>
        <trackHistory>false</trackHistory>
        <type>AutoNumber</type>
    </nameField>
    <pluralLabel>dseRecipientConnectUpdates</pluralLabel>
    <recordTypeTrackHistory>false</recordTypeTrackHistory>
    <recordTypes>
        <fullName>dseRecipientConnectUpdate</fullName>
        <active>true</active>
        <description>dseRecipientConnectUpdate</description>
        <label>dseRecipientConnectUpdate</label>
    </recordTypes>
    <searchLayouts/>
    <sharingModel>ReadWrite</sharingModel>
</CustomObject>

触发器===========

trigger dseRCU_AfterUpdate on dseRecipientConnectUpdate__c (after update) {
    try
    {

        if (CheckRecursive.runOnce())
        {   

            List<dseRecipientConnectUpdate__c> myConnectUpdates = [Select d.dsEnvelopeID__c, d.RecipientID__c, d.RecipientEmail__c, d.RecipStatus__c, d.Id From dseRecipientConnectUpdate__c d WHERE Id IN:Trigger.newMap.keySet()];

            for(dseRecipientConnectUpdate__c myConnectCompleted :myConnectUpdates)
            {
                system.debug(myConnectCompleted.Id);

                if(myConnectCompleted.RecipStatus__c.indexOf('AutoResponded') != -1)
                {
                    system.debug(myConnectCompleted.RecipStatus__c);
                        //Looking for bounce back user via status AutoResponded  and  @accelrys.com emails/recipients
                        if(myConnectCompleted.RecipientEmail__c.indexOf('invalidemail@baddomain.com') != -1)
                        {
                          //do modification to envelope here
                          dseController.updateEnvelope(myConnectCompleted.dsEnvelopeID__c, myConnectCompleted.RecipientID__c);


                        }
                }
            }
        }
    }
    catch(Exception ex)
    {
        system.debug(ex);
    }
    finally
    {

    }  
}

类============

public with sharing class dseController {

    public dseController()
    {

    }

    public dseController(ApexPages.StandardController controller)
    {

    } 

    @future (callout=true)
    public static void updateEnvelope( string envelopeID, string recipientID )
    {
    RecipientResponse RecipientResponseDeserialized = new RecipientResponse();
    RecipientTabResponse RecipientTabResponseDeserialized = new RecipientTabResponse();
    string rResponse = '{}';
    string recipientGuidwithContractTab;
    string recipientGuidForBlockingRecipient;
    string rTabResponse = '{}';
    string rSetRecipientResponse = '{}';
    string rSetTabForRecipientResponse = '{}';
    string rTabRecipientDeleteResponse = '{}';
    string rBlockingRecipientDeleteResponse = '{}';


    try
    {
//Call to get envelope recipients
rResponse = getEnvelopeRecipients(envelopeID);
system.debug(rResponse);

RecipientResponseDeserialized = parseRecipentResponse(rResponse);
system.debug(RecipientResponseDeserialized);

recipientGuidwithContractTab = getRecipientwithContractTab(RecipientResponseDeserialized);
system.debug(recipientGuidwithContractTab);

//Call to get recipient tab
rTabResponse = getRecipientTab(envelopeID, recipientGuidwithContractTab);
system.debug(rTabResponse);

RecipientTabResponseDeserialized = parseRecipientTabResponse(rTabResponse);
system.debug(RecipientTabResponseDeserialized);

//Call to add recipient with new id
rSetRecipientResponse = setRecipientForNewTab(envelopeID,RecipientResponseDeserialized);
system.debug(rSetRecipientResponse);

//Call to add tab to new recipient with new id

rSetTabForRecipientResponse = setNewTabforNewRecipient(envelopeID,RecipientTabResponseDeserialized);
system.debug(rSetTabForRecipientResponse);

//Call to delete old clone recipient
rTabRecipientDeleteResponse = deleteRecipientTab(envelopeID, recipientGuidwithContractTab);
system.debug(rTabRecipientDeleteResponse);

//Call to delete blocking user
recipientGuidForBlockingRecipient = getBlockingRecipient(RecipientResponseDeserialized);
rBlockingRecipientDeleteResponse = deleteBlockingRecipient(envelopeID, recipientGuidForBlockingRecipient);
system.debug(rBlockingRecipientDeleteResponse);
    }
catch(Exception ex)
        {
            system.debug(ex);

        }
        finally
        {

        }    

    }

    public static string getRecipientwithContractTab(RecipientResponse rResponse)
    {
    string rContractTabID = 'Not Found';

    try{

    List<Signer> mySigners = rResponse.signers;
    for(Signer mySigner : mySigners)
    {
    if(mySigner.roleName == 'ContractIDApprover')
    {
    rContractTabID = mySigner.recipientIdGuid;
    }

    }

    }
catch(Exception ex)
        {
            system.debug(ex);

        }
        finally
        {

        } 

        return rContractTabID;

    }

    public static string getBlockingRecipient(RecipientResponse rResponse)
    {
    string rContractTabID = 'Not Found';

    try{

    List<Signer> mySigners = rResponse.signers;
    for(Signer mySigner : mySigners)
    {
    if(mySigner.roleName == 'BlockingUser')
    {
    rContractTabID = mySigner.recipientIdGuid;
    }

    }

    }
catch(Exception ex)
        {
            system.debug(ex);

        }
        finally
        {

        } 

        return rContractTabID;

    }


    public static string getEnvelopeRecipients(string envelopeID)
    {
    string response = '{}';
    string DSEndpoint = 'https://demo.docusign.net/restapi/v2/';
    string DSUserId = 'yourdsUserid';
    string DSPassword = 'yourdspassword';
    string DSAccountID = 'yourdsaccountID';
    string DSIntegratorKey = 'yourdsintegratorkey';


    try
{

//FORCES that the DocuSign member has to be in the DocuSign account DSFS is configured for
List<dsfs__DocuSignAccountConfiguration__c> dsAccountConfig = [Select d.dsfs__UseSendOnBehalfOf__c, d.dsfs__DocuSignBaseURL__c, d.dsfs__DSProSFUsername__c, d.dsfs__DSProSFPassword__c, d.dsfs__AccountId__c From dsfs__DocuSignAccountConfiguration__c d limit 1];

for(dsfs__DocuSignAccountConfiguration__c myConfig : dsAccountConfig)
{

DSEndpoint = myConfig.dsfs__DocuSignBaseURL__c + 'restapi/v2/';
DSUserId = myConfig.dsfs__DSProSFUsername__c;
DSPassword = myConfig.dsfs__DSProSFPassword__c;

}

HttpRequest request = new HttpRequest();
request.setEndpoint(DSEndpoint + 'accounts/'+DSAccountID+'/envelopes/'+envelopeID+'/recipients');
request.setMethod('GET');
request.setHeader('Content-Type', 'application/json');
request.setHeader('X-DocuSign-Authentication', '<DocuSignCredentials><Username>'+DSUserId+'</Username><Password>'+DSPassword+'</Password><IntegratorKey>'+DSIntegratorKey+'</IntegratorKey></DocuSignCredentials>');
request.setHeader('Accept', 'application/json');
request.setTimeout(120000);

system.debug(request.getHeader('X-DocuSign-Authentication'));


HttpResponse myResponse = (new Http()).send(request);

system.debug(myResponse.getBody());

if(myResponse.getStatusCode().format()=='200')
{  
response = myResponse.getBody();
system.debug(response);

}

}
catch(Exception ex)
        {
            system.debug(ex);

        }
        finally
        {

        }

        return response;
    }

    public static string getRecipientTab(string envelopeID, string recipientGuid)
    {
    string response = '{}';
    string DSEndpoint = 'https://demo.docusign.net/restapi/v2/';
    string DSUserId = 'yourdsUserid';
    string DSPassword = 'yourdspassword';
    string DSAccountID = 'yourdsaccountID';
    string DSIntegratorKey = 'yourdsintegratorkey';


    try
{

//FORCES that the DocuSign member has to be in the DocuSign account DSFS is configured for
List<dsfs__DocuSignAccountConfiguration__c> dsAccountConfig = [Select d.dsfs__UseSendOnBehalfOf__c, d.dsfs__DocuSignBaseURL__c, d.dsfs__DSProSFUsername__c, d.dsfs__DSProSFPassword__c, d.dsfs__AccountId__c From dsfs__DocuSignAccountConfiguration__c d limit 1];

for(dsfs__DocuSignAccountConfiguration__c myConfig : dsAccountConfig)
{

DSEndpoint = myConfig.dsfs__DocuSignBaseURL__c + 'restapi/v2/';
DSUserId = myConfig.dsfs__DSProSFUsername__c;
DSPassword = myConfig.dsfs__DSProSFPassword__c;

}

HttpRequest request = new HttpRequest();
request.setEndpoint(DSEndpoint + 'accounts/'+DSAccountID+'/envelopes/'+envelopeID+'/recipients/'+recipientGuid+'/tabs/');
request.setMethod('GET');
request.setHeader('Content-Type', 'application/json');
request.setHeader('X-DocuSign-Authentication', '<DocuSignCredentials><Username>'+DSUserId+'</Username><Password>'+DSPassword+'</Password><SendOnBehalfOf>david.grigsby@docusign.com</SendOnBehalfOf><IntegratorKey>'+DSIntegratorKey+'</IntegratorKey></DocuSignCredentials>');
request.setHeader('Accept', 'application/json');
request.setTimeout(120000);

system.debug(request.getHeader('X-DocuSign-Authentication'));


HttpResponse myResponse = (new Http()).send(request);

system.debug(myResponse.getBody());

if(myResponse.getStatusCode().format()=='200')
{  
response = myResponse.getBody();
system.debug(response);

}

}
catch(Exception ex)
        {
            system.debug(ex);

        }
        finally
        {

        }

        return response;
    }

    public static string setRecipientForNewTab(string envelopeID, RecipientResponse rResponse)
    {
    string response = '{}';
    string DSEndpoint = 'https://demo.docusign.net/restapi/v2/';
    string DSUserId = 'yourdsUserid';
    string DSPassword = 'yourdspassword';
    string DSAccountID = 'yourdsaccountID';
    string DSIntegratorKey = 'yourdsintegratorkey';


    try
{

//FORCES that the DocuSign member has to be in the DocuSign account DSFS is configured for
List<dsfs__DocuSignAccountConfiguration__c> dsAccountConfig = [Select d.dsfs__UseSendOnBehalfOf__c, d.dsfs__DocuSignBaseURL__c, d.dsfs__DSProSFUsername__c, d.dsfs__DSProSFPassword__c, d.dsfs__AccountId__c From dsfs__DocuSignAccountConfiguration__c d limit 1];

for(dsfs__DocuSignAccountConfiguration__c myConfig : dsAccountConfig)
{

DSEndpoint = myConfig.dsfs__DocuSignBaseURL__c + 'restapi/v2/';
DSUserId = myConfig.dsfs__DSProSFUsername__c;
DSPassword = myConfig.dsfs__DSProSFPassword__c;

}

Signer mySignerToAdd = new Signer();

List<Signer> mySigners = rResponse.signers;
    for(Signer mySigner : mySigners)
    {
    if(mySigner.roleName == 'ContractIDApprover')
    {
    mySignerToAdd = mySigner;
    }

    }


    String myBody;
    myBody = '{"signers": [{"signInEachLocation": "false","name": "'+mySignerToAdd.name +'Added 1","email": "'+mySignerToAdd.email+'","recipientId": "7","requireIdLookup": "false","routingOrder": "19","roleName": "'+mySignerToAdd.roleName+'1"}]}';

HttpRequest request = new HttpRequest();
request.setEndpoint(DSEndpoint + 'accounts/'+DSAccountID+'/envelopes/'+envelopeID+'/recipients/');
request.setMethod('POST');
request.setHeader('Content-Type', 'application/json');
request.setHeader('X-DocuSign-Authentication', '<DocuSignCredentials><Username>'+DSUserId+'</Username><Password>'+DSPassword+'</Password><SendOnBehalfOf>david.grigsby@docusign.com</SendOnBehalfOf><IntegratorKey>'+DSIntegratorKey+'</IntegratorKey></DocuSignCredentials>');
request.setHeader('Accept', 'application/json');
request.setTimeout(120000);
request.setBody(myBody);

system.debug(request.getHeader('X-DocuSign-Authentication'));


HttpResponse myResponse = (new Http()).send(request);

system.debug(myResponse.getBody());

if(myResponse.getStatusCode().format()=='201')
{  
response = myResponse.getBody();
system.debug(response);

}

}
catch(Exception ex)
        {
            system.debug(ex);

        }
        finally
        {

        }

        return response;
    }

     public static string setNewTabforNewRecipient(string envelopeID, RecipientTabResponse rTabResponse)
    {
    string response = '{}';
    string DSEndpoint = 'https://demo.docusign.net/restapi/v2/';
    string DSUserId = 'yourdsUserid';
    string DSPassword = 'yourdspassword';
    string DSAccountID = 'yourdsaccountID';
    string DSIntegratorKey = 'yourdsintegratorkey';


    try
{

//FORCES that the DocuSign member has to be in the DocuSign account DSFS is configured for
List<dsfs__DocuSignAccountConfiguration__c> dsAccountConfig = [Select d.dsfs__UseSendOnBehalfOf__c, d.dsfs__DocuSignBaseURL__c, d.dsfs__DSProSFUsername__c, d.dsfs__DSProSFPassword__c, d.dsfs__AccountId__c From dsfs__DocuSignAccountConfiguration__c d limit 1];

for(dsfs__DocuSignAccountConfiguration__c myConfig : dsAccountConfig)
{

DSEndpoint = myConfig.dsfs__DocuSignBaseURL__c + 'restapi/v2/';
DSUserId = myConfig.dsfs__DSProSFUsername__c;
DSPassword = myConfig.dsfs__DSProSFPassword__c;

}

TextTabs myTextTabToAdd = new TextTabs();

List<TextTabs> myTextTabs = rTabResponse.textTabs;
    for(TextTabs myTextTab : myTextTabs)
    {
    if(myTextTab.tabLabel == 'ContractID')
    {
    myTextTabToAdd = myTextTab;
    }

    }


    String myBody;
    myBody = '{"textTabs": [{"height": '+myTextTabToAdd.height+',"shared": "'+myTextTabToAdd.shared+'","requireInitialOnSharedChange": "'+myTextTabToAdd.requireInitialOnSharedChange+'","name": "'+myTextTabToAdd.name+'1","value": "ContractID12345","width": '+myTextTabToAdd.width+',"required": "'+myTextTabToAdd.required+'","locked": "'+myTextTabToAdd.locked+'","concealValueOnDocument": "'+myTextTabToAdd.concealValueOnDocument+'","disableAutoSize": "'+myTextTabToAdd.disableAutoSize+'","tabLabel": "'+myTextTabToAdd.tabLabel+'","documentId": "'+myTextTabToAdd.documentId+'","recipientId": "7","pageNumber": "'+myTextTabToAdd.pageNumber+'","xPosition": "'+myTextTabToAdd.xPosition+'","yPosition": "'+myTextTabToAdd.yPosition+'"}]}';

HttpRequest request = new HttpRequest();
request.setEndpoint(DSEndpoint + 'accounts/'+DSAccountID+'/envelopes/'+envelopeID+'/recipients/7/tabs');
request.setMethod('POST');
request.setHeader('Content-Type', 'application/json');
request.setHeader('X-DocuSign-Authentication', '<DocuSignCredentials><Username>'+DSUserId+'</Username><Password>'+DSPassword+'</Password><SendOnBehalfOf>david.grigsby@docusign.com</SendOnBehalfOf><IntegratorKey>'+DSIntegratorKey+'</IntegratorKey></DocuSignCredentials>');
request.setHeader('Accept', 'application/json');
request.setTimeout(120000);
request.setBody(myBody);

system.debug(request.getHeader('X-DocuSign-Authentication'));


HttpResponse myResponse = (new Http()).send(request);

system.debug(myResponse.getBody());

if(myResponse.getStatusCode().format()=='201')
{  
response = myResponse.getBody();
system.debug(response);

}

}
catch(Exception ex)
        {
            system.debug(ex);

        }
        finally
        {

        }

        return response;
    }

    public static string deleteRecipientTab(string envelopeID, string recipientGuid)
    {
    string response = '{}';
    string DSEndpoint = 'https://demo.docusign.net/restapi/v2/';
    string DSUserId = 'yourdsUserid';
    string DSPassword = 'yourdspassword';
    string DSAccountID = 'yourdsaccountID';
    string DSIntegratorKey = 'yourdsintegratorkey';


    try
{

//FORCES that the DocuSign member has to be in the DocuSign account DSFS is configured for
List<dsfs__DocuSignAccountConfiguration__c> dsAccountConfig = [Select d.dsfs__UseSendOnBehalfOf__c, d.dsfs__DocuSignBaseURL__c, d.dsfs__DSProSFUsername__c, d.dsfs__DSProSFPassword__c, d.dsfs__AccountId__c From dsfs__DocuSignAccountConfiguration__c d limit 1];

for(dsfs__DocuSignAccountConfiguration__c myConfig : dsAccountConfig)
{

DSEndpoint = myConfig.dsfs__DocuSignBaseURL__c + 'restapi/v2/';
DSUserId = myConfig.dsfs__DSProSFUsername__c;
DSPassword = myConfig.dsfs__DSProSFPassword__c;

}

HttpRequest request = new HttpRequest();
request.setEndpoint(DSEndpoint + 'accounts/'+DSAccountID+'/envelopes/'+envelopeID+'/recipients/'+recipientGuid);
request.setMethod('DELETE');
request.setHeader('Content-Type', 'application/json');
request.setHeader('X-DocuSign-Authentication', '<DocuSignCredentials><Username>'+DSUserId+'</Username><Password>'+DSPassword+'</Password><SendOnBehalfOf>youremail@yourdomain.com</SendOnBehalfOf><IntegratorKey>'+DSIntegratorKey+'</IntegratorKey></DocuSignCredentials>');
request.setHeader('Accept', 'application/json');
request.setTimeout(120000);

system.debug(request.getHeader('X-DocuSign-Authentication'));


HttpResponse myResponse = (new Http()).send(request);

system.debug(myResponse.getBody());

if(myResponse.getStatusCode().format()=='200')
{  
response = myResponse.getBody();
system.debug(response);

}

}
catch(Exception ex)
        {
            system.debug(ex);

        }
        finally
        {

        }

        return response;
    } 

        public static string deleteBlockingRecipient(string envelopeID, string recipientGuid)
    {
    string response = '{}';
    string DSEndpoint = 'https://demo.docusign.net/restapi/v2/';
    string DSUserId = 'yourdsUserid';
    string DSPassword = 'yourdspassword';
    string DSAccountID = 'yourdsaccountID';
    string DSIntegratorKey = 'yourdsintegratorkey';


    try
{

//FORCES that the DocuSign member has to be in the DocuSign account DSFS is configured for
List<dsfs__DocuSignAccountConfiguration__c> dsAccountConfig = [Select d.dsfs__UseSendOnBehalfOf__c, d.dsfs__DocuSignBaseURL__c, d.dsfs__DSProSFUsername__c, d.dsfs__DSProSFPassword__c, d.dsfs__AccountId__c From dsfs__DocuSignAccountConfiguration__c d limit 1];

for(dsfs__DocuSignAccountConfiguration__c myConfig : dsAccountConfig)
{

DSEndpoint = myConfig.dsfs__DocuSignBaseURL__c + 'restapi/v2/';
DSUserId = myConfig.dsfs__DSProSFUsername__c;
DSPassword = myConfig.dsfs__DSProSFPassword__c;

}

HttpRequest request = new HttpRequest();
request.setEndpoint(DSEndpoint + 'accounts/'+DSAccountID+'/envelopes/'+envelopeID+'/recipients/'+recipientGuid);
request.setMethod('DELETE');
request.setHeader('Content-Type', 'application/json');
request.setHeader('X-DocuSign-Authentication', '<DocuSignCredentials><Username>'+DSUserId+'</Username><Password>'+DSPassword+'</Password><SendOnBehalfOf>youremail@yourdomain.com</SendOnBehalfOf><IntegratorKey>'+DSIntegratorKey+'</IntegratorKey></DocuSignCredentials>');
request.setHeader('Accept', 'application/json');
request.setTimeout(120000);

system.debug(request.getHeader('X-DocuSign-Authentication'));


HttpResponse myResponse = (new Http()).send(request);

system.debug(myResponse.getBody());

if(myResponse.getStatusCode().format()=='200')
{  
response = myResponse.getBody();
system.debug(response);

}

}
catch(Exception ex)
        {
            system.debug(ex);

        }
        finally
        {

        }

        return response;
    }    

public static RecipientResponse parseRecipentResponse(String json) {
return (RecipientResponse) System.JSON.deserialize(json, RecipientResponse.class);
}

public static RecipientTabResponse parseRecipientTabResponse(String json) {
return (RecipientTabResponse) System.JSON.deserialize(json, RecipientTabResponse.class);
}
    public class Signer
    {
    public string name;
    public string email;
    public string recipientId;
    public string recipientIdGuid;
    public string requireIdLookup;
    public string userId;
    public string routingOrder;
    public string roleName;
    public string status;
    public string signedDateTime;
    public string deliveredDateTime;
    public string templateLocked;
    public string templateRequired;

    }

    public class RecipientResponse
    {
    public List<Signer> signers;
    public List<Signer> agents;
    public List<Signer> editors;
    public List<Signer> intermediaries;
    public List<Signer> carbonCopies;
    public List<Signer> certifiedDeliveries;
    public List<Signer> inPersonSigners;
    public String recipientCount;
    public String currentRoutingOrder;


    }

public class TextTabs {
public Integer height;
public String validationPattern;
public String validationMessage;
public String shared;
public String requireInitialOnSharedChange;
public String name;
public String value;
public Integer width;
public String required;
public String locked;
public String concealValueOnDocument;
public String disableAutoSize;
public String tabLabel;
public String documentId;
public String recipientId;
public String pageNumber;
public String xPosition;
public String yPosition;
public String tabId;
}

public class RecipientTabResponse 
{
public List<TextTabs> textTabs;



}



}
 类似资料:
  • 我有一个MongoDb数据库,其中包含一个名为的集合。在中,我希望通过属性搜索特定对象。我想更新找到的对象中的数组内容。例如,最初,在向该endpoint发出请求之前,所需的数据如下所示: 发出类似的请求后,mongodb中的数据应更新为 这是我的文件,为了执行它,注释中的代码应该是什么?

  • 我试图在一次提交中实现多个更新。我有一个包含许多行的表,并且希望能够通过切换到下一个插入框来更新每行中的一个字段。 我的代码是这样的:-//start a table echo'; 当我打印$\u POST数组时,一切都很好,但是变量为Null。我知道我不能在多个阵列上进行foreach(至少我不认为我可以),那么我还缺少其他技巧吗?我离这里不远了,因为$u Post打印中有正确的数据。 顺便说一

  • 我试图使用Salesforce中的SOAP APi从模板发送文档。我使用代码演练NDA kiosk作为示例。我可以预先设置值,但是字段的值不会写回Salesforce。当我从DocuSign按钮发送文档时,值会按预期同步。//为字段docusignapi.templateReferenceFieldDataDataValue添加数据fd1=new docusignapi.templateRefer

  • 我想知道ehcache是否有办法检测数据库更新/插入(spring/java,hibernate web应用程序),并使用数据库中的当前(最新)数据刷新其缓存。如果没有,检测数据库更新的最佳方法是什么,以保持与缓存和数据库之间的数据同步?

  • 概述 使用update()方法更新文档。这个方法接收以下参数: 一个方档匹配的过滤器,用于过滤要更新的文档 一个用来执行修改操作的更新文档 一个可选的参数 指定过滤器和指定查询的时候是一样的。update()方法默认只更新单个文档,使用multi可选参数指定更新所有匹配的文档。 不能更新文档的_id字段。 更新指定字段 要改变某个字段的值,MongoDB提供了更新操作,比如$set用来修改值。如果

  • 更新数据使用Update方法,Update方法的第一个参数为需要更新的内容,可以为一个结构体指针或者一个Map[string]interface{}类型。当传入的为结构体指针时,只有非空和0的field才会被作为更新的字段。当传入的为Map类型时,key为数据库Column的名字,value为要更新的内容。 Update方法将返回两个参数,第一个为 更新的记录数,需要注意的是 SQLITE 数据库