Работа с потоками бизнес-процессов с помощью кода

Потоки бизнес-процессов позволяют создавать более эффективные и оптимизированные процедуры продаж, службы и другие бизнес-процессы. При этом вы получаете визуализацию бизнес-процесса, помещая специальные элементы управления в верхней части форм таблиц. Пользователи пройдут через различные этапы продаж, маркетинга или процессов служб до их завершения. Каждый процесс поддерживает несколько этапов и шагов. Вы можете добавлять или удалять этапы, изменять их порядок или добавлять новые таблицы в потоке бизнес-процессов.

Различные экземпляры потоков бизнес-процессов могут параллельно работать с одной и той же строкой таблицы. Пользователи могут переключаться между параллельными экземплярами последовательностей операций бизнес-процессов и возобновлять их работу на текущей стадии процесса.

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

Note

Для работы с потоками бизнес-процессов не нужно писать код. Дополнительные сведения об использовании пользовательского интерфейса для создания потоков бизнес-процессов и управления ими см. в статье Обзор потоков бизнес-процессов

Предварительные требования для потока бизнес-процессов

Пользовательские таблицы и таблицы с обновленными формами пользовательского интерфейса могут участвовать в потоке бизнес-процессов. В обновленных таблицах пользовательского интерфейса свойство IsAIRUpdated имеет значение true.

Чтобы включить таблицу для потока бизнес-процессов, задайте свойству IsBusinessProcessEnabled значение true.

Important

Включение таблицы в поток бизнес-процессов — это односторонний процесс. Его нельзя отменить.

Определение потока бизнес-процессов

Используйте визуальный конструктор потока бизнес-процессов, чтобы определить поток бизнес-процессов. Дополнительные сведения: Создание потока бизнес-процессов

По умолчанию строка потока бизнес-процессов создается в состоянии Draft.

Определение потока бизнес-процессов хранится в таблице workflow, а информация об этапах потока бизнес-процессов — в таблице processstage.

Активация последовательности операций бизнес-процесса

Прежде чем использовать поток процессов, его необходимо активировать. Для этого нужна привилегия prvActivateBusinessProcessFlow для таблицы Workflow. Используйте сообщение UpdateRequest, чтобы задать для состояния строки таблицы Workflow значение Activated. Дополнительные сведения см. в Выполнение специализированных операций с помощью обновления

Note

Кроме того, вы можете использовать конструктор потока бизнес-процессов, чтобы активировать поток бизнес-процессов.

Таблица потока бизнес-процесса

После активации определения потока бизнес-процессов путем изменения состояния соответствующей строки таблицы Workflow или с помощью конструктора потока бизнес-процессов автоматически создается настраиваемая таблица, предназначенная для хранения активированных экземпляров потоков бизнес-процессов, со следующим именем: "<activesolutionprefix> _ <uniquename>". Заполнитель uniquename является производным от указанного имени.

Например, если в качестве имени определения потока бизнес-процессов указано My Custom BPF и для активного решения используется издатель по умолчанию, имя настраиваемой таблицы, созданной для хранения экземпляров процессов — new_mycustombpf.

Если значение uniquename недоступно для определения потока бизнес-процессов, например, если поток бизнес-процессов был импортирован в качестве части решения из предыдущей версии, по умолчанию имя настраиваемой таблицы будет "\<activesolutionprefix>_bpf_<GUID_BPF_Definition>:

Important

Пример строк потоков бизнес-процессов использует системные таблицы для хранения соответствующих экземпляров строк потоков бизнес-процессов.

Однако все создаваемые определения потока бизнес-процессов будут использовать настраиваемые таблицы для хранения своих строк экземпляров, как описано ранее.

