Last active
May 7, 2025 07:22
-
-
Save MethodenMann/ef94fca7a3134a0603bcf94629859df8 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using Microsoft.Xrm.Sdk; | |
using Microsoft.Xrm.Sdk.Client; | |
using Microsoft.Xrm.Sdk.Query; | |
using System; | |
using System.Configuration; | |
using System.Diagnostics; | |
using System.Linq; | |
using System.Net; | |
using System.Net.Http; | |
using System.Net.Mail; | |
using System.Runtime.Remoting.Contexts; | |
using System.Text; | |
using Zurich.CEP.Common.DomainModel.DataModel.Crm; | |
using Zurich.Zkp.Common; | |
using Zurich.Zkp.Common.CrmDataAccess.DataProvider; | |
using Zurich.Zkp.DomainModel.Constants; | |
using Zurich.Zkp.DomainModel.DataModel.Crm; | |
using Zurich.Zkp.Extensions; | |
using Zurich.Zkp.PluginBase; | |
using Configuration = Zurich.Zkp.DomainModel.Constants.Configuration; | |
namespace LeadPlugin | |
{ | |
public class LeadHandler : Plugin | |
{ | |
public LeadHandler() | |
: base(typeof(LeadHandler)) | |
{ | |
RegisteredEvents.Add(new Tuple<int, string, string, Action<LocalPluginContext>>( | |
(int)PipelinePhase.PreOperation, | |
Message.Create.ToString(), | |
lead.EntityLogicalName, | |
OnPreCreate)); | |
RegisteredEvents.Add(new Tuple<int, string, string, Action<LocalPluginContext>>( | |
(int)PipelinePhase.PreOperation, | |
Message.Update.ToString(), | |
lead.EntityLogicalName, | |
OnPreUpdate)); | |
} | |
private void OnPreCreate(LocalPluginContext context) | |
{ | |
try | |
{ | |
var target = Common.GetTargetEntity(context); | |
SetSlaStartDate(target); | |
CopyCustomerAttributes(context); | |
} | |
catch (Exception e) | |
{ | |
throw new InvalidOperationException($"Error in pre creating lead: {e.Message}"); | |
} | |
} | |
private void OnPreUpdate(LocalPluginContext context) | |
{ | |
try | |
{ | |
var target = Common.GetTargetEntity(context); | |
var preImage = Common.GetPreEntityImage(context, target.LogicalName); | |
var slaStartDate = preImage.GetAttributeValue<DateTime>(lead.zch_SlaStartDate); | |
if (slaStartDate != null) | |
{ | |
// Do not overwrite SLA start date | |
return; | |
} | |
SetSlaStartDate(target); | |
CopyCustomerAttributes(context); | |
} | |
catch (Exception e) | |
{ | |
throw new InvalidOperationException("Error in pre updating lead: " + e.Message); | |
} | |
} | |
private void SetSlaStartDate(Entity leadEntity) | |
{ | |
var leadType = leadEntity.GetAttributeValue<OptionSetValue>(lead.zch_LeadTypeCode)?.ToEnum<lead.zch_leadtypecodeEnum>(); | |
if (leadType == lead.zch_leadtypecodeEnum.XTwoPercent_Consulting_Order_63242) | |
{ | |
leadEntity.SetAttributeValue(lead.zch_SlaStartDate, DateTime.Now.ToSwissTime()); | |
} | |
} | |
private void CopyCustomerAttributes(LocalPluginContext context) | |
{ | |
Entity targetEntity = Common.GetTargetEntity(context); | |
EntityReference partnerRef = targetEntity.GetAttributeValue<EntityReference>(lead.CustomerId); | |
if (partnerRef == null) | |
{ | |
context.Trace("Lead doesn't have CustomerId / Partner on Lead is empty"); | |
return; | |
}; | |
Entity partnerEntity = context.OrganizationService.Retrieve(partnerRef.LogicalName, partnerRef.Id, new ColumnSet(true)); | |
CopyFirstAndLastNameFromPartner(targetEntity, partnerEntity); | |
CopyAddressFromPartner(targetEntity, partnerEntity); | |
CopyEmailFromPartner(targetEntity, partnerEntity); | |
} | |
private void CopyAddressFromPartner(Entity targetEntity, Entity partnerEntity) | |
{ | |
if (targetEntity.GetAttributeValue<string>(lead.zch_Street) == null && targetEntity.GetAttributeValue<string>(lead.zch_StreetNumber) == null | |
&& targetEntity.GetAttributeValue<string>(lead.Address1_PostalCode) == null && targetEntity.GetAttributeValue<string>(lead.Address1_City) == null) | |
{ | |
var partnerStreet = partnerEntity.GetAttributeValue<string>("zch_street"); | |
var partnerStreetNumber = partnerEntity.GetAttributeValue<string>("zch_streetnumber"); | |
var partnerAddress1PostalCode = partnerEntity.GetAttributeValue<string>("address1_postalcode"); | |
var partnerAddress1City = partnerEntity.GetAttributeValue<string>("address1_city"); | |
if (partnerStreet != null && partnerStreetNumber != null && partnerAddress1PostalCode != null && partnerAddress1City != null) | |
{ | |
targetEntity.SetAttributeValue<string>(lead.zch_Street, partnerStreet); | |
targetEntity.SetAttributeValue<string>(lead.zch_StreetNumber, partnerStreetNumber); | |
targetEntity.SetAttributeValue<string>(lead.Address1_PostalCode, partnerAddress1PostalCode); | |
targetEntity.SetAttributeValue<string>(lead.Address1_City, partnerAddress1City); | |
} | |
} | |
} | |
private void CopyEmailFromPartner(Entity targetEntity, Entity partnerEntity) | |
{ | |
//On Purpose: EmailAddress1 on Lead is EmailAddress2 on Partner and vice-versa for private / business email | |
if (targetEntity.GetAttributeValue<string>(lead.EMailAddress1) == null) | |
{ | |
var emailaddress1 = partnerEntity.GetAttributeValue<string>("emailaddress2"); | |
if (emailaddress1 != null) | |
{ | |
targetEntity.SetAttributeValue<string>(lead.EMailAddress1, emailaddress1); | |
} | |
} | |
if (targetEntity.GetAttributeValue<string>(lead.EMailAddress2) == null) | |
{ | |
var emailaddress2 = partnerEntity.GetAttributeValue<string>("emailaddress1"); | |
if (emailaddress2 != null) | |
{ | |
targetEntity.SetAttributeValue<string>(lead.EMailAddress2, emailaddress2); | |
} | |
} | |
} | |
private void CopyFirstAndLastNameFromPartner(Entity targetEntity, Entity partnerEntity) | |
{ | |
if (targetEntity.GetAttributeValue<string>(lead.FirstName) == null && targetEntity.GetAttributeValue<string>(lead.LastName) == null) | |
{ | |
if (partnerEntity.LogicalName == "contact") | |
{ | |
var partnerFirstName = partnerEntity.GetAttributeValue<string>("firstname"); | |
var partnerLastName = partnerEntity.GetAttributeValue<string>("lastname"); | |
if (partnerFirstName != null) | |
{ | |
targetEntity.SetAttributeValue<string>(lead.FirstName, partnerFirstName); | |
} | |
if (partnerLastName != null) | |
{ | |
targetEntity.SetAttributeValue<string>(lead.LastName, partnerLastName); | |
} | |
} | |
if (partnerEntity.LogicalName == "account") | |
{ | |
var partnerAccountName = partnerEntity.GetAttributeValue<string>("name"); | |
if (partnerAccountName != null) | |
{ | |
targetEntity.SetAttributeValue<string>(lead.LastName, partnerAccountName); | |
} | |
} | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment