Существует ли что-то похожее на "Генератор динамических групп"?

К примеру хочу создать в разделе Заказы родительскую "по Городам" и нагенерить в ней столько групп, сколько есть в справочнике Города, с автоматической установкой в каждой группе фильтра Заказ.Контрагент.Город = {город указанный в названии группы}

 

 

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

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

Власов Михаил Викторович, спасибо за предложение, но хотелось понять есть ли что-то готовое (в том числе БП)? Какими способами реализовать, наверно можно придумать варианты. 

Если такое уже кто-то реализует, то опубликует в маркете. Сейчас таких не вижу.

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

В качестве идеи реализации могу предложить следующее:

1) Реализовать новую кнопку в SystemDesigner, по нажатию которой будет открываться форма с 2мя полями:

- название раздела (для которого будет создан фильтр)

- справочное поле (по которому создать фильтр)

2) Создать динамические группы: каждая группа - одна запись в таблице <Название раздела>Folder (например, ContactFolder и тд).

Значение фильтра находится в колонке SearchData: по сути это сериализованное значение объекта класса  Nui.ServiceModel.DataContract.Filters.

Подробнее с работой динамических групп можно ознакомиться в схеме CommonUtilities.

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

Добрый день.

Есть такой случай: есть сервис где для авторизации нужно постом отправить данные clientID, secretID и grant_type, а в ответ приходит токен, тип токена и скрок действия токена. Для вызова других методов этого api нужно в header передавать Authorization : "тип токена" "токен". 

Допустим, для использования этого аpi, создаем процесс который по времени будет обновлять токен и сохранять его например в системную переменную(настройку). Но как с помощью веб-сервисов сделать запрос  и вставить в него header с "Authorization" ?

Нравится

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

Сергей приветствую

Способ авторизации у вас отличен от OAuth2? Каким способов Авторизации вы пользуетесь при работе с Веб-сервисом? немного этого не допонял. Спаисбо.

Власов Михаил Викторович,

Добрый день Михаил вот документации  https://sendpulse.ua/integrations/api#url но увы я не вижу  там описания какой версии OAuth2

Немного покопавшись в интернете и сопоставив с  документацие - сделал вывод, что там описан метод авторизации "Bearer token". А из коробки bpmonline готовой реализации такой авторизации нету.

Если речь об обращению к стороннему сервису в C#-коде, то в стандартных примерах  есть добавление в заголовки токена BPMCSRF:

// Добавление CSRF токена в заголовок запроса.
CookieCollection cookieCollection = AuthCookie.GetCookies(new Uri(authServiceUri));
string csrfToken = cookieCollection["BPMCSRF"].Value;
updateRequest.Headers.Add("BPMCSRF", csrfToken);

А в готовом элементе БП по вызову веб-сервиса есть только базовая аутентификация  и OAuth 2.0.

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

Всем доброго времени суток.

Описание:

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

Очевидное решение: сделать матрицу и зашить ее в систему. Но поддерживать ее на данном этапе будет крайне тяжело.

Не было ли у кого подобных требований? Поделитесь, пожалуйста, вариантами реализаций.

Заранее спасибо!

Нравится

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

Добрый день Андрей

Если есть возможность подглядеть как ваш кейс реализован в конфигурации BPM'Online SalesEnterprise, раздел Планирование, то советую посмотреть как Компания Террасофт создала структуру данных таблиц и по образу и подобию повторить у себя. Это полностью ваш Кейс.

А уже потом построить SQL запросы на получение данных.

В базах данных вместо матрицы делают таблицу развязки.

В Вашем случае это может быть справочник с 7 справочными полями: пользователь и 6 параметров и карточкой для их ввода. Справочник можно наполнять и актуализировать пользовательскими средствами, а в коде для получения искомого пользователя фильтровать справочник по параметрам.

Добрый день Андрей

Если есть возможность подглядеть как ваш кейс реализован в конфигурации BPM'Online SalesEnterprise, раздел Планирование, то советую посмотреть как Компания Террасофт создала структуру данных таблиц и по образу и подобию повторить у себя. Это полностью ваш Кейс.

А уже потом построить SQL запросы на получение данных.

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

Шаги воспроизведения:

Сайт клиента:

Версия: 7.12 Service Ent

 

Коллеги, требуется помощь.

По штатному функционалу https://academy.terrasoft.ru/documents/technic-sdk/7-13/rabota-s-obekta….

При добавлении пользователя в коллекцию SysAdminUnitCollection при сохранении вылетает ошибка, хотя при создании, например Контактов - всё ОК:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>4ForbiddenForbiddenSystem.Data.Services.DataServiceException   at System.Data.Services.DataServiceConfiguration.CheckResourceRights(ResourceSetWrapper container, EntitySetRights requiredRights)&#xD;

   at System.Data.Services.Serializers.Deserializer.HandlePostRequest()&#xD;

   at System.Data.Services.DataService`1.HandlePostOperation(RequestDescription description, IDataService dataService)&#xD;

   at System.Data.Services.DataService`1.ProcessIncomingRequest(RequestDescription description, IDataService dataService)&#xD;

   at System.Data.Services.DataService`1.HandleNonBatchRequest(RequestDescription description)&#xD;

   at System.Data.Services.DataService`1.HandleRequest()

