将独特的实体子组件添加到 Dynamics CRM 解决方案
Add distinctive entity sub components to a Dynamics CRM solution
我正在开发一个实用程序,我在其中根据提供的目标解决方案创建回滚解决方案。
到目前为止,该实用程序运行良好,它读取要部署在目标组织上的解决方案,并在目标组织上创建一个新的回滚解决方案,其中包含所有必要的组件,如来自目标的实体、网络资源、SDK 步骤、安全角色、工作流等组织。
我已经使用 SDK 的 AddSolutionComponentRequest
class 来实现这一点。
当实用程序在解决方案中检测到一个实体时,它只是将整个实体与所有字段、视图、表单等所有元数据一起添加。
CRM 2016引入了解决方案细分的功能,通过它我们可以专门添加那些已经改变的实体组件。
如何在我的实用程序中利用此功能,因为我还没有找到任何 API 方法允许我将特定实体组件添加到解决方案。
看起来 CloneAsPatchRequest 是正确的选择。但它依赖于父解决方案。因此,您可能需要先部署父解决方案,然后根据需要部署尽可能多的补丁。
关于这些细节的更多信息here
对于实体类型的分段解决方案组件,必须将 DoNotIncludeSubcomponents
选项设置为 true
添加到解决方案中。然后,可以将实体的不同部分一一添加到解决方案中。
一个示例,其中实体 "account" 添加到解决方案 "Test" 只有属性 "accountnumber":
private static EntityMetadata RetrieveEntity(string entityName, IOrganizationService service)
{
var request = new RetrieveEntityRequest
{
LogicalName = entityName,
EntityFilters = EntityFilters.All
};
return ((RetrieveEntityResponse)service.Execute(request)).EntityMetadata;
}
private static void AddEntityComponent(Guid componentId, int componentType, string solutionName, IOrganizationService service)
{
var request = new AddSolutionComponentRequest
{
AddRequiredComponents = false,
ComponentId = componentId,
ComponentType = componentType,
DoNotIncludeSubcomponents = true,
SolutionUniqueName = solutionName
};
service.Execute(request);
}
IOrganizationService service = factory.CreateOrganizationService(null);
EntityMetadata entity = RetrieveEntity("account", service);
AddEntityComponent(entity.MetadataId.Value, 1, "Test", service);
AddEntityComponent(entity.Attributes.First(a => a.LogicalName == "accountnumber").MetadataId.Value, 2, "Test", service);
我正在开发一个实用程序,我在其中根据提供的目标解决方案创建回滚解决方案。
到目前为止,该实用程序运行良好,它读取要部署在目标组织上的解决方案,并在目标组织上创建一个新的回滚解决方案,其中包含所有必要的组件,如来自目标的实体、网络资源、SDK 步骤、安全角色、工作流等组织。
我已经使用 SDK 的 AddSolutionComponentRequest
class 来实现这一点。
当实用程序在解决方案中检测到一个实体时,它只是将整个实体与所有字段、视图、表单等所有元数据一起添加。
CRM 2016引入了解决方案细分的功能,通过它我们可以专门添加那些已经改变的实体组件。
如何在我的实用程序中利用此功能,因为我还没有找到任何 API 方法允许我将特定实体组件添加到解决方案。
看起来 CloneAsPatchRequest 是正确的选择。但它依赖于父解决方案。因此,您可能需要先部署父解决方案,然后根据需要部署尽可能多的补丁。
关于这些细节的更多信息here
对于实体类型的分段解决方案组件,必须将 DoNotIncludeSubcomponents
选项设置为 true
添加到解决方案中。然后,可以将实体的不同部分一一添加到解决方案中。
一个示例,其中实体 "account" 添加到解决方案 "Test" 只有属性 "accountnumber":
private static EntityMetadata RetrieveEntity(string entityName, IOrganizationService service)
{
var request = new RetrieveEntityRequest
{
LogicalName = entityName,
EntityFilters = EntityFilters.All
};
return ((RetrieveEntityResponse)service.Execute(request)).EntityMetadata;
}
private static void AddEntityComponent(Guid componentId, int componentType, string solutionName, IOrganizationService service)
{
var request = new AddSolutionComponentRequest
{
AddRequiredComponents = false,
ComponentId = componentId,
ComponentType = componentType,
DoNotIncludeSubcomponents = true,
SolutionUniqueName = solutionName
};
service.Execute(request);
}
IOrganizationService service = factory.CreateOrganizationService(null);
EntityMetadata entity = RetrieveEntity("account", service);
AddEntityComponent(entity.MetadataId.Value, 1, "Test", service);
AddEntityComponent(entity.Attributes.First(a => a.LogicalName == "accountnumber").MetadataId.Value, 2, "Test", service);