编程语言
首页 > 编程语言> > c#-将独特的实体子组件添加到Dynamics CRM解决方案

c#-将独特的实体子组件添加到Dynamics CRM解决方案

作者:互联网

我正在使用一个实用程序,在该实用程序中,我将根据提供的目标解决方案创建回滚解决方案.
到目前为止,该实用程序运行良好,并且读取了要在目标组织上部署的解决方案,并在目标组织上创建了一个新的回滚解决方案,其中包含来自目标的所有必需组件,例如实体,Web资源,SDK步骤,安全角色,工作流等. org.
我已经使用SDK的AddSolutionComponentRequest类来实现此目的.

当该实用程序在解决方案中检测到一个实体时,它只是将整个实体与所有元数据(例如所有字段,视图,表单等)一起添加.

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

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

解决方法:

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

一个示例,其中仅将属性“ accountnumber”添加到解决方案“ Test”中的实体“ account”:

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);

标签:dynamics-crm-2016,dynamics-crm,dynamics-crm-365,c
来源: https://codeday.me/bug/20191111/2018573.html