Имя таблицы потока бизнес-процессов можно получить с помощью одного из следующих способов:

  • С помощью пользовательского интерфейса. Используйте настройки пользовательского интерфейса для перехода к таблице потока бизнес-процессов:

    Перейдите к своей таблице потоков бизнес-процессов с помощью пользовательского интерфейса.

  • С помощью веб-API. Используйте следующий запрос:

    Запрос

    GET [Organization URI]/api/data/v9.0/workflows?$filter=name eq 'My Custom BPF'&$select=uniquename HTTP/1.1
    

    Response

    {  
    "@odata.context":"[Organization URI]/api/data/v9.0/$metadata#workflows(uniquename)",
    "value":[  
         {  
             "@odata.etag":"W/\"1084677\"",
             "uniquename":"new_mycustombpf",
             "workflowid":"2669927e-8ad6-4f95-8a9a-f1008af6956f"
         }
      ]
    }
    
  • Использование службы организации. Используйте следующий пример кода:

    QueryExpression query = new QueryExpression
    {
        EntityName = "workflow",
        ColumnSet = new ColumnSet("uniquename"),
        Criteria = new FilterExpression
        {
            Conditions =
            {
                new ConditionExpression
                {
                    ColumnName = "name",
                    Operator = ConditionOperator.Equal,
                    Values = { "My Custom BPF" }
                }
            }
        }
    };
    Workflow Bpf = (Workflow)_serviceProxy.RetrieveMultiple(query).Entities[0]; 
    

Note

Свойство IsBPFEntity равно true для таблиц потока бизнес-процессов. Вы можете извлечь все таблицы потока бизнес-процессов в своем экземпляре, запустив следующий запрос веб-API:

GET [Organization URI]/api/data/v9.0/EntityDefinitions?$select=SchemaName,LogicalName,DisplayName&$filter=IsBPFEntity eq true HTTP/1.1

Управление безопасностью для потоков бизнес-процессов

Настраиваемая таблица, которая создается автоматически при активации потока бизнес-процессов для хранения экземпляров потока бизнес-процессов, соответствует стандартной модели безопасности, как и любая другая пользовательская таблица в Microsoft Dataverse. В ней подразумевается, что привилегии, предоставляемые для этих таблиц, определяют разрешения времени выполнения пользователей для потоков бизнес-процессов.

Настраиваемая таблица потока бизнес-процессов имеет организационную область. Обычные привилегии на создание, извлечение, обновление и удаление для этой таблицы определяют разрешение, которое получит пользователь в зависимости от назначенных ему ролей. По умолчанию при создании настраиваемой таблицы потока бизнес-процессов доступ к ней получают только роли безопасности Системный администратор и Настройщик системы, и вам нужно явно предоставить разрешения для новой таблицы потока бизнес-процессов (например, Мой настраиваемый BPF) другим ролям безопасности, если это необходимо.

Управление ролями безопасности.

Создание, извлечение, обновление и удаление строк таблицы потока бизнес-процессов (экземпляры процесса)

Настраиваемая таблица, которая создается автоматически при активации определения потока бизнес-процессов, хранит все экземпляры процесса для этого определения потока бизнес-процессов. Пользовательская таблица поддерживает стандартное программное создание строк (экземпляров процесса) и управление ими с помощью веб-API и конечной точки CRM 2011.

Important

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

Давайте рассмотрим следующий пример, где используется межтабличный поток бизнес-процессов My Custom BPF с тремя этапами: S1:Account, S2:Account и S3:Contact.

Настраиваемый поток бизнес-процесса.

Извлечение всех строк (экземпляров) для таблицы потока бизнес-процессов

Если ваша таблица потока бизнес-процессов имеет имя "new_mycustombpf", используйте следующий запрос, чтобы извлечь все строки (экземпляры процесса) для своей таблицы потока бизнес-процессов:

GET [Organization URI]/api/data/v9.0/new_mycustombpfs HTTP/1.1 

На данный момент вы можете не получить какие-либо экземпляры в своем ответе, так как они здесь отсутствуют. Запустите этот запрос после создания экземпляра определения потока бизнес-процессов далее в этом разделе.

Note

Чтобы узнать, как извлечь имя таблицы потока бизнес-процессов, ознакомьтесь с предыдущим разделом Таблица потока бизнес-процессов.

Создание строки таблицы потока бизнес-процессов (экземпляр процесса)

Создайте строку таблицы потока бизнес-процессов (экземпляр процесса) программно, если необходимо переключиться на другой поток бизнес-процессов для строки таблицы без использования пользовательского интерфейса.

