using System;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;
public class PluginDemo : IPlugin
{
string entityName = "new_model";
private IOrganizationService userService;
private IOrganizationService sysService;
private IPluginExecutionContext content;
public void Execute(IServiceProvider serviceProvider)
{
ITracingService trag = (ITracingService)serviceProvider.GetService(typeof(ITracingService));
//插件当前上下文
content = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
string pluginEntityName = content.PrimaryEntityName.ToLower();
string pluginActionName = content.MessageName.ToLower();
trag.Trace("pluginEntityName: {0},pluginActionName: {1}", pluginEntityName, pluginActionName);
if(!(pluginEntityName == entityName && (content.Stage == 20 || content.Stage == 40) &&
(pluginActionName == "create" || pluginActionName == "update" || pluginActionName == "delete")))
{
return;
}
try
{
IOrganizationServiceFactory factory =
(IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
//以当前用户的身份创建服务
userService = factory.CreateOrganizationService(content.UserId);
//以系统最高权限创建服务
sysService = factory.CreateOrganizationService(null);
if (pluginActionName == "create" && content.Stage == 40)
{
PostCreate();
}
else if (pluginActionName == "update" && content.Stage == 40)
{
PostUpdate();
}
else if (pluginActionName == "delete" && content.Stage == 20)
{
PreDelete();
}
}catch(Exception ex)
{
trag.Trace("Stage: {0}", content.Stage);
trag.Trace("StackTrace: {0}", ex.StackTrace);
trag.Trace("Name): {0}", ex.TargetSite.Name);
trag.Trace("Message: {0}", ex.Message);
throw ex;
}
}
/// <summary>
/// 创建
/// </summary>
private void PostCreate()
{
if(content.InputParameters.Contains("Target") && content.InputParameters["Target"] is Entity)
{
//当前实体
Entity entity = content.InputParameters["Target"] as Entity;
}
}
/// <summary>
/// 修改
/// </summary>
private void PostUpdate()
{
if (content.InputParameters.Contains("Target") && content.InputParameters["Target"] is Entity)
{
//当前实体
Entity entity = content.InputParameters["Target"] as Entity;
}
}
/// <summary>
/// 删除
/// </summary>
private void PreDelete()
{
if (content.InputParameters.Contains("Target") && content.InputParameters["Target"] is EntityReference)
{
//当前实体的引用
EntityReference entityEr = content.InputParameters["Target"] as EntityReference;
}
}
}