Авторизуюсь в сервисе под Supervisor.

Доступ к операциям и Доступ к объекту для внешних сервисов добавлен для SysAdminUnit на чтение, добавление, удаление, изменение.

Заранее благодарен за помощь.

Нравится

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

В коде веб-сервиса жёстко зашиты права только для чтения, если схема начинается на «Sys» или «VwSys» (с небольшим списком исключений).

Значит, добавление по OData для этой таблицы применять нельзя.

Спасибо за информацию!

Ну и дела!

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

Добрый день!

Не обессудьте первый день рою bpm.

Увидел две таблицы: "Пользователь портала" и "Пользователи/роли (Представление)". В чем разница?

Я так понимаю чтобы добавить пользователя портала нужно добавить запись в таблицу "Пользователи/роли (Представление)"

Делаю через действия системы "Добавить данные" и он мне выдает ошибку: System.NullReferenceException: Object reference not set to an instance of an object.

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

И самый главный вопрос где прочитать? про это все можно искал в академии: толи там нет, толи искалка еще не выросла

Нравится

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

Да, это - view. На основе SysAdminUnit.

Не нашел таблицу "Пользователь портала", но примерный алгоритм работы ролей и пользователей в bpm:

1) все роли и пользователи хранятся в SysAdminUnit (да, это помойка из кучи записей, с разными типами)

2) в SysUserInRole задаётся связь роли (из SysAdminUnit) с контактом (из того же SysAdminUnit)

Как-то так. И да, почитать - нигде. У нас тут практикуется исключительно хождение по граблям. Странный способ получения экспириенса, но какой есть...

Чисто для примера: я вот тут вчера узнал, что система в деталях возвращает UsrDate(поле типа DateTime из карточки родителя, подтягивал через аттрибуты) в виде строки. А при заходе в страницу редактирования той же самой записи, тот же самый код возвращает UsrDate, но уже в типе DateTime. Так и живем ¯\_(ツ)_/¯

Да, это - view. На основе SysAdminUnit.

Не нашел таблицу "Пользователь портала", но примерный алгоритм работы ролей и пользователей в bpm:

1) все роли и пользователи хранятся в SysAdminUnit (да, это помойка из кучи записей, с разными типами)

2) в SysUserInRole задаётся связь роли (из SysAdminUnit) с контактом (из того же SysAdminUnit)

Как-то так. И да, почитать - нигде. У нас тут практикуется исключительно хождение по граблям. Странный способ получения экспириенса, но какой есть...

Чисто для примера: я вот тут вчера узнал, что система в деталях возвращает UsrDate(поле типа DateTime из карточки родителя, подтягивал через аттрибуты) в виде строки. А при заходе в страницу редактирования той же самой записи, тот же самый код возвращает UsrDate, но уже в типе DateTime. Так и живем ¯\_(ツ)_/¯

Варфоломеев Данила,

Спасибо

Но я так понимаю в эти таблицы нельзя добавить данные через элемент бизнес-процесса "Добавить данные" (не представлены в выборе объектов для добавления) и нужно писать скриптом?

Красильников Аександр,

Есть, просто называются "Объект администрирования" и "Вхождение пользователя в роли"

Варфоломеев Данила,

Где можно узнать, "Понятное имя" таблиц БД?

В разделе «Конфигурация».

Или в базе в свойствах таблицы:

Красильников Аександр,

Используются для выбора заголовки таблиц

Всем спасибо за оперативные ответы

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

Добрый день,

На систему был поставлен пакет, в котором находился запускаемый по расписанию БП. После установки на систему, он начал запускаться от имени пользователя, который поставил пакет. Этого пользователя в дальнейшем деактивировали на системе, но БП продолжает запускаться от его имени. Пробовал выключать и заново включать БП - всё равно ответственный, тот, кто и первоначально. Пробовал запускать его собственноручно, он запустился 1 раз от имени нового пользователя, но по расписанию всё равно запускается от имени старого пользователя. Как изменить ответственного для этого БП, который запускается по расписанию?

Нравится

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

Ищите БП планировщик который запускает ваш БП, там скорее всего указано от чьего имени и какой БП запускать, либо же это может быть триггер прямо в БД, так же и там посмотрите, либо же могли сделать, это через Системную настройку, нужно смотреть, так особо и не подсказать

Ищите БП планировщик который запускает ваш БП, там скорее всего указано от чьего имени и какой БП запускать, либо же это может быть триггер прямо в БД, так же и там посмотрите, либо же могли сделать, это через Системную настройку, нужно смотреть, так особо и не подсказать

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