Чтобы создать строку таблицы потока бизнес-процессов, необходимо указать следующие значения:

  • Свяжите строку таблицы потока бизнес-процессов с основной строкой таблицы, задав свойство навигации с одним значением, используя заметку @odata.bind. Чтобы узнать имя свойства навигации, которое указывает на строку основной таблицы определения потока бизнес-процессов, ознакомьтесь с документом CSDL $metadata.

  • Свяжите строку таблицы потока бизнес-процессов с допустимым этапом, указанным в определении потока бизнес-процессов, задав свойство навигации с одним значением, используя заметку @odata.bind. Чтобы узнать имя свойства навигации (обычно activestageid), которое указывает на строку этапа для определения потока бизнес-процессов, ознакомьтесь с документом CSDL $metadata.

    Кроме того, можно получить сведения обо всех этапах определения потока бизнес-процессов с помощью следующего запроса веб-API, предполагая, что идентификатор определения потока бизнес-процессов — 2669927e-8ad6-4f95-8a9a-f1008af6956f:

    Запрос

    GET [Organization URI]/api/data/v9.0/processstages?$select=stagename&$filter=processid/workflowid eq 2669927e-8ad6-4f95-8a9a-f1008af6956f HTTP/1.1
    

    Отклик

    {
        "@odata.context": "[Organization URI]/api/data/v9.0/$metadata#processstages(stagename)",
        "value": [
            {
                "@odata.etag": "W/\"858240\"",
                "stagename": "S1",
                "processstageid": "9a9185f5-b75b-4bbb-9c2b-a6626683b99b"
            },
            {
                "@odata.etag": "W/\"858239\"",
                "stagename": "S3",
                "processstageid": "a107e2fd-7543-4c1a-b6b4-b8060ecb1a1a"
            },
            {
                "@odata.etag": "W/\"858238\"",
                "stagename": "S2",
                "processstageid": "19a11fc0-3398-4214-8522-cb2a97f66e4b"
            }
        ]
    }
    

Затем используйте следующий запрос для создания экземпляра определения потока бизнес-процессов для строки в учетной записи (ID=a176be9e-9a68-e711-80e7-00155d41e206) и активного этапа, заданного в качестве первого этапа экземпляра процесса, S1 (ID=9a9185f5-b75b-4bbb-9c2b-a6626683b99b):

Запрос

POST [Organization URI]/api/data/v9.0/new_mycustombpfs HTTP/1.1 
Content-Type: application/json; charset=utf-8 
OData-MaxVersion: 4.0 
OData-Version: 4.0 
Accept: application/json 

{
    "bpf_accountid@odata.bind": "/accounts(a176be9e-9a68-e711-80e7-00155d41e206)",
    "activestageid@odata.bind": "/processstages(9a9185f5-b75b-4bbb-9c2b-a6626683b99b)"    
}

Отклик

HTTP/1.1 204 No Content
OData-Version: 4.0
OData-EntityId: [Organization URI]/api/data/v9.0/new_mycustombpfs(cc3f721b-026e-e811-80ff-00155d513100)

Обратите внимание, что если необходимо создать экземпляр определения потока бизнес-процессов с помощью этапа, отличного от первого этапа, который задан в качестве активного, вам необходимо предоставить traversedpath в запросе. Пройденный путь является разделенной запятыми строкой с идентификаторами этапов процессов, представляющих пройденные этапы экземпляра потока бизнес-процессов. Следующий запрос создает экземпляр для строки учетной записи (ID=679b2464-71b5-e711-80f5-00155d513100), и активная ступень установлена как вторая ступень, S2 (ID=19a11fc0-3398-4214-8522-cb2a97f66e4b).

POST [Organization URI]/api/data/v9.0/new_mycustombpfs HTTP/1.1 
Content-Type: application/json; charset=utf-8 
OData-MaxVersion: 4.0 
OData-Version: 4.0 
Accept: application/json 

