2

Dynamics CRM2011SDKのマージの例を機能させようとしています。 http://msdn.microsoft.com/en-us/library/hh547408.aspx

少し変更しました。アカウントの代わりに2つの連絡先を作成しました(ただし、コード内の一部の変数名は別の方法を示唆している場合があります。たとえば、_account1Idは実際にはcontact1のGUIDです)。

最初の連絡先レコードには、名前、名前、電話のフィールドが入力されています。2番目の連絡先レコードには、名前、名前、および電子メールのフィールドが入力されています。

マージが発生する部分は以下のとおりです。元のコードは上部のリンクから見ることができます。

次の変更を加えて例を実行すると、電子メールアドレスが新しい連絡先レコードにマージされません。私が得たのは、住所データが追加されたが、電子メールがない、レコードの1つからの値との1つのマージされた連絡先です。これは、プライマリレコードの空のフィールドを2番目のレコードの空でないフィールドで埋めるはずだと思いました。

Ms Dynamics CRMを初めて使用するため、多くのグーグルとデバッグを行った後、理由を理解できませんでした。誰かが問題が何であるかについて私にいくつかのフィードバックを与えることができれば私はうれしいです。

前もって感謝します。

      _serviceProxy.EnableProxyTypes();
            CreateRequiredRecords(); // created two contacts with same name, surname. first record has telephone1 filled, second record has emailaddress filled.
            EntityReference target = new EntityReference();
            target.Id = _account1Id;
            target.LogicalName = Contact.EntityLogicalName;
            MergeRequest merge = new MergeRequest();
            merge.SubordinateId = _account2Id;
            merge.Target = target;
            merge.PerformParentingChecks = false;
            Contact updateContent = new Contact();
            updateContent.Address1_Line1 = "test";
            merge.UpdateContent = updateContent;
            MergeResponse merged = (MergeResponse)_serviceProxy.Execute(merge);
            Contact mergeeAccount =
                (Contact)_serviceProxy.Retrieve(Contact.EntityLogicalName,
                _account2Id, new ColumnSet(allColumns: true));
            if (mergeeAccount.Merged == true)
            {
                Contact mergedAccount =
                    (Contact)_serviceProxy.Retrieve(Contact.EntityLogicalName,
                    _account1Id, new ColumnSet(allColumns: true));
            }
4

1 に答える 1

6

その動作は予想通りです - Merge は子レコードを部下からマスターに移動します (そのため、商談、住所などの可能性があります) が、コピーしたいフィールドをワークアウトしようとはしません。推論 (私は推測します) は、潜在的なビジネス ロジックへの影響が無限にあるということです。電子メールをコピーしますか? すべての電子メール フィールドが入力されている場合はどうなりますか? カスタムフィールドはどうですか?他にも、誰もが思いつくケースがたくさんあります。

編集:

これを回避するために、MergeRequestクラスには というプロパティがありますUpdateContent。このプロパティのフィールドを更新すると、値が親レコードにマージされます。

あなたが投稿したリンクで実際にこれを見ることができます:

// Create another account to hold new data to merge into the entity.
// If you use the subordinate account object, its data will be merged.
Account updateContent = new Account();
updateContent.Address1_Line1 = "test";
于 2012-09-25T12:21:05.300 に答える