|
24.05.2008, 15:14 | #1 |
Злыдни
|
Привет, ребята, извиняюсь за задержку.
Вообщем, бизнес-процесс CRM является наследником SequentialWorkflowActivity, а эта штука поддерживает только последовательное выполнение всех своих шагов. Вообще говоря, в SequentialWorkflowActivity произвольные переходы не нужны, потому что для управления последовательностью выполнения активностей можно использовать IfElseActivity, ConditionedActivityGroup, WhileActivity и т.п. С помошью этих конструкций вполне можно решать большинство задач "пропускания" этапов, например можно сделать на форме галочку "клиент не хочет презентаций" и пропустить все действия, связанные с презентациями. Построение произвольного алгоритма с помошью SequentialWorkflowActivity не всегда удобно. Например, получение заказа от клиента практически всегда свидетельствует о проваливании сделки на дно воронки продаж, вне зависимости от ее текущего положения. Для реализации подобных алгоритмов в WWF предусмотрен компонент StateMachineWorkflowActivity, который позволяет создавать конечные автоматы. К сожалению в CRM 4.0 ничего не сделано для поддержки этого компонента, но Вы можете легко реализовать подобный функционал средствами CRM, создав по отдельному бизнесс-процессу на каждый из этапов продаж и прописав условия активации этих процессов-этапов. Так пользовательские переходы между этапами будут сводиться к остановке одного процесса и запуску другого. Также можно сделать активность, которая будет автоматически глушить другие процессы-этапы и расположить ее вначале каждого из наших процессов, тогда для перехода на произвольный этап пользователю останется только его "запустить". И, наконец, когда я написал, что SequentialWorkflowActivity не поддерживает произвольного перехода между этапами, я не имел ввиду, что ее нельзя заставить это делать. Для последовательного выполнения дочерних активностей SequentialWorkflowActivity подписывается на события своей первой дочерней активности и даёт команду на её запуск. При возникновении события успешного завершения дочерней активности, SequentialWorkflowActivity повторяет тоже самое для следующей активности. Естественно, ничто нам не мешает написать активность, которая при запуске отпишет родительскую SequentialWorkflowActivity от своих событий, а дальше будет либо сама управлять последовательностью выполнения остальных активностей, либо "обманывать" SequentialWorkflowActivity посылая ей определенные события. Однако, такой метод мне не очень нравится, пока не могу объяснить почему. З.Ы. Я сменил работу и теперь, во-первых, для меня CRM превратились в хобби, а во-вторых у меня больше нет аналитических данных по потребностям пользователей CRM. В принципе, я могу написать компонент для управления последовательностью выполнения этапов используя механизм, описанный в третьем пункте, но это будет грязный хак архитектуры WWF и я очень сомневаюсь в его целесообразности. Если у кого-нибудь возникли задачи, которые затруднительно решить первыми двумя методами, давайте обсуждать. Я допускаю, что M$ могли ошибиться, проектируя CRM 4.0 и она требует серьезной доработки напильником, но для такого решения мне нужны очень серьезные основания. |
|
|
|