有关CRM错误的更多详细信息:"解决方案清单导入:失败"

car*_*ier 2 c# import crm dynamics-crm-2011

我正在使用C#为CRM创建导入/导出工具.有时,我遇到导入错误,只有此消息"解决方案清单导入:失败"在我的捕获中.我试图将它转换为它的类型(FaultException),但我没有更多的细节.

如果我直接在CRM中导入相同的文件,我会有一个更好的错误消息(例如,这个例子:"解决方案xxxx的导入失败.你的系统中缺少以下组件[...]").

有没有办法得到这个完整的信息?

这是我的代码:

try
{
    _serviceProxy.Execute(impSolReq);
}
catch (Exception ex)
{
    if (ex is FaultException<OrganizationServiceFault>)
        MessageBox.Show("Error during import. More details: " + ((FaultException<OrganizationServiceFault>)ex).Detail);
    else
        MessageBox.Show("Error during import. More details: " + ex.Message);
}
Run Code Online (Sandbox Code Playgroud)

谢谢你的回答!

Hen*_*jen 5

使用动态CRM解决方案导入ImportSolutionRequest.

ImportSolutionRequest具有包含解决方案导入作业的ID属性.您需要此ID才能监视作业的进度并在导入失败时获取错误详细信息.

请求的实例化可能如下所示:

Guid importJobId = Guid.NewGuid();

var request = new ImportSolutionRequest
{
    ConvertToManaged = true,
    CustomizationFile = buffer, // a byte[] array holding the solution contents
    ImportJobId = importJobId,
    OverwriteUnmanagedCustomizations = true,
    PublishWorkflows = true,
    SkipProductUpdateDependencies = false
};
Run Code Online (Sandbox Code Playgroud)

执行请求.发生导入错误时,您可以使用作业ID检索错误详细信息.

try
{
    _service.Execute(request);
}
catch (FaultException<OrganizationServiceFault> ex)
{
    if (ex.Detail.ErrorCode == -2147188685) // ImportSolutionError
    {
        Entity job = _service.Retrieve("importjob", importJobId, new ColumnSet { AllColumns = true });
        // TODO: process job error details.
    }

    throw;
}
Run Code Online (Sandbox Code Playgroud)

属性importjob.data包含一个XML文档,其中包含您要查找的详细信息.

ImportSolutionRequest是同步执行的,很容易超时.但是可以安全地忽略超时,因为导入过程继续在后台运行.您可以通过定期检索导入作业记录来跟踪进度.只要属性importjob.completedonnull,作业仍在运行.