День добрый, столкнулся с проблемой, как сохранить изображение в BPM полученное парсингом?
Спарсил я допустим продукт и у меня есть ссылка на изображение продукта, тупо ссылку сохранять в базе или как???
При условии, что в BPM я использую стандартное поле загрузки изображений (https://academy.terrasoft.ru/documents/technic-sdk/7-6-0/kak-dobavit-na-...), и мне спарсенное изображение сюда нужно будет выводить, а лучше сохранить и вывести.

Есть у кого-нибудь готовое решение? Или идеи с куском кода?

Нравится

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

Здоавствуйте, Максим

Можно посмотреть примеры до добавлению данных в системе здесь - https://academy.terrasoft.ru/documents/technic-sdk/7-9/dataservice-sozd…

"Мотков Илья" написал:

Здоавствуйте, Максим

Можно посмотреть примеры до добавлению данных в системе здесь - https://academy.terrasoft.ru/documents/technic-sdk/7-9/dataservice-sozda...

На самом деле Вы меня отправили в "ЛЕС", я же попросил подобный пример если таковое имеется или кто-то уже делал или механизм загрузки изображений и вообще где они хранятся?. У меня просто не так много времени, чтобы разбираться в причудах террасофта, и без того непонятной документации.

Понаберут школьников которые документации пишут.

Дело в том, что как метод INSERT происходит я знаю. Я это мог бы сделать и без обращения сюда, тупо сохранить в базе ссылку на изображение. Я же имею ввиду есть-ли какой-то метод в который можно будет передавать URL-изображения (тут происходит загрузка в BPM) c Id продукта например. Вариантов много, что это может быть или же отлавливать куда постом передаётся картинка, чтобы написать свой обработчик.

Максим, было бы странно, если бы такой метод был.

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

Там есть колонка PictureId со ссылкой на идентификатор картинке, дальше по связям таблицы видно, что ссылается она на SysImage.

В SysImage картинки хранятся в Base64. То есть для добавления нужно только выполнить insert картинки в нужном формате. Помочь в обработке ссылки и извлечении картинки сможет Google.

В итоге для решения всей задачи хватит и уровня тех. писателя.

"Мотков Илья" написал:

Максим, было бы странно, если бы такой метод был.

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

Там есть колонка PictureId со ссылкой на идентификатор картинке, дальше по связям таблицы видно, что ссылается она на SysImage.

В SysImage картинки хранятся в Base64. То есть для добавления нужно только выполнить insert картинки в нужном формате. Помочь в обработке ссылки и извлечении картинки сможет Google.

В итоге для решения всей задачи хватит и уровня тех. писателя.


Огромное спасибо :-)

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

Нужно построить сложные итоги в BPM Online?
1. Показатель который имеет следующую формулу: кол-во активностей / кол-во контактов за месяц
2. Горизонтальная гистограмма которая формируется из 4 значений которые вычисляются как п.1
Можете подсказать в каком направлении копать? Я уверен что кто то уже делал нечто подобное.

Нравится

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

Виталий, здравствуйте!

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

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

Или попробовать (пример):

Для решения необходимо использовать обходное решение.
Что можно сделать:
1) Создать объект в bpm'online, унаследовавшись от базового. Обязательное условие - в свойствах объекта указано свойство "Представление в БД". В объект необходимо добавить поле UsrResult с типом дробное число. Предположим объект был назван UsrNewVw.
Объект необходимо опубликовать.

2) После публикации объекта необходимо создать представление в БД. Для этого нужно выполнить скрипт:
CREATE VIEW UsrNewVw
AS (SELECT [Реализация подсчета %] AS UsrResult FROM [Case] WHERE [Опциональное условие])

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

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

Каким образом можно отладить конфигурационный сервис в bpm'online on-demand?

Нравится

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

пишите в логи и запрашивайте их с ТП

Ха-ха-ха, Дмитрий - это один из самых "быстрых" способов отладки.

В любом случае, как за один из возможных вариантов решения, спасибо)

Ха-ха-ха, Дмитрий - это один из самых "быстрых" способов отладки.

В любом случае, как за один из возможных вариантов решения, спасибо)

не, ну вы можете осуществить WS-канал между клиентом-сервером, обернуть отлаживаемый код в try-catch и ошибки отсылать на клиент, а на клиенте их обрабатывать и показывать как вам будет удобно, но это слегка тяжеловесно
мб вы не знаете, но в консоле браузера есть вкладка Network (chrome) где можно посмотреть подробно все запросы к серверу и ответы от него. Большинство ошибок с сервера вываливаются туда в читаемом виде. Но это не подходит для фоновых процессов (происходящих вне рамок текущей веб-сессии), в т.ч. БП.

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

