/// <summary>
        /// Initial method / factory instanciation.
        /// In case the call is successfully completed you will get back an 
        /// envelope object that can be used to work with this envelope.
        /// In case the envelope is misconstructed an exception will be thrown
        /// The IDs on both the recipients and documents are going to be altered
        /// after the call and the Tabs will be linked to the appropriate document and 
        /// recipient ids.
        /// </summary>
        /// <param name="signers">A collection of signer objects that describes who is going to 
        /// recieve the documents.  You should have at least one signer.  Every signer
        /// must have at least one signature.</param>
        /// <param name="documents">A set of documents with tabs attached
        /// to them.  There should be at least one document in the envelope and there should be
        /// at least one tab on the envelope.</param>
        /// <param name="subject">Subject of the e-mail that the signers
        /// are going to receive</param>
        /// <param name="emailBlurb">e-mail blurb that will be inserted
        /// into the messages delivered to signers</param>
        /// <returns>An envelope object that can be used to work with this envelope.</returns>
        public static Envelope CreateEnvelopeFromTemplates(AccountCredentials accountCredentials,
            DocuSignWeb.Recipient[] signers,
            LinkedTemplateReferenceRoleAssignment[] roleAssignments,
            string template,
            string subject, string emailBlurb,
            DocuSignWeb.CustomField[] fields)
        {
            //
            // Assign sequential IDs to all the recipients
            //
            int nextRecipientId = 1;
            foreach (DocuSignWeb.Recipient recipient in signers)
            {
                recipient.ID = nextRecipientId.ToString(System.Globalization.CultureInfo.InvariantCulture);
                nextRecipientId++;
            }

            //
            // update the template references
            //
            TemplateReferenceRoleAssignment[] finalRoleAssignments = new TemplateReferenceRoleAssignment[roleAssignments.Length];
            for( int i = 0; i < roleAssignments.Length; ++i)
            {
                roleAssignments[i].referenceRoleAssignment.RecipientID = roleAssignments[i].signer.ID;
                finalRoleAssignments[i] = roleAssignments[i].referenceRoleAssignment;
            }

            //
            // setting up the template
            //
            TemplateReference templateReference = new TemplateReference();
            templateReference.Template = template;
            templateReference.TemplateLocation = TemplateLocationCode.SOAP;
            templateReference.RoleAssignments = finalRoleAssignments;

            //
            // Envelope wide information
            //
            DocuSignWeb.EnvelopeInformation envelopeInfo = new EnvelopeInformation();
            envelopeInfo.AccountId = accountCredentials.AccountId;
            envelopeInfo.CustomFields = fields;
            envelopeInfo.EmailBlurb = emailBlurb;
            envelopeInfo.Subject = subject;

            DocuSignWeb.APIServiceSoap apiService = CreateApiProxy(accountCredentials);
            DocuSignWeb.EnvelopeStatus envStatus = apiService.CreateEnvelopeFromTemplates(
                new TemplateReference[] { templateReference },
                signers, envelopeInfo, true);
            return new Envelope(envStatus.EnvelopeID, accountCredentials);
        }
 public static Envelope CreateEnvelopeFromServerTemplates(
     AccountCredentials accountCredentials,
     TemplateReference[] templateRefs,
     Recipient[] signers,
     EnvelopeInformation envelopeInfo,
     bool ActivateEnvelope)
 {
     DocuSignWeb.APIServiceSoap apiService = CreateApiProxy(accountCredentials);
     DocuSignWeb.EnvelopeStatus envStatus = apiService.CreateEnvelopeFromTemplates(
         templateRefs, signers, envelopeInfo, ActivateEnvelope);
     return new Envelope(envStatus.EnvelopeID, accountCredentials);
 }
 /// <remarks/>
 public void CreateEnvelopeFromTemplatesAsync(TemplateReference[] TemplateReferences, Recipient[] Recipients, EnvelopeInformation EnvelopeInformation, bool ActivateEnvelope, object userState)
 {
     if ((this.CreateEnvelopeFromTemplatesOperationCompleted == null)) {
         this.CreateEnvelopeFromTemplatesOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCreateEnvelopeFromTemplatesOperationCompleted);
     }
     this.InvokeAsync("CreateEnvelopeFromTemplates", new object[] {
                 TemplateReferences,
                 Recipients,
                 EnvelopeInformation,
                 ActivateEnvelope}, this.CreateEnvelopeFromTemplatesOperationCompleted, userState);
 }
 /// <remarks/>
 public void CreateEnvelopeFromTemplatesAsync(TemplateReference[] TemplateReferences, Recipient[] Recipients, EnvelopeInformation EnvelopeInformation, bool ActivateEnvelope)
 {
     this.CreateEnvelopeFromTemplatesAsync(TemplateReferences, Recipients, EnvelopeInformation, ActivateEnvelope, null);
 }
 public EnvelopeStatus CreateEnvelopeFromTemplates(TemplateReference[] TemplateReferences, Recipient[] Recipients, EnvelopeInformation EnvelopeInformation, bool ActivateEnvelope)
 {
     object[] results = this.Invoke("CreateEnvelopeFromTemplates", new object[] {
                 TemplateReferences,
                 Recipients,
                 EnvelopeInformation,
                 ActivateEnvelope});
     return ((EnvelopeStatus)(results[0]));
 }
 /// <remarks/>
 public System.IAsyncResult BeginCreateEnvelopeFromTemplates(TemplateReference[] TemplateReferences, Recipient[] Recipients, EnvelopeInformation EnvelopeInformation, bool ActivateEnvelope, System.AsyncCallback callback, object asyncState)
 {
     return this.BeginInvoke("CreateEnvelopeFromTemplates", new object[] {
                 TemplateReferences,
                 Recipients,
                 EnvelopeInformation,
                 ActivateEnvelope}, callback, asyncState);
 }