{
    "bpf_accountid@odata.bind": "/accounts(679b2464-71b5-e711-80f5-00155d513100)",
    "activestageid@odata.bind": "/processstages(19a11fc0-3398-4214-8522-cb2a97f66e4b)",
    "traversedpath":"9a9185f5-b75b-4bbb-9c2b-a6626683b99b,19a11fc0-3398-4214-8522-cb2a97f66e4b"   
}

Обновление строки таблицы потока бизнес-процессов (экземпляр процесса)

Экземпляр процесса можно обновить, чтобы перейти к следующему или предыдущему этапу, отменить выполнение экземпляра процесса, повторно активировать экземпляр процесса или завершить его работу.

Навигация по этапам

Чтобы перейти на другой этап, необходимо обновить строку экземпляра процесса для изменения идентификатора активного этапа и соответствующим образом обновить пройденный путь. Обратите внимание, что обновляя экземпляр потока бизнес-процессов вы можете перейти только к следующему или предыдущему этапу.

Для перехода по этапам вам требуется идентификатор экземпляра потока бизнес-процессов, который необходимо обновить. Чтобы получить все экземпляры потока бизнес-процессов, ознакомьтесь с разделом Извлечение всех строк (экземпляров) для таблицы потока бизнес-процессов выше.

Если идентификатор экземпляра процесса, который вы хотите обновить, — dc2ab599-306d-e811-80ff-00155d513100, используйте следующий запрос для обновления активного этапа с S1 до S2:

PATCH [Organization URI]/api/data/v9.0/new_mycustombpfs(dc2ab599-306d-e811-80ff-00155d513100) HTTP/1.1
Content-Type: application/json
OData-MaxVersion: 4.0
OData-Version: 4.0

{
    "activestageid@odata.bind": "/processstages(19a11fc0-3398-4214-8522-cb2a97f66e4b)",
    "traversedpath": "9a9185f5-b75b-4bbb-9c2b-a6626683b99b,19a11fc0-3398-4214-8522-cb2a97f66e4b"
}

Изменение состояния экземпляра процесса: "Прервать", "Активировать повторно" или "Готово"

Экземпляр процесса может находиться в одном из следующих состояний: Активно, Готово или Прервано. Состояние определяется следующими столбцами строки экземпляра процесса:

  • stateCode. Отображает состояние экземпляра процесса.

    значение Label
    0 Активные
    1 Неактивное
  • statusCode. Отображает сведения о состоянии экземпляра процесса.

    значение Label
    1 Активные
    2 Готово
    3 Прервано

Таким образом, чтобы прервать выполнение экземпляра процесса, используйте следующий запрос, задайте значения statecode и statuscode соответствующим образом:

PATCH [Organization URI]/api/data/v9.0/new_mycustombpfs(dc2ab599-306d-e811-80ff-00155d513100) HTTP/1.1   
Content-Type: application/json   
OData-MaxVersion: 4.0   
OData-Version: 4.0 
  
{ 
    "statecode" : "1", 
    "statuscode": "3" 
}

Note

Экземпляр процесса можно прервать на любом этапе.

Аналогичным образом, чтобы снова активировать экземпляр процесса, замените значения statecode и statuscode в приведенном выше коде значениями 0 и 1 соответственно.

Наконец, чтобы задать экземпляру процесса состояние Готово, что возможно только на последнем этапе выполнения экземпляра процесса, замените значения statecode и statuscode в коде выше значениями 0 и 2 соответственно.

Навигация между таблиц

Для навигации между таблицами в этом примере необходимо задать последний этап, S3 (ID=a107e2fd-7543-4c1a-b6b4-b8060ecb1a1a), в качестве активного этапа экземпляра процесса, обновить пройденный путь соответствующим образом и задать строку контакта в качестве основной строки таблицы для каждого определения потока бизнес-процессов.

PATCH [Organization URI]/api/data/v9.0/new_mycustombpfs(dc2ab599-306d-e811-80ff-00155d513100) HTTP/1.1   
Content-Type: application/json   
OData-MaxVersion: 4.0   
OData-Version: 4.0 
  
