2009-06-23 16 views
0

私たちはMSCRM Dynamicsを使用しています。私たちは特定のユーザーのすべての子どもを取得しようとしています。 (ユーザーにはマネージャーがあり、マネージャーには 'children'があります。)以下は機能しますが、ユーザーに子がない場合は例外がスローされます。最初は論理的に思えるかもしれませんが、空のセットを返さないのはなぜですか?そして、すべての事の中で、 "Invalid Argument"(間違っている)の潜在的なメッセージでSoapExceptionをスローし、.Detail.InnerTextは "0x80040203 ConditionOperator.Inに渡された値が空のPlatform"と言います。対応するResponseクラスを見ると、そのクラスにはコレクションがあります。CRM:子どもが子どもに子どもを投げないようにする

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

答えて

2

私は同意すると、おそらく空の結果を返すべきです。私の推測はボンネットの下にあります。要求を実行するか応答を準備するいくつかのステップは、QueryExpressionに翻訳されています。 ConditionOperator.Inを使用するConditionExpressionを使用し、空のリストを渡すと、QueryExpressionsが爆発します。だから、場合によっては空のリストである子システムユーザのguidのリストを取得し、そのリスト内のシステムユーザのすべての属性を別のQueryExpressionを使用して取得しようとするようなものかもしれません。

QueryExpressionまたはFetchXMLを設計して、同じ結果を得ることができます。これは、リストが空のときに例外を投げたり、例外をキャッチして特定のエラーコードをチェックしたり、それを飲み込みます。

+0

私たちは現在、すべてのSoapExceptionsを飲み込んでいますが、私は本当に貧弱な解決策であると感じています。より良い解決策が見つからない場合、私はこのケースをよりよく分けることができるかどうかを調べるために式を掘り下げなければなりません。 – Thanatos

関連する問題