0

MS CRM 4.0 で CrmService を使用してタスクを閉じる方法を考えています。

を使用しSetStateTaskRequestて、タスクの状態とステータスを TaskState.Completed と 5 に設定しようとしました。TaskState.Completed と -1 も試しましたが、ダイスもありませんでした。

いずれにせよ、私は CrmService.Execute の試行で、常に役立つ「サーバーが要求を処理できませんでした」という例外を受け取るだけです。

好きなだけタスクを自由に作成および更新できます。しかし、それらを完了に設定できないようです。イライラします。

CRM でタスクの状態を完了に設定するには、[タスクを閉じる] アクションを使用する必要があることに気付きました。CrmService.Execute メソッドを使用するのではなく、Close Task アクションを実行するために必要な別の CrmService 呼び出しがあるかどうか疑問に思っていました。

Oh: 完全な権限で CrmService にログインしています。したがって、それがタスク アイテムの権限の問題であるとは思えません。

他に何がこの問題を引き起こしているのか考えられません。アドバイスや正しい方向へのポイントだけでも大歓迎です。

最初の編集:

例外の Detail フィールドを確認させてくれたgrega g回答に感謝します。

より詳細な例外メッセージが表示されるようになりました。XML 形式:

<error>
    <code>0x80040203</code>
    <description>Invalid format of input XML for request SetStateTask: required field 'EntityId' is missing.</description>
    <type>Platform</type>
</error>

これは奇妙です-私のコードを考えてみてください(greg gのコードとほぼ同じです:

SetStateTaskRequest request = new SetStateTaskRequest();
request.EntityID = gTaskId;
request.TaskState = TaskState.Completed;

// ETaskStatusCode is an enumeration of the status codes taken from the StringMap in CRM.
//
// ETaskStatusCode.Completed = 5 - I can confirm this is the accurate status value for a Closed Task.
//
// Also, I have attempted this code with -1, which the documentation claims should cause the status
// to automatically be set to the default status for the supplied state. No change there.
request.TaskStatus = (int)ETaskStatusCode.Completed;            

SetStateTaskResponse response = CRMManager.CrmService.Execute(request) as SetStateTaskResponse;

また、正しいステータス コードを持っていることを確認するため (および、MS CRM を扱うときに非常に役立つとわかったものを共有するため)、エンティティ ステータスの値を決定するために使用する SQL を次に示します。

SELECT
    MSE.ObjectTypeCode,
    MSE.PhysicalName,
    SM.AttributeName,
    SM.Value,
    SM.AttributeValue
FROM MetadataSchema.Entity MSE
    INNER JOIN StringMap SM on MSE.ObjectTypeCode = SM.ObjectTypeCode
ORDER BY MSE.PhysicalName, SM.AttributeName, SM.AttributeValue  

MS CRM の Web インターフェイスから、完了したタスクに関連付けられているステータス値の名前も Completed になっていることを確認できます。上記の SQL から、Task のこのステータスの値が 5 であることを確認できます。これは Enum から渡された値です。

gTaskId が、実際に存在する Task を参照する有効な Guid に設定されており、閉じようとしたときに開いていることも確認できます。

好奇心旺盛で好奇心旺盛。何かご意見は?

4

3 に答える 3

1

SetStateTaskRequestクラスを使用します。

SetStateTaskRequest task2Close = new SetStateTaskRequest();
task2Close.EntityId = <taskGuid>
task2Close.TaskState = TaskState.Completed;
task2Close.TaskStatus = <some value>

try
{
    SetStateTaskResponse r = (SetStateTaskResponse) crmSvc.Execute(task2Close);
}
catch (SoapException e)
{
   //Use e.Details for more info than "server was unable ..."
}

このコードは機能するはずです (または、エラーが発生する理由を確認できます)。

于 2009-10-21T06:23:33.313 に答える
0

それを見つけた!

わかりました - 上記のコードとエラー メッセージをよく確認すると、私の CrmService にはプロパティ EntityID が含まれていましたが、例外はプロパティ EntityId が欠落していたことでした。

どういうわけか、CrmService の EntityId プロパティの名前が EntityID に変更されました。

プロパティの名前を変更すると、問題が修正されました。そもそもどうしてそうなったのか、いまだにわかりません。

安全のために、新しいサービス プロキシを再生成して、プロパティの名前が正しいことを確認します。

コードを調べると、誰かが「Id」を検索して置換し、それを「ID」に変えたようです。ちなみに、これは私の職場での主キーを表すプロパティ フィールドの命名規則です。

Detail プロパティに必要な追加情報があることを指摘してくれた grega g に再度感謝します。

于 2009-10-21T21:43:50.690 に答える
0

タスクを終了しようとしているときに、完了状態に有効なステータス値を渡していることは確かですか? 異なるステータス コードは、対応する状態コードでのみ有効です。ソース コードと状態エンティティのカスタマイズの一部を追加できますか?

于 2009-10-21T06:34:27.737 に答える