2017-11-27 6 views
0

Dynamics CRM開発を初めて使用しています。 Dynamics CRM Onlineのバッチ更新メソッドを使用して、Entityの特定のフィールドをバッチ更新したい。私は、バッチ更新を実行するためのコードの下に使用しています :Dynamics CRM SDK:エンティティ内の特定のフィールドを一括更新する

var multipleRequest = new ExecuteMultipleRequest() 
{ 
    Settings = new ExecuteMultipleSettings() 
    { 
     ContinueOnError = false, 
     ReturnResponses = true 
    }, 
    Requests = new OrganizationRequestCollection() 
}; 

foreach (var entity in entities.Entities) 
{ 
    UpdateRequest updateRequest = new UpdateRequest { Target = entity }; 
    multipleRequest.Requests.Add(updateRequest); 
} 

ExecuteMultipleResponse multipleResponse = (ExecuteMultipleResponse)service.Execute(multipleRequest); 

は、どのように私は私が代わりに更新されているエンティティ全体で更新したいフィールドのみを指定することができますか?

注:上記のコードを使用して更新するために、約200,000レコードがあります。現在、1000レコードの単一バッチを更新するのに約1.5分かかります。必要なフィールドだけを更新する方法を考えていました。

答えて

0

EntityCollection entitiesがどのように満たされているかを調べる必要があります。 RetrieveMultipleを使用して取得する場合、最小フィールドをプルするとネイティブの名前フィールド& PK Idフィールドがデフォルトで表示されます。この方法では、エンティティ全体が更新されるわけではありません。

AllColumns = trueを避けてください。 ColumnSetを使用して、検証に必要な最小限のフィールドを取得します。

ColumnSet = new ColumnSet("field_needed"), 

次に、ループの内側に以下のような必要なフィールドのみを割り当てます。

foreach (var entity in entities.Entities) 
    { 
     UpdateRequest updateRequest = new UpdateRequest { Target = entity }; 

     entity.Attributes[“field_to_update”] = “field_value”; 

     multipleRequest.Requests.Add(updateRequest); 
    } 

私の答えは、あなたがそれを修正&を間違っていたかを理解するのに役立ちます。 Nicknow氏によると、問題を解決するために新しいエンティティを割り当てることができます。

5

私は、更新のためにnew Entity()オブジェクトを作成することをお勧めします。このようにして、更新コードは検索されたフィールドについて心配する必要はなく、更新を気にするものだけを取ります。

foreach (var entity in entities.Entities) 
{ 
    var newEntity = new Entity(entity.LogicalName, entity.Id); 

    //Populate whatever fields you want (this is just an example) 
    newEntity["new_somefield"] = entity.GetAttributeValue<string>("new_somefield").ToUpper(); 

    UpdateRequest updateRequest = new UpdateRequest { Target = newEntity }; 
    multipleRequest.Requests.Add(updateRequest); 
} 
関連する問題