我正在尝试研究如何使用 CrmService 关闭 MS CRM 4.0 中的任务
我尝试使用 将SetStateTaskRequest
任务的状态和状态设置为 TaskState.Completed 和 5。我也尝试了 TaskState.Completed 和 -1,但也没有骰子。
无论哪种方式,我只在 CrmService.Execute 尝试中收到有用的“服务器无法处理请求”异常。
我可以随心所欲地创建和更新任务。但我似乎无法将它们设置为已完成。这令人沮丧。
我注意到我只能通过关闭任务操作在 CRM 中将任务的状态设置为已完成。我想知道是否需要进行单独的 CrmService 调用来执行关闭任务操作,而不是通过 CrmService.Execute 方法。
哦:我正在以完全权限登录 CrmService。所以我看不出这将是任务项的权限问题。
我想不出还有什么可能导致这个问题。非常感谢任何建议,甚至只是正确方向的一点。
第一次编辑:
我现在有更详细的异常消息。在 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 界面确认与已完成任务关联的状态值也称为已完成。我可以从上面的 SQL 中确认,对于 Task,此状态的值为 5 - 这是从我的 Enum 传入的值。
我还可以确认 gTaskId 被设置为一个有效的 Guid,该 Guid 引用了一个实际存在的任务,并且在尝试关闭时处于打开状态。
越来越好奇。有什么想法吗?