Коллеги, добрый день. Столкнулся со следующей проблемой. Как можно в данном коде передать параметр в вызываемом метод?

 "UsrField": {

                dependencies: [

                    {

                        columns: ["UsrField2"],

                        methodName: "method"

                    }

                ]

            },

Нравится

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

Использую onEntityInitialized:

methods: {

            onEntityInitialized: function() {

                this.setFinishDate();

            },

            

            setFinishDate: function() {

                    var finishDate = new Date();

                    finishDate.setFullYear(finishDate.getFullYear()+1);

                    this.set("UsrFinishDate", finishDate);

            }

        },

Во время открытия страницы редактирования объекта выполняется логика, но висит загрузка. Подскажите как исправить

Изображение удалено.

Нравится

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

В конце onEntityinitialized добавить this.callParent(arguments);

В конце onEntityinitialized добавить this.callParent(arguments);

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

Здравствуйте, в детали [Амбулаторная карточка] есть поле [ФИО Врача] и поле [Специализация Врача]. Нужно вывести [Специализацию Врача] из установленного поля [Фио Врача]. Врач-это контакт и у него уже есть поле Специализации. Везде описывают кейс с числовыми значениями, но вывод из БД нигде нет. Буду очень благодарен, если подскажите.

Нравится

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

Все можно проще сделать укажите чтоб для доктора вычитывались колонки ФИО и Специлизация и используйте их!

"UsrDoctor": {
  lookupListConfig: {
   columns: ["FIO","UsrDoctorsSpecialization"]
  }
 },

После єтого можно обращатся к полю как UsrDoctor.UsrDoctorsSpecialization

Если я правильно понял, то надо сделать вот так:

attributes: {
//Здесь мы "смотрим" внутрь справочного поля [UsrDoctor], которое ссылается на раздел [Контакты]
//и ищем там специализацию [UsrDoctorsSpecialization]
 "UsrDoctor": {
  lookupListConfig: {
   columns: ["UsrDoctorsSpecialization"]
  }
 },
//Здесь мы вызываем метод, который будет устанавливать специализацию, когда пользователь 
//внесет изменения в поле [UsrDoctor]
 "UsrDoctorsSpecialization": {
  dependencies: [
   {
    columns: ["UsrDoctor"],
    methodName: "setDoctorsSpecializtion"
   }
  ]
 }
},
methods: {
//собственно метод, который устанавливает специализацию в нужное поле
//условие можно и изящней написать. Сделал так, чтобы было понятно.
 setDoctorsSpecializtion: function() {
  var doctor = this.get("UsrDoctor");
  if (doctor) {
   if (doctor.UsrDoctorsSpecialization) {
    this.set("UsrDoctorsSpecialization", doctor.UsrDoctorsSpecialization);
   }
   else {
    this.set("UsrDoctorsSpecialization", null);
   }
  } 
  else {
   this.set("UsrDoctorsSpecialization", null);
  }
 }
},

 

Все можно проще сделать укажите чтоб для доктора вычитывались колонки ФИО и Специлизация и используйте их!

"UsrDoctor": {
  lookupListConfig: {
   columns: ["FIO","UsrDoctorsSpecialization"]
  }
 },

После єтого можно обращатся к полю как UsrDoctor.UsrDoctorsSpecialization

Григорий Чех,

Вау, почему в документации еще нет этого способа?:)

Есть:

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

  • сolumns — массив имен колонок, которые будут добавлены к запросу дополнительно к колонке Id и первичной для отображения колонке.
  • orders — массив конфигурационных объектов, которые определяют сортировку данных при отображении.
  • filter — метод, возвращающий объект класса Terrasoft.BaseFilter или его наследника, который, в свою очередь, будет применен к запросу. Не может использоваться совместно со свойством filters.
  • filters — массив фильтров (методов, возвращающих коллекции класса Terrasoft.FilterGroup). Не может использоваться совместно со свойством filter.
Показать все комментарии

Добрый день!

Подскажите, можно ли как-то принудительно завершить подпроцесс, не дожидаясь его выполнения? Не отменить, а именно завершить.

 

Нравится

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

На маркет плєйсе есть решение для массового закрытия БП по одному можно зайти в журнал БР выбрать нужный экземпляр и завершить!

На маркет плєйсе есть решение для массового закрытия БП по одному можно зайти в журнал БР выбрать нужный экземпляр и завершить!

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

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

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

Решение из маркет плейса не подходит по причине того что версия приложения 7.11.1, а дополнение должно работать на версии не ниже 7.11.3

Так отправьте из внешнего сигнал, который поймают внутренние и завершатся.

А по поводу версий, Вы можете обновиться с 7.11.1 на 7.11.3, между минорными версиями не должно быть особо тяжело.

Шувалов Николай Юрьевич,

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

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

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