More details about CRM error : "Solution manifest import: FAILURE"

More details about CRM error : "Solution manifest import: FAILURE"

我正在使用 C# 创建 CRM 的导入/导出工具。 有时,我会遇到一个导入错误,我的 catch 中只有这条消息 "Solution manifest import: FAILURE"。我试图将其转换为它的类型 (FaultException),但我没有更多详细信息。

如果我直接在 CRM 中导入相同的文件,我会收到更好的错误消息(例如:"Import of solution xxxx failed. The following components are missing in yout system [...]")。

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

这是我的代码:

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);
}

感谢您的回答!

使用 ImportSolutionRequest.

导入 Dynamics CRM 解决方案

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
};

执行请求。当发生导入错误时,您可以使用作业 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;
}

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

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