Каким образом можно отладить конфигурационный сервис в bpm'online on-demand?

Нравится

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

Алла, здравствуйте!

Отладка конфигурационных сервисов, также как и остального C# возможна только в on-site, согласно статье https://academy.terrasoft.ru/documents/technic-sdk/7-7-0/otladka-server…

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

"Алла Савельева" написал:Каким образом можно отладить конфигурационный сервис в bpm'online on-demand?

Либо лепить костыли (как в старые добрые):
1) Скачать и установить дополнение "консоль sql запросов"
2) Добавить объект в конфигурацию с 1-2 varchar полями
2) В сервис напихать море try/catch + кучу логгеров в этот самый объект (чтобы писались ошибки/шаги выполнения и т.п.)

"Варфоломеев Данила" написал:
1) Скачать и установить дополнение "консоль sql запросов"

2) Добавить объект в конфигурацию с 1-2 varchar полями

2) В сервис напихать море try/catch + кучу логгеров в этот самый объект (чтобы писались ошибки/шаги выполнения и т.п.)

Здравствуйте!

Первый пункт лишний - можно создать справочник на основании созданного объекта и фильтровать по справочнику. Или выгрузить содержимое в Excel и изучать логи там.

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

Коллеги, добрый день. Возникла необходимость переименовать штатный раздел "Лиды" в "Запросы", и чтобы упоминания о лидах нигде не осталось. В результате везде где возможно это было сделано (имя объекта, названия колонок, название раздела и тп). При текущем подходе к переименованию раздела выявлены следующие проблемы:
1. В настройке доступов раздел по прежнему имеет коробочное название
2. В настройке колонок в мастере раздела/детали при необходимости достать колонки с связанной сущности происходит дублирование записей с новым и старым названием раздела:
screen

Подскажите где нужно дополнительно произвести переименование, чтобы уйти от лидов, а вместо этого отображалось "Запросы".

Нравится

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

Андрей, здрвствуйте!

При открытии связанных объектов происходит запрос на получение связанных объектов (на примере раздела "Контакты"):

{"rootSchemaName":"SysEntitySchemaReference","operationType":0,"filters":{"items":{"SchemaFilter":{"filterType":1,"comparisonType":3,"isEnabled":true,"trimDateTimeParameterToDate":false,"leftExpression":{"expressionType":0,"columnPath":"[SysSchema:Id:ReferenceSchema].Name"},"rightExpression":{"expressionType":2,"parameter":{"dataValueType":1,"value":"Contact"}}},"PackageFilter":{"filterType":1,"comparisonType":3,"isEnabled":true,"trimDateTimeParameterToDate":false,"leftExpression":{"expressionType":0,"columnPath":"SysSchema.SysPackage.SysWorkspace"},"rightExpression":{"expressionType":2,"parameter":{"dataValueType":1,"value":"07ba2497-d09b-40ef-92d3-d56f01d426fa"}}},"undefined":{"items":{"undefined":{"items":{"VwSysFilter":{"filterType":1,"comparisonType":10,"isEnabled":true,"trimDateTimeParameterToDate":false,"leftExpression":{"expressionType":0,"columnPath":"SysSchema.Name"},"rightExpression":{"expressionType":2,"parameter":{"dataValueType":1,"value":"VwSys"}}},"SysFilter":{"filterType":1,"comparisonType":10,"isEnabled":true,"trimDateTimeParameterToDate":false,"leftExpression":{"expressionType":0,"columnPath":"SysSchema.Name"},"rightExpression":{"expressionType":2,"parameter":{"dataValueType":1,"value":"Sys"}}}},"logicalOperation":0,"isEnabled":true,"filterType":6},"SysAdminUnitFilter":{"filterType":1,"comparisonType":3,"isEnabled":true,"trimDateTimeParameterToDate":false,"leftExpression":{"expressionType":0,"columnPath":"SysSchema.Name"},"rightExpression":{"expressionType":2,"parameter":{"dataValueType":1,"value":"SysAdminUnit"}}},"SysUserInRoleFilter":{"filterType":1,"comparisonType":3,"isEnabled":true,"trimDateTimeParameterToDate":false,"leftExpression":{"expressionType":0,"columnPath":"SysSchema.Name"},"rightExpression":{"expressionType":2,"parameter":{"dataValueType":1,"value":"SysUserInRole"}}}},"logicalOperation":1,"isEnabled":true,"filterType":6},"UsageTypeFilter":{"filterType":1,"comparisonType":3,"isEnabled":true,"trimDateTimeParameterToDate":false,"leftExpression":{"expressionType":0,"columnPath":"UsageType"},"rightExpression":{"expressionType":2,"parameter":{"dataValueType":1,"value":0}}}},"logicalOperation":0,"isEnabled":true,"filterType":6},"columns":{"items":{"ColumnCaption":{"caption":"","orderDirection":0,"orderPosition":-1,"isVisible":true,"expression":{"expressionType":0,"columnPath":"ColumnCaption"}},"ColumnName":{"caption":"","orderDirection":0,"orderPosition":-1,"isVisible":true,"expression":{"expressionType":0,"columnPath":"ColumnName"}},"Name":{"caption":"","orderDirection":0,"orderPosition":-1,"isVisible":true,"expression":{"expressionType":0,"columnPath":"SysSchema.Name"}},"Caption":{"caption":"","orderDirection":0,"orderPosition":-1,"isVisible":true,"expression":{"expressionType":0,"columnPath":"SysSchema.Caption"}}}},"isDistinct":true,"rowCount":-1,"rowsOffset":-1,"isPageable":false,"allColumns":false,"serverESQCacheParameters":{"cacheLevel":0,"cacheGroup":"","cacheItemName":""},"isHierarchical":false}

В таблице SysEntitySchemaReference есть ссылка на объект, у которого Caption - "Лид". Для решения можно попробовать обновить значение поля Caption в таблице SysSchema для объектов Lead, на которые есть ссылки в таблице SysEntitySchemaReference.

Но перед апдейтом настоятельно рекомендую сделать резервную копию.

Так же, для переименования Вам необходимо будет произвести поиск и замену в таблице содержащей данные локализации, пример того как переименовать вхождения "Лид" в "Запрос"

UPDATE dbo.SysLocalizableValue SET [Value] = REPLACE([Value], 'лид', 'запрос') COLLATE Cyrillic_General_CS_AI WHERE [Value] LIKE '% лид%' COLLATE Cyrillic_General_CS_AI;
UPDATE dbo.SysLocalizableValue SET [Value] = REPLACE([Value], 'лид', 'запрос') COLLATE Cyrillic_General_CS_AI WHERE [Value] LIKE 'лид%' COLLATE Cyrillic_General_CS_AI;
UPDATE dbo.SysLocalizableValue SET [Value] = REPLACE([Value], 'Лид', 'Запрос') COLLATE Cyrillic_General_CS_AI WHERE [Value] LIKE '% Лид%' COLLATE Cyrillic_General_CS_AI;
UPDATE dbo.SysLocalizableValue SET [Value] = REPLACE([Value], 'Лид', 'Запрос') COLLATE Cyrillic_General_CS_AI WHERE [Value] LIKE 'Лид%' COLLATE Cyrillic_General_CS_AI;

инструкции COLLATE необходимы для регистрозависимой замены.
Поскольку у слов "Лид" и "Запрос" идентичная форма корня слова, то замена не конфликтует с суффиксами, окончаниями словоформ во фразах и т.д.

Было бы хорошо, если бы это можно было делать в некотором мастере в bpm'online, а не выискивать все места.

Например, в мастере раздела доработать такую функциональность :wink:

"Алла Савельева" написал:

Было бы хорошо, если бы это можно было делать в некотором мастере в bpm'online, а не выискивать все места.

Алла, приветствую!

Мастера не позволяют изменять заголовки объектов. Заголовки изменяются не пользовательскими средствами. Но если есть желание что-то доработать, то можно))

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

Доброго дня
Я хочу в свому гріді зробити елементи лінками
пробую так

columnsConfig: [
                                    [
                                        {
                                            cols: 24,
                                            link: {
                                                name: 'captionLink',
                                                title: 'linkTitle',
                                                url: 'linkUrl',
                                                target: '_self'
                                            },
                                            key: [
                                                {
                                                    type: 'title',
                                                    name: {
                                                        bindTo: 'UsrRoom'
                                                    }
                                                }
                                            ]
                                        }
                                    ]
                                ],

Не виходить
Як можна це зробити?

Нравится

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

Добрый день, Сергей.

За функционал отображения ссылочных колонок в гриде отвечает метод addColumnLink из GridUtilitiesV2(NUI).

Я це роблю в окремому модулі
І в мене не працює метод addColumnLink
Спробував так робити

newCollection.each(function(item) {
                    Terrasoft.each(item.columns, function(column) {
                        var columnPath = column.columnPath;
                        var onColumnLinkClickName = "on" + columnPath + "LinkClick";
                        item[onColumnLinkClickName] = function() {
                            var record = item.get(columnPath);
                            if (!record) {
                                return "";
                            }
                            var recordId = record.value;
                            if (!recordId) {
                                return "";
                            }
                            return {
                                caption: "test",
                                target: "_self",
                                title: "test",
                                url: "https://fdsg.dsg"
                            };
                        };
                    }, this);
 
                }, this);

