プラグインを使用してケース以外のレコードをルーティングする
IPlugin インターフェースを使用して、電子メール メッセージのようなケース以外のレコードのルーティングをプログラムで起動することができます。
Visual Studio のコンソールアプリ (.NET framework) で次のサンプルコードを使用できます。 このコードでは、次の 2 つの条件を確認し、それが満たされた場合に msdyn_ApplyRoutingRuleEntityRecord アクションをトリガーします。
- Web サービスメッセージがレコードを作成することであるかどうか
- レコードが電子メールメッセージであるかどうか。
public class SamplePlugin : IPlugin
{
public void Execute(IServiceProvider serviceProvider)
{
// Obtain the tracing service
ITracingService tracingService = (ITracingService)serviceProvider.GetService(typeof(ITracingService));
// Obtain the execution context from the service provider
IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
// Check if create message
if (context.MessageName.ToLower().Equals("create"))
{
// The InputParameters collection contains all the data passed in the message request
if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity)
{
// Obtain the target entity from the input parameters
Entity entity = (Entity)context.InputParameters["Target"];
// Target is an email
if (entity.LogicalName.ToLower().Equals("email"))
{
try
{
// Obtain the organization service reference that you'll need for web service calls
IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);
// Execute msdyn_ApplyRoutingRuleEntityRecord request
OrganizationRequest request = new OrganizationRequest("msdyn_ApplyRoutingRuleEntityRecord");
request["Target"] = new EntityReference("email", entity.Id);
service.Execute(request);
}
catch (Exception ex)
{
tracingService.Trace("SamplePlugin: {0}", ex.ToString());
throw;
}
}
}
}
}
}
}
参照
ルーティングの概要
レコードのルーティングの設定
レコードを手動でルーティングする
フローを使用してレコードを自動的にルーティングする