Утилитки
29
Май
6

Period Workflow Tool

«Это законы компьютерной системы. Некоторые можно обойти, другие нарушить!» – Морфиус, к/ф «Матрица».

В CRM есть отличный механизм бизнес-процессов, позволяющий пользователям создавать свою собственную бизнес логику в довольно простом веб-редакторе. Эти бизнес-процессы могут стартовать при наступлении многих событий, таких как создание и/или обновление записи. Однако нет никакого способа периодически выполнять бизнес-процессы. Ну, то, что не реализовал майкрософт, довели до ума добрые люди 🙂

Итак, представляю Вам Period Workflow Tool. Этот простой инструмент позволяет Вам периодически запускать бизнес-процессы, предварительно отобрав с помощью расширенного поиска или представлений, нужные вам записи (на которые будет воздействовать бизнес-процесс(ы)).

Спрашиваете, зачем это нужно? Ну, например для ежедневного поиска клиентов, у которых через пару дней наступит день рождения и отправлять им поздравительные письма!

Бизнес-процесс

Прежде всего нам понадобится бизнес-процесс, который мы будем периодически запускать. Тоько убедитесь что у пользователя, от имени которого он будет запускаться есть достаточн полномочий (если нету, то выдайте их или расшарте бизнес-процес).

Я создал бизнес процесс, который создает звонки для, каждого моего активного бизнес-партнера.


Расширенный поиск

Чтобы запускать периодически бизнес-процесс, ему нужно подсовывать какие-то записи (в отношении которых он будет работать). А чтобы их отобрать их можно использовать либо существующие представления, либо создать свое (через расширенный поиск). А это уже решать Вам – все зависит от Вашей бизнес-логики. Я буду использовать представление «Мои активные организации» в объекте Бизнес-партнер.


Правила

Для того чтобы заупскать бизнес-процессы нужно создать с помощью Period Workflow Tool т.н. Правило (или группу правил).

Скачайте и запустите Period Workflow Tool. Нажмите, кнопку Add и создайте параметры соединения с Вашим CRM сервером. Выберите только что созданной соединение в ниспадающем спике. Теперь снова жмите Add? Но на этот раз уже напротив Rules (Правила). Станут доступными для заполения нижние поля. Введите имя правила (какое хотите) и название группы (не обязательно) – группы позволяют объединять различные правила в кумулятивный пакет, для одновременного их запуска. Выберите объект в отношении которого будут работать бизнес-процесы. После этого станут доступны поля для выбора представления или сохраненного расширенного поиска (с помощью которых будут отбираться записи), а также сам бизнес-процесс. Когда все поля зададите, жмите Save.


Запуск правила

Созданные выше правила запускаются с помощью стандартного виндового планировщика задач. Команда для запуска имеет вид:

PeriodicWorkflows <server> -r <rule>

либо:

PeriodicWorkflows <server> -g <group>

Где <server> – название подключения к сереву, созданного в Period Workflow Tool (это не имя CRM сервера).
А <rule> и <group> – название правила и группы правил соответственно.

Как понятно из названия, в первом случаи запускаем одно правило, а во втором группу правил!

  • Перейдите Start — Programs — Accessories — System Tools — Scheduled Tasks. Откроется окно со списком текущих плановых задач. Нажмите Add Scheduled Tasks.
  • Откроется мастер планировщика задач. Смотрим приветствие и идем дальше.
  • Нажмите Browse и укажите путь к PeriodicWorkflows.exe.
  • Задайте имя новой задачи и укажите период ее запуска (глобальный… потом можно его еще уменьшиь). На следующем окне также укажите некоторые параметры запуска.
  • Введите учетные данные пользователя под которым будет запускаться задача и программа.
  • Жмем финишь (только не забудьте поставить галку, чтобы задать расширенные параметры запуска).




  • Откроется свойства задачи на вкладки Schedule. Можете нажать Advanced и задать более точные параметры запуска задачи.
  • Перейдите на вкладку Task и добавьте к пути программы параметры ее запуска. В данном примере это:
    C:\PeriodicWorkflows.exe connecttocrm -r createcallforaccount
  • Жмем ОК. Вас попросят ввести логин и пароль!
  • Осталось подождать пока наступит время запуска очередной итерации задачи. А если не хочется ждать и для целей тестирования, можете щелкните правой кнопкой мыши по задачи, выберите Run (запустится консольное приложение) и смотрим на результат!




Комментарии (6)
  • Павел 29.05.2009

    Добрый день!
    Не понятно, куда писать
    PeriodicWorkflows -r

  • slivka_83 29.05.2009

    Добрый день 🙂
    Пред-пред последний пункт:
    > Перейдите на вкладку Task и добавьте к пути программы параметры ее запуска. В данном примере это:
    Т.е. нужно писать в параметрах консольного запуска приложения (в данном случаи не в самой консоли, а в параметрах Планировщика задач Windows 🙂

  • Павел 29.05.2009

    Разобрался, большое спасибо!

  • Александр 29.05.2009

    Добрый день!
    У меня почему-то отваливается выложил по заданому пути, пробовали и группу задавать и правило все равно не срабатывает, БП в CRM корректно отрабатывает, в консоли вылетает эксепшн:

    Executing 1 rules
    System.Web.Services.Protocols.SoapException: Server was unable to process request.

    Server stack trace:
    в System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)
    в System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
    в Microsoft.Crm.SdkTypeProxy.Metadata.MetadataService.Execute(MetadataServiceRequest Request)
    в MetadataService.Execute(Object request) в MetadataCache.RetrieveMetadataAsync(String entityName)
    в System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Int32 methodPtr, Boolean fExecuteInContext, Object[]& outArgs)
    в System.Runtime.Remoting.Messaging.StackBuilderSink.AsyncProcessMessage(IMessage msg, IMessageSink replySink)

    Exception rethrown at [0]: в System.Runtime.Remoting.Proxies.RealProxy.EndInvokeHelper(Message reqMsg, Boolean bProxyCase)
    в System.Runtime.Remoting.Proxies.RemotingProxy.Invoke(Object NotUsed, MessageData& msgData)
    в MetadataCache.RetrieveMetadataDelegate.EndInvoke(IAsyncResult result)
    в PeriodicWorkflows.Program.ExecuteRule(ServerConnection server, PeriodicRule rule)
    в PeriodicWorkflows.Program.Main(String[] args)
    Press enter to continue

    может у кого-то было подобное?

  • Alexey 29.05.2009

    Добрый день!

    Создал БП, который раз в день запускается и создает действия о предстоящих ДР (Контактов). Обнаружил, что для того, чтобы все корректно работало, необходимо, чтобы БП запускался от пользователя с полными правами. Т. е. просто доменного юзера не хватает, а нужна еще одна лицензия для него на CRM, так получается? Или как-то можно обойти?

    ПС Ни из под кого из пользователей СРМ это делать не хочется, так как менять пароль на виндовом джобе каждый раз при смене его в домене — гемор…

  • slivka_83 29.05.2009

    Добрый день. Если не ошибаюсь (под рукой нет этой тулзы) это не виндовый джоб, а виндовый сервис. И для него в качестве способа аутентификации можно (если не изменяет память) поставить что-то вроде Network, а не вводить логин и пароль. Вообщем с этим можно поэксперементировать 🙂

*

code