CRM:让孩子们在没有孩子的情况下抛出异常

时间:2009-06-23 17:30:07

标签: dynamics-crm

我们正在使用MSCRM Dynamics,我们正试图让特定用户的所有孩子。 (用户有一个经理,经理有'孩子'。)以下工作,但如果用户没有孩子,则抛出异常。这似乎是合乎逻辑的,也许,但为什么不只是返回一个空集?最重要的是,它抛出了一个带有“无效参数”(这是错误的)的神秘消息的SoapException,而.Detail.InnerText说“0x80040203为ConditionOperator.In传递的值是空的平台”。如果你查看相应的Response类,它有一个集合 - 为什么不把它留空?

// Create the request object.
RetrieveAllChildUsersSystemUserRequest retrieve =
    new RetrieveAllChildUsersSystemUserRequest();

// Create the column set object that indicates the fields to be retrieved.
ColumnSet cols = new ColumnSet();
cols.EntityName = "systemuserid";

// Set the column set.
retrieve.ColumnSet = cols;

// Set the ID of the parent user.
retrieve.EntityId = context.UserId;

RetrieveAllChildUsersSystemUserResponse retrieved =
    new RetrieveAllChildUsersSystemUserResponse();

/// Execute the request.
/// Catches if user does not have children
/// (Check to see if user is manager)

try
{
    retrieved =
        (RetrieveAllChildUsersSystemUserResponse)crmService.Execute(retrieve);
}
catch (System.Web.Services.Protocols.SoapException e)
{
    throw new Exception(string.Format("{0}", e.Detail.InnerText));
}

1 个答案:

答案 0 :(得分:2)

我同意,它应该只返回一个空结果。我的猜测将在幕后,执行请求或准备响应的一些步骤被转换为QueryExpression。如果您使用使用ConditionExpression的{​​{1}}并将其传递给空列表,则QueryExpressions会爆炸。所以它可能就像它得到一个子系统用户指南列表,在某些情况下是一个空列表,然后尝试使用另一个ConditionOperator.In检索该列表中的系统用户的所有属性,这就是抛出异常。

您可以设计一个自己的QueryExpression或FetchXML,它会为您提供相同的结果,而不会在列表为空时抛出异常,或者只是捕获异常并检查该特定内容错误代码并吞下它。