Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 有关CRM错误的更多详细信息:“;解决方案清单导入:失败“;_C#_Import_Dynamics Crm 2011_Crm - Fatal编程技术网

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

C# 有关CRM错误的更多详细信息:“;解决方案清单导入:失败“;,c#,import,dynamics-crm-2011,crm,C#,Import,Dynamics Crm 2011,Crm,我正在使用C#为CRM创建导入/导出工具。 有时,我会遇到导入错误,捕获中只有这条消息“解决方案清单导入:失败”。我试图将它转换为它的类型(FaultException),但没有更多细节 如果我直接在CRM中导入同一文件,我会收到一条更好的错误消息(例如:“导入解决方案xxxx失败。您的系统中缺少以下组件[…]”) 有没有办法得到这个完整的信息 这是我的密码: try { _serviceProxy.Execute(impSolReq); } catch (Exception ex) {

我正在使用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);
}
试试看
{
_serviceProxy.Execute(impSolReq);
}
捕获(例外情况除外)
{
if(ex是FaultException)
Show(“导入期间出错。更多详细信息:”+((FaultException)ex).Detail);
其他的
MessageBox.Show(“导入期间出错。更多详细信息:“+ex.Message”);
}

谢谢你的回答

使用导入解决方案请求导入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;
}
试试看
{
_执行(请求);
}
捕获(FaultException-ex)
{
if(ex.Detail.ErrorCode=-2147188685)//导入解决方案错误
{
实体作业=_service.Retrieve(“importjob”,importJobId,new ColumnSet{AllColumns=true});
//TODO:处理作业错误详细信息。
}
投掷;
}
属性
importjob.data
包含一个XML文档,其中包含您要查找的详细信息


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

CRM 2011解决方案只能同步导入,从CRM 2013开始,也可以异步导入。你的代码是同步的,没错。我从去年为CRM 2011创建的工具中获得了这段代码。最后,
ImportSolutionRequest
超时,但是可以忽略此异常,并且仍然可以通过定期检索导入作业来监视进度。我会更新我的答案。谢谢你的回答!我已经使用了jobId来显示进度条,但是我没有注意包含更好错误消息的xml数据。