3

我正在开发一个实用程序,在该实用程序中,我根据提供的目标解决方案创建回滚解决方案。截至目前,该实用程序运行良好,它读取要部署在目标组织上的解决方案,并在目标组织上创建一个新的回滚解决方案,其中包含来自目标的所有必要组件,例如实体、Web 资源、SDK 步骤、安全角色、工作流等组织。我已经使用 SDK 的AddSolutionComponentRequest类来实现这一点。

当实用程序在解决方案中检测到实体时,它只需添加整个实体以及所有元数据,如所有字段、视图、表单等。

CRM 2016 引入了解决方案细分的功能,通过它我们可以专门添加那些已更改的实体组件。

我如何在我的实用程序中利用此功能,因为我还没有找到任何允许我将特定实体组件添加到解决方案的 API 方法。

4

2 回答 2

4

对于实体类型的分段解决方案组件,必须将DoNotIncludeSubcomponents选项设置为true. 然后,可以将实体的独特部分一一添加到解决方案中。

将实体“帐户”添加到解决方案“测试”的示例,其中只有属性“帐户编号”:

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);
于 2017-06-19T09:18:33.803 回答
0

看起来CloneAsPatchRequest是要走的路。但它依赖于父解决方案。因此,您可能需要先部署父解决方案,然后根据需要部署尽可能多的补丁。

更多关于这些细节的信息在这里

于 2017-06-19T07:47:05.847 回答