Нічого не виходить

Вам стоит провести отладку и посмотреть вызывается ли метод addColumnLink модуля GridUtilitiesV2, а также откуда он вызывается.

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

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

Нравится

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

Здравствуйте, Мария!

В базовой версии продукта в карточке контакта присутствует данный функционал.

.

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

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

Версия 7.10.

Задача следующая - сделать в двух местах текстовые поля в стиле редактирования email (см. скриншот 1)

На одной странице (типовая страница в разделе, наследуется от BaseModulePageV2, если это важно) удалось, на второй (вторая - фактически собрана вручную, это страница отдельной детали без создания раздела, наследуется напрямую от Базовой схемы карточки BasePageV2) - в консоль вываливается ошибка, как на скриншоте 2, после чего страница вообще не открывается.

Код, добавляющий поле на второй странице:

{
                "operation": "insert",
                "name": "UsrEmailTextf25a6297-d3f2-4636-b10a-f408a5edcf3f",
                "values": {
                        "layout": {
                                "colSpan": 12,
                                "rowSpan": 1,
                                "column": 0,
                                "row": 5,
                                "layoutName": "Header"
                        },
                        "bindTo": "UsrEmailText",
                        "labelConfig": {},
                        "enabled": true,
                        "contentType": 4,
                        "controlConfig": {
                                "imageLoaded": {
                                        "bindTo": "insertImagesToNotes"
                                },
                                "images": {
                                        "bindTo": "NotesImagesCollection"
                                }
                        }
                },
                "parentName": "Header",
                "propertyName": "items",
                "index": 5
        },

Как я понял, нужные элементы к полю добавляют вот эти строчки:

"contentType": 4,
                        "controlConfig": {
                                "imageLoaded": {
                                        "bindTo": "insertImagesToNotes"
                                },
                                "images": {
                                        "bindTo": "NotesImagesCollection"
                                }
                        }

Без этих элементов всё работает, но поле отображается как обычное текстовое поле input. Что ещё нужно добавить? Колонка UsrEmailText - строка бесконечной длины.

Нравится

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

Задача решена - проблема была в том, что на той же колонке висело бизнес-правило (её ещё и отображать надо в зависимости от условий).

Вместо правила условия видимости пришлось регулировать через visible bindTo.

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

Добрый день!

Есть ли возможность достать идентификатор звонка с коннектора для Asterisk или он запрограммирован только на определенные поля?

Если есть желательно минимальное описание как это делается =)

Есть ли возможность получить сессию авторизации через javascript в bpmonline какие методы вызывать для этого?

Нравится

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

Виталий, здравствуйте!

Идентификатор звонка пишется в поле IntegrationId (идентификатор звонка) объекта Call.

Касательно сессии авторизации, в документации есть статья -
https://academy.terrasoft.ru/documents/technic-sdk/7-10/autentifikaciya…

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

Здравствуйте!

На деталь было добавлено поле, указав принудительно местоположение с параметром index = 0.
При открытии страницы всё нормально.
0
Но при переходе DataGrid в MultiSelect режим перерисовывается вся часть items детали без учёта параметра index. И поле оказывается внизу.
1
Подскажите, как закрепить поле?

P. S. Была попытка перенести поле в tools детали, но тоже безрезультатно. Не удаётся в tools создать новую строку. Все элементы встают друг за другом и с перекрытием.

Нравится

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

Попробуйте так:

{
	"operation": "insert",
	"name": "FieldsContainer",
	"parentName": "Detail",
	"propertyName": "items",
	"index": 0,
	"values": {
		"itemType": 7,
		"items": []
	}
},
{
	"operation": "insert",
	"name": "GridContainer",
	"parentName": "Detail",
	"propertyName": "items",
	"index": 1,
	"values": {
		"itemType": 7,
		"items": []
	}
},
{
	"operation": "insert",
	"name": "Name",
	"parentName": "FieldsContainer",
	"propertyName": "items",
	"index": 0,
	"values": {
		"caption": "Default string"
	}
},
{
	"operation": "move",
	"name": "DataGrid",
	"parentName": "GridContainer",
	"propertyName": "items"
},

Делим "items" детали на 2 контейнера и растаскиваем в один все поля, в другой грид. У меня заработало.

P.S. если сделать так, как делали вы, прописать полю индекс 0, а гриду задать индекс 1

{
	"operation": "move",
	"name": "DataGrid",
	"index": 1
},

то при нажатии кнопки "множественный выбор" происходит какая-то дичь))

Данила, это то что я искал! В очередной раз выручили, спасибо!

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