我正在开发一个实用工具,我正在根据提供的目标解决方案创建回滚解决方案。
截至目前,该实用程序工作正常,它读取要部署在目标组织上的解决方案,并在目标组织上创建一个新的回滚解决方案,其中包含来自目标的实体,Web资源,SDK步骤,安全角色,工作流等所有必需组件有机
我使用SDK的AddSolutionComponentRequest
类来实现这一目标。
当实用程序在解决方案中检测到实体时,它只是添加整个实体以及所有元数据,如所有字段,视图,表单等。
CRM 2016引入了解决方案细分的功能,通过它我们可以专门添加已更改的实体组件。
如何在我的实用程序中利用此功能,因为我还没有找到允许我向解决方案添加特定实体组件的任何API方法。
答案 0 :(得分:3)
对于分段解决方案,必须将实体类型的组件添加到解决方案中,并将DoNotIncludeSubcomponents
选项设置为true
。然后,可以将实体的独特部分逐一添加到解决方案中。
将实体“帐户”添加到解决方案“测试”但仅包含属性“accountnumber”的示例:
private static EntityMetadata RetrieveEntity(string entityName, IOrganizationService service)
{
var request = new RetrieveEntityRequest
{
LogicalName = entityName,
EntityFilters = EntityFilters.All,
RetrieveAsIfPublished = true
};
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);
答案 1 :(得分:0)
看起来CloneAsPatchRequest是可行的方法。但它依赖于父解决方案。因此,您可能需要先部署父解决方案,然后根据需要部署尽可能多的补丁。
有关这些详细信息的更多信息here