Доброго времени суток!

В ходе настройки БП появилась задача по настройке прав доступа к записям раздела сотрудникам-пользователям системы. Соответственно, добавил элемент "Изменить права доступа". Если вкратце о БП, то логика такая: находим Guid сотрудника-консультанта, затем передаем строковое значение этого Guid в переменную ConsultantIdString БП, затем начинаем новую выборку по контактам, чьим консультантом является пользователь с ConsultantId = ConsultantIdString, затем начинаем цикл, в котором забираем права доступа (чтение, редактирование, удаление) у консультанта ко всем записям, которые не соответствуют условию ConsultantId = ConsultantIdString. Дальше даем доступ (чтение, редактирование, удаление) ко всем записям которые соответствуют условию ConsultantId = ConsultantIdString. Когда просматриваю данные трассировки, то выходит следующее: 

"Параметр": "Список прав на удаление",
            "Значение": {
                "Перед выполнением": "[{Id:\"a6bca657-858b-404c-9f74-fed573d2bee4\",ParameterName:\"Employee1\",Name:\"Консультант\",CanRead:true,CanEdit:true,CanDelete:true,Source:\"3\",Grantee:\"Employee\",Value:\"[#Lookup.16be3651-8fe2-4159-8dd0-a803d4683dd3.5b40e682-84ae-45d8-9d24-75f46fa557b9#]\"}]",
                "После выполнения": "[{Id:\"a6bca657-858b-404c-9f74-fed573d2bee4\",ParameterName:\"Employee1\",Name:\"Консультант\",CanRead:true,CanEdit:true,CanDelete:true,Source:\"3\",Grantee:\"Employee\",Value:\"[#Lookup.16be3651-8fe2-4159-8dd0-a803d4683dd3.5b40e682-84ae-45d8-9d24-75f46fa557b9#]\"}]"
            }

Т.е. права доступа остались прежними. Подскажите, пожалуйста, в чем логическая ошибка?

Также прикрепил скрин самого БП и элемента по удалению прав доступа для консультантов.

Прикрепленные файлы

Нравится

0 комментариев
Показать все комментарии

Коллеги, доброго дня!
Эксплуатируем систему уже 5 лет, накопились бизнес-процессы, которые более пользователями не используются. Смотрю в сторону того, чтобы их удалить, дабы не смущать людей и новых разработчиков. Хотелось поинтересоваться у знающих и опытных, насколько целесообразны такие процедуры, какие есть подводные камни и неочевидные выгоды.

Нравится

2 комментария

и можно заодно узнать, как удалять старые версии процессов?

Владимир Соколов,

Старые версии бизнес процессов можно удалять через конфигурацию. Для того, чтобы понять, какую версию БП нужно удалить - необходимо знать Название версии БП (не заголовок). Его можно посмотреть в Дизайнере процессов, открыв данную версию. На вкладке "Настройки" в пол "Имя".

Показать все комментарии

После внесения изменений в БП (добавлены фильтры по полям в стартовых сигналах), не получается его сохранить.

При попытке это сделать, вылезает окошко со следующей ошибкой:

Возникла ошибка при сохранении: Произошла одна или несколько ошибок.

При этом, если нажать на отмену и открыть БП заново, видно, что внесённые изменения сохранены. Но при этом скомпилировать внесённые изменения система не предлагает.

Где можно увидеть, что за ошибки возникли?

Прикрепленные файлы

Нравится

1 комментарий

Попробуйте очистить Redis и перезапустить пул в IIS.

Показать все комментарии

Сколько себя помню, при чтении или изменении в 90% случаев условием фильтрации объекта является ID
Кликать постоянно несколько раз что бы снова и снова добавлять его в условия для нового блока БП может напрягать (если активно пилишь БП)
Итого предлагаю:
1. При добавлении блока на чтение / изменение автоматом добавлять пунктом фильтрации ID

 


2. Более лайтовый вариант, захаркодить "ID" первым, и уже выбранным, в выпадающем списке. 

 

1 комментарий

Добрый день,

 

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

 

Спасибо за выбор нашего продукта.

 

С уважением,
Кучер Виталина
Оператор
Группа компаний Terrasoft

Показать все комментарии

Добрый день!

Работаю в бизнес-процессе.

Необходимо поместить в одну из колонок детали с типом Строка значение из Справочника, но не Id, а то, что находится в колонке Название (пример: НЕ "b88bb1b9-6424-44c3-ac54-d601b2465197", а "очная проверка"). Если пользоваться Формула, то подставляются Id. Как решить данную проблему?

Нравится

2 комментария
Лучший ответ

Построить запрос в соответствующую таблицу по полученному значению.
Пример, Исполнитель - если он ссылается на справочник Контакт, то после элемента ReadDataUserTask2, добавить еще один элемент "Читать данные (новый элемент)", из таблицы Контакт, где Id =  ReadDataUserTask2.1-ый элемент.резкол.Исполнитель, читать колонку - Название, а в этой формуле уже использовать "Читать данные (новый элемент)".1-ый элемент.резкол.Название
 

Построить запрос в соответствующую таблицу по полученному значению.
Пример, Исполнитель - если он ссылается на справочник Контакт, то после элемента ReadDataUserTask2, добавить еще один элемент "Читать данные (новый элемент)", из таблицы Контакт, где Id =  ReadDataUserTask2.1-ый элемент.резкол.Исполнитель, читать колонку - Название, а в этой формуле уже использовать "Читать данные (новый элемент)".1-ый элемент.резкол.Название
 

