internal static WordCRMConfig GetCRMConfig(IOrganizationService crm) { try { var query = new QueryExpression("pp_signicatconfig"); query.ColumnSet = new ColumnSet(true); var results = crm.RetrieveMultiple(query); if (results.Entities.Count == 1) { var entity = results.Entities[0]; var config = new WordCRMConfig(); config.Worduser = entity.GetAttributeValue <EntityReference>("pp_wordsignuser"); config.Entitylogicalnames = entity.GetAttributeValue <string>("pp_entitylogicalnames"); config.SPUser = entity.GetAttributeValue <string>("pp_spuser"); config.SPpassword = entity.GetAttributeValue <string>("pp_sppassord"); config.Webapiurl = entity.GetAttributeValue <string>("pp_webapiurl"); config.Wordsaveinsp = entity.GetAttributeValue <bool>("pp_wordsaveinsp"); config.Wordsigningmethod = entity.GetAttributeValue <OptionSetValue>("pp_signing").Value; var senderRef = crm.Retrieve("systemuser", config.Worduser.Id, new ColumnSet("fullname")); config.Wordusername = senderRef.GetAttributeValue <string>("fullname"); config.AccountNrField = entity.GetAttributeValue <string>("pp_accountnumberfield"); config.OrderNrField = entity.GetAttributeValue <string>("pp_ordernumberfield"); config.IncidentNrField = entity.GetAttributeValue <string>("pp_incidentnumberfield"); config.QuoteNrField = entity.GetAttributeValue <string>("pp_quotenumberfield"); config.ContractNrField = entity.GetAttributeValue <string>("pp_contractnumberfield"); config.EmailField = entity.GetAttributeValue <string>("pp_emailfield"); return(config); } return(null); } catch (Exception ex) { MessageBox.Show("Cannot find value in Signicat config in CRM: " + ex.Message, "Document Signing", MessageBoxButtons.OK, MessageBoxIcon.Error); return(null); } }
public async Task <HttpResponseMessage> SendRequest(WordSearchObject searchValues, Document doc, string pdfName, string orgName, WordCRMConfig crmconfig, IOrganizationService crm) { try { using (var client = new HttpClient()) { using (var content = new MultipartFormDataContent()) { var apiurl = crmconfig.Webapiurl; client.BaseAddress = new Uri(apiurl); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/pdf")); StreamReader sr = new StreamReader(doc.Path + "\\" + pdfName); var fileContent = new ByteArrayContent(WordHelpers.ReadToEnd(sr.BaseStream)); var orgname = new NameValueHeaderValue("orgname", orgName); var language = new NameValueHeaderValue("language", searchValues.language.ToString()); var method = new NameValueHeaderValue("method", crmconfig.Wordsigningmethod.ToString()); //pdfName = Convert.ToBase64String(Encoding.UTF8.GetBytes(pdfName)); fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = pdfName, Parameters = { orgname, language, method } }; fileContent.Headers.ContentType = new MediaTypeHeaderValue("application/pdf"); content.Add(fileContent); var response = client.PostAsync("api/SignRequest/PostWord", content).Result; sr.Close(); return(response); } } } catch (Exception ex) { return(new HttpResponseMessage(HttpStatusCode.ExpectationFailed)); } }
internal static Guid CreatDocumentSigningInCRM(string sdsurl, string docPath, string docName, Entity entity, WordSearchObject searchValues, WordCRMConfig crmconfig, IOrganizationService crm) { try { var parts = sdsurl.Split('='); var taskid = parts.Last(); var requestid = GetRequestId(sdsurl); var saveinsp = crmconfig.Wordsaveinsp; //Create signing package var documentsigning = new Entity("pp_documentsigning"); documentsigning["pp_name"] = "Word dokument: " + docName; documentsigning["pp_requestid"] = requestid; documentsigning["pp_signing"] = new OptionSetValue(crmconfig.Wordsigningmethod); if (saveinsp) { documentsigning["pp_saveindocumentlocation"] = true; } if (entity != null) { var regardingidfield = "pp_" + entity.LogicalName + "id"; documentsigning[regardingidfield] = new EntityReference(entity.LogicalName, entity.Id); } var documentsigningid = crm.Create(documentsigning); //Save doc as note in singing package SavePDFInCRM(searchValues, docName, docPath, documentsigningid, crm); //Create signing task var documenttask = new Entity("pp_signicatdocurl"); documenttask["pp_name"] = taskid; documenttask["pp_sdsurl"] = sdsurl; if (documentsigningid != Guid.Empty) { documenttask["pp_documentsigningid"] = new EntityReference("pp_documentsigning", documentsigningid); } documenttask["statuscode"] = new OptionSetValue(1); var documenttaskid = crm.Create(documenttask); CreateOrAddContact(searchValues.recievermail, documenttaskid, documentsigningid, crm); return(documentsigningid); } catch (Exception ex) { if (searchValues.language == 1044) { MessageBox.Show(Resources.ResourceWordNb.cannotcreateinsignicat + ex.Message, Resources.ResourceWordNb.documentsinging, MessageBoxButtons.OK, MessageBoxIcon.Error); } else { MessageBox.Show(Resources.ResourceWordEn.cannotcreateinsignicat + ex.Message, Resources.ResourceWordEn.documentsinging, MessageBoxButtons.OK, MessageBoxIcon.Error); } return(Guid.Empty); } }
internal static void SendEmail(string sdsurl, string docName, Entity entity, Guid documentsigningid, WordSearchObject searchValues, WordCRMConfig crmconfig, IOrganizationService crm) { try { var linkBtnImg = "https://ppsignicatresources.blob.core.windows.net/signicatlinkbutton/SignicatLinkButton.png"; var emailLogoImg = "https://ppsignicatresources.blob.core.windows.net/signicatlinkbutton/SignicatMailLogo.png"; var url = ""; if (searchValues.language == 1044) { url = "<br/><a href='" + sdsurl + "'><img alt='Click her' src='" + linkBtnImg + "'></a>"; } else { url = "<br/><a href='" + sdsurl + "'><img alt='Click here' src='" + linkBtnImg + "'></a>"; } // Create an e-mail message. Entity email = new Entity("email"); if (crmconfig.Worduser == null) { if (searchValues.language == 1044) { MessageBox.Show(Resources.ResourceWordNb.cannotfindsender); } else { MessageBox.Show(Resources.ResourceWordEn.cannotfindsender); } } if (crmconfig.Worduser != null) { Entity fromParty = new Entity("activityparty"); fromParty["partyid"] = crmconfig.Worduser; var listfrom = new List <Entity>() { fromParty }; email["from"] = new EntityCollection(listfrom); } Entity toParty = new Entity("activityparty"); //if (string.IsNullOrWhiteSpace(searchValues.recievermail) && entity != null) // toParty["partyid"] = new EntityReference(entity.LogicalName, entity.Id); if (!string.IsNullOrWhiteSpace(searchValues.recievermail)) { var reciever = GetCustomerByEmail(searchValues.recievermail, crm); if (reciever != null) { toParty["partyid"] = reciever; } else { toParty["addressused"] = searchValues.recievermail; } var listto = new List <Entity>() { toParty }; email["to"] = new EntityCollection(listto); } var subject = ""; var description = ""; if (searchValues.language == 1044) { subject = Resources.ResourceWordNb.documentsinging + ": " + docName; description = Resources.ResourceWordNb.clicktosign; } else { subject = Resources.ResourceWordEn.documentsinging + ": " + docName; description = Resources.ResourceWordEn.clicktosign; } email["subject"] = subject; email["directioncode"] = true; email["regardingobjectid"] = new EntityReference("pp_documentsigning", documentsigningid); if (description != null) { var newText = "<img src='" + emailLogoImg + "'/><br/>"; //newText += description; newText += url + "<br/><br/><br/>"; newText += "<br/> With Regards / Med vennlig Hilsen<br/>"; newText += crmconfig.Wordusername; email["description"] = newText; } //SendEmailFromTemplate(email, documentsigningid, sdsurl, crm); //return; var _emailId = crm.Create(email); // Use the SendEmail message to send an e-mail message. SendEmailRequest sendEmailreq = new SendEmailRequest { EmailId = _emailId, TrackingToken = "", IssueSend = true }; SendEmailResponse sendEmailresp = (SendEmailResponse)crm.Execute(sendEmailreq); } catch (Exception ex) { if (searchValues.language == 1044) { MessageBox.Show(Resources.ResourceWordNb.emailerror + ex.Message, "Email sending", MessageBoxButtons.OK, MessageBoxIcon.Error); } else { MessageBox.Show(Resources.ResourceWordEn.emailerror + ex.Message, "Email sending", MessageBoxButtons.OK, MessageBoxIcon.Error); } } }
private void buttonSign_Click(object sender, RibbonControlEventArgs e) { try { var crm = WordConnectToCrm.ConnectToMSCRM(); if (crm == null) { return; } WordSearchObject searchValues = new WordSearchObject(); WordCRMConfig crmconfig = WordHandlerCRM.GetCRMConfig(crm); searchValues.language = WordHandlerCRM.RetrieveUserUiLanguageCode(crm, crmconfig.Worduser.Id); var accountfield = (!string.IsNullOrWhiteSpace(crmconfig.AccountNrField)) ? crmconfig.AccountNrField.Split(',') : new[] { "accountnumber" }; var orderfield = (!string.IsNullOrWhiteSpace(crmconfig.OrderNrField)) ? crmconfig.OrderNrField.Split(',') : new[] { "ordernumber" }; var quotefield = (!string.IsNullOrWhiteSpace(crmconfig.QuoteNrField)) ? crmconfig.QuoteNrField.Split(',') : new[] { "quotenumber" }; var incidentfield = (!string.IsNullOrWhiteSpace(crmconfig.IncidentNrField)) ? crmconfig.IncidentNrField.Split(',') : new[] { "ticketnumber" }; var contractfield = (!string.IsNullOrWhiteSpace(crmconfig.ContractNrField)) ? crmconfig.ContractNrField.Split(',') : new[] { "contractnumber" }; var emailfield = (!string.IsNullOrWhiteSpace(crmconfig.EmailField)) ? crmconfig.EmailField.Split(',') : new[] { "recievermailaddress" }; var account = accountfield; // new[] { "accountnumber", "kundenr" }; var order = orderfield; //new[] { "ordernumber", "ordrenummer"}; var quote = quotefield; //new[] { "quotenumber"}; var incident = incidentfield; //new[] { "ticketnumber"}; var contract = contractfield; //new[] { "contractnumber"}; var recievermail = emailfield; //new[] { "recievermailaddress", "e-post" }; Document document = Globals.ThisAddIn.Application.ActiveDocument; //HeaderFooter objHeader = document.Sections[1].Headers[WdHeaderFooterIndex.wdHeaderFooterPrimary]; Object start = document.Content.Start; Object end = document.Content.End; //document.Range(ref start, ref end).Select(); var selectedText = Globals.ThisAddIn.Application.ActiveDocument.Range(start, end).Text; //var headerText = objHeader.Range.Text; //headerText = headerText.Replace("\r\a", "").Replace("\r", "").Replace("\a", ""); //var headerTextSplit = headerText.Split(' '); selectedText = selectedText.Replace("\r\a", "").Replace("\r", "").Replace("\a", ""); var docText = selectedText.Split(' '); string searchnumber, searchentity, searchnumberfield, senderfrom, recieverto; searchnumber = searchentity = searchnumberfield = senderfrom = recieverto = ""; for (int i = 0; i < docText.Length; i++) { //if (docText[i].ToLower().Contains(recievermail)) if (recievermail.Any(docText[i].Contains)) { recieverto = docText[i + 1]; } } for (int i = 0; i < docText.Length; i++) { //if (docText[i].ToLower().Contains(account)) if (account.Any(docText[i].Contains)) { searchnumber = docText[i + 1]; searchentity = "account"; searchnumberfield = "accountnumber"; break; } //if (docText[i].ToLower().Contains(order)) if (order.Any(docText[i].Contains)) { searchnumber = docText[i + 1]; searchentity = "salesorder"; searchnumberfield = "ordernumber"; break; } //if (docText[i].ToLower().Contains(quote)) if (quote.Any(docText[i].Contains)) { searchnumber = docText[i + 1]; searchentity = "quote"; searchnumberfield = "quotenumber"; break; } //if (docText[i].ToLower().Contains(incident)) if (incident.Any(docText[i].Contains)) { searchnumber = docText[i + 1]; searchentity = "incident"; searchnumberfield = "ticketnumber"; break; } //if (docText[i].ToLower().Contains(contract)) if (contract.Any(docText[i].Contains)) { searchnumber = docText[i + 1]; searchentity = "contract"; searchnumberfield = "contractnumber"; break; } } for (int i = 0; i < docText.Length; i++) { if (docText[i].ToLower().Contains("saveat")) { searchentity = docText[i + 1]; searchnumber = docText[i + 2]; if (searchentity == "account") { searchnumberfield = searchentity + "accountnumber"; } if (searchentity == "salesorder") { searchnumberfield = "ordernumber"; } if (searchentity == "quote") { searchnumberfield = "quotenumber"; } if (searchentity == "incident") { searchnumberfield = "ticketnumber"; } if (searchentity == "contract") { searchnumberfield = "contractnumber"; } break; } } searchValues.searchentity = searchentity; searchValues.searchnumber = searchnumber; searchValues.searchnumberfield = searchnumberfield; searchValues.recievermail = recieverto; if (string.IsNullOrWhiteSpace(searchentity) || string.IsNullOrWhiteSpace(searchnumber) || string.IsNullOrWhiteSpace(searchnumberfield)) { if (searchValues.language == 1044) { MessageBox.Show(Resources.ResourceWordNb.wordtemplaterror, Resources.ResourceWordNb.documentsinging, MessageBoxButtons.OK, MessageBoxIcon.Error); } else { MessageBox.Show(Resources.ResourceWordEn.wordtemplaterror, Resources.ResourceWordEn.documentsinging, MessageBoxButtons.OK, MessageBoxIcon.Error); } return; } WordHandlerSigning.SendDocumentForSigning(searchValues, crmconfig, crm); } catch (Exception ex) { MessageBox.Show(ex.Message, "Signicat Sign", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
internal static async Task SendDocumentForSigning(WordSearchObject searchValues, WordCRMConfig crmconfig, IOrganizationService crm) { Document document = Globals.ThisAddIn.Application.ActiveDocument; try { var fullname = document.Name.Split('.'); var pdfName = fullname[0] + ".pdf"; var fullPath = document.Path + "\\" + pdfName; if (File.Exists(fullPath)) { File.Delete(fullPath); } document.ExportAsFixedFormat( Path.Combine(document.Path, pdfName), WdExportFormat.wdExportFormatPDF, OpenAfterExport: false); var orgName = ConfigurationManager.AppSettings["OrgName"]; var signicatHandler = new WordHandlerSignicat(); var responseMessage = await signicatHandler.SendRequest(searchValues, document, pdfName, orgName, crmconfig, crm); var stringResult = await responseMessage.Content.ReadAsStringAsync(); var result = stringResult.Split('"'); var sdsurl = result[1]; var entity = WordHandlerCRM.FindRecordByNumber(searchValues, crm); if (entity == null) { if (searchValues.language == 1044) { MessageBox.Show(Resources.ResourceWordNb.recordnotfound + searchValues.searchnumber + Resources.ResourceWordNb.unassociated, Resources.ResourceWordNb.documentsinging, MessageBoxButtons.OK, MessageBoxIcon.Warning); } else { MessageBox.Show(Resources.ResourceWordEn.recordnotfound + searchValues.searchnumber + Resources.ResourceWordEn.unassociated, Resources.ResourceWordEn.documentsinging, MessageBoxButtons.OK, MessageBoxIcon.Warning); } } var documentsigningid = WordHandlerCRM.CreatDocumentSigningInCRM(sdsurl, fullPath, fullname[0], entity, searchValues, crmconfig, crm); if (documentsigningid != Guid.Empty) { WordHandlerCRM.SendEmail(sdsurl, fullname[0], entity, documentsigningid, searchValues, crmconfig, crm); if (searchValues.language == 1044) { MessageBox.Show(Resources.ResourceWordNb.documentsent, Resources.ResourceWordNb.documentsinging, MessageBoxButtons.OK, MessageBoxIcon.Information); } else { MessageBox.Show(Resources.ResourceWordEn.documentsent, Resources.ResourceWordEn.documentsinging, MessageBoxButtons.OK, MessageBoxIcon.Information); } } File.Delete(fullPath); } catch (Exception ex) { if (searchValues.language == 1044) { MessageBox.Show(Resources.ResourceWordNb.cannotcreateinsignicat + ex.Message); } else { MessageBox.Show(Resources.ResourceWordEn.cannotcreateinsignicat + ex.Message); } } }