Пользовательские поля не отображаются при наличии нескольких подписчиков на DocuSign - PullRequest
0 голосов
/ 18 марта 2020

У меня следующий код. Я использую шаблон с одним PDF-файлом и хочу добавить значения к определенным c местам в PDF-документе перед его подписанием. Я хочу встроить это в мое собственное приложение VueJS. У меня есть пара пользовательских полей с именами сумма, customerName и т. Д. c. Когда я открываю код для вставки в iframe, я не вижу пользовательских полей. Вы видите что-то не так с моим кодом? Заранее спасибо.

const docusign = require('docusign-esign');

export const makeEnvelope = async (data) => {

    let payload = {
        signerEmail: 'a@b.com',
        signerName: 'a b',
        agentName: 'a c',
        agentEmail: 'a@c.com',
        templateId: 'xxx'
    }

    let env = new docusign.EnvelopeDefinition();
    env.templateId = payload.templateId;

    let info = {
        "amount": "143",
        "customerName": "ccc",
        "tax": "13"
    }

    let textFields = [];

    Object.keys(info).forEach(i => {
        let text = docusign.Text.constructFromObject({
            tabLabel: i, value: info[i]
        });
        textFields.push(text);
    })

    let tabs = docusign.Tabs.constructFromObject({
        textTabs: textFields,
    });

    let customer = docusign.TemplateRole.constructFromObject({
        name: 'sq',
        email: 's@q.com',
        Name: 'sq',
        signerName: 'sq',
        roleName: 'customer',
        tabs: tabs

    });

    let agent = docusign.TemplateRole.constructFromObject({
        name: 'sa',
        email: 's@a.com',
        Name: 'sa',
        signerName: 'sa',
        roleName: 'agent',
        tabs: tabs
    });

    env.templateRoles = [agent, customer];
    env.status = "sent";

    return env;
    }

export const docuApi = async (event) => {

    let payload = {
        basePath: 'https://demo.docusign.net/restapi',
        accessToken: 'ccc',
        accountId: 'xxx',
    };


    let dsApiClient = new docusign.ApiClient();
    await dsApiClient.setBasePath(payload.basePath);
    await dsApiClient.addDefaultHeader('Authorization', 'Bearer ' + payload.accessToken);
    let envelopesApi = new docusign.EnvelopesApi(dsApiClient);

    let envelope = await makeEnvelope(payload.envelopepayload);

    let envelopeId;
    let results = await envelopesApi.createEnvelope(payload.accountId, {envelopeDefinition: envelope})
        .then(res => {
            envelopeId = res.envelopeId;
        })
        .catch(err => {
        });

    console.log('envelopeId', envelopeId);

    let viewRequest = await makeRecipientViewRequest({
        "dsReturnUrl": '',
        "signerEmail": 's@q.com',
        "signerName": 'sa',
        // "signerClientId": '',
        "dsPingUrl": 'https://example.com'
    })

    let createView = await envelopesApi.createRecipientView(
        payload.accountId, envelopeId,{recipientViewRequest: viewRequest})
        .then(res => {
            console.log('createView res', res)
        })
        .catch(err => {
            console.log(err.response.error);
        });    
    return results;

}

const makeRecipientViewRequest = async (args) => {    
    let viewRequest = new docusign.RecipientViewRequest();
    viewRequest.returnUrl = args.dsReturnUrl + "?state=123";
    viewRequest.authenticationMethod = 'none';
    viewRequest.email = args.signerEmail;
    viewRequest.userName = args.signerName;
    viewRequest.clientUserId = args.signerClientId;

    viewRequest.pingFrequency = 600; // seconds
    viewRequest.pingUrl = args.dsPingUrl; // optional setting

    return viewRequest
}

1 Ответ

2 голосов
/ 18 марта 2020

Проблема в том, что userName и clientUserId должны соответствовать шаблону. В противном случае сгенерированное представление не соответствует получателю, и вы не сможете взаимодействовать с ним, оно будет отображать только «В процессе». Представление задается c для указанного получателя c, для каждого получателя вам необходимо создать свое собственное представление.

...