Литвинко Павел,

Спасибо!

Показать все комментарии

Добрый день. Как создать бизнес процесс, который должен
открывать страницу новой записи в разделе и контролировать заполнены ли нужные поля в этой записи. (Без программирования). Я поняла, что нудно использовать элемент процесс "открыть страницу редактирования", но как контролировать заполнение нужных полей не понимаю.

 

Нравится

2 комментария
Лучший ответ

Попробуйте сделать так. Мне кажется должно сработать.

сделать эти поля обязательными , например

Попробуйте сделать так. Мне кажется должно сработать.

Показать все комментарии

Процесс запускается по конкретному контакту

Задаётся вопрос пользователю 

Открывается страница редактирования (тек.контакт) 

После чего нужно проверить добавил ли пользователь *Дату создания контакта (Для чего и собственно открывается страница редактирования)

Пробовал через условный сравнить значение  (Допущена ошибка в формуле: Используется недопустимый оператор) **Естественно ожидал)))

Вопрос в том, что как можно создать что-то похожее на логическое если (Если Дата заполнена--Ю процесс останов) если нет открыть страницу редактирования 

Прикрепленные файлы

Нравится

1 комментарий
Лучший ответ

вы сравниваете число и дату, вот вам и ошибка, когда сравниваю дату все ок, и не проверяйте пустоту даты сравнением  == или  != , вам надо проверять больше ли она минимально возможной даты DateTime.MinValue

вы сравниваете число и дату, вот вам и ошибка, когда сравниваю дату все ок, и не проверяйте пустоту даты сравнением  == или  != , вам надо проверять больше ли она минимально возможной даты DateTime.MinValue

Показать все комментарии

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

Например позволит просто определить находится ли отметка времени в прошлом или будущем.

 

P.S.
Так же, в этом меню незаслуженно обделены Минуты, их часто не хватает для быстрых процессов.

1 комментарий

Добрый вечер!

 

На команду разработчиков уже зарегистрирована задача по реализации такой функциональности.

Разработчики рассмотрят ее в одной из будущих версий.

 

Спасибо, что делаете наш продукт лучше!

Показать все комментарии

Всем доброго времени суток, хотелось бы немного прояснить вопрос.
Пробую вызывать веб-сервис из бизнес-процесса.
Через Postman, прохожу аунтентификацию через .../ServiceModel/AuthService.svc/Login, далее вызываю .../0/odata - получаю перечень таблиц и статус 200, то же самое через адресную строку браузера.

Но если вызывать этот веб-сервис через бизнес-процесс, кроме HTTP Error 401.1 - Unauthorized или Invalid user name or password не получил.
В бизнес-процессе пробовал вызывать сначала веб-сервис .../ServiceModel/AuthService.svc получать через параметры процесса BPMCSRF  - без результата.

Через веб-сервис .../0/ServiceModel/EntityDataService.svc/  получаю статус 200 и ответ в виде XML.


Суть вопроса почему .../0/odata возвращает статус 200 и данные через постман и браузер, а через бизнес-процесс возращает ошибку.
Приложение on-site. 

 

Нравится

2 комментария

Сергей,

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

Олег Нефедьев, спасибо.

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

Показать все комментарии

Добрый день!

Необходимо реализовать следующую задачу.

В моем пакете создан Исходный код следующего содержания:

На странице редактирования записи имеется поле "Скрипт проверки":

Каким образом я могу с помощью бизнес-процесса запустить этот скрипт и выполнить его таким образом, чтобы у меня запустился код из первого скрина и получить значение true? (само содержание Скрипта проверки не обязательно должно быть именно таким)

Нравится

7 комментариев
Лучший ответ

Думаю, Вам нужно использовать Activator.CreateInstance()

Думаю, Вам нужно использовать Activator.CreateInstance()

Безуглый Кирилл Александрович,

А можно немного подробней...

Pavel Litvinovich, 

Вот пример кода:

using System;
using System.Reflection;

namespace ActivatorCreateInstance
{
    class Program
    {
        static void Main(string[] args) {
            var resultOne = Invoker.CreateAndInvoke("ActivatorCreateInstance.MyClass", null, "MethodOne", null);
            var resultTwo = Invoker.CreateAndInvoke("ActivatorCreateInstance.MyClass", null, "MethodTwo", null);
            Console.WriteLine(resultOne);
            Console.WriteLine(resultTwo);
            Console.ReadKey(true);
        }
    }

    public static class Invoker
    {
        public static object CreateAndInvoke(string typeName, object[] constructorArgs, string methodName, object[] methodArgs) {
            Type type = Type.GetType(typeName);
            object instance = Activator.CreateInstance(type, constructorArgs);

            MethodInfo method = type.GetMethod(methodName);
            return method.Invoke(instance, methodArgs);
        }
    }

    public class MyClass
    {
        public static bool MethodOne() {
            return true;
        }

        public static bool MethodTwo() {
            return false;
        }
    }
}
 

При помощи элемента БП "Читать данные" читаете поле "Скрипт проверки"

Безуглый Кирилл Александрович,

Спасибо!

Безуглый Кирилл Александрович,

Данный код необходимо вставить в элемент Задание-сценарий в БП?

данный код создает консольное приложение. Этот код как пример, чтобы вы могли разобраться, как работает Activator.CreateInstance. И да, за основу можно взять тело кода и вставить его элемент БП "Задание-сценарий"

Безуглый Кирилл Александрович,

Спасибо! Разобрался!

Показать все комментарии