Dynamics CRM 4.0 では、特定の書式のCSVインポートファイルをインポートすると、既存のレコードを更新する更新インポートを実施できます。本サイトでも256.aspxで取り上げました。非サポートの更新インポートを使用すると、Lookup属性は更新されません。ただし、Update Rollup 10 以降を適用していると、Lookup 属性も更新インポート時に更新できるようになります。ただし、クリア(NULL)にすることはできないみたいです。詳細は下記KBを参照してください。

 - The lookup fields are not updated when you run the Microsoft Dynamics CRM SDK import process to update Microsoft Dynamics CRM 4.0
http://support.microsoft.com/kb/981837/en-us

 動作の確認は Update Rollup 10 が適用された Dynamics CRM 4.0 で実施しました。KBによると、修正はUpdate Rollup 10 以降で有効になるようです。

1. レジストリの修正

Dynamics CRM 4.0 のインストールされたサーバの次のサブキーに AllowLookupUpdateDuringImport というDWORD型のレジストリエントリを作成します。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSCRM\

AllowLookupUpdateDuringImport に1を設定して、保存します。

iisreset を実行してDynamics CRMを再起動します。

2. 動作確認

Account (取引先企業) レコードにRe-Import(更新インポート) を行い、動作を確認してみます。下図が更新対象の Account レコードです。高度な検索で検索した結果をExcelエクスポートし、 Parent Account を更新してみます。下図の赤枠で囲まれたExcel Export ボタンをクリックします。

Excel エクスポートダイアログが表示されるので、 Static worksheet with records from this page (日本語で静的なんちゃら)を選択して、Export ボタンをクリックします。

エクスポートしたxlsファイルを画面で表示すると下図のようになります。A列が隠されているので、表示します。

隠しA列を表示すると、エクスポートした、各取引先企業のレコードのGUIDが設定されています。ヘッダセルに、コメントがさらりと設定されています。(こんなのあったっけ?)。Re-Import する場合は、この列を削除するなと記載されています。

セルをメモ帳にコピーして、タブをカンマに置き換えます。Account Name 列は削除します(この列があると、Parent Accountの値を更新インポートで更新しようとすると、重複した参照先が見つかったといわれてインポートエラーが発生するため削除しました)。Parent Account 列に、Account の主属性(Account Name) の値を設定します。また、更新インポートでLookup属性がクリアされないことを確認するために、Lookupが設定済みのレコードのParent Account の値をブランクにしています。

ファイルをUTF-8形式で保存します。

あとはデータインポートウィザードを起動し、保存したファイルを指定します。

インポートウィザードの次画面では下図のように、Enable data by updating existing records ... という項目にチェックがあることを確認します。Record Type は 取引先企業(Account), 列は自動マッピングされます。既定値でインポートウィザードを進めます。

インポートが成功したことを確認して、レコードを確認すると、Parent Account (Lookup 属性) が設定されていることが確認できます。ブランクにしたLookup属性はクリアされていないことも確認できます。

3. まとめ

説明は以上です。Update Rollup 10 以上を適用した状態で、AllowLookupUpdateDuringImport レジストリエントリを設定すると、更新インポート時にLookup属性が更新できるようになります。NULL値に更新もできればうれしいのですがそれはできないみたいです。情報があれば教えて下さい。