2017-09-30 5 views
0

価格承認製品でチケット番号検索フィールドを作成または更新する必要があります。このチケット番号(参照フィールド)は、価格設定承認チケットという別のエンティティのチケット(テキストフィールド)にリンクされています。MS Dynamics CRMにチケット番号(検索フィールド)を挿入する方法ssisのスクリプトコンポーネントを使用して承認製品(カスタムエンティティ)を挿入する方法

これはスクリプトコンポーネントのコードです。

public override void Input0_ProcessInputRow(Input0Buffer Row) 
{ 

    Entity ApprovalProductEnt = new Entity("new_ticketproduct"); 
    ColumnSet columns = new ColumnSet(true); 
    columns = new ColumnSet(new String[] { "new_ticket", 
     "new_productgroup", 
     "new_producttype", 
     "new_productitem" }); 

    Guid TicketNumberId = new Guid(); 
    TicketNumberId = getTicketNumber(Row.OppportunityID, ref organizationservice); 

    //update 
    if (TicketNumberId != Guid.Empty) 
    { 
     ApprovalProductEnt["new_ticket"] = new EntityReference("new_pricingapprovalticket", TicketNumberId); 
    } 
    else 
    //create 
    if (TicketNumberId != Guid.Empty) 
    { 
     ApprovalProductEnt["new_ticket"] = new EntityReference("new_pricingapprovalticket", TicketNumberId); 
    } 
} 

public Guid getTicketNumber(string ticketnumber, ref IOrganizationService service) 
{ 
    Guid TicketNumberGuid = Guid.Empty; 
    QueryExpression TicketNumberQuery = new QueryExpression { EntityName = "new_pricingapprovalticket", ColumnSet = new ColumnSet(true) }; 
    TicketNumberQuery.Criteria.AddCondition("new_ticketnumber", ConditionOperator.Equal, ticketnumber); 
    EntityCollection TicketNumberQueryRetrieve = service.RetrieveMultiple(TicketNumberQuery); 

    for (var i = 0; i <TicketNumberQueryRetrieve.Entities.Count; i++) 
    { 
     TicketNumberGuid = TicketNumberQueryRetrieve.Entities[0].GetAttributeValue<Guid>("new_ticket"); 
    } 

    return TicketNumberGuid; 
} 

SSISパッケージを起動すると、エラーなしで実行されます。しかし何らかの形でデータが挿入されていません。

enter image description here

私は、通常のテキストフィールドを作成するには何の問題もありません。しかし、検索フィールドに来るとき、インターネットソリューションは私のコードとしてEntityReferenceを使用することを提案しますが、何が間違っているのか分かりません。だから私はここで少し失われている。

+0

コードにService.CreateまたはService.Updateが表示されませんでした。また、作成/更新ブロックにも違いはありません。 –

答えて

0

ルックアップは、関連エンティティの関係列(外部キー)です。キーをマップするために使用可能なマスタレコードがあるかどうか、またはマップするレコードタイプを作成する必要があります。

エンティティレコードの作成中に最初のメソッドでColumnSetは必要ありません。しかし、ソースファイル/テーブル行から列をマップする必要があります。 ColumnSetは、データセットの取得中に2番目のメソッドと同様に便利です。

ループは第2の方法では不要です。

あなたのスニペットに欠けている部分を入れておけば分かりますが、これは即興で行うことができます。

public override void Input0_ProcessInputRow(Input0Buffer Row) 
{ 
    Entity ApprovalProductEnt = new Entity("new_ticketproduct"); 

    ApprovalProductEnt["new_productgroup"] = Row.ProductGroup; 
    ApprovalProductEnt["new_producttype"] = Row.ProductType; 
    ApprovalProductEnt["new_productitem"] = Row.ProductItem; 

    Guid TicketNumberId = new Guid(); 
    TicketNumberId = getTicketNumber(Row.OppportunityID, ref organizationservice); 

    //update 
    if (TicketNumberId != Guid.Empty) 
    { 
     ApprovalProductEnt["new_ticket"] = new EntityReference("new_pricingapprovalticket", TicketNumberId); 
    } 
    else 
    //create 
    { 
     Entity TicketEnt = new Entity("new_pricingapprovalticket"); 
     TicketEnt["new_name"] = Row.OppportunityID; 
     TicketNumberId = organizationservice.Create(TicketEnt); 

     ApprovalProductEnt["new_ticket"] = new EntityReference("new_pricingapprovalticket", TicketNumberId); 
    } 

    organizationservice.Create(ApprovalProductEnt); 
} 


public Guid getTicketNumber(string ticketnumber, ref IOrganizationService service) 
{ 
    Guid TicketNumberGuid = Guid.Empty; 
    QueryExpression TicketNumberQuery = new QueryExpression { EntityName = "new_pricingapprovalticket", ColumnSet = new ColumnSet(true) }; 
    TicketNumberQuery.Criteria.AddCondition("new_ticketnumber", ConditionOperator.Equal, ticketnumber); 
    EntityCollection TicketNumberQueryRetrieve = service.RetrieveMultiple(TicketNumberQuery); 

if (TicketNumberQueryRetrieve.Entities.Count > 0) 
    TicketNumberGuid = TicketNumberQueryRetrieve.Entities[0].GetAttributeValue<Guid>("new_ticket"); 

return TicketNumberGuid; 
} 
+0

ええ、ちょうど私は、私のコードに 'Service.CreateまたはService.Update'を含めていません。 Ticket Entityのチケットフィールドの正確な名前に 'new_name'を変更しました。その答えはArunに感謝します。 – xChaax

+0

こんにちは@Arun Vinoth。上記のコードはまだCRMにチケット番号が存在していても新しいレコードを作成しています。 – xChaax

+0

new_ticketproductは常に作成されます。 new_pricingapprovalticketが参照されます(既存のGUIDの作成またはフェッチ)。あなたはどちらを参照していますか? –

関連する問題