0

MSCRM Dynamicsを使用しており、特定のユーザーのすべての子を取得しようとしています。(ユーザーにはマネージャーがあり、マネージャーには「子」があります。)以下は機能しますが、ユーザーに子がない場合は例外をスローします。これは最初は論理的に思えるかもしれませんが、空のセットを返すだけではどうでしょうか。そして何よりも、「無効な引数」(これは間違っています)の不可解なメッセージを含むSoapExceptionをスローし、.Detail.InnerTextは「0x80040203ConditionOperator.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));
}
4

1 に答える 1

2

同意します。おそらく空の結果が返されるはずです。私の推測では、要求を実行するか、応答を準備するいくつかのステップが に変換されますQueryExpressionConditionExpression使用する aを使用しConditionOperator.In、それに空のリストを渡すと、QueryExpressions が爆発します。そのため、子システム ユーザー GUID のリストを取得し、場合によっては空のリストを取得し、別のリストを使用してそのリスト内のシステム ユーザーのすべての属性を取得しようとするとQueryExpression、例外がスローされます。

QueryExpressionおそらく、リストが空のときに例外をスローするという副作用なしに同じ結果を得る独自の または FetchXML を設計するか、単に例外をキャッチしてその特定のエラー コードをチェックして飲み込むことができます。

于 2009-06-23T18:59:54.880 に答える