调用CreateEnvelope时出错:TAB_PAGE_NUMBER_NOT_SPECIFIED [英] Error calling CreateEnvelope : TAB_PAGE_NUMBER_NOT_SPECIFIED

查看:86
本文介绍了调用CreateEnvelope时出错:TAB_PAGE_NUMBER_NOT_SPECIFIED的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是 DocuSign API 编程的初学者.我有一个.cshtml页,用于创建要发送给客户的信封.当我尝试从DocuSign API创建信封时,它显示如下错误消息:

在制表符元素中未指定的页码.标签"\\ SignHere \"中的页码或AnchorTabItem丢失."

请在下面查看我的HTML和代码.

HTML

 <span>
         <br />
           <br />
<span><b>SIGNATURE:</b></span> <span style="color:white;">pleasesignhereBP</span>
                <br />
                <br />
      <span><b>DATE:</b></span><span style="color:white;">pleasedatehereBP</span>
                <br />
                <br />
            </span>

代码

SignerModel objPerson = new SignerModel();

            TabsModel objPersonTab = new TabsModel();
            List<SignHereModel> lstPersonSignHere = new List<SignHereModel>();
            SignHereModel objPersonSignHere = new SignHereModel();
            objPersonSignHere.DocumentId = "1";
            objPersonSignHere.PageNumber = "1";
            objPersonSignHere.RecipientId = "2";
            objPersonSignHere.AnchorString = "pleasesignhereBP";
            objPersonSignHere.AnchorXOffset = ".2";
            objPersonSignHere.AnchorYOffset = ".01";
            objPersonSignHere.AnchorIgnoreIfNotPresent = "true";
            objPersonSignHere.AnchorUnits = "cms";
            lstPersonSignHere.Add(objPersonSignHere);
            objPersonTab.SignHereTabs = lstPersonSignHere;

            List<DateModel> lstPersonDateHere = new List<DateModel>();
            DateModel objPersonDate = new DateModel();
            objPersonDate.DocumentId = "1";
            objPersonDate.PageNumber = "1";
            objPersonDate.RecipientId = "1";
            objPersonDate.AnchorString = "pleasedatehereBP";
            objPersonDate.AnchorXOffset = ".2";
            objPersonDate.AnchorYOffset = ".01";
            objPersonDate.AnchorIgnoreIfNotPresent = "true";
            objPersonDate.AnchorUnits = "cms";
            objPersonDate.Value = DateTime.Now.ToShortDateString();
            lstPersonDateHere.Add(objPersonDate);
            objPersonTab.DateTabs = lstPersonDateHere;

            objPerson.Tabs = objPersonTab;

我已经添加了 objPersonDate.PageNumber ="1" ,但是它不起作用.

更新

我的项目解决方案中有DocuSign.eSign库.我将此项目称为我的Web应用程序.然后,我对DocuSignCommunicator类的SetDocuSignSigners 功能进行了一些更改.

objSHere.PageNumber = (!string.IsNullOrEmpty(objSHere.PageNumber)) ? objSHere.PageNumber : "1";

