Advanced Email Manager

advertisement
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:
Caption Code:
US Translation:
jsfunctions
SalesEnquiry();
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
AttachmentList
Properties
Properties
– Items(index)
– Count - Integer(readonly)
Methods
– AddAddress(Address, Name)
MailAddress
Properties
– Name - String (read/write)
– Address - String (read/write)
– 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();
}
Q&A
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)
Download