{
    "activestageid@odata.bind": "/processstages(a107e2fd-7543-4c1a-b6b4-b8060ecb1a1a)",
    "traversedpath":"9a9185f5-b75b-4bbb-9c2b-a6626683b99b,19a11fc0-3398-4214-8522-cb2a97f66e4b,a107e2fd-7543-4c1a-b6b4-b8060ecb1a1a",
    "bpf_contactid@odata.bind": "/contacts(0e3f10b0-da33-e811-80fc-00155d513100)"
}

Удаление строки таблицы потока бизнес-процессов (экземпляр процесса)

Используйте следующий запрос веб-API:

Запрос

DELETE [Organization URI]/api/data/v9.0/new_mycustombpfs(dc2ab599-306d-e811-80ff-00155d513100) HTTP/1.1

Response

Если строка существует, вы получите обычный ответ с состоянием 204, что указывает на то, что операция удаления прошла успешно. Если таблица не найдена, вы получите ответ с состоянием 404.

Использование сообщений RetrieveProcessInstances и RetrieveActivePath

Используйте сообщение RetrieveProcessInstances (RetrieveActivePath Function или RetrieveProcessInstancesRequest), чтобы получить все экземпляры потока бизнес-процессов для строки таблицы во всех определениях бизнес-процессов. Экземпляры потока бизнес-процессов, возвращаемые для таблицы, упорядочиваются в зависимости от столбца modifiedon экземпляра. Например, последний измененный экземпляр потока бизнес-процессов будет первой строкой в возвращаемой коллекции. Последний измененный экземпляр потока бизнес-процессов является активным в пользовательском интерфейсе для строки таблицы.

Каждая строка экземпляра потока бизнес-процессов, возвращенная для строки таблицы в результате использования сообщения RetrieveProcessInstances, содержит идентификатор активного этапа в столбце processstageid, который может использоваться для поиска активного этапа и перехода к следующему или предыдущему этапу. Для этого сначала необходимо найти активный путь экземпляра потока бизнес-процессов и этапы, доступные в потоке процессов, с помощью сообщения RetrieveActivePath (RetrieveActivePath Function или RetrieveActivePathRequest).

При наличии активного этапа и информации об активном пути для экземпляра потока бизнес-процессов информацию можно использовать для перехода к предыдущему или следующему этапу активного пути. Прямую навигацию по этапам необходимо выполнять в последовательности, то есть нужно перемещаться только к следующему этапу активного пути.

Полный пример кода, демонстрирующего использование этих двух методов и навигацию по этапам с помощью службы организации, см. в статье Пример. Работа с потоком бизнес-процессов.

Применение потока бизнес-процессов во время создания строки таблицы

Этот раздел содержит сведения по умолчанию для автоматического применения потоков бизнес-процессов в новых строках таблицы, созданных в Dataverse, а также о том, как их переопределить, чтобы применить выбранные потоки бизнес-процессов к новым строкам таблицы.

По умолчанию для таблицы, в которой определено несколько потоков бизнес-процессов, система применяет поток бизнес-процессов к новой строке таблицы, используя следующую многоэтапную логику:

  1. Определите все потоки бизнес-процессов, применимые к новой строке таблицы, основываясь на столбце Workflow.PrimaryEntity строк определения потока бизнес-процессов.
  2. Определите потоки бизнес-процессов, к которым текущий пользователь имеет доступ. Дополнительные сведения о том, как определяется и контролируется доступ к потоку бизнес-процессов, см. выше в разделе Управление безопасностью для потоков бизнес-процессов.
  3. Все определения потоков бизнес-процессов в системе подчиняются глобальному порядку для каждой таблицы. Порядок потока бизнес-процессов хранится в столбце Workflow.ProcessOrder. Определения потоков бизнес-процессов для таблицы сортируются на основе этого порядка, и выбирается определение с наименьшим порядковым значением.
  4. Наконец, если строка таблицы создается в бизнес-приложении (модуль приложения), применяется дополнительный уровень фильтрации для выбора потока бизнес-процессов, который автоматически применяется к новой строке таблицы. При работе в приложении пользователи могут получать доступ только к соответствующим таблицам, потокам бизнес-процессов, представлениям и формам, к которым они имеют доступ благодаря ролям безопасности, присвоенным бизнес-приложению.
    • Если бизнес-приложение не содержит никаких потоков бизнес-процессов, тогда потоки бизнес-процессов применяются, как описано до шага 3.
    • Если в бизнес-приложении имеется один или несколько потоков бизнес-процессов, тогда будут применимы только те потоки бизнес-процессов, которые присутствуют в приложении. В этом случае, когда пользователь работает в рамках контекста бизнес-приложения, список потоков бизнес-процессов шага 3 продолжает фильтроваться до потоков, которые являются частью бизнес-приложения, присутствуют в модуле приложения и сортируются на основе порядка процессов.
    • Если в бизнес-приложении отсутствуют потоки бизнес-процессов для таблицы или нет потоков, доступных пользователю, тогда к новой строке таблицы поток бизнес-процессов не применяется.

