270 likes | 489 Views
Sage CRM Developers Course. Programming for the Advanced Email Manager . Looking ahead to the classes. DP01: Introduction to the Development Partner Program DP02: Entities and the Data Model (Part 1 of 2) DP03: Entities and the Data Model (Part 2 of 2)
E N D
Sage CRM Developers Course Programming for the Advanced Email Manager
Looking ahead to the classes • DP01: Introduction to the Development Partner Program • DP02: Entities and the Data Model (Part 1 of 2) • DP03: Entities and the Data Model (Part 2 of 2) • DP04: Implementing Screen Based Rules (Part 1 of 2) • DP05: Implementing Screen Based Rules (Part 2 of 2) • DP06: Screen and User Independent Business Rules • DP07: Workflow (Part 1 of 2) • DP08: Workflow (Part 2 of 2) • DP09: Using the API Objects in ASP Pages (Part 1 of 2) • DP10 : Using the API Objects in ASP Pages (Part 2 of 2) • DP11: Using the Component Manager • DP12: Programming for the Advanced Email Manager • DP13: Using the Web Services API • DP14: Using the Web Services API (Part 2 of 2) • DP15: Coding the Web Self Service COM API (Part 1 of 2) • DP16: Coding the Web Self Service COM API (Part 2 of 2) • DP17: Using the .NET API (Part 1 of 2) • DP18: Using the .NET API (Part 2 of 2)
Agenda • How the Email Manager works and processes emails. • Creating a template • Calling new functions • Processing data • Opportunities • Leads • Communications
Getting Started • Do you have an email server to test with? • VPOP • Paul Smith Computing Services • http://www.pscs.co.uk/downloads/vpop3.php • CMAIL • http://www.youngzsoft.net/
Documentation and Resources • System Administration Guide • E-mail Management • E-mail Configuration and E-mail Status • Textpad Snippets • dpp.sagecrm.com
Services • C:\program files\sage\CRM\services\eWareEmailManager.exe • Hkey_Local_Machine, System,Current Control Set, Services • CRMEscalationService • EmailManager
Clean out Old Install Configurations • Open registry • HKEY_LOCAL_MACHINE\SOFTWARE\eWare\Config • Go through each install and blank • EMlogonid • EMPassword • Except for install to be used
Advanced Email Manager • Support for e-mail MAPI and POP • Allows separate inbound/outbound mail servers • Secure SMTP supported • External databases may be read and written to via the custom scripting aspect. • Each mailbox is accessed and controlled by its own thread within the application.
Creating a New Script File • To create a new "Sales" email manager template. • Save the template into the same folder as the other template files. • C:\Program Files\Sage\CRM\Services\CustomPages\Scripts\sales.js • The template will automatically be seen and made available to CRM for use in the • Administration -> E-mail and Documents -> E-mail Management Server Options • when creating a new email address option.
Create a New Function • To allow a new function to be called from within template then you will need to add the following Translation • Caption Family: jsfunctions • Caption Code: SalesEnquiry(); • US Translation: Sales Enquiry • Add other translations as required.
Basic Structure of Template Files • See System Administration Guide • Mytemplate.js • Comments • Initialise Variables • General Event Functions • BeforeMainAction • AfterMainAction • Main Functions (referenced in Config screen) • N.B. MainAction is a reserved word. Do not call any function ‘MainAction’ as this is internally replaced with function called from configuration screen. • Utility Functions
Debugging • Turn on Debugging in System • In Template will use: • MsgHandler.Debug = true;
Objects Available in Template • UserQuery • eWareQuery object using • SELECT * FROM vUsers WHERE • user_emailaddress = FromAddress • OR • user_mobileemail = FromAddress • PersonQuery • eWareQuery object using • SELECT * FROM vEmail, vPerson WHERE email_personid • = pers_personid AND emai_emailaddress = FromAddress • CompanyQuery • eWareQuery object using • SELECT * FROM vEmail, vCompany WHERE • emai_companyid = comp_companyid AND • emai_emailaddress = FromAddress • eWare • eWare object...logged on with admin user (as specified in configuration) • MsgHandler • Debugging control • eMail • interface to the email
Monitoring of Account • Log information C:\Program Files\Sage\CRM\Services\Logs\20100712 CRM MailManager.log **********RulesScript is...******** if (bCond) { AssignedUser = 4; AssignedChannel = 1; SalesEnquiry(); } **********End of RulesScript.**** • Where additional rule sets are used the information passed to the script is changed • **********RulesScript is...******** • if ((!CompanyQuery.EOF) && (CompanyQuery("comp_type")=="Customer") • ) • { • AssignedUser = 4; • AssignedChannel = 1; • CreateRepeatSale(); • bCond=false; • } • if (bCond) • { • AssignedUser = 4; • AssignedChannel = 1; • SalesEnquiry(); • } • **********End of RulesScript.****
Errors in Log • Error detection is based on the status of the script after it runs. The E-mail Management application runs the script and captures the result of the script running. • Log file will contain the script and the error information. The section where the script failed is highlighted. • E-mails that cause the system to fail internally are saved in a rogue e-mail folder, which is located in • ...\Program Files\Sage\CRM\Services\CustomPages\Scripts
Email Object • Properties • Body - String (read/write) • IsHTML - Boolean (read/write) • Subject - String; (read/write) • Priority - Integer (read/write) • Recipients - AddressList Object • SenderName - String (read/write) • SenderAddress - String • DeliveryTime - Date • Attachments - AttachmentList Object • BCC - AddressList Object • CC - AddressList Object • Methods • Send() • AddFile('physical path') • Clear() • Header("named header")
Other Objects • AddressList Properties • Items(index) • Count - Integer(readonly) Methods • AddAddress(Address, Name) • MailAddress Properties • Name - String (read/write) • Address - String (read/write) • AttachmentList Properties • Items(index) • Count - Integer(readonly) • LibraryPath - String • Attachment Properties • Name - String (read/write) • Extension - String (read only) Methods • Save(Name, Path) • SaveAs(Name, Path)
Adding Debugging Messages function BeforeMainAction() { MsgHandler.Log("BeforeMainAction function called"); } function AfterMainAction() { MsgHandler.Log("AfterMainAction function called"); }
Example Main Function • function SalesEnquiry() • { • //add debug message to indicate that function called • //if sender is known contact then log new opportunity • //create communication • //automatically acknowledge email • If sender is unknown then • //create lead • //create communication • //automatically acknowledge email • } • function SalesEnquiry() • { • MsgHandler.Log("SalesEnquiry function called"); • //check if person exists • if (!PersonQuery.EOF) • { • createOppo(); • createComm("Opportunity"); • // sendEmail(); • } • else • { • createLead(); • createComm("Lead"); • // sendEmail(); • } • }
Example Create Opportunity function createOppo() { var myRecord = CRM.CreateRecord("opportunity"); myRecord.Oppo_PrimaryCompanyId= PersonQuery("pers_companyid"); myRecord.Oppo_PrimaryPersonId= PersonQuery("pers_personid"); myRecord.Oppo_AssignedUserId= AssignedUser; myRecord.Oppo_ChannelId= AssignedChannel; myRecord.Oppo_Description= eMail.Subject.substring(0, 39); myRecord.Oppo_Source= "Email"; myRecord.Oppo_Note= "Please see the attached email"; myRecord.Oppo_Status= "In Progress"; myRecord.Oppo_Stage= "Lead"; myRecord.Oppo_Opened = mydate.getVarDate(); myRecord.SetWorkflowInfo("Opportunity Workflow", "Lead") myRecord.SaveChanges(); intOppoRecordID = myRecord.oppo_opportunityid; }
Example Create Lead • function createLead() • { • var myRecord = CRM.CreateRecord("lead"); • myRecord.lead_AssignedUserId= AssignedUser; • myRecord.lead_ChannelId= AssignedChannel; • myRecord.lead_Description= eMail.Subject.substring(0, 39); • myRecord.lead_Source= "Email"; • myRecord.lead_Details= "Please see the attached email"; • myRecord.lead_Status= "In Progress"; • myRecord.lead_Stage= "NewLead"; • myRecord.lead_Opened = mydate.getVarDate(); • myRecord.SetWorkflowInfo("Lead Workflow", "Assigned") • myRecord.SaveChanges(); • intLeadRecordID = myRecord.lead_leadid; • }
Example Send Email function sendEmail(strsubject) { eMail.IsHTML = true; SenderName = eMail.SenderName; SenderAddress = eMail.SenderAddress; MailSubject = eMail.Subject; MailBody = eMail.Body; eMail.Clear(); eMail.Recipients.AddAddress(SenderAddress, SenderName); eMail.SenderName = MsgHandler.EmailAddress; eMail.SenderAddress = MsgHandler.EmailAddress; if (strsubject == "") { eMail.Subject = CRM.GetTrans("GenCaptions", "AutoReply") + ": " + MailSubject } else { eMail.Subject = strsubject; } eMail.Body = CRM.GetTrans("GenCaptions", "Your mail has been logged") + "<BR>" + CRM.GetTrans("GenCaptions", "Thank you") + "<BR><BR>" + CRM.GetTrans("GenCaptions", "Panoply Support") + "<BR><BR>" + MailBody; eMail.Send(); }
Looking ahead to the classes • DP01: Introduction to the Development Partner Program • DP02: Entities and the Data Model (Part 1 of 2) • DP03: Entities and the Data Model (Part 2 of 2) • DP04: Implementing Screen Based Rules (Part 1 of 2) • DP05: Implementing Screen Based Rules (Part 2 of 2) • DP06: Screen and User Independent Business Rules • DP07: Workflow (Part 1 of 2) • DP08: Workflow (Part 2 of 2) • DP09: Using the API Objects in ASP Pages (Part 1 of 2) • DP10 : Using the API Objects in ASP Pages (Part 2 of 2) • DP11: Using the Component Manager • DP12: Programming for the Advanced Email Manager • DP13: Using the Web Services API • DP14: Using the Web Services API (Part 2 of 2) • DP15: Coding the Web Self Service COM API (Part 1 of 2) • DP16: Coding the Web Self Service COM API (Part 2 of 2) • DP17: Using the .NET API (Part 1 of 2) • DP18: Using the .NET API (Part 2 of 2)