50以上のエンティティを含む大規模なカスタマイズをインポートするコードを作成しようとしました。マイクロソフトの記事「ImportXmlWithProgressMessage(CrmService)」をベースとして使用しましたが、期待した出力が得られませんでした。
次のコードの「job.data」は、元のparameterxmlデータから変更されていません。つまり、これはインポートが成功しなかったことを意味します。マイクロソフトのWebUIを使用して同じ圧縮されたimportexportxmlをインポートしましたが、正常に機能しました。そのため、インポートされた各エンティティの'result'属性でjob.dataが更新されないのはなぜか疑問に思います。
以下は私のインポート方法です。
private void ImportEntitySchema()
{
const string parameterXml = @"<importexportxml>
<entities>
{0}
</entities>
<nodes/>
<securityroles/>
<settings/>
<workflows/>
</importexportxml>";
var importRequest = new ImportCompressedXmlWithProgressRequest
{
ImportJobId = Guid.NewGuid(),
CompressedCustomizationXml = GetCompressedCustomizationXmlFromEmbeddedResource(),
ParameterXml = string.Format(parameterXml, string.Join("\n", _entitySchemaEntityNames.Select(item => string.Format("<entity>{0}</entity>", item)).ToArray()))
};
try
{
_crmService.Execute(importRequest);
}
catch (Exception e)
{
//Error resulted from import request
}
// Retrieve the results of the import.
XmlNode node;
do
{
Thread.Sleep(2000);
var job = (importjob)_crmService.Retrieve(EntityName.importjob.ToString(), importRequest.ImportJobId, new AllColumns());
var data = new XmlDocument();
data.LoadXml(job.data);
node = data.SelectSingleNode("importexportxml/entities/entity/@result");
} while (node == null);
//code below here never gets executed because the loop continues infinitely
}
私は探していましたが、使用されているImportXmlWithProgressのネット上で[有用な]例は見つかりませんでした。うまくいけば、誰かがそれを使用し、それを機能させる方法のアイデアを持っています。