Добрый день! Ситуация такая, есть задача в БП, в которой есть 3 результата задачи: результат1, результат2, результат3. Мне надо сделать чтобы если параметр диаграммы БП flag = true, то в этом случае в задаче показывало только результат1 и результат2. Результат3 в этом случае надо скрыть. Как это можно сделать?
Здравствуйте, Андрей!
На уровне БП сделать это не получится, но можно скрывать какие-то результаты на уровне страницы редактирования в функции edtResultOnPrepareSelectWindow.
"Андрей Каспаревич" написал:На уровне БП сделать это не получится, но можно скрывать какие-то результаты на уровне страницы редактирования в функции edtResultOnPrepareSelectWindow.
На уровне страницы редактирования, конечно, можно. Но такой подход, если его продолжить использовать, может привести к крайне запутанной логике БП.
А почему нельзя добавить в БП ветвление и разбить на 2 задачи с одинаковыми параметрами, но разными выходами?
Оказалось, что когда количество элементов БП достигает нескольких десятков, а кол-во связей под сотню, то работать с БП через графический интерфейс крайне неудобно, связи начинают сливаться друг с другом в одну сплошную линию и непонятно где какие связи проходят. Поэтому я стремлюсь к уменьшению элементов БП и количеству связей, а ведь разработка только началась. Чувствую, что через пару лет постороннему человеку вообще будет невозможно в БП разобраться. Можно же было сделать, чтобы линии были разного цвета, не накладывались друг на друга, было намного более четырех точек входа и выхода связей из элемента БП и т. д. А так похоже, что механизм БП создан для детских задач с несколькими элементами, а для серьезной разработки он не подходит. Использовать подпроцессы тоже не всегда получается. И, к примеру, если мне нужно ограничить кол-во результатов не в одном элементе, а в нескольких десятках, то я должен несколько десятков подпроцессов создавать? В этом плане преимущество кода очевидно.
на платформе Terrasoft 3.X работа с Бизнес-процессами организована гибко и удобно. Мой вам совет если у вас огромный Бизнес-процесс старайтесь его разделить на подпроцессы, старайтесь рисовать свой процесс процесс осмысленно и разделяя его на логические единые сущности. Если к примеру идут обработка задач по договорам, там не должно быть сущностей от контрагентов.
по поводу обработки результатов, мой вам совет если у вас очень много результатов старайтесь их обрабатывать в скрипте а на экран (в форму) или в бизнес-процесс уже возвращать результат. Старайтесь использовать понятие - подпись на события у объектов, очень помогает когда в ветвление требуется по определенному событию вернуться назад, я для этого не стрелки рисую а выполняю Подписку на событие и при отработки события возвращаюсь к определенному месту в Бизнес-процессе. Вариантов очень много при работе на платформе 3.Х.
по поводу обработки результатов, мой вам совет если у вас очень много результатов старайтесь их обрабатывать в скрипте а на экран (в форму) или в бизнес-процесс уже возвращать результат. Старайтесь использовать понятие - подпись на события у объектов, очень помогает когда в ветвление требуется по определенному событию вернуться назад, я для этого не стрелки рисую а выполняю Подписку на событие и при отработки события возвращаюсь к определенному месту в Бизнес-процессе. Вариантов очень много при работе на платформе 3.Х.
Очень интересно. А можете подробнее расписать эти варианты, если не трудно, то с примерами?
Добрый день!
Как переходить к элементам БП без рисования стрелок, как пишет Власов Михаил Викторович.
"Власов Михаил Викторович" написал: очень помогает когда в ветвление требуется по определенному событию вернуться назад, я для этого не стрелки рисую а выполняю Подписку на событие и при отработки события возвращаюсь к определенному месту в Бизнес-процессе
Здравствуйте, Андрей!
Подобных примеров предоставить не могу, так как никогда не использовался такой подход к управлению бизнес-процессом. Соответственно, и рекомендовать его использование я Вам не могу, так как организация ветвления бизнес-процесса с помощью подписки на события не является протестированным методом, хотя и имеет право на жизнь.
Если Михаил предоставит примеры, буду благодарен, но все же рекомендую использовать стандартный механизм ветвления с помощью управляющих потоков и максимально разбивать сложные процессы на подпроцессы.
Пытаюсь сделать так, чтобы поле договора сохранялось в параметр диаграммы БП, но не бралось из него с помощью стандартных настроек. А там только вариант взять из параметра диаграммы и галочка сохранить полученное значение. А вот как сделать так, чтобы значение не бралось из параметра, а только сохранялось туда?
Здравствуйте, Андрей!
Для записи значения в параметр можно в скрипте с помощью функции WFSetParamValue(), например, а вот с помощью доступных визуальных настроек этого сделать не получится.
Дело в том, что этот режим мне нужен довольно часто. Может подскажите какие изменения мне нужно внести в визуальную форму, чтобы я мог настраивать такой функционал визуально?
Андрей, теоретически, Вы можете изменить элемент процесса "Открытие окна", задать логику сохранения выбранного значения в параметр диаграммы. Следует править скрипты окон wnd_OpenWindowEdit и wnd_WorkflowParameterMapEdit. Но это много сложнее, чем задавать значение в скрипте процесса "вручную". И реализацию поддержка предоставить не сможет, это возможно разве что в рамках проектной доработки.
И реализацию поддержка предоставить не сможет, это возможно разве что в рамках проектной доработки.
Я не так хорошо знаю Террасофт, но думаю, что проблема решается 1 дополнительным контролом, и несколькими строками кода. Нужно всего лишь поставить статус параметра как исходящий. О какой доработке тогда может идти речь? И мне нужно было всего лишь знать где такой статус можно проставить, в каком месте скрипта? И зачем тогда форум, если даже на такие простейшие вопросы техподдержка отвечает: ищи сам в этом модуле или плати за доработку?
Здравствуйте, Андрей!
Реализовать подобный функционал - далеко не дело 5 минут.
Я посмотрю, что можно сделать, и предоставлю более подробные рекомендации по этому поводу.
Здравствуйте, Андрей!
Заполнение полей из параметров при открытии страницы происходит в методе "ProcessInFields" скрипта "wa_OpenWindowScript".
Вы можете решить задачу следующим образом. Добавить дополнительные условия на имена полей, которые Вы бы не хотели заполнять перед записью значений:
DataField.Value= Parameter.Value;
либо вообще отключить этот функционал.
Для действия "Задача" соответсвия некоторых параметров заданы прямо в скрипте "wa_TaskActionScript" в методе "wa_TaskActionOnInitialize". Там можно заменить "wpmitInOut" на "wpmitOut", чтобы параметр был только исходящим.
Добрый день! Возник вопрос:
Каким образом можно возобновить Бизнес-процесс с текущего шага, если в течении его выполнения произошёл сбой системы (завис клиент, перегрузилась рабочая станция и т.д.), в следствии чего была некорректно завершена работа?
В реестре процессов бизнес-процесс не отображается.
Если процесс был запущен - он должен отображаться в реестре "Процессов". Там же есть кнопка "Выполнить шаг", которая запускает тот элемент на котором БП был остановлен:
Игорь, можно попробовать добавить кнопку в реестр "Процессов", по нажатию на которую выполнить код:
var ItemID ='идентификатор шага';if(WFGetItemState(ItemID)== ws_Done){
ShowWarningDialog("Выбранный элемент процесса завершен. Обновите реестр");return;}
WorkflowGridArea.WorkflowEngine.ProcessWorkflowItem(ItemID);
Идентификатор шага нужно взять из tbl_WorkflowItem, с фильтрацией по WorkflowID и по StateId (Name).
В таком случае у меня вопрос: как мне идентифицировать тот или иной элемент из таблицы tbl_WorkflowItem по, например, ID продажи - если он храниться в параметрах БП?
Добрый день сообщество! Создавая процесс столкнулся с очередной ошибкой в элементе чтение запись данных. Добавляю ее на диаграмму пытаюсь поменять радио кнопку на запись данных из параметров диаграммы в источник данных, система выдает ошибку что источник данных mds_DataTransferItemsList не открыт. Ошибка возникает в след функции:
///// wnd_DataTransferItemsGridAreaScript
function dlDataOnDatasetAfterPositionChange(Dataset){ var FieldName = Dataset.Values('ParamName'); var DataFieldName = Dataset.Values('DataFieldName'); var Enabled =!IsEmptyValue(FieldName)&&!IsEmptyValue(DataFieldName);
btnEdit.IsEnabled= Enabled;
btnCopy.IsEnabled= Enabled;
btnDelete.IsEnabled= Enabled; }
Сервис этот не дорабатывал, в чем может быть проблема? Версия бинарников 3.3.1
Во вложении скрипт wnd_DataTransferItemsGridAreaScript из "коробки", попробуйте сравнить Araxis'ом, либо предоставьте бекап БД (можно на support@terrasoft.ru)
Действие "Открытие окна" выбираю, к примеру окно редактирования инцидента, как это описано в инструкции, после выбора в реестре атрибутов должно добавится список атрибутов, но там пусто. Добавляю атрибут у меня курсор изменяется на ожидание, в принципе есть возможность добавить, но хотелось бы чтобы работало штатно все. Подскажите что в моей конфигурации не так, эти сервсисы не редактировал. Версия бинарников : 3.3.1
Добрый день, Сообщество! Помогите решить проблему с элементом задержка. Создаю простейщий процесс для теста: Начало - Задержка(1 минута) - Задача - Окончания процесса. Задача создается без какой либо задержки?
Не понятно где расположены сервисы элемента задержка? или они в ядро вшиты?
Если я правильно помню, то элемент "задержка" отрабатывает сразу, и все элементы после него создаются сразу - у них просто значение tbl_WorkflowItem.ExecuteDate = (сейчас плюс значение задержки). Для задачи при этом "Дата начала" должна быть с задержкой.
"Мещеринов Иван Александрович" написал:Эх.. не особо конечно. А если например нужно задать вопрос пользователю повторно, через 1 день например, как быть в этом случае?
имхо стоит избавиться от этого нехорошего элемента в БП - сделайте просто задачу с напоминанием и с выбором результата, по которому процесс пойдет дальше и не мучайтесь.
Нехороший он потому, что может окно вопроса появиться в бэкграунде и не увидит его никто, или просто пользователь не придет в систему, или проигнорирует, и спроса с него никакого - не видел, не знаю, не всплывало - а задачка то будет висеть и ждать разрешения. Напоминание не даст о ней забыть. И контроль опять же - сделал, не сделал, видно сразу
Иван, если речь о добавлении элемента "Таймер" в конструктор БП, такая реализация не выполнялась.
Если же вопрос в другом, укажите, пожалуйста, ссылку на тему.
Террасофт 3.4.0.180 WinXP
Теперь если включить задержку перед задачей, допустим на 1 минуту, то задача не появляется вообще, ни в реестре, ни показывается пользователю даже если подождать минуту. Пока не нажмешь сделать шаг, БП не продолжится вообще.
Андрей, особенностью базового элемента [Задержка] является то, что действие "Задержка" не выполняет переход на следующий элемент диаграммы после задержки, пока не нажать на кнопку "Выполнить шаг" (в ином случае бизнес-процесс просто зависает).
Данный вопрос уже обсуждался в темах 1 и 2.
Возможно Вам подойдет опция [Выполнить через] в элементе [Задача].
Эта никакая не особенность элемента, эта ошибка, которую террасофтовцы (судя по темам) вот уже 3 года не могут/хотят исправить. Читайте документацию Terrasoft 3.X Руководство администратора (TS_AG_3.4.0.pdf), пункт 6.1.3. Элемент “Задержка”. Цитирую:
Элемент “Задержка” используется в случае, когда необходимо, чтобы следующая
задача процесса возникала через заданный промежуток времени.
Про то что надо возобновить процесс здесь ни слова не сказано. Задача по факту не возникает. Дальше читаем этот пункт и в конце видим.
В результате, задача “Перезвонить” появится в реестре задач ответственного
менеджера через день после отправки дополнительных материалов.
Вот именно. Задача должна появится сама через день, без всяких там нажатий сделать шаг. Это правильное и логичное поведение элемента в БП. Если же мне надо чтобы задача не выполнялась, пока я не сделаю шаг, для этого в элемента БП Задача нужно всего лишь поставить свойство
ProcessImmediately=false
И установить свойство выполнить через в задаче.
Для этого не надо выдумывать никаких элементов задержка. Из-за того, что вы не обращаете внимание на эту проблему сторонним разработчикам приходиться решать это за вас, как видно из вышеприведенных тем. Пожалуйста, не мучайте людей, приведите работу Террасофт в соответствии с документацией!
А том виде, как сейчас работает этот элемент, он бесполезен, никому не нужен, вводит в заблуждение и им никто не пользуется.
Элемент задержка переработан в последних версиях (начиная с последних сборок бинарных файлов 3.4.1). Для получения последней сборки обратитесь в службу технической поддержки.
Создаю карточку счета в БП. Затем мне надо открыть деталь продукты в счете как отдельное окно. Для этого использую следующий скрипт:
var InvoiceID = WFGetParamValue(ScriptItem.ParentItems.ParentDiagram,'InvoiceID'); var OfferingInInvoiceGridArea = GetSingleItemByCode('wnd_OfferingsDetailTreeArea', Connector.GenGUID());
OfferingInInvoiceGridArea.Attributes('ParentItemFieldName')='InvoiceID';
OfferingInInvoiceGridArea.Attributes('DatasetUSI')='ds_OfferingInInvoice';
OfferingInInvoiceGridArea.Prepare();
OfferingInInvoiceGridArea.Attributes('ParentItemID')= InvoiceID; var Dataset = OfferingInInvoiceGridArea.ComponentsByName('dlData').Dataset;
ApplyDatasetFilter(Dataset,'InvoiceID', InvoiceID,true);
Dataset.Open();
OfferingInInvoiceGridArea.ShowModal();
Вся проблема в том что окно модальное, иначе БП перейдет к следующему шагу, не дождавшись закрытия окна. Как сделать, чтобы это окно открывалось наподобие карточки счета не модально и учитывалось как шаг БП? Только, пожалуйста, не предлагайте мне ставить курсор на деталь в реестре счетов и не спрашивайте почему я не хочу так делать.
"Рябенко Андрей" написал:А куда я запишу все те действия которые происходят в скрипте?
не вижу в приведенном коде каких-то "действий", если у вас там еще что-то происходит, то опять же смотря что :smile: Возможно это что-то можно сделать после открытия окна (если эти действия не касаются открываемого грида)
А какой пункт выбрать: Карточка редактирования или другое окно? Если другое окно, то как настроить фильтрацию? Если карточку редактирования то окно может закрыться только по кнопке ОК, а там этой кнопки нет
Сделал все как описано, но при этом БП не переходит на следующий элемент. Окно платежных реквизитов закрыл, а в элементах Платежные реквизиты стоят в состоянии "ОЖИДАНИЕ". В чем может быть проблема? Это глюк?
У нас конфигурация сильно изменена, поэтому мой БП у вас скорее всего не будет работать. Дело не в моем БП. Возмите версию 3.4 и посмотрите модуль wa_OpenWindowScript. После нажатия на ОК в этом модуле просходит нотификация элемента БП и проставляется признак завершения. В случае, если выбрано другое окно и оно не содержит кнопки ОК, а закрывается по крестику, то соответственно нотификации не происходит и элемент остается в состоянии ожидания. Можете сами у себя проверить с любым окном без кнопки ОК.
Я правильно понял, что вы просто открываете окно детали для просмотра, ничего не выбираете и закрываете "крестиком", после чего ваш БП должен идти дальше?
Если так? то передайте ему атрибут-маркер, по которому на OnClose() отработайте Workflow-логику (SendNotify(wa_OpenWindow_OBJECT, MSG_OK))
нужно его передать в атрибуты, например, как это происходит в function ProcessCloseOptions (которая вызывается при подготовке окна к открытию) если установлен признак "Ожидать закрытия":
SetAttribute(Window, 'NotifyObject', WorkflowAction);
тогда в окне вы сможете его считать:
GetAttribute(Self, 'NotifyObject')
Добрый день сообщество. Создал диаграмму БП, накидал на нее несколько задач и решил связать параметры диаграммы с элементами. В дизайнере нажимаю кнопку связи параметров после чего возникает след ошибка :
Отладив, нашел где эта ошибка возникает, но не пойму причины.
function DoActionChange(Dataset){ var ActionParametersDataset = dlActionParameters.Dataset;
ActionParametersDataset.open();
strong> ActionParametersDataset.Attributes('CurrentActionItemID')=
Dataset.ValAsStr('ID');strong>/// Этой строке
RefreshDataset(ActionParametersDataset);
UpdateControls(ActionParametersDataset); }
Сервисы БП не правил, раньше работало. Единственное что изменилось, это версии бинарников но не думаю что это могло повлиять.
Иван, уточните, пожалуйста, версию (т.к. в 3.3.2 и версиях выше нет функции DoActionChange).
Если логика доработанная - вложите тестовый БП, на котором можно воспроизвести ошибку + доработанные сервисы.
Иван, для устранения ошибки замените функцию RefreshActionsList сервиса wnd_WorkflowParametersLinkScript на:
function RefreshActionsList(){
var ActionsListDataset =
wndActionParameters.Window.ComponentsByName('dlActions').Dataset;
ActionsListDataset.DisableEvents();
ActionsListDataset.Close();
ActionsListDataset.Open();
ActionsListDataset.EnableEvents();}
Иван, Вы правы, не увидела.
Для решения вопроса измените функцию dlActionsOnDatasetAfterPositionChange сервиса wnd_WorkflowDiagramActionsParametersScript таким образом:
function dlActionsOnDatasetAfterPositionChange(Dataset){if(Dataset.State== dstInactive){return;}
DoActionChange(Dataset);}