请在下面查看我的详细代码.

    private List<Signer> SetDocuSignSigners(List<SignerModel> lstSignerModel)
    {
        List<Signer> lstSigner = new List<Signer>();
        if (lstSignerModel != null && lstSignerModel.Count > 0)
        {
            foreach (SignerModel objModel in lstSignerModel)
            {
                Signer objSigner = new Signer();
                objSigner.Name = objModel.Name;
                objSigner.Email = objModel.Email;
                objSigner.RecipientId = objModel.RecipientId;
                objSigner.RoutingOrder = objModel.RoutingOrder;
                Tabs objTab = new Tabs();
                List<SignHere> lstSalesSignHere = new List<SignHere>();
                List<DateSigned> lstSalesDateHere = new List<DateSigned>();
                List<FullName> lstSalesNameHere = new List<FullName>();

                if (objModel.Tabs != null)
                {
                    if (objModel.Tabs.SignHereTabs != null && objModel.Tabs.SignHereTabs.Count > 0)
                    {
                        foreach (SignHereModel objSignHere in objModel.Tabs.SignHereTabs)
                        {
                            SignHere objSHere = new Model.SignHere();
                            objSHere.PageNumber = (!string.IsNullOrEmpty(objSHere.PageNumber)) ? objSHere.PageNumber : "1";
                            objSHere.AnchorString = objSignHere.AnchorString;
                            objSHere.DocumentId = objSignHere.DocumentId;
                            objSHere.RecipientId = objSignHere.RecipientId;
                            objSHere.AnchorXOffset = objSignHere.AnchorXOffset;
                            objSHere.AnchorYOffset = objSignHere.AnchorYOffset;
                            objSHere.AnchorUnits = objSignHere.AnchorUnits;
                            objSHere.AnchorIgnoreIfNotPresent = objSignHere.AnchorIgnoreIfNotPresent;
                            objSHere.AnchorMatchWholeWord = "true";
                            lstSalesSignHere.Add(objSHere);
                        }
                    }

                    if (objModel.Tabs.DateTabs != null && objModel.Tabs.DateTabs.Count > 0)
                    {
                        foreach (DateModel objDateHere in objModel.Tabs.DateTabs)
                        {
                            DateSigned objDSHere = new DateSigned();
                            objDSHere.PageNumber = (!string.IsNullOrEmpty(objDSHere.PageNumber)) ? objDSHere.PageNumber : "1"; 
                            objDSHere.AnchorString = objDateHere.AnchorString;
                            objDSHere.DocumentId = objDateHere.DocumentId;
                            objDSHere.RecipientId = objDateHere.RecipientId;
                            objDSHere.AnchorXOffset = objDateHere.AnchorXOffset;
                            objDSHere.AnchorYOffset = objDateHere.AnchorYOffset;
                            objDSHere.AnchorUnits = objDateHere.AnchorUnits;
                            objDSHere.AnchorIgnoreIfNotPresent = objDateHere.AnchorIgnoreIfNotPresent;
                            objDSHere.AnchorMatchWholeWord = "true";
                            ////objDSHere.Value = objDateHere.Value;
                            lstSalesDateHere.Add(objDSHere);
                        }
                    }

                    if (objModel.Tabs.FullNameTabs != null && objModel.Tabs.FullNameTabs.Count > 0)
                    {
                        foreach (FullNameModel objDateHere in objModel.Tabs.FullNameTabs)
                        {
                            FullName objNameHere = new FullName();
                            objNameHere.PageNumber = (!string.IsNullOrEmpty(objNameHere.PageNumber)) ? objNameHere.PageNumber : "1"; 
                            objNameHere.AnchorString = objDateHere.AnchorString;
                            objNameHere.DocumentId = objDateHere.DocumentId;
                            objNameHere.RecipientId = objDateHere.RecipientId;
                            objNameHere.AnchorXOffset = objDateHere.AnchorXOffset;
                            objNameHere.AnchorYOffset = objDateHere.AnchorYOffset;
                            objNameHere.AnchorUnits = objDateHere.AnchorUnits;
                            objNameHere.AnchorIgnoreIfNotPresent = objDateHere.AnchorIgnoreIfNotPresent;
                            objNameHere.Value = objDateHere.Value;
                            objNameHere.AnchorMatchWholeWord = "true";
                            lstSalesNameHere.Add(objNameHere);
                        }
                    }
                }

                objTab.SignHereTabs = lstSalesSignHere;
                objTab.DateSignedTabs = lstSalesDateHere;
                objTab.FullNameTabs = lstSalesNameHere;
                objSigner.Tabs = objTab;
                lstSigner.Add(objSigner);
            }
        }

        return lstSigner;
    }

我不知道这是最佳做法,但我的问题已解决.如果这不是一个好习惯,请提出建议.

更改库后

遗憾的是,它在文档的签名位置中不起作用.我的文档 Signature Signaturedate 中有两个字段,但是当我通过DocuSign网站对文档签名时,这些字段放置在错误的位置.请参阅下面的文档.

