Особенности нумерации блоков
• | нумерация блоков в схемах типовых маршрутов проставляется автоматически – в левом верхнем углу блока. Если со схемы удалить блок типового маршрута, то при добавлении нового блока он отмечается очередным номером; |
• | порядок выполнения блоков определяют стрелки, соединяющие блоки, а не номера блоков; |
• | при создании жесткого типового маршрута блок начала нумеруется с 0, а блок конца маршрута с 1; |
• | если создать и стартовать задачу по свободному типовому маршруту, нумерация начинается с блока задачи с 1. Затем нумеруется блок начала и блок конца типового маршрута; |
• | порядок нумерации блоков, должен, по возможности, соответствовать направлению основного потока бизнес-процесса; |
• | при разработке типового маршрута учитывайте, что очередность выполнения параллельных блоков зависит от очередности создания соединительных связей (стрелок) к этим блокам. Связь к одному из параллельных блоков созданная ранее остальных выполнится первой; |
• | нумерация блоков может использоваться в SQL запросах. Таблица SBTaskRoute содержит данные о каждом этапе маршрута задач, в том числе Number – номер этапа или блока; |
• | в таблице SBTaskJob значения в поле WorkflowBlockID соответствуют ИД блоков типового маршрута из XML-схемы задачи. Напротив, ИД блоков XML-схемы задачи не всегда совпадает с ИД тех же блоков на схеме типового маршрута. |
Особенности нумерации циклов
В таблице SBTaskJob поле WorkflowCycleBlockID содержит ИД блока типового маршрута начала цикла. Если установлено значение -1, значит блок не входит в цикл. В поле WorkflowIteration указывается номер текущей итерации блока. Одновременно могут существовать задания с разных итераций, например, на первой итерации его уже выполнили, а на второй уже создалось новое.
Параметры WorkflowCycleBlockID и WorkflowIteration можно применять в жестких типовых маршрутах для решения задач, например:
• | для определение выполнения последнего задания по блоку типового маршрута; |
• | для составления отчетов; |
• | при согласовании документов с уменьшающим числом рецензентов. |
Допустим, необходимо в жестком типовом маршруте определить, выполняется ли последнее задание по блоку. Если блок находится в цикле, учитываются параметры WorkflowCycleBlockID и WorkflowIteration текущего блока.
Если блок не находится в цикле, используйте набор данных по задаче:
LastJob = true
Task = Tasks.GetObjectByID(Object.Info.TaskID)
TaskDDS = Task.DetailDataSet(3)
TaskDDS.First
while not TaskDDS.EOF
if (TaskDDS.WorkflowBlockID = Sender.ID) and (TaskDDS.JobState == 'В работе') and (TaskDDS.ИД <> Object.Info.ID)
LastJob = false
endif
TaskDDS.Next
endwhile
Блок, расположенный в параллельной незамкнутой ветке цикла, отрабатывается только 1 раз. Чтобы он обрабатывался каждый раз, необходимо замкнуть ветку.
• | пример незамкнутой ветки цикла в схеме задачи: |
• | пример исправленной схемы задачи: |
XML-схема типового маршрута
Общая XML-схема типового маршрута имеет вид:
<Settings>
<Event>
<!--ISBL-текст обработчика события «Автозаполнение».-->
</Event>
<StartedAskableParams>
<!--Установки запрашиваемых параметров при выполнении типового маршрута.-->
</StartedAskableParams>
<Params>
<!--Описание параметров, задаются по кнопке «Параметры».-->
</Params>
<Properties>
<!--Описание параметров задачи: текст, тема, важность и вложения.-->
</Properties>
<Blocks>
<!--Описание блоков типового маршрута и их свойств.-->
</Blocks>
<Route>
<!--Описание связей между блоками и код результата выполнения.-->
</Route>
<ExecutedBlocks>
<!--Выполняемые блоки: тип, ИД, начало цикла, количество итераций и др.-->
</ExecutedBlocks>
<CurrentBlocks>
<!--Описание текущего выполняемого блока.-->
</CurrentBlocks>
</Settings>
XML-схему типового маршрута можно получить несколькими способами:
• | нажать горячие клавиши ALT+X в открытой записи компоненты Типовые маршруты; |
• | выполнить ISBL-код. |
Текст XML-схемы типового маршрута хранится в параметре ISBSearchCondition компоненты Типовые маршруты, с помощью вычисления можно прочесть это реквизит, например:
TMCode = <Код типового маршрута>
// Получить справочник "Типовые маршруты".
TMTReference = References.ТМТ.GetComponent
TMTReference.Open
if TMTReference.Locate(SysReq_CODE; TMCode)
// Типовой маршрут с заданным кодом найден.
TMTReference.OpenRecord
// Получить ИД типового маршрута.
TMID = TMTReference.ID
// Получить XML-схему типового маршрута.
TMScheme = TMTReference.Form.View.Component.DataSet.Requisites('ISBSearchCondition').AsString
EditText(TMScheme)
else
// Типовой маршрут с заданным кодом не найден.
TMTReference.Close
Raise(CreateException(" "; "Типовой маршрут с кодом'" & TMCode & "' не найден"; ecWarning))
endif
Также XML-схема хранится в реквизите главного раздела задачи (задания, уведомления) WorkflowDescription, тогда можно применить код:
Task = Tasks.GetObjectByID(<Ид задачи>)
XMLDocument = CreateObject("MSXML.DOMDocument")
XMLDocument.LoadXML(Task.WorkflowDescription)
EditText(XMLDocument.xml)
• | вызвать SQL-запрос. |
© Компания DIRECTUM, 2018 | Сообщество пользователей DIRECTUM |