Логику потоков бизнес-процессов по умолчанию, автоматически применяемую для новых строк таблиц, можно переопределить. Для этого при создании строки таблицы задайте для столбца ProcessId таблицы одно из следующих значений:

  • Задайте Guid.Empty, чтобы пропустить настройку потока бизнес-процессов для новых строк таблицы. Это можно сделать, если вы массово создаете строки таблицы, но не хотите, чтобы к ним применялся поток бизнес-процессов.
  • Задайте для них определенную таблицу потоков бизнес-процессов (в виде ссылки на таблицу). В этом случае система применит определенные потоки бизнес-процессов вместо логики по умолчанию.

Если при создании строки таблицы не установить значение для столбца ProcessId, система применит логику по умолчанию, как объяснялось ранее.

Note

Переопределение логики потоков бизнес-процессов по умолчанию, автоматически применяемой к строкам таблицы, поддерживается только программно. Это нельзя сделать с помощью пользовательского интерфейса.

Устаревшие столбцы, связанные с процессами (такие как ProcessId, StageId и TraversedPath) в сущностях, доступных для потоков бизнес-процессов, уже являются нерекомендуемыми. Обработка этих устаревших столбцов, связанных с процессами, для целевых строк таблицы не гарантирует согласованность состояния потока бизнес-процессов и не является поддерживаемым сценарием. Рекомендуется использовать столбцы таблицы потока бизнес-процессов, как было описано ранее в разделе Создание, получение, обновление и удаление столбцов таблицы потоков бизнес-процессов (экземпляры процессов)

Единственным исключением является программное изменение столбца ProcessId при создании строки таблицы для переопределения приложения потока бизнес-процессов по умолчанию с помощью новой строки, как описано в предыдущем разделе: Применение потока бизнес-процессов во время создания строки таблицы.

Поддержка программируемости на стороне клиента для потоков бизнес-процессов

На стороне клиента существует объект, который можно использовать для взаимодействия с потоками бизнес-процессов в виде скриптов формы. Потоки бизнес-процессов активируют события на стороне клиента каждый раз, когда процесс применяется к строке, изменяется этап или его состояние изменяется на Active, Finished или Aborted. Дополнительные сведения см. в статье formContext.data.process (Справочник по API клиента)

Максимальное число процессов, стадий и шагов

Для каждой таблицы значение по умолчанию для максимального числа активированных потоков бизнес-процессов — 10. Другое значение можно указать с помощью столбца Organization.MaximumActiveBusinessProcessFlowsAllowedPerEntity. Тем не менее, если значение больше 10, наблюдается снижение производительности системы при переключении процессов или открытии строки, которой назначен поток бизнес-процессов. Это может быть особенно заметно, если процессы охватывают несколько таблиц.

Следующие параметры нельзя настроить:

  • Максимальное количество этапов для каждой таблицы в процессе — 30.

  • Максимальное число шагов на каждом этапе — 30.

  • Максимальное количество таблиц, которые могут участвовать в потоке процессов — 5.

Note

Каковы ваши предпочтения в отношении языка документации? Пройдите краткий опрос (обратите внимание, что этот опрос представлен на английском языке).

Опрос займет около семи минут. Личные данные не собираются (заявление о конфиденциальности).