所以分配页码不是解决我问题的方法.

解决方案

请在上面进行实际代码更改,因为您所显示的内容与下面的说"似乎有冲突.

您似乎丢失了"TabId"或"Tab项"

              "name": "sample string 1",
              "tabLabel": "sample string 2",
              "scaleValue": 3.1,
              "optional": "sample string 4",
              "documentId": "sample string 5",
              "recipientId": "sample string 6",
              "pageNumber": "sample string 7",
              "xPosition": "sample string 8",
              "yPosition": "sample string 9",
              "anchorString": "sample string 10",
              "anchorXOffset": "sample string 11",
              "anchorYOffset": "sample string 12",
              "anchorUnits": "sample string 13",
              "anchorIgnoreIfNotPresent": "sample string 14",
              "tabId": "sample string 15",
              "conditionalParentLabel": "sample string 16",
              "conditionalParentValue": "sample string 17"

https://www.docusign.net/restapi/help

我真的建议您使用PostMan Client和/或SoapUI来验证您可以进行api调用,尤其是在一开始的时候.这样,您可以看到实际返回的错误,因为对于非常常见的错误,它将在响应中详细说明错误. PostMan或SoapUI将成功发出实际的API调用(一旦您通过prod API认证,将显示为Demo或Prod),向您显示实际的响应,而不必担心编码错字,对象属性或调试日志记录,以查看真正返回的信息.

这使您可以在选择SDK的同时学习DocuSign API.您在此处进行了正确的事情来寻求有关堆栈溢出的帮助.

我有几个链接供您入门:

DocuSign开发人员中心,您可能在其中找到了PHP SDK https://developers .docusign.com/esign-rest-api/sdk-tools

有关PostMan的信息链接(较旧的版本,您可以获取最新版本-aka Orange Rocket Man徽标vs蓝色世界,适用于Chrome或Mac独立版- https:/中解释的步骤来进行API调用./support.docusign.com/guides/ndse-user-guide-api-request-logging

祝您好运,并享受您的DocuSign API之旅!

I am a beginner in DocuSign API programming. I have a .cshtml page for create envelope for sending to customer. When I try to create envelop from DocuSign API it shows error message like:

Page number not specified in tab element. Page Number or AnchorTabItem missing for tab \"SignHere\"."

Please see my HTML and code below.

Html

 <span>
         <br />
           <br />
<span><b>SIGNATURE:</b></span> <span style="color:white;">pleasesignhereBP</span>
                <br />
                <br />
      <span><b>DATE:</b></span><span style="color:white;">pleasedatehereBP</span>
                <br />
                <br />
            </span>

Code

SignerModel objPerson = new SignerModel();

            TabsModel objPersonTab = new TabsModel();
            List<SignHereModel> lstPersonSignHere = new List<SignHereModel>();
            SignHereModel objPersonSignHere = new SignHereModel();
            objPersonSignHere.DocumentId = "1";
            objPersonSignHere.PageNumber = "1";
            objPersonSignHere.RecipientId = "2";
            objPersonSignHere.AnchorString = "pleasesignhereBP";
            objPersonSignHere.AnchorXOffset = ".2";
            objPersonSignHere.AnchorYOffset = ".01";
            objPersonSignHere.AnchorIgnoreIfNotPresent = "true";
            objPersonSignHere.AnchorUnits = "cms";
            lstPersonSignHere.Add(objPersonSignHere);
            objPersonTab.SignHereTabs = lstPersonSignHere;

            List<DateModel> lstPersonDateHere = new List<DateModel>();
            DateModel objPersonDate = new DateModel();
            objPersonDate.DocumentId = "1";
            objPersonDate.PageNumber = "1";
            objPersonDate.RecipientId = "1";
            objPersonDate.AnchorString = "pleasedatehereBP";
            objPersonDate.AnchorXOffset = ".2";
            objPersonDate.AnchorYOffset = ".01";
            objPersonDate.AnchorIgnoreIfNotPresent = "true";
            objPersonDate.AnchorUnits = "cms";
            objPersonDate.Value = DateTime.Now.ToShortDateString();
            lstPersonDateHere.Add(objPersonDate);
            objPersonTab.DateTabs = lstPersonDateHere;

            objPerson.Tabs = objPersonTab;

I already added the objPersonDate.PageNumber = "1" but it's not working.

Updates

I have DocuSign.eSign library in my project solution. I refer this project my webapplication. Then i do some changes in the SetDocuSignSigners function of DocuSignCommunicator class.

objSHere.PageNumber = (!string.IsNullOrEmpty(objSHere.PageNumber)) ? objSHere.PageNumber : "1";

Please see my detailed code below.

    private List<Signer> SetDocuSignSigners(List<SignerModel> lstSignerModel)
    {
        List<Signer> lstSigner = new List<Signer>();
        if (lstSignerModel != null && lstSignerModel.Count > 0)
        {
            foreach (SignerModel objModel in lstSignerModel)
            {
                Signer objSigner = new Signer();
                objSigner.Name = objModel.Name;
                objSigner.Email = objModel.Email;
                objSigner.RecipientId = objModel.RecipientId;
                objSigner.RoutingOrder = objModel.RoutingOrder;
                Tabs objTab = new Tabs();
                List<SignHere> lstSalesSignHere = new List<SignHere>();
                List<DateSigned> lstSalesDateHere = new List<DateSigned>();
                List<FullName> lstSalesNameHere = new List<FullName>();

                if (objModel.Tabs != null)
                {
                    if (objModel.Tabs.SignHereTabs != null && objModel.Tabs.SignHereTabs.Count > 0)
                    {
                        foreach (SignHereModel objSignHere in objModel.Tabs.SignHereTabs)
                        {
                            SignHere objSHere = new Model.SignHere();
                            objSHere.PageNumber = (!string.IsNullOrEmpty(objSHere.PageNumber)) ? objSHere.PageNumber : "1";
                            objSHere.AnchorString = objSignHere.AnchorString;
                            objSHere.DocumentId = objSignHere.DocumentId;
                            objSHere.RecipientId = objSignHere.RecipientId;
                            objSHere.AnchorXOffset = objSignHere.AnchorXOffset;
                            objSHere.AnchorYOffset = objSignHere.AnchorYOffset;
                            objSHere.AnchorUnits = objSignHere.AnchorUnits;
                            objSHere.AnchorIgnoreIfNotPresent = objSignHere.AnchorIgnoreIfNotPresent;
                            objSHere.AnchorMatchWholeWord = "true";
                            lstSalesSignHere.Add(objSHere);
                        }
                    }

                    if (objModel.Tabs.DateTabs != null && objModel.Tabs.DateTabs.Count > 0)
                    {
                        foreach (DateModel objDateHere in objModel.Tabs.DateTabs)
                        {
                            DateSigned objDSHere = new DateSigned();
                            objDSHere.PageNumber = (!string.IsNullOrEmpty(objDSHere.PageNumber)) ? objDSHere.PageNumber : "1"; 
                            objDSHere.AnchorString = objDateHere.AnchorString;
                            objDSHere.DocumentId = objDateHere.DocumentId;
                            objDSHere.RecipientId = objDateHere.RecipientId;
                            objDSHere.AnchorXOffset = objDateHere.AnchorXOffset;
                            objDSHere.AnchorYOffset = objDateHere.AnchorYOffset;
                            objDSHere.AnchorUnits = objDateHere.AnchorUnits;
                            objDSHere.AnchorIgnoreIfNotPresent = objDateHere.AnchorIgnoreIfNotPresent;
                            objDSHere.AnchorMatchWholeWord = "true";
                            ////objDSHere.Value = objDateHere.Value;
                            lstSalesDateHere.Add(objDSHere);
                        }
                    }

                    if (objModel.Tabs.FullNameTabs != null && objModel.Tabs.FullNameTabs.Count > 0)
                    {
                        foreach (FullNameModel objDateHere in objModel.Tabs.FullNameTabs)
                        {
                            FullName objNameHere = new FullName();
                            objNameHere.PageNumber = (!string.IsNullOrEmpty(objNameHere.PageNumber)) ? objNameHere.PageNumber : "1"; 
                            objNameHere.AnchorString = objDateHere.AnchorString;
                            objNameHere.DocumentId = objDateHere.DocumentId;
                            objNameHere.RecipientId = objDateHere.RecipientId;
                            objNameHere.AnchorXOffset = objDateHere.AnchorXOffset;
                            objNameHere.AnchorYOffset = objDateHere.AnchorYOffset;
                            objNameHere.AnchorUnits = objDateHere.AnchorUnits;
                            objNameHere.AnchorIgnoreIfNotPresent = objDateHere.AnchorIgnoreIfNotPresent;
                            objNameHere.Value = objDateHere.Value;
                            objNameHere.AnchorMatchWholeWord = "true";
                            lstSalesNameHere.Add(objNameHere);
                        }
                    }
                }

                objTab.SignHereTabs = lstSalesSignHere;
                objTab.DateSignedTabs = lstSalesDateHere;
                objTab.FullNameTabs = lstSalesNameHere;
                objSigner.Tabs = objTab;
                lstSigner.Add(objSigner);
            }
        }

        return lstSigner;
    }

I don't know this is a best practice but my issue is solved. Please advice if this is not a good practice.

After the library change

Sadly it's not working in the signature placement in documents. I have two fields in my document Signature and Signaturedate but these fields are placed in wrong placement when I signed the document via DocuSign website. Please see the document below.

So assign page number is not a solution for my issue.

解决方案

Please update above with actual code change, because with what you are showing and what you "Say" below it seems in conflict.

It looks like you are missing the "TabId" aka "Tab Item"

              "name": "sample string 1",
              "tabLabel": "sample string 2",
              "scaleValue": 3.1,
              "optional": "sample string 4",
              "documentId": "sample string 5",
              "recipientId": "sample string 6",
              "pageNumber": "sample string 7",
              "xPosition": "sample string 8",
              "yPosition": "sample string 9",
              "anchorString": "sample string 10",
              "anchorXOffset": "sample string 11",
              "anchorYOffset": "sample string 12",
              "anchorUnits": "sample string 13",
              "anchorIgnoreIfNotPresent": "sample string 14",
              "tabId": "sample string 15",
              "conditionalParentLabel": "sample string 16",
              "conditionalParentValue": "sample string 17"

https://www.docusign.net/restapi/help

I really suggest using PostMan Client and / or SoapUI to validate you can make your api call, especially in the beginning. This way you can see the actual error returned, as it will say more about the error in the response for very common mistakes. PostMan or SoapUI will issue the actual API calls successfully (Demo or Prod once you have passed prod API certification) showing you the actual response without having to worry about coding typo's, properties of objects or debugging logging to see what really came back.

This allows you to learn the DocuSign API while using your choice of SDK. You did the right thing asking for help here on Stack Overflow.

I have a couple links for you to get started:

DocuSign Developer Center where you probably found the PHP SDK https://developers.docusign.com/esign-rest-api/sdk-tools

Link for info on PostMan (older version, you can get the latest one - aka Orange Rocket Man logo vs blue world, for Chrome or Mac Standalone - https://blog.grigsbyconsultingllc.com/postman-rest-client-a-google-chrome-app/

X-DocuSign-Authentication Header Q&A on StackOverflow How should the header X-DocuSign-Authentication be used for REST and SOAP?

I like the concept of the DocuSign API explorer to start with, sad part is it doesn't work against prod, so you still have to use something else when you move from demo to prod.

And as mention above by "Amit K Bist" you can you capture exact JSON request posted your PHP | API calls by following steps explained at this DocuSign support article https://support.docusign.com/guides/ndse-user-guide-api-request-logging

Best of Luck and Enjoy your DocuSign API journey!

这篇关于调用CreateEnvelope时出错:TAB_PAGE_NUMBER_NOT_SPECIFIED的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