Plugin/Javascript - 更新所有具有相同电子邮件地址的联系人的自定义字段 agr1 和 agr2
Plugin/Javascript - Update custom fields agr1 and agr2 on all Contacts with same email addres
我需要制作插件或 javascript 类似的东西:
1.When agr1(bool) change(true<->false) on contact like "John Smith" with emailaddress1 = "john1@example.com" 然后 plugin/js change agr1 field on all contacts with emailaddress1 = "john1@example.com"(重复邮件)。
- 我在表单上获得了 2 个协议 (bool(yes/no)):agr1 和 agr2 例如,当我将 agr1 从 true 更改为 false 并将 agr1 更改为 true 时,我创建了更改 agr2=false 的插件我将 agr2 从 false 更改为 true - 我想在创建新联系人时在表单上执行此操作 - 我该怎么做?
我的 example2 代码(它在存在的联系人上工作,而不是在我创建时):
namespace IfZgodaChangeMassmailingChange
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel;
using Microsoft.Crm.Sdk.Messages;
using Microsoft.Crm.Sdk;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Client;
using Microsoft.Xrm.Sdk.Query;
using System.Linq.Expressions;
using System.Activities;
using System.Runtime.Serialization;
using System.Collections.ObjectModel;
using System.Collections;
using System.Reflection;
using Microsoft.Xrm.Sdk.Workflow;
using Microsoft.Xrm.Sdk.Messages;
public class IfZgodaChangeMassmailingChange : IfZgodaChangeSetZgoda2.Plugin
{
public IfZgodaChangeMassmailingChange()
: base(typeof(IfZgodaChangeMassmailingChange))
{
base.RegisteredEvents.Add(new Tuple<int, string, string, Action<LocalPluginContext>>(40, "Update", "contact", new Action<LocalPluginContext>(ExecutePostKontaktUpdate)));
}
protected void ExecutePostKontaktUpdate(LocalPluginContext localContext)
{
if (localContext == null)
{
throw new ArgumentNullException("localContext");
}
IPluginExecutionContext context = localContext.PluginExecutionContext;
IOrganizationService service = localContext.OrganizationService;
ITracingService tracingService = localContext.TracingService;
OrganizationServiceContext _crmOrgContext = new OrganizationServiceContext(service);
tracingService.Trace("ExecutePostFakturaUpdate Plugin: Verifying the client is not offline.");
if (context.IsExecutingOffline || context.IsOfflinePlayback)
return;
if (context.Depth > 1)
return;
if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity)
{
Entity entity = (Entity)context.InputParameters["Target"];
Entity _postEntity = (context.PostEntityImages.Contains("PostImage") && context.PostEntityImages["PostImage"] is Entity) ? context.PostEntityImages["PostImage"] : null;
Entity _preEntity = (context.PreEntityImages.Contains("PreImage") && context.PreEntityImages["PreImage"] is Entity) ? context.PreEntityImages["PreImage"] : null;
if (entity.LogicalName != "contact")
return;
try
{
if (context.MessageName == "Update")
{
bool agr1pre= _preEntity.GetAttributeValue<bool>("agr1");
bool agr1post= _postEntity.GetAttributeValue<bool>("agr1");
bool agr2pre= _preEntity.GetAttributeValue<bool>("agr2");
bool agr2post= _postEntity.GetAttributeValue<bool>("agr2");
if (agr1pre == true && agr1post == false)
{
entity.Attributes["agr2"] = false;
service.Update(entity);
}
else if (agr2pre== false && agr2post== true)
{
entity.Attributes["agr1"] = true;
service.Update(entity);
}
}
}
catch (FaultException<OrganizationServiceFault> e)
{
tracingService.Trace("Exception: {0}", e.ToString());
throw;
}
catch (Exception e)
{
tracingService.Trace("Exception: {0}", e.ToString());
throw;
}
}
}
[RequiredArgument]
[Input("contact")]
[ReferenceTarget("contact")]
public InArgument<EntityReference> contact { get; set; }
}
}
谢谢
我通过下面的代码解决了我的问题。
这段代码是做什么的? -> 更新所有具有相同邮件地址的联系人的自定义字段
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Client;
using Microsoft.Xrm.Sdk.Query;
using Microsoft.Xrm.Sdk.Workflow;
using System;
using System.Activities;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel;
using System.Text;
using System.Threading.Tasks;
namespace IfZgodaChangeSetZgoda2
{
public class SpojnoscZgod : Plugin
{
public SpojnoscZgod()
: base(typeof(SpojnoscZgod))
{
base.RegisteredEvents.Add(new Tuple<int, string, string, Action<LocalPluginContext>>(40, "Update", "contact", new Action<LocalPluginContext>(ExecutePostKontaktUpdate)));
}
protected void ExecutePostKontaktUpdate(LocalPluginContext localContext)
{
if (localContext == null)
{
throw new ArgumentNullException("localContext");
}
IPluginExecutionContext context = localContext.PluginExecutionContext;
IOrganizationService service = localContext.OrganizationService;
ITracingService tracingService = localContext.TracingService;
OrganizationServiceContext _crmOrgContext = new OrganizationServiceContext(service);
tracingService.Trace("ExecutePostFakturaUpdate Plugin: Verifying the client is not offline.");
if (context.IsExecutingOffline || context.IsOfflinePlayback)
return;
if (context.Depth > 1)
return;
if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity)
{
Entity contact = (Entity)context.InputParameters["Target"];
Entity _postEntity = (context.PostEntityImages.Contains("PostImage") && context.PostEntityImages["PostImage"] is Entity) ? context.PostEntityImages["PostImage"] : null;
Entity _preEntity = (context.PreEntityImages.Contains("PreImage") && context.PreEntityImages["PreImage"] is Entity) ? context.PreEntityImages["PreImage"] : null;
string email = _postEntity.GetAttributeValue<string>("emailaddress1"); // get email address from contact
bool zgodaNaMarketing = _postEntity.GetAttributeValue<bool>("alt_zgodanamarketing"); //get marketing agreement before edition
bool zgodaNaMarketingPre = _preEntity.GetAttributeValue<bool>("alt_zgodanamarketing"); //get marketing agreement after edition
bool alt_ZgodanamarketingnewPre = _preEntity.GetAttributeValue<bool>("alt_zgodanamassmailing"); //get marketing agreement for massmailing before edition
bool alt_Zgodanamarketingnew_post = _postEntity.GetAttributeValue<bool>("alt_zgodanamassmailing"); //get marketing agreement for massmailing after edition
string alt_uzasadnieniePre = _preEntity.GetAttributeValue<string>("alt_uzasadnienie"); //get justification of consent before edition
string alt_uzasadnienie = _postEntity.GetAttributeValue<string>("alt_uzasadnienie"); //get justification of consent after edition
if (contact.LogicalName != "contact")
return;
if (_postEntity.GetAttributeValue<string>("emailaddress1") == null) { return; } //if you delete mailaddress from contact add this line for doing nothing
try
{
QueryExpression contactQuery = new QueryExpression("contact"); // new query expression
contactQuery.ColumnSet = new ColumnSet(true); // new column set
contactQuery.Criteria = new FilterExpression(); // new filter for request
contactQuery.Criteria.AddCondition("emailaddress1".ToString(), ConditionOperator.Equal, email.ToString()); // get all contacts with same emailaddress1
EntityCollection retrievedContacts = service.RetrieveMultiple(contactQuery); // retrieve with above criteria
foreach (Entity contacts in retrievedContacts.Entities) // loop for change in all contacts 1 by 1
{
if (zgodaNaMarketingPre == true && zgodaNaMarketing == false)
{
contacts.Attributes["alt_zgodanamarketing"] = false;
contacts.Attributes["alt_zgodanamassmailing"] = false;
contacts.Attributes["alt_uzasadnienie"] = alt_uzasadnienie;
service.Update(contacts);
}
else if (alt_ZgodanamarketingnewPre == false && alt_Zgodanamarketingnew_post == true)
{
contacts.Attributes["alt_zgodanamarketing"] = true;
contacts.Attributes["alt_zgodanamassmailing"] = true;
contacts.Attributes["alt_uzasadnienie"] = alt_uzasadnienie;
service.Update(contacts);
}
else
{
contacts.Attributes["alt_zgodanamarketing"] = zgodaNaMarketing;
contacts.Attributes["alt_zgodanamassmailing"] = alt_Zgodanamarketingnew_post;
contacts.Attributes["alt_uzasadnienie"] = alt_uzasadnienie;
service.Update(contacts);
}
}
}
catch (FaultException<OrganizationServiceFault> e)
{
tracingService.Trace("Exception: {0}", e.ToString());
throw;
}
catch (Exception e)
{
tracingService.Trace("Exception: {0}", e.ToString());
throw;
}
}
}
[RequiredArgument]
[Input("contact")]
[ReferenceTarget("contact")]
public InArgument<EntityReference> contact { get; set; }
}
}
我需要制作插件或 javascript 类似的东西: 1.When agr1(bool) change(true<->false) on contact like "John Smith" with emailaddress1 = "john1@example.com" 然后 plugin/js change agr1 field on all contacts with emailaddress1 = "john1@example.com"(重复邮件)。
- 我在表单上获得了 2 个协议 (bool(yes/no)):agr1 和 agr2 例如,当我将 agr1 从 true 更改为 false 并将 agr1 更改为 true 时,我创建了更改 agr2=false 的插件我将 agr2 从 false 更改为 true - 我想在创建新联系人时在表单上执行此操作 - 我该怎么做?
我的 example2 代码(它在存在的联系人上工作,而不是在我创建时):
namespace IfZgodaChangeMassmailingChange
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel;
using Microsoft.Crm.Sdk.Messages;
using Microsoft.Crm.Sdk;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Client;
using Microsoft.Xrm.Sdk.Query;
using System.Linq.Expressions;
using System.Activities;
using System.Runtime.Serialization;
using System.Collections.ObjectModel;
using System.Collections;
using System.Reflection;
using Microsoft.Xrm.Sdk.Workflow;
using Microsoft.Xrm.Sdk.Messages;
public class IfZgodaChangeMassmailingChange : IfZgodaChangeSetZgoda2.Plugin
{
public IfZgodaChangeMassmailingChange()
: base(typeof(IfZgodaChangeMassmailingChange))
{
base.RegisteredEvents.Add(new Tuple<int, string, string, Action<LocalPluginContext>>(40, "Update", "contact", new Action<LocalPluginContext>(ExecutePostKontaktUpdate)));
}
protected void ExecutePostKontaktUpdate(LocalPluginContext localContext)
{
if (localContext == null)
{
throw new ArgumentNullException("localContext");
}
IPluginExecutionContext context = localContext.PluginExecutionContext;
IOrganizationService service = localContext.OrganizationService;
ITracingService tracingService = localContext.TracingService;
OrganizationServiceContext _crmOrgContext = new OrganizationServiceContext(service);
tracingService.Trace("ExecutePostFakturaUpdate Plugin: Verifying the client is not offline.");
if (context.IsExecutingOffline || context.IsOfflinePlayback)
return;
if (context.Depth > 1)
return;
if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity)
{
Entity entity = (Entity)context.InputParameters["Target"];
Entity _postEntity = (context.PostEntityImages.Contains("PostImage") && context.PostEntityImages["PostImage"] is Entity) ? context.PostEntityImages["PostImage"] : null;
Entity _preEntity = (context.PreEntityImages.Contains("PreImage") && context.PreEntityImages["PreImage"] is Entity) ? context.PreEntityImages["PreImage"] : null;
if (entity.LogicalName != "contact")
return;
try
{
if (context.MessageName == "Update")
{
bool agr1pre= _preEntity.GetAttributeValue<bool>("agr1");
bool agr1post= _postEntity.GetAttributeValue<bool>("agr1");
bool agr2pre= _preEntity.GetAttributeValue<bool>("agr2");
bool agr2post= _postEntity.GetAttributeValue<bool>("agr2");
if (agr1pre == true && agr1post == false)
{
entity.Attributes["agr2"] = false;
service.Update(entity);
}
else if (agr2pre== false && agr2post== true)
{
entity.Attributes["agr1"] = true;
service.Update(entity);
}
}
}
catch (FaultException<OrganizationServiceFault> e)
{
tracingService.Trace("Exception: {0}", e.ToString());
throw;
}
catch (Exception e)
{
tracingService.Trace("Exception: {0}", e.ToString());
throw;
}
}
}
[RequiredArgument]
[Input("contact")]
[ReferenceTarget("contact")]
public InArgument<EntityReference> contact { get; set; }
}
}
谢谢
我通过下面的代码解决了我的问题。
这段代码是做什么的? -> 更新所有具有相同邮件地址的联系人的自定义字段
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Client;
using Microsoft.Xrm.Sdk.Query;
using Microsoft.Xrm.Sdk.Workflow;
using System;
using System.Activities;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel;
using System.Text;
using System.Threading.Tasks;
namespace IfZgodaChangeSetZgoda2
{
public class SpojnoscZgod : Plugin
{
public SpojnoscZgod()
: base(typeof(SpojnoscZgod))
{
base.RegisteredEvents.Add(new Tuple<int, string, string, Action<LocalPluginContext>>(40, "Update", "contact", new Action<LocalPluginContext>(ExecutePostKontaktUpdate)));
}
protected void ExecutePostKontaktUpdate(LocalPluginContext localContext)
{
if (localContext == null)
{
throw new ArgumentNullException("localContext");
}
IPluginExecutionContext context = localContext.PluginExecutionContext;
IOrganizationService service = localContext.OrganizationService;
ITracingService tracingService = localContext.TracingService;
OrganizationServiceContext _crmOrgContext = new OrganizationServiceContext(service);
tracingService.Trace("ExecutePostFakturaUpdate Plugin: Verifying the client is not offline.");
if (context.IsExecutingOffline || context.IsOfflinePlayback)
return;
if (context.Depth > 1)
return;
if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity)
{
Entity contact = (Entity)context.InputParameters["Target"];
Entity _postEntity = (context.PostEntityImages.Contains("PostImage") && context.PostEntityImages["PostImage"] is Entity) ? context.PostEntityImages["PostImage"] : null;
Entity _preEntity = (context.PreEntityImages.Contains("PreImage") && context.PreEntityImages["PreImage"] is Entity) ? context.PreEntityImages["PreImage"] : null;
string email = _postEntity.GetAttributeValue<string>("emailaddress1"); // get email address from contact
bool zgodaNaMarketing = _postEntity.GetAttributeValue<bool>("alt_zgodanamarketing"); //get marketing agreement before edition
bool zgodaNaMarketingPre = _preEntity.GetAttributeValue<bool>("alt_zgodanamarketing"); //get marketing agreement after edition
bool alt_ZgodanamarketingnewPre = _preEntity.GetAttributeValue<bool>("alt_zgodanamassmailing"); //get marketing agreement for massmailing before edition
bool alt_Zgodanamarketingnew_post = _postEntity.GetAttributeValue<bool>("alt_zgodanamassmailing"); //get marketing agreement for massmailing after edition
string alt_uzasadnieniePre = _preEntity.GetAttributeValue<string>("alt_uzasadnienie"); //get justification of consent before edition
string alt_uzasadnienie = _postEntity.GetAttributeValue<string>("alt_uzasadnienie"); //get justification of consent after edition
if (contact.LogicalName != "contact")
return;
if (_postEntity.GetAttributeValue<string>("emailaddress1") == null) { return; } //if you delete mailaddress from contact add this line for doing nothing
try
{
QueryExpression contactQuery = new QueryExpression("contact"); // new query expression
contactQuery.ColumnSet = new ColumnSet(true); // new column set
contactQuery.Criteria = new FilterExpression(); // new filter for request
contactQuery.Criteria.AddCondition("emailaddress1".ToString(), ConditionOperator.Equal, email.ToString()); // get all contacts with same emailaddress1
EntityCollection retrievedContacts = service.RetrieveMultiple(contactQuery); // retrieve with above criteria
foreach (Entity contacts in retrievedContacts.Entities) // loop for change in all contacts 1 by 1
{
if (zgodaNaMarketingPre == true && zgodaNaMarketing == false)
{
contacts.Attributes["alt_zgodanamarketing"] = false;
contacts.Attributes["alt_zgodanamassmailing"] = false;
contacts.Attributes["alt_uzasadnienie"] = alt_uzasadnienie;
service.Update(contacts);
}
else if (alt_ZgodanamarketingnewPre == false && alt_Zgodanamarketingnew_post == true)
{
contacts.Attributes["alt_zgodanamarketing"] = true;
contacts.Attributes["alt_zgodanamassmailing"] = true;
contacts.Attributes["alt_uzasadnienie"] = alt_uzasadnienie;
service.Update(contacts);
}
else
{
contacts.Attributes["alt_zgodanamarketing"] = zgodaNaMarketing;
contacts.Attributes["alt_zgodanamassmailing"] = alt_Zgodanamarketingnew_post;
contacts.Attributes["alt_uzasadnienie"] = alt_uzasadnienie;
service.Update(contacts);
}
}
}
catch (FaultException<OrganizationServiceFault> e)
{
tracingService.Trace("Exception: {0}", e.ToString());
throw;
}
catch (Exception e)
{
tracingService.Trace("Exception: {0}", e.ToString());
throw;
}
}
}
[RequiredArgument]
[Input("contact")]
[ReferenceTarget("contact")]
public InArgument<EntityReference> contact { get; set; }
}
}