Коллеги, привет. 

Не могу найти внятного мануала на тему использования фильтрация в БП. 

Хочу отфильтровать ответственного по тикету по группе ответственных. (Выбираем группу -> список ответственных уменьшается). 

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

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

Нравится

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

Вашу задачу можно решить не только с помощью бизнес-правил.

Например, в базовой версии фильтрация поля 'Ответственный' настраивается через атрибуты таким образом:

"Owner": {
	"dataValueType": Terrasoft.DataValueType.LOOKUP,
	"lookupListConfig": {"filter": BaseFiltersGenerateModule.OwnerFilter}
}

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

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

Начните с просмотра этой статьи. В ней несколько ссылок на более подробное описание различных моментов связаных с БП. Так же просмотрите  статью СТРУКТУРА КЛИЕНТСКОЙ СХЕМЫ

 

 

 

Вашу задачу можно решить не только с помощью бизнес-правил.

Например, в базовой версии фильтрация поля 'Ответственный' настраивается через атрибуты таким образом:

"Owner": {
	"dataValueType": Terrasoft.DataValueType.LOOKUP,
	"lookupListConfig": {"filter": BaseFiltersGenerateModule.OwnerFilter}
}

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

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

Алла Савельева,  требуется следующую логику: 

1) При выборе ответственного, список доступных для выбора групп ответственных должен содержать только те группы, в которые входит ответственный

И обратное:

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

Sunrise challenge,

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

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

Алла Савельева, 

Нужно ли где-то определять BaseFiltersGenerateModule.OwnerFilter? 

Sunrise challenge,

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

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

Алла Савельева,

Компилятор не выдаёт ошибок, схема сохраняется, при этом фильтрация не осуществляется

Sunrise challenge,

А в консоли браузера есть такие-то ошибки при выборе значения для этого поля?

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

Добрый день, коллеги. 

Нужна ваша помощь. 

При внесении изменения в БП - "Отправка email сообщения контакту обращения", появляется ошибка. 

Правильно ли я понимаю, что нужно заместить какой-то класс? Какой, если так? 

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

Нравится

5 комментариев

Проводите вычисления через элемент "Задание-сценарий" 

Могли бы подсказать зачем, если процесс "из коробки" использует другой элемент? 

В новом (нынешнем) дизайнере процессов серьёзно урезали возможности формул. Если в 5.Х и ранних 7.Х там можно было написать кусочек C#-кода с вызовом функций, то сейчас — только функции из перечня в дизайнере формул.

Альтернативным решением может быть либо C#-скрипт, как посоветовал выше Айдар, либо же создание своего пользовательского действия, тоже написанного на C#, с последующим его запуском из элемента «Выполнить действие процесса» с нужными параметрами.

Если такое условие нужно один раз  — проще скрипт, действие же удобнее при многократном использовании.

Зверев Александр,

Т.е.: 

1) При обновлении версии приложения, БП, использующие подобные формулы, перестанут работать? 

2) Т.е. при отсутствии знаний С# аналитик решить вопрос не сможет?

1) Новый дизайнер процессов появился довольно давно. Если обновляете систему тех времён со своими доработками, нужно всё тестировать. Кстати, вспомнил, в старых версиях вообще не было элемента-формулы, произвольный код писался в условии потока.

2) Без знания C# он бы не решил и в старой версии, на Вашем скриншоте используются функции и элементы синтаксиса языка.

Также см. аналогичное обсуждение раньше.

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

Добрый день!

Подскажите, пожалуйста, как решить данный кейс?

1. По процессу необходимо отправить клиенту письмо по шаблону, котором должна отображаться продуктовая корзина заказа. 

Т.е. Создаем заказ вручную, добавляем продукты. Как отобразить в письме таблицу с продуктами в заказе?

 

2. Как в HTML код шаблона вставить динамические поля? возможно ли это?

 

Спасибо

 

Сейчас версия 7.13, на проде будет 7.14

Нравится

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

1. Полностью решить такую задачу с помощью "родных" элементов не получится. Вам понадобится пользовательское действие, которое формирует html-таблицу из выборки по объекту. Не нашел его на маркетплейсе, но я точно его скачивал где-то на ресурсах Террасофта, возможно в том же маркетплейсе, просто искал плохо. Называется "Таблица детали для email". С помощью него Вы можете в процессе читать ваш шаблон, затем с помощью пользовательского действия формировать таблицу. После этого в элемент отправки письма вставляете html-текст шаблона + таблица. Должно сработать :)

1. Полностью решить такую задачу с помощью "родных" элементов не получится. Вам понадобится пользовательское действие, которое формирует html-таблицу из выборки по объекту. Не нашел его на маркетплейсе, но я точно его скачивал где-то на ресурсах Террасофта, возможно в том же маркетплейсе, просто искал плохо. Называется "Таблица детали для email". С помощью него Вы можете в процессе читать ваш шаблон, затем с помощью пользовательского действия формировать таблицу. После этого в элемент отправки письма вставляете html-текст шаблона + таблица. Должно сработать :)

2. Расскажите подробнее что Вы хотите отобразить в динамических полях. В шаблонах доступны макросы, которые подставляют имя, фамилию адресата и данные объекта, из которого создается письмо. Возможно это Вам и нужно.

Ксензов Егор пишет:

1. Полностью решить такую задачу с помощью "родных" элементов не получится. Вам понадобится пользовательское действие, которое формирует html-таблицу из выборки по объекту. Не нашел его на маркетплейсе, но я точно его скачивал где-то на ресурсах Террасофта, возможно в том же маркетплейсе, просто искал плохо. Называется "Таблица детали для email". С помощью него Вы можете в процессе читать ваш шаблон, затем с помощью пользовательского действия формировать таблицу. После этого в элемент отправки письма вставляете html-текст шаблона + таблица. Должно сработать :)

Егор, тысяча благодарностей, будем пробовать.

 

Ксензов Егор пишет:

2. Расскажите подробнее что Вы хотите отобразить в динамических полях. В шаблонах доступны макросы, которые подставляют имя, фамилию адресата и данные объекта, из которого создается письмо. Возможно это Вам и нужно.

Егор, предположим  у нас есть html-код, который нам предоставил клиент. Это код из сайта продуктовой корзины(например). В данном коде нам необходимо отобразить какие-то поля из системы. Или надо отдельными блоками добавляться блок с динамиечскими полями из пользовательского макроса, отдельно блок html?

Также см. обсуждение.

И в маркете нашлось очень по описанию похожее на Вашу потребность решение: Работа с поставщиками по товарам «под заказ»:

  • Отправка e-mail уведомлений со списком продуктов покупателям и поставщикам (в зависимости от типа заказа).

Виктория Мун,

Если не подойдут готовые решения, на которые указал Александр, то у Вас есть два пути:

1. Как вы и указали, делать блоками: часть письма будет шаблоном из справочника, часть - html'ем клиента. В бизнес-процессе уже будете склеивать шаблон письма из справочника + таблица + код клиента. Это подойдет если поля из макроса нужно указывать только в определенном блоке письма, например, в приветствии (т.е. заменить часть кода клиента на шаблон из справочника, в который подставляются макросы).

2. Обрабатывать весь html клиента в скрипт-таске.

Ксензов Егор,

Егор, добрый день!

Искала довольно тщательно, но подобного приложения не нашла. Буду признательна если поможете найти. Как ра необходимо данные из детали отправлять в e-mail. Спасибо

 

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

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

 

В маркете появился бесплатный процесс для решения первого вопроса: Data table in email for Creatio.

И по второму, только что в 7.16 добавили HTML-блоки с параметрами:

smartblock.gif

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

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

Нравится

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

 Заместить все модули, чтобы добавить схожую логику для дизлайков, нельзя, а писать свои модули и подключать их во всех зависимостях

Видимо, так и нужно. Также см. похожее обсуждение по изменению «собаки» в ленте.

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

Добрый день

Интегрируюсь с BPM Online 7.13 с использованием DataService.

Реализую метод добавления записи звонка Call. Создаю объект InsertQuery

InsertQuery insertQuery = new InsertQuery()

            {

                RootSchemaName = "Call",

                ColumnValues = new ColumnValues()

            };

и добавляю поля через

insertQuery.ColumnValues.Items = new Dictionary();

При добавлении только значения Id запрос выполняется ок, запись сохраняется

При добавлении значения CreatedOn в формате [""\""2000-12-31T09:41:59\""""""""] (без экранирующих символов) после сериализации в JSON получается объект (во вложении) со следующим значением CreatedOn (с экранирующими символами)

"CreatedOn": {

                "ExpressionType": 2,

                "Parameter": {

                    "DataValueType": 7,

                    "Value": "\"\"\\\"\"2019-07-28T07:31:02\\\"\"\"\"\"\"\"\"",

                    "ShouldSkipConvertion": false

                },

                "FunctionType": 0,

                "MacrosType": 0,

                "DatePartType": 0,

                "AggregationType": 0,

                "AggregationEvalType": 0

            }

Вызов BPM DataService/json/reply/InsertQuery возращает ошибку формата JSON

HttpStatusCode: 500

 HttpResponseText: {"responseStatus":{"ErrorCode":"JsonReaderException","Message":"Additional text encountered after finished reading JSON content: \\. Path '', line 1, position 2.","Errors":[]},"rowsAffected":-1,"nextPrcElReady":false,"success":false}

 

Запрос JSON валидируется без ошибок.

Пробовал разные варианты формата, в ответ код JsonReaderException и текст ошибки те же, с отличием в position

Просьба подсказать, где ошибаюсь, и привести пример правильного значения даты после сериализации JSON

Спасибо

 

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

Нравится

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

Открыл Fiddler, записал контакту дату рождения, видно такой формат:

"Date":{  
   "expressionType":2,
   "parameter":{  
      "dataValueType":8,
      "value":"\"2001-07-08T11:46:07.000\""
   }
}

А вообще, при вставке как в таблицы разделов, так и деталей значения CreatedOn и ModifiedOn не передаются, как видно в том же Fiddler. Видимо, при пустом значении сервер сам подставляет текущую дату. Например, запрос на вставку на деталь знаменательных событий целиком:

{  
   "rootSchemaName":"ContactAnniversary",
   "operationType":1,
   "columnValues":{  
      "items":{  
         "Id":{  
            "expressionType":2,
            "parameter":{  
               "dataValueType":0,
               "value":"d5094019-1d92-4fc1-ac03-bbcf620a56c9"
            }
         },
         "CreatedBy":{  
            "expressionType":2,
            "parameter":{  
               "dataValueType":10,
               "value":"410006e1-ca4e-4502-a9ec-e54d922d2c00"
            }
         },
         "Contact":{  
            "expressionType":2,
            "parameter":{  
               "dataValueType":10,
               "value":"93a1c457-c22f-48a9-9f7f-65f1dd99dff3"
            }
         },
         "AnniversaryType":{  
            "expressionType":2,
            "parameter":{  
               "dataValueType":10,
               "value":"173d56d2-fdca-df11-9b2a-001d60e938c6"
            }
         },
         "Date":{  
            "expressionType":2,
            "parameter":{  
               "dataValueType":8,
               "value":"\"2019-07-08T11:46:07.000\""
            }
         }
      }
   }
}

 

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

Коллеги, привет. 

Помогите, пожалуйста выяснить следующую информацию :

1) какой объект отвечает за эту кнопку, что использовать при разработке БП? 

При нажатии этой кнопки отправить уведомление пользователям 

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

2) Для отправки системных уведомлений на группу в коммьюнити рекомендовали создать канал и подписать на него сотрудников.

Что использовать в BPMN SD? 

Нравится

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

Что такое «BPMN SD» и «отправка системных уведомлений на группу в коммьюнити»?

По поводу кнопки, это EmailProcessedButton в схеме CommunicationPanelEmailSchema, а её обработчик setIsNeedProcessFalse находится в схеме EmailItemSchema. Это всё клиентская логика на JS, а не бизнес-процессы.

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

Добрый день, при попытке слияния двух контаков, если у проигравшего есть заказ, то процесс дедупликации падает с ошибкой: 

System.Data.SqlClient.SqlException (0x80131904): Конфликт инструкции DELETE с ограничением REFERENCE "FKZt10BIrUNMXjPYmQeSNwKs8aI". 

Конфликт произошел в базе данных "ClarinsInstall", таблица "dbo.Order", column 'ContactId'.

При отладке не увидела ContactId, среди ключей таблицы Order, по которым идет перепривязка данных (есть только CreatedById и OwnerId),

подскажите, с чем это может быть вызвано?

Нравится

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

Зверев Александр пишет:

Проверьте Order в дизайнере объектов, там должно быть такое справочное поле. А если нет, то было и его удалили в объекте, но по какой-то причине осталось в базе (возможно, объект не скомпилировали).

Если проблема, действительно, в этом, то нужно не выполнять обновление конкретной записи в Order, а определиться с необходимостью наличия поля Contact в Order и в зависимости от принятого решения либо добавить в entity schema Order данное поле и скомпилировать схему, если его нет, либо удалить из таблицы в базе данных, если оно не нужно.

Иначе проблема может воспроизвестись при следующем слиянии дублей.

Это как раз и значит наличие записи в Order, ссылающееся полем ContactId на сливаемый контакт. Проверьте Order в дизайнере объектов, там должно быть такое справочное поле. А если нет, то было и его удалили в объекте, но по какой-то причине осталось в базе (возможно, объект не скомпилировали). В таком случае, если есть возможность, подключитесь к БД, найдите эту запись и замените значение ContactId на null.

Зверев Александр пишет:

Проверьте Order в дизайнере объектов, там должно быть такое справочное поле. А если нет, то было и его удалили в объекте, но по какой-то причине осталось в базе (возможно, объект не скомпилировали).

Если проблема, действительно, в этом, то нужно не выполнять обновление конкретной записи в Order, а определиться с необходимостью наличия поля Contact в Order и в зависимости от принятого решения либо добавить в entity schema Order данное поле и скомпилировать схему, если его нет, либо удалить из таблицы в базе данных, если оно не нужно.

Иначе проблема может воспроизвестись при следующем слиянии дублей.

Кстати, не уверен, что повторное добавление поля в объект пройдёт успешно без последствий. У колонки в базе прописывается GUID в Extended Properties, он будет уже другим.

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

Добрый день!

Столкнулись со свойством "Объект доступен на портале как раздел" в объекте в блоке "Поведение" и никак не получается разобраться с "подкапотной" частью: зачем это свойство нужно? Что происходит при его простановке в объекте?

Буду очень благодарна за помощь!

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

Нравится

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

Татьяна, добрый день.

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

 

Мотков Илья, Спасибо большое!

При добавлении раздела в РМ "Портал" этот признак не проставляется (в том числе и при добавлении в справочник объектов, доступных пользователям портала), но поле все равно в дизайнере объекта открыто для редактирования. Это на 7.14, по крайней мере. Смысл от него тогда не особо понятен.

Тогда будем ждать обновленную документацию в академии.

Еще раз спасибо :)

Добрый день. А как вывести раздел на портал с версией 7.13.1?

Например, обновиться на 7.13.4.

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

Создаю http соединение.

Получаю куки от /ServiceModel/AuthService.svc/Login

Вынимаю BPMCSRF

Создаю два заголовка: "BPMCSRF" и "Content-Type", "application/json;charset=utf-8"

Отправляю запрос к  /0/rest/KmAccountIntegrationService/AccountImportRU

Получаю ответ  401. Что делаю не так?

Нравится

11 комментариев

Возможно, кроме BPMCSRF забыли передать обычную авторизационную куку. Примеры кода для авторизации есть тут и в соседних статьях, но они не на 1С.

Можно сравнить нормально проходящую авторизацию и обращение к веб-сервису при помощи браузера с неудачной попыткой из 1С при помощи Fiddler, поверить, в чём отличие.

Спасибо за ответ. Обычная авторизационная кука целиком передается через Json в теле запроса или в заголовке Cookie строкой или иначе?

Я обычно не парюсь, и все, что получаю от авторизации использую в последующих запросах

ServicePointManager.ServerCertificateValidationCallback = (s, cert, chain, ssl) => true;
var req = WebRequest.Create(string.Format("{0}/0/rest/{1}/{2}", url, service, metod)) as HttpWebRequest;
req.CookieContainer = AuthCookie;
req.Method = "POST";
req.ContentType = "application/json";
 
CookieCollection cookieCollection = AuthCookie.GetCookies(new Uri(url));
string csrfToken = cookieCollection["BPMCSRF"].Value;
req.Headers.Add("BPMCSRF", csrfToken);

На практике там обычно 4 параметра, все кидаем через заголовки.

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

Отправляю запрос

Ответ

 

 

Смущает «Authorization: Basic» в запросе на скриншоте. Ведь «Basic» и «Forms (Cookies)» — это два разных способа аутентификации. И если залогиниться в систему в браузере и посылать запросы к OData, такого заголовка нет.

Взлетел

Спасибо, очень помогли

Так в чём разница, в капсе у BPMCSRF?

Приходящие куки парсить и загонять строкой в заголовок Cookie. Еще отдельно BPMCSRF заголовок добавить, капс не важен

Terramorpher,

Добрый день! А не могли бы пожалуйста скинуть пример функций для обращения из 1С к bpm?

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

 

Также, возможно, Вам подойдут готовые решения по интеграции с 1С от сторонних разработчиков:

 

Добрый день! Спасибо, но вопрос уже не актуален, разобрался сам))

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

Добрый день!

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

Спасибо!

Нравится

10 комментариев

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

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

Если деталь ещё не загружена, то можно внести изменения в данных на уровне её объекта и при загрузке они уже будут учтены. Иногда наоборот, удобно, что деталь ещё не загружена. Например, добавили к сущности задачу через миникарточку, переключились на нужную вкладку, она загрузилась  и задача на ней появилась. А если вкладка уже загружена, то нет, нужно заново открывать всю запись.

Согласен с вами, Александр. Изначально планировал делать расчеты на клиенте и сохранять готовые данные на сервере. Но раз данные не загружены на страницу, то делать расчеты на клиенте смысла нет. Буду делать расчеты на сервере. Но вопрос все же остался и хотелось бы понять - можно ли как то вручную подгрузить деталь, если она находится на соседней странице? И была ли у кого то в этом необходимость и в каких случаях это может быть нужно? Стоит этим заморачиваться?

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

В том то и дело что я еще не знаю как можно это сделать. 

Что мешает в схеме одной детали писать данные в ESQ объекта другой детали? Данные попадут в базу и при открытии первый раз второй детали оттуда подтянутся. А если нужно, чтобы и не при первом открытии данные были, можете скомбинировать с Вашей изначальной логикой.

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

Соседняя деталь загружается не принудительно, а в момент перехода в неё. Если хотите переделать стандартную логику инициализации деталей, смотрите на DefaultTabName и работу с ним в BasePageV2.

Спасибо, Александр!

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