创建一个实体,通过该实体创建数据,实现自动注册对应的step.
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StepRegister
{
public class ServiceFactory
{
/// <summary>
/// 获取Plugin Id
/// </summary>
/// <param name="adminService"></param>
/// <returns></returns>
public string GetPluginType(IOrganizationService adminService)
{
QueryExpression queryExpression = new QueryExpression()
{
EntityName = "plugintype",
ColumnSet = new ColumnSet("plugintypeid"),
NoLock = true,
Criteria =
{
Conditions =
{
new ConditionExpression("typename",ConditionOperator.Equal,"CreatorSetting.CreatorPost")
}
}
};
EntityCollection entityCollection = adminService.RetrieveMultiple(queryExpression);
string pluginTypesId = entityCollection.Entities[0].Id.ToString();
return pluginTypesId;
}
/// <summary>
/// 获取Message Id
/// </summary>
/// <param name="adminService"></param>
/// <returns></returns>
public string GetSDKMessageId(IOrganizationService adminService)
{
QueryExpression queryExpression = new QueryExpression()
{
EntityName = "sdkmessage",
ColumnSet = new ColumnSet("sdkmessageid"),
NoLock = true,
Criteria =
{
Conditions =
{
new ConditionExpression("name",ConditionOperator.Equal,"Create")
}
}
};
EntityCollection entityCollection = adminService.RetrieveMultiple(queryExpression);
string sdkMessageId = entityCollection.Entities[0].Id.ToString();
return sdkMessageId;
}
/// <summary>
/// 获取Primary Entity
/// </summary>
/// <param name="adminService"></param>
/// <param name="entName"></param>
/// <param name="sdkMessageId"></param>
/// <returns></returns>
public string Getsdkmessagefilterid(IOrganizationService adminService,string entName,string sdkMessageId)
{
QueryExpression query = new QueryExpression()
{
EntityName = "sdkmessagefilter",
ColumnSet = new ColumnSet(true),
NoLock = true,
Criteria =
{
Conditions =
{
new ConditionExpression("primaryobjecttypecode",ConditionOperator.Equal,entName),
new ConditionExpression("sdkmessageid",ConditionOperator.Equal,new Guid(sdkMessageId))
}
}
};
EntityCollection entityCollection = adminService.RetrieveMultiple(query);
string sdkMessageFilterId = entityCollection.Entities[0].Id.ToString();
return sdkMessageFilterId;
}
/// <summary>
/// 注册插件
/// </summary>
/// <param name="adminService"></param>
/// <param name="entityName"></param>
/// <param name="pluginTypesId"></param>
/// <param name="sdkmessageId"></param>
/// <param name="sdkMessageFilterId"></param>
public void CreateStep(IOrganizationService adminService,string entityName, string pluginTypesId,string sdkmessageId,string sdkMessageFilterId)
{
Entity entity = new Entity("sdkmessageprocessingstep");
entity.Attributes.Add("name", "CreatorSetting.CreatorPost: Create of " + entityName);
entity.Attributes.Add("description", "StepRegistrationPlugin.StepRegistrationPlugin: Create of " + entityName);
entity.Attributes.Add("sdkmessagefilterid", new EntityReference("sdkmessagefilter", new Guid(sdkMessageFilterId)));
entity.Attributes.Add("plugintypeid", new EntityReference("plugintype", new Guid(pluginTypesId)));
entity.Attributes.Add("eventhandler", new EntityReference("plugintype", new Guid(pluginTypesId)));
entity.Attributes.Add("componentstate", new OptionSetValue(0));
entity.Attributes.Add("sdkmessageid", new EntityReference("sdkmessage", new Guid(sdkmessageId)));
entity.Attributes.Add("asyncautodelete", false);
entity.Attributes.Add("mode", new OptionSetValue(0));
entity.Attributes.Add("stage", new OptionSetValue(40));
entity.Attributes.Add("rank", 1);
entity.Attributes.Add("supporteddeployment", new OptionSetValue(0));
adminService.Create(entity);
}
}
}
在部署后,若出现Assembly must be registered in isolation, 则需要用Sandbox部署方式。