使用Docusign node.js示例我可以发送模板,但是我无法预先设置字段值。
我查看了堆栈溢出,发现了3个不同版本的setTemplateRoles JSON格式。我已经尝试过所有这些并且都没有效果。 当我运行此代码时,电子邮件发送到foo@email.com,我的模板很好,但字段没有预先填写。
Q1。当他们说标签他们在谈论什么?什么是标签?
Q2。 tabLabel是指数据标签,还是不同的东西?
截图:
在GUI中编辑模板时。
Q3。如何在我的docusign模板中添加“自定义字段”?我尝试通过单击自定义字段并添加一个来完成。但它似乎更像是一个字段模板,而不是一个特定的自定义字段。 当我运行API调用listCustomFields时,它返回空。
var docusign = require('docusign-esign');
// Note: Following values are class members for readability and easy testing
// TODO: Enter your DocuSign credentials
var UserName = 'foo@email.com';
var Password = 'SECRET1';
// TODO: Enter your Integrator Key (aka API key), created through your developer sandbox preferences
var IntegratorKey = 'SECRET2';
// for production environment update to 'www.docusign.net/restapi'
var BaseUrl = 'https://demo.docusign.net/restapi';
var RequestSignatureFromTemplate = function () {
// TODO: Enter signer information and template info from a template in your account
var signerName = 'Bob';
var signerEmail = 'foo@email.com';
var subject = "testing 123";
var templateId = 'XXX';
var templateRoleName = 'Seller';
// initialize the api client
var apiClient = new docusign.ApiClient();
apiClient.setBasePath(BaseUrl);
// create JSON formatted auth header
var creds = '{"Username":"' + UserName + '","Password":"' + Password + '","IntegratorKey":"' + IntegratorKey + '"}';
apiClient.addDefaultHeader('X-DocuSign-Authentication', creds);
// assign api client to the Configuration object
docusign.Configuration.default.setDefaultApiClient(apiClient);
// ===============================================================================
// Step 1: Login() API
// ===============================================================================
// login call available off the AuthenticationApi
var authApi = new docusign.AuthenticationApi();
// login has some optional parameters we can set
var loginOps = new authApi.LoginOptions();
loginOps.setApiPassword('true');
loginOps.setIncludeAccountIdGuid('true');
authApi.login(loginOps, function (error, loginInfo, response) {
if (error) {
console.log('Error: ' + error);
return;
}
if (loginInfo) {
// list of user account(s)
// note that a given user may be a member of multiple accounts
var loginAccounts = loginInfo.getLoginAccounts();
console.log('LoginInformation: ' + JSON.stringify(loginAccounts));
// ===============================================================================
// Step 2: Create Envelope API (AKA Signature Request) from a Template
// ===============================================================================
// create a new envelope object that we will manage the signature request through
var envDef = new docusign.EnvelopeDefinition();
envDef.setEmailSubject(subject);
envDef.setTemplateId(templateId);
envDef.setTemplateRoles([
{email:'foo@email.com',
name:'bob',
roleName:'Seller',
// tabStatuses:[
// {tabStatus:[{
// tabLabel:'sellerName',
// tabValue:'test123'
// }]}
// ]
tabs:
{textTabs:[{
tabLabel:'sellerName',
tabName:'sellerName',
tabValue:'test123'
}]},
// tabStatuses:
// {textTabs:[{
// tabLabel:'sellerName',
// tabName:'sellerName',
// tabValue:'test123'
// }]}
}
]);
// console.log("eid", envDef.getEnvelopeId()); //undefined
//I commented out the following example code. I looked through the docusign-esign source and it didn't seem to have a way to add tabStatuses (whatever that means) so I used the above code instead. Which works as far as sending the email, but doesn't work for pre-filling the fields.
// create a template role with a valid templateId and roleName and assign signer info
// var tRole = new docusign.TemplateRole();
// tRole.setRoleName(templateRoleName);
// tRole.setName(signerName);
// tRole.setEmail(signerEmail);
//
// // 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');
// use the |accountId| we retrieved through the Login API to create the Envelope
var loginAccount = new docusign.LoginAccount();
loginAccount = loginAccounts[0];
var accountId = loginAccount.accountId;
//it gets a little messy with junk experimental code. But what's not commented out is the same as the example, except I've added an additional callback in the deepest function.
// instantiate a new EnvelopesApi object
var envelopesApi = new docusign.EnvelopesApi();
// envelopesApi.getDocuments(loginAccount.accountId)
// call the createEnvelope() API
envelopesApi.createEnvelope(accountId, envDef, null, function (error, envelopeSummary, response) {
if (error) {
console.log('Error: ' + error);
return;
}
if (envelopeSummary) {
console.log('EnvelopeSummary: ' + JSON.stringify(envelopeSummary));
var envelopeId = envelopeSummary.envelopeId;
console.log("envelopeId", envelopeId);
// envelopesApi.listDocuments(accountId, envelopeId, function (error, data, response) {
// if (error) {console.log("error", error);return;}
// console.log("data", data);
// console.log("response", response);
// });
//envelopesApi.getDocument downloads the PDF binary 2.5MiB.
var documentId = '1';
var chunks=[];
envelopesApi.listCustomFields(accountId, envelopeId, function (error, data, response) {
if (error) {console.log("error", error);return;}
console.log("typeof data", typeof data);
// console.log("data.length", data.length);
// // console.log("response", response);
// response.on('data',chunk => chunks.push(chunk));
// response.on('end',()=>{
// var allChunks = chunks.join('');
// console.log("allChunks", allChunks);
// });
console.log("data", data);
// console.log("data.toJson()", data.toJson());
console.log("data.getTextCustomFields()", data.getTextCustomFields());
});
}
});
}
});
}; // end RequestSignatureFromTemplate()