C# ImportXmlWithProgress未更新importjob的结果属性
我试图编写一些代码来导入包含50多个实体的大型定制。我使用微软的文章作为基础,但没有得到我期望的结果 以下代码中的“job.data”未从原始参数XML数据更改。因此,这对我来说意味着导入并不成功。我使用MicrosoftWebUI导入了相同的压缩importexportxml,效果很好。所以我想知道为什么我的job.data没有被更新为导入的每个实体的“result”属性 下面是我的导入方法C# ImportXmlWithProgress未更新importjob的结果属性,c#,xml,import,dynamics-crm,dynamics-crm-4,C#,Xml,Import,Dynamics Crm,Dynamics Crm 4,我试图编写一些代码来导入包含50多个实体的大型定制。我使用微软的文章作为基础,但没有得到我期望的结果 以下代码中的“job.data”未从原始参数XML数据更改。因此,这对我来说意味着导入并不成功。我使用MicrosoftWebUI导入了相同的压缩importexportxml,效果很好。所以我想知道为什么我的job.data没有被更新为导入的每个实体的“result”属性 下面是我的导入方法 private void ImportEntitySchema() { const strin
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
}
private void ImportEntitySchema()
{
常量字符串参数xml=@”
{0}
";
var importRequest=新的ImportCompressedXmlWithProgressRequest
{
ImportJobId=Guid.NewGuid(),
CompressedCustomizationXml=GetCompressedCustomizationXmlFromEmbeddedResource(),
ParameterXml=string.Format(ParameterXml,string.Join(“\n”,entitySchemaEntityNames.Select(item=>string.Format(“{0}”,item)).ToArray())
};
尝试
{
_crmService.Execute(importRequest);
}
捕获(例外e)
{
//导入请求导致错误
}
//检索导入的结果。
XmlNode节点;
做
{
《睡眠》(2000年);
var job=(importjob)\u crmService.Retrieve(EntityName.importjob.ToString()、importRequest.ImportJobId、new AllColumns());
var data=新的XmlDocument();
data.LoadXml(job.data);
node=data.SelectSingleNode(“importexportxml/entities/entity/@result”);
}while(node==null);
//下面的代码永远不会执行,因为循环会无限继续
}
我一直在寻找,但在使用ImportXmlWithProgress的网络上没有发现任何/许多[有用的]示例。希望有人使用过它,并且知道如何让它工作。我记得这条消息有问题,我只是不记得到底是什么问题。你的导入文件有多大?我们还编写了一个导入实用程序来导入我们的定制,我在
BackgroundWorker
线程上同步使用ImportCompressedAllXmlRequest
。对于大量定制,您可能必须查看:。为了避免这种情况,我们通常会将我们的定制划分为一系列小的导入
XPath是否应该是“importexportxml/entities/entity[@result]”?压缩的导入文件本身只有1.5兆。目前,我们使用CRM Web UI导入了大约10-20个实体。不是我们的理想,也不是最终的解决方案。XPath不是问题所在,因为在调试期间,我没有观察到“job.data”中的数据有任何更改。我也读过那篇文章,并尝试将其作为解决方案。使用ImportCompressedAllXmlRequest,是否有方法监视进度或失败?考虑到这种导入可能需要10-20分钟?如何知道是否已正确导入所有实体?ImportCompressedAllXmlRequest请求不提供任何进度,是全部还是全部。所有内容都在事务中,因此任何失败都会导致所有内容回滚。除此之外,我不知道该提出什么建议。我希望我熟悉的一件事能帮你。