21.02.2012, 15:49 | #1 |
Участник
|
Update Task не приходит поле StateCode
Как правильно проверить что задача была закрыта.
Я сделал plugin на Update Task. При срабатывании я проверяю статус задачи. Если статус есть - значит произошло событие смены статуса, проверяю на какой статус изменили. Если на 1 - значит задачу выполнили и я пускаю обработку события дальше. Дело в том что это стабильно работало в нескольких плагинах, но в очередном перестало. Мне приходит сообщение что атрибута статус в плагин не пришло. Как это может быть если я завершаю задачу? Или как по другому можно отследить выполнение задачи? X++: // Obtain the target entity from the input parmameters. Entity task = (Entity)context.InputParameters["Target"]; // Verify that the target entity represents an account. // If not, this plug-in was not registered correctly. if (task.LogicalName != "task") { ToTrace("В контексте пришла не сущность \"Задача\"."); return; } if (!task.Contains("statecode")) { ToTrace("Нет информации о статусе исполнения задачи. Выполение плагина завершено."); return; } ToTrace("LN:{0};G:{1}", task.LogicalName, task.Id); ToTrace("Проверяем состояние задачи. {0}", (task["statecode"] as OptionSetValue).Value.ToString()); if ((task["statecode"] as OptionSetValue).Value != 1) { ToTrace("Состояние задачи не требует дальнейших действий. Выполнение плагина завершено."); return; } |
|
21.02.2012, 17:45 | #2 |
Участник
|
Надо вешать плагин на сообщение SetState и SetStateDynamicEntity. Они как раз отвечают за смену статуса.
|
|
22.02.2012, 11:31 | #3 |
Участник
|
SetState не срабатывает, проверял.
Вопрос от чего зависит сработает Update или нужно использовать SetState. Если бы стабильно при изменении статуса задачи срабатывал бы только SetState - это одно, но тут какая-то зависимость то должна быть, хотелось бы её понять. P.S> SetStateDynamicEntity честно говоря до этого не пробовал. Сейчас проверил вроде как он вызывается, но вопрос что он получает на входе. Как я понял в Target приходит уже не сущность с которой произошло действие. А Google дает в основном ссылки на 4.0, я так понял в 2011 что-то изменилось. |
|
22.02.2012, 11:31 | #4 |
Участник
|
SetState не срабатывает, проверял.
Вопрос от чего зависит сработает Update или нужно использовать SetState. Если бы стабильно при изменении статуса задачи срабатывал бы только SetState - это одно, но тут какая-то зависимость то должна быть, хотелось бы её понять. P.S> SetStateDynamicEntity честно говоря до этого не пробовал. Сейчас проверил вроде как он вызывается, но вопрос что он получает на входе. Как я понял в Target приходит уже не сущность с которой произошло действие. А Google дает в основном ссылки на 4.0, я так понял в 2011 что-то изменилось. |
|
22.02.2012, 11:38 | #5 |
Участник
|
Надо вешать сразу на два сообщения - SetState и SetStateDynamicEntity.
Update - это изменение полей, хотя вроде есть случай, когда меняется только statuscode на форме, то может выскочит это сообщение. А в случае SetState и SetStateDynamicEntity в target приходит Moniker, как и было в 4.0. |
|
22.02.2012, 11:46 | #6 |
Участник
|
Цитата:
Сообщение от griefon
Надо вешать сразу на два сообщения - SetState и SetStateDynamicEntity.
Update - это изменение полей, хотя вроде есть случай, когда меняется только statuscode на форме, то может выскочит это сообщение. А в случае SetState и SetStateDynamicEntity в target приходит Moniker, как и было в 4.0. EntityMoniker : Microsoft.Xrm.Sdk.EntityReference State : Microsoft.Xrm.Sdk.OptionSetValue Status : Microsoft.Xrm.Sdk.OptionSetValue В 4.0 приходил EntityMoniker как Entity, а не как EntityReference, или я ошибаюсь? Почему нужно использовать одновременно SetState и SetStateDynamicEntity - они взаимоисключающие? По какому признаку? Я сейчас экспериментирую с этим и суть то понял, но не понял причин. |
|
|
За это сообщение автора поблагодарили: mistah (1). |
24.02.2012, 14:15 | #7 |
Участник
|
Цитата:
Где-то вычитал, что надо вешать на оба сразу. На практике это заработало, поэтому причинами не интересовался. |
|
|
|