Download the plugin registration source code:
https://docs.google.com/file/d/0B0By9PBv_3cDOXdzc19xeThRaWs/edit
https://docs.google.com/file/d/0B0By9PBv_3cDOXdzc19xeThRaWs/edit
// Set the target entity (i.e.,Contact)
initialize.TargetEntityName = “contact”;
// Create the EntityMoniker of Source (i.e.,Account)
initialize.EntityMoniker = new EntityReference(“account”, new Guid(“D4CBEE74-B5E3-E611-8109-C4346BDD8041”));
// Execute the request
InitializeFromResponse initialized = (InitializeFromResponse)orgService.Execute(initialize);
// Read Intitialized entity (i.e.,Contact with copied attributes from Account)
if (initialized.Entity != null)
{
// Get entContact from the response
Entity entContact = initialized.Entity;
// Set the additional attributes of the Contact
entContact.Attributes.Add(“firstname”, “Rajeev”);
entContact.Attributes.Add(“lastname”, “Pentyala”);
// Create a new contact
orgService.Create(entContact);
Thanks to Rajeev, please find URL below to the original post
//Uploaded image in the Webresource .
string webresource = "<html> <img src='~/WebResources/new_image' width='205' height='150'></html>";
//published Image Url Link
string crmModule = "<html> <img src='http://images.all-free-download.com/images/graphiclarge/beautiful_nature_landscape_05_hd_picture_166223.jpg' width='150' height='150'></html>";
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//CRM SDK Namespace
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;
using Microsoft.Crm.Sdk.Messages;
namespace Sample
{
public class Email : IPlugin
{
public void Execute(IServiceProvider serviceProvider)
{
// Obtain the execution context from the service provider.
IPluginExecutionContext context =
(IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);
if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity)
{
Entity Lead = (Entity)context.InputParameters["Target"];
string Emailid = Lead.GetAttributeValue<string>("emailaddress1");
string Name = Lead.GetAttributeValue<string>("lastname");
//From Current User
Entity from = new Entity("activityparty");
from["partyid"] = new EntityReference("systemuser", context.UserId);
Entity to = new Entity("activityparty");
to["partyid"] = new EntityReference("lead", Lead.Id);
//Uploaded Crm webresource Url.
string webresource = "<html> <img src='~/WebResources/new_image' width='205' height='150'></html>";
//published Image Url Link
string crmModule = "<html> <img src='http://images.all-free-download.com/images/graphiclarge/beautiful_nature_landscape_05_hd_picture_166223.jpg' width='150' height='150'></html>";
//Hyperlink (or) Re-Direct Url link
string Hyper = String.Format("<a href='https://google.com/'> Click Here</a>");
//Create Email
Entity Email = new Entity("email");
Email["from"] = new Entity[] { from };
Email["to"] = new Entity[] { to };
Email["subject"] = "welcome Mr : " + Name;
Email["description"] = "<h3> Dear " + Name + "</h3>" + "<br/>" + "Microsoft Dynamics CRM 365 Module" + "<br/>"
+ crmModule + "<br/>" + Hyper + "<br/>" + webresource;
//SendEmailRequest
Guid _emailId = service.Create(Email);
SendEmailRequest reqSendEmail = new SendEmailRequest();
reqSendEmail.EmailId = _emailId;
reqSendEmail.TrackingToken = "";
reqSendEmail.IssueSend = true;
SendEmailResponse res = (SendEmailResponse)service.Execute(reqSendEmail);
}
}
}
}
string crmModule = "<html> <img src='data: image/jpeg; base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw / eHBhY2tldCBiZWdpbj0i77u / IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8 + IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MEVBMTczNDg3QzA5MTFFNjk3ODM5NjQyRjE2RjA3QTkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MEVBMTczNDk3QzA5MTFFNjk3ODM5NjQyRjE2RjA3QTkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowRUExNzM0NjdDMDkxMUU2OTc4Mzk2NDJGMTZGMDdBOSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowRUExNzM0NzdDMDkxMUU2OTc4Mzk2NDJGMTZGMDdBOSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI / PjjUmssAAAGASURBVHjatJaxTsMwEIbpIzDA6FaMMPYJkDKzVYU + QFeEGPIKfYU8AETkCYI6wANkZQwIKRNDB1hA0Jrf0rk6WXZ8BvWkb4kv99vn89kDrfVexBSYgVNwDA7AN + jAK3gEd + AlGMGIBFDgFvzouK3JV / lihQTOwLtOtw9wIRG5pJn91Tbgqk9kSk7GViADrTD4HCyZ0NQnomi51sb0fUyCMQEbp2WpU67IjfNjwcYyoUDhjJVcZBjYBy40j4wXgaobWoe8Z6Y80CJBwFpunepIzt2AUgFjtXXshNXjVmMh + K + zzp / CMs0CqeuzrxSRpbOKfdCkiMTS1VBQ41uxMyQR2qbrXiiwYN3ACh1FDmsdK2Eu4J6Tlo31dYVtCY88h5ELZIJJ + IRMzBHfyJINrigNkt5VsRiub9nXICdsYyVd2NcVvA3ScE5t2rb5JuEeyZnAhmLt9NK63vX1O5Pe8XaPSuGq1uTrfUgMEp9EJ + CQvr + BJ / AAKvAcCiAR + bf9CjAAluzmdX4AEIIAAAAASUVORK5CYII ='></html>";
In the plugin values are retrieved from CRM are in "UTC" format. Value set in the plugin or console application are based on the date time property. If the date time property is not set as "UTC" then values converted as UTC and saved in the database. If the date time property is set as "UTC" then it will save as "UTC".
Message
|
Description
|
Create
|
This message will trigger when-ever primary entity record is created
|
Update
|
This message will trigger when-ever primary entity record is updated
|
Retrieve
|
This message will trigger when-ever primary entity record is retrieve( entity form open).
Eg: In the Active account grid, double click any one of the record this message will trigger. |
Retrieve Multiple
|
This message will trigger when-ever primary entity records are viewed from grid.
|
Publish All customization
|
This message will trigger when-ever you click "PublishAll"
|
Publish
|
This message will trigger when-ever you click "Publish" on webresource and entity form.
|
Grant Access
|
This message will trigger when-ever record is shared
|
Revoke Access
|
This message will trigger when-ever record is unshared
|
AddMember
| This message will trigger and primary entity is "list" when-ever add member in the marketing list through UI. |
RemoveMember
|
This message will trigger and primary entity is "list"
when-ever remove/delete member in the marketing list through UI. |
AddListMember
|
This message will trigger and primary entity is "list" when-ever add member in the marketing list through AddListMembersListRequest class(console application.
|
AddItem
|
This message will trigger whenever you add marketing list in the campaign activity
|
Remove Item
|
This message will trigger whenever you add marketing list in the campaign activity
|

// Query using the paging cookie. // Define the paging attributes. // The number of records per page to retrieve. int queryCount = 3; // Initialize the page number. int pageNumber = 1; // Initialize the number of records. int recordCount = 0; // Define the condition expression for retrieving records. ConditionExpression pagecondition = new ConditionExpression(); pagecondition.AttributeName = "parentaccountid"; pagecondition.Operator = ConditionOperator.Equal; pagecondition.Values.Add(_parentAccountId); // Define the order expression to retrieve the records. OrderExpression order = new OrderExpression(); order.AttributeName = "name"; order.OrderType = OrderType.Ascending; // Create the query expression and add condition. QueryExpression pagequery = new QueryExpression(); pagequery.EntityName = "account"; pagequery.Criteria.AddCondition(pagecondition); pagequery.Orders.Add(order); pagequery.ColumnSet.AddColumns("name", "emailaddress1"); // Assign the pageinfo properties to the query expression. pagequery.PageInfo = new PagingInfo(); pagequery.PageInfo.Count = queryCount; pagequery.PageInfo.PageNumber = pageNumber; // The current paging cookie. When retrieving the first page, // pagingCookie should be null. pagequery.PageInfo.PagingCookie = null; Console.WriteLine("Retrieving sample account records in pages...\n"); Console.WriteLine("#\tAccount Name\t\tEmail Address"); while (true) { // Retrieve the page. EntityCollection results = _serviceProxy.RetrieveMultiple(pagequery); if (results.Entities != null) { // Retrieve all records from the result set. foreach (Account acct in results.Entities) { Console.WriteLine("{0}.\t{1}\t{2}", ++recordCount, acct.Name, acct.EMailAddress1); } } // Check for more records, if it returns true. if (results.MoreRecords) { Console.WriteLine("\n****************\nPage number {0}\n****************", pagequery.PageInfo.PageNumber); Console.WriteLine("#\tAccount Name\t\tEmail Address"); // Increment the page number to retrieve the next page. pagequery.PageInfo.PageNumber++; // Set the paging cookie to the paging cookie returned from current results. pagequery.PageInfo.PagingCookie = results.PagingCookie; } else { // If no more records are in the result nodes, exit the loop. break; } }