2016-09-20 87 views
1

我使用DocuSign NodeJS SDK从我已经从DocuSign控制台设置的模板创建一个签名请求。我还在文档上设置了一个文本字段。我想在发送签名请求时自动填充此字段。使用NodeJs SDK填充DocuSign信封定义上的选项卡

这里是我的代码的相关部分(大部分是刚刚从食谱复制):

var envDef = new docusign.EnvelopeDefinition(); 
envDef.setEmailSubject('Ready for Signing'); 
envDef.setTemplateId(templateId); 

    // create a template role with a valid templateId and roleName and assign signer info 
var tRole = new docusign.TemplateRole(); 
tRole.setRoleName("Role1"); 
tRole.setName(role1FullName); 
tRole.setEmail(role1Email); 
tRole.setClientUserId(role1UserId); 

/**************SET TABS******************/ 
//set tabs 
var text = new docusign.Text(); 
text.setTabLabel("textFoo"); //This is the data label I setup from the console. 
text.setValue("Foo Bar Zoo"); //Some text I want to have pre-populated 

var textTabs = []; 
textTabs.push(text); 

var tabs = new docusign.Tabs(); 
tabs.setTextTabs(textTabs); 

tRole.setTabs(tabs); 
/**************END SET TAB******************/ 

// create a list of template roles and add our newly created role 
var templateRolesList = []; 
templateRolesList.push(tRole); 

// assign template role(s) to the envelope 
envDef.setTemplateRoles(templateRolesList); 



// send the envelope by setting |status| to 'sent'. To save as a draft set to 'created' 
envDef.setStatus('sent'); 

当我运行此我得到以下错误:

Bad Request 
    at Request.callback (C:\Users\janak\NodeProjects\DocuFire\node_modules\superagent\lib\node\index.js:823:17) 
    at IncomingMessage.<anonymous> (C:\Users\janak\NodeProjects\DocuFire\node_modules\superagent\lib\node\index.js:1046:12) 
    at emitNone (events.js:91:20) 
    at IncomingMessage.emit (events.js:185:7) 
    at endReadableNT (_stream_readable.js:975:12) 
    at _combinedTickCallback (internal/process/next_tick.js:74:11) 
    at process._tickCallback (internal/process/next_tick.js:98:9) 

注:如果我注释掉SET TABS部分,此代码运行正常,我可以检索签名url并将用户重定向到那里。

我在做什么错?

这个StackOverflow post似乎用某种形式的XML API请求时回答了这个问题。但我怎样才能使用NodeJs SDK来做到这一点?

回答

0

看来我的代码是正确的,但是SDK中有一个错误:Unable to send tabs #50

解决方案:

I was correctly constructing the request -- but the node client populates all empty model parameters with null

Recursively stripping the nulls from the envelope before submitting the request solved this issue for me:

removeNulls = function(envelope) { 
    var isArray = envelope instanceof Array; 
    for (var k in envelope) { 
     if (envelope[k] === null) isArray ? obj.splice(k, 1) : delete envelope[k]; 
     else if (typeof envelope[k] == "object") removeNulls(envelope[k]); 
     if (isArray && envelope.length == k) removeNulls(envelope); 
    } 
    return envelope; 
} 

Reference

我用这个函数像这样:

tRole.setTabs(removeNulls(tabs)); 
相关问题