2017-06-19 18 views
3

私は、提供されたターゲットソリューションに基づいてロールバックソリューションを作成しているユーティリティで作業しています。 現在、このユーティリティはうまく動作しており、ターゲットorgにデプロイされるソリューションを読み込み、エンティティ、Webリソース、SDKのステップ、セキュリティのロール、ワークフローなどのすべての必要なコンポーネントをターゲットorgに新しいロールバックソリューションを作成します。標的組織。 私はこれを達成するためにSDKのAddSolutionComponentRequestクラスを使用しました。ユーティリティは、それは単純にすべてのフィールドのようなすべてのメタデータで全体のエンティティを追加し、溶液中のエンティティを検出Dynamics CRMソリューションに特有のエンティティのサブコンポーネントを追加する

、ビュー、フォームなど

CRM 2016はソリューションセグメントの特徴を紹介し私たちができるような具体的には、変更されたエンティティコンポーネントを追加します。

ソリューションに特定のエンティティコンポーネントを追加できるAPIメソッドが見つからないため、この機能を私のユーティリティでどのように活用できますか。

答えて

0

CloneAsPatchRequestのように見えます。しかし、それは親ソリューションに依存しています。したがって、まず親ソリューションを展開してから、必要に応じて多数のパッチを展開する必要があります。タイプのエンティティのセグメント化されたソリューションコンポーネントの場合、これらの詳細here

+0

あなたの答えは、パッチのソリューションではなく、セグメント化されたソリューションに対応しています。 –

3

について

詳細情報はtrueに設定DoNotIncludeSubcomponentsオプションで溶液に添加する必要があります。次に、エンティティの特有の部分を1つずつソリューションに追加できます。

実体「アカウントは」唯一の属性「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); 
関連する問題