Je suis en train de travailler sur la façon d'utiliser le CrmService pour fermer une tâche dans MS CRM 4.0MS CRM 4.0 CrmService - Fermer une tâche
J'ai essayé d'utiliser le SetStateTaskRequest pour définir un état de la tâche et le statut à TaskState.Completed et 5. J'ai également essayé TaskState.Completed et -1, mais pas de dés là non plus.
De toute façon, je reçois seulement l'exception toujours "Serveur n'a pas pu traiter la demande" lors de la tentative CrmService.Execute.
Je peux créer et mettre à jour des tâches aussi librement que je le souhaite. Mais je n'arrive pas à les mettre au point. C'est frustrant. J'ai remarqué que je ne peux que définir l'état d'une tâche à terminer dans Sage CRM via l'action Fermer la tâche. Je me demandais s'il y a un appel CrmService distinct que je dois faire pour effectuer l'action Close Task, plutôt que de passer par la méthode CrmService.Execute.
Oh: Je me connecte au CrmService avec toutes les permissions. Donc, je ne vois pas que ce serait un problème d'autorisations sur l'élément de tâche.
Je ne peux pas penser à quoi d'autre pourrait causer ce problème. Tout conseil ou même juste un point dans la bonne direction serait très apprécié.
FIRST EDIT:
Merci à Grega g pour me faire vérifier le champ Détail de l'exception.
J'ai maintenant un message d'exception plus détaillé. Dans la forme XML:
<error>
<code>0x80040203</code>
<description>Invalid format of input XML for request SetStateTask: required field 'EntityId' is missing.</description>
<type>Platform</type>
</error>
Ce qui est bizarre - considèrent mon code (presque identique à greg g de:
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;
De plus, juste pour confirmer que j'ai le code d'état (et aussi de partager quelque chose que je ai trouvé très utile pour traiter avec MS CRM), voici le SQL que j'utilise pour déterminer les valeurs des statuts de l'entité.
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
Je peux confirmer à partir de l'interface Web MS CRM que la valeur d'état qui est aussi associé à une tâche Terminé est également nommé Terminé. Je peux confirmer à partir du SQL ci-dessus que la valeur de ce statut, pour une tâche, est 5 - c'est la valeur passée de mon Enum.
Je peux également confirmer que gTaskId est défini sur un Guid valide qui fait référence à une Tâche qui existe réellement et qui est ouvert au moment de la tentative de fermeture.
Curieux et plus curieux. Des pensées?
Tout d'abord, c'est presque * exactement * mon code. Mais je n'avais pas réalisé que je pouvais obtenir un message plus détaillé sur le champ Détails. Cependant, la nature de ce message est ... étrange, compte tenu du contexte. Je vais modifier mon post original avec les détails. –