Предпосылки:

В системе клиента есть N-количество пакетов привязанных к не активному хранилищу (снята галочку "Активное" в Списке хранилищ). Доступа к этому хранилищу нет.

Действия:

Пытаюсь обновить свой пакет из своего хранилища.

В итоге получаю ошибку :

"Хранилище "<Название не активного хранилища>" пакета "<Название НЕ моего пакета>" не активно"

Структура моего пакета не обновляется. 

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

Нравится

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

Унаследуйтесь от активного пакета или сделайте активным родителя

Унаследуйтесь от активного пакета или сделайте активным родителя

Из доступных только пакет Custom

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

Т.е. вы предлагаете создать пакет- заглушку, который будет наследоваться от всех нужных пакетов и уже от него отнаследовать свой пакет? 

 

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

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

Т.е. вы предлагаете создать пакет- заглушку, который будет наследоваться от всех нужных пакетов и уже от него отнаследовать свой пакет? 

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

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

Добрый день, коллеги. Просьба помочь начинающему в решении следующей задачи:

В детали на карточке редактирования нажимается кнопка +, открывается новая карточка того же объекта (Договор) с предзаполненными значениями, взятыми из исходного договора, в частности, номер.

Попытался переопределить базовый метод детали следующим образом:

addRecord: function() {               

                this.callParent(arguments);

                this.set("Hyperlink", "abc");

            }

но при открытии нового договора поле Гиперссылка пустое.

Заранее благодарен!

Нравится

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

Может сначала модифицировать а потом вызывать родителя?

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

addRecord: function() {               
   this.set("Hyperlink", "abc");
   this.callParent(arguments);
 
}

 

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

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

На карточке объекта, которую открываете нажатием на "+" в детали переопределите onEntityInitialized. Если нужно, то поставьте еще и проверку IsAddMode и isCopyMode

onEntityInitialized: function() {
this.callParent(arguments);
 if (this.isAddMode() || this.isCopyMode()) {
    //esq или что хотите
    //this.set("Hyperlink", "123");
 }
}

 

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

Прошу откликнуться, у кого был опыт по направлению интеграции bpmonline и Яндекс.Метрика/ Google Analytics

Конкретные задачи:

1.       Изображение удалено.CRM       ->       Google Analytics: (важно это сделать до запуска) передавать по Measurement Protocol все данные о статусе заявки, + передавать статусы отказа по заявке. Получим отчет по всей воронке, от кликов с различных источников до выдачи карты. Отказы нужны, что бы понимать качество источников, с которых приходит трафик.

2.       Изображение удалено.Google Analytics        ->        CRM: передавать данные о кликах и источниках трафика из GA в CRM. Это позволит все данные о воронке хранить на нашей стороне, плюс визуализировать отчеты по воронке внутренними инструментами от Террасофт (возможно для визиаулизации и не понадобиться Power BI)

3.       Изображение удалено.CRM        ->       Яндекс.Метрика: передавать все данные о статусе заявки, + передавать статусы отказа по заявке. Получим отчет по всей воронке, от кликов с различных источников до выдачи карты. Отказы нужны, что бы понимать качество источников, с которых приходит трафик. Необходимо для оптимизации контекстной рекламы на Яндексе.

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

Нравится

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

Делал загрузку данных с Яндекс.Метрика и самое сложное - это правильно составить запрос + обработать данные. 

Все из того, что вы описали, делается простыми http-запросами, так что проблем возникнуть не должно. Остаются нюансы площадок (кол-во запросов в день, полечение oauth-токена, на гугле вообще приложение вроде как надо регистрировать)

А в чем проблема со стороны сервера на C# делать запросы к этим сервисам. Делал в свое время к Гугл-аналитике по АПИ, прекрасно работало. Понятно, что сама Гугл-аналитика в ВРМ передавать ничего не будет.

А получалось связывать клики с конкретным клиентом, который заведен в CRM? Как определяли?

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

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

Помогите правильно составить фильтр. Не уверен, что вообще можно однозначно составить фильтр.

Итак, есть объект раздела, ObjectModule. На его странице есть деталь, её объект ObjectDetail.

У ObjectDetail есть колонки: Id, ObjectModuleId (используется для связи с объектом раздела), Parameter, Value (параметр и значение, оба - строки).

Нужно в запросе отобрать все записи объекта раздела  ObjectModule, в которых на детали ObjectDetail есть Parameter типа "A" со значением "Value" равным 1. То есть указан параметр соответствующего типа и имеет соответствующее значение.

Возможна ли вообще реализация такого фильтра - по детали?

Нравится

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

Вы хотите в разделе отобразить эти данные через расширенный фильтр? Или реализацию кодом?

Интересует именно код в запросе EntitySchemaQuery.

Я примерно понимаю, что нужна группа фильтров - один по значению Parameter и второй - по значению Value.

Но вот фильтроваться должно по данным на детали, а в результатах - записи объекта раздела.

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

на клиенте запрос.

Смородинов Денис,

Как выглядит текст для данного запроса на SQL?

Судя из Вашего описания, Вам подойдет такая реализация ссылка

Пример приведен с фильтрацией по одному условию, а Вам нужно добавить ещё один фильтр в subFilters.

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

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

Ищутся записи Account по заданному значению колонки SearchNumber  детали AccountCommunication в разделе Account? Если да, то наверно подойдёт, спасибо.

Смородинов Денис,

Ну если я вас правильно понял, то вы хотите где-то отобразить грубо говоря записи раздела, но только те которые содержат определенные значения на своей детали, получается вы фильтруете справочное поле(наверное), то тогда ваша задача решается примерно так:

За код не ручаюсь, не проверял, в блокноте накидал

 

"MyLookup": {
                    "dataValueType": this.Terrasoft.DataValueType.LOOKUP,
                    "lookupListConfig": {
                        "filters": [
                            function() {
                                var filterGroup = Ext.create("Terrasoft.FilterGroup");
 
								filterGroup.logicalOperation = Terrasoft.LogicalOperatorType.OR;
                                this.additionalFilter(function(collectionsId) {
									 for (var itemsFilters = 0; itemsFilters &lt; collectionsId.length; itemsFilters++) {
										var nameFilter = "RandomName";
										var lefExprs = (nameFilter + itemsFilters);
										var rih = (lefExprs + "additional");
										var innerFilterGroup = Ext.create("Terrasoft.FilterGroup");
										innerFilterGroup.logicalOperation = Terrasoft.LogicalOperatorType.OR;
 
										innerFilterGroup.add(lefExprs, Terrasoft.createColumnFilterWithParameter(
											Terrasoft.ComparisonType.EQUAL,
											"Id", collectionsId[itemsFilters]));
										filterGroup.add(rih, innerFilterGroup);
									}
                                }, this);
 
                                return filterGroup;
                            }
                        ]
                    }
 
 
 
 
 
 
					additionalFilter: function(callback, scope) {
						   var esq = Ext.create("Terrasoft.EntitySchemaQuery", {
								rootSchemaName: "ObjectDetail"
							});
							esq.addColumn("ObjectModuleId");
							esq.addColumn("Parameter");
							esq.addColumn("Value");
							esq.filters.add(esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "Parameter",
								"A"));
							esq.filters.add(esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "Value",
								"1"));
 
							esq.getEntityCollection(function(response) {
								var collectionId = [];
								var resultCollection = response.collection.getItems();
								for (var i = 0; i &lt; resultCollection.length; i++) {
									collectionId.push(resultCollection[i].get("ObjectModuleId"));
								});
								Ext.callback(callback, scope, [collectionId]);
 
							}, this);
						}

 

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

получается вы фильтруете справочное поле(наверное), то тогда ваша задача решается примерно так:

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

Смородинов Денис,

Ну если для раздела, то тогда да, так не подойдет, тогда надо как на том примере, что выше сбросили(ссылку) делать

Смородинов Денис пишет:

не до конца понял немного, что именно фильтруется в том примере..Ищутся записи Account по заданному значению колонки SearchNumber  детали AccountCommunication в разделе Account?

Да, Вы верно поняли. Выбираются все контрагенты, у которых значение в поле SearchNumber  детали AccountCommunication равно определенному номеру.

Коллеги, всё равно не получается..

Тут ещё и связь для детали своеобразно установлена, и фильтр тоже...

Итак, объект ObjectModule. В нём есть колонка-строка Request.

Объект ObjectDetail. В нём есть другая колонка-строка RequestDetail, деталь привязана по этим колонкам-строкам (Request == RequestDetail, не через справочные колонки). Ну и колонки Parameter, Value.

Далее конструкция:

var subFilters = Terrasoft.createFilterGroup();	
subFilters.addItem(Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "Parameter", "A"));
//subFilters.addItem(Terrasoft.createColumnInFilterWithParameters("Value", ["1","2"]));
filters.add(Terrasoft.createExistsFilter("[ObjectDetail:RequestDetail].Request", subFilters));

Вылезает ошибка: элемент коллекции с именем "ObjectDetail:RequestDetail].Request" не найден.

Кажется, разобрался.

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

Добрый день. 

В Мастере разделов, при сохранении изменений, или просто при соханении выдаёт ошибку:

SqlException. Cannot define foreign key constraint 'FKDLqrwK7RvllotJ6M6yTi9oYcUA' with cascaded DELETE or UPDATE on table 'Contact' because the table has an INSTEAD OF DELETE or UPDATE TRIGGER defined on it. Could not create constraint. See previous errors.

Подскажите решение.

 

Нравится

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

Если зайти в конфигурацию, открыть схему таблицы Contact и пересохранить её возникают ли какие-то ошибки или схема пересохраняется без ошибок?

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

данная ошибка возникает при обновлении структуры БД, не только в Контактах, но и в Проектах и т.п.

Каждый раз при сохранении, даже если не были внесены изменения возникает данная ошибка.

 

Crystal It Admin пишет:

Каждый раз при сохранении, даже если не были внесены изменения возникает данная ошибка.

1. Это Вы сейчас пишете о работе мастера раздела?

А в конфигурации схема таблицы пересохраняется?

2. Проверьте, если скомпилировать всю конфигурацию будут возникать ошибки?

3. До того, как начала возникать ошибка, выполнялись ли какие-то действия с Вашей стороны, после которых появилась данная проблема?

Судя по тексту, ругается на некий триггер на таблице контактов, который не даёт создавать каскадные связи со ссылкой на неё. А Вы в мастере разделов создали каким-то образом такую связь. Связь другого раздела с контактом.

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

1. да, о мастере.

2. в конфигурации при компиляции (Контакта) ошибок не возникает. Но при обновлении структуры БД выдаёт: 

Помилка

Не удалось обновить структуру для схем: Contact

3. Да, создал поле с привязкой к справочнику Проекты. 

Задача состояла в том, что б в карточне контакта можно было видеть все проекты, которые по нему ведутся.

 

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

Создали связь с справочником Проекты.

Задача состояла в том, что б в карточке контакта можно было видеть все проекты, которые по нему ведутся

 

Значит, при создании детали (или справочника) в её объекте у поля «Контакт» стоит галка «каскадная связь». А таблица контактов со своими триггерами таковую создать не даёт.

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

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

Или нужно полностью откатывать? Это песочница, если что.

В базе найти этот триггер и временно отключить. А потом разбираться, откуда он взялся и есть ли такой стандартно.

Или же найти в недавно изменявшихся таблицах эту связь FKDLqrwK7RvllotJ6M6yTi9oYcUA и удалить добавленное поле, которое её породило.

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

Добрый день!

Создаю процесс, который в деталь добавляет Результат выборки по объекту. 

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

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

Нравится

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

В элементе БП 'Добавить данные' такая возможность отсутствует.

Выбрать точное количество записей запроса можно в элементе БП 'Читать данные'. Для этого нужно перейти в расширенный режим параметров элемента бизнес-процесса и найти параметр 'Количество записей для чтения':

Вы можете решить Вашу задачу таким образом.

1. С помощью элемента 'Читать данные' вычитать нужное количество записей.

2. В параметры бизнес-процесса добавить параметр с типом "Коллекция объектов'  и там же указать, что в него должен поместиться результат выборки из элемента 'Читать данные'.

3. После элемента 'Читать данные' добавить элемент 'Задание-сценарий' и уже в нём скриптом вставить нужные данные коллекции из параметра бизнес-процесса.

Или же просто реализовать всю логику в элементе 'Задание-сценарий'.

В элементе БП 'Добавить данные' такая возможность отсутствует.

Выбрать точное количество записей запроса можно в элементе БП 'Читать данные'. Для этого нужно перейти в расширенный режим параметров элемента бизнес-процесса и найти параметр 'Количество записей для чтения':

Вы можете решить Вашу задачу таким образом.

1. С помощью элемента 'Читать данные' вычитать нужное количество записей.

2. В параметры бизнес-процесса добавить параметр с типом "Коллекция объектов'  и там же указать, что в него должен поместиться результат выборки из элемента 'Читать данные'.

3. После элемента 'Читать данные' добавить элемент 'Задание-сценарий' и уже в нём скриптом вставить нужные данные коллекции из параметра бизнес-процесса.

Или же просто реализовать всю логику в элементе 'Задание-сценарий'.

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

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



Как можно в bpm'online перевести кроме элементов интерфейса на несколько языков еще и данные?

Необходимо отображать на языке пользователя некоторые поля справочников (Name, Description), а также некоторые поля разделов (например, названия, описания сервисов или продуктов)

Нравится

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

В схеме таблицы для тех полей, которые хотите локализировать, установить признак 'Локализируемый текст' (Localizable Text):

 

По умолчанию для таблиц, которые наследованы от Base lookup, для полей Name и Description эти признаки уже установлены.

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

Для примера на скриншоте ключ выглядит следующим образом: Data:Contact.OfficialName:82d21f9f-4cec-4ff7-aeee-9255cc4f37f3. Contact - это название таблицы, OfficialName - название локализируемого поля, 82d21f9f-4cec-4ff7-aeee-9255cc4f37f3 - Id записи в таблице Contact, для которой делается перевод.

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

В схеме таблицы для тех полей, которые хотите локализировать, установить признак 'Локализируемый текст' (Localizable Text):

 

По умолчанию для таблиц, которые наследованы от Base lookup, для полей Name и Description эти признаки уже установлены.

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

Для примера на скриншоте ключ выглядит следующим образом: Data:Contact.OfficialName:82d21f9f-4cec-4ff7-aeee-9255cc4f37f3. Contact - это название таблицы, OfficialName - название локализируемого поля, 82d21f9f-4cec-4ff7-aeee-9255cc4f37f3 - Id записи в таблице Contact, для которой делается перевод.

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

Спасибо!



Но есть дополнительный вопрос. При обновлении переводов показываются только те записи, которые были добавлены после отметки поля как переводимого.



А как все уже существовавшие записи добавить для перевода?

Посмотреть в профайлере, какие записи добавляются в какие таблицы при добавлении записей в справочник, а потом по всем старым SQL-запросом по аналогии?

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

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

Нравится

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

Зайдите в настройку кэйса и посмотрите

1) панель кэйсов вашего раздела настроена на статус в продаже?

2) есть ли в панели шаг "продажа завершена с проигрышем" и с каких шагов на него можно попасть. При необходимости разрешите переход в "продажа завершена с проигрышем" со всех остальных шагов.

Зайдите в настройку кэйса и посмотрите

1) панель кэйсов вашего раздела настроена на статус в продаже?

2) есть ли в панели шаг "продажа завершена с проигрышем" и с каких шагов на него можно попасть. При необходимости разрешите переход в "продажа завершена с проигрышем" со всех остальных шагов.

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

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

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

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

 пример такой логики не можете показать или указать где можно глянуть?

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

Был создан бизнес-процесс, в нем создается активность типа "Выполнить задачу" с названием "Провести презентацию". В ней есть привязка процесса к обьекту. Запускается она по событию изменения стадии (в условии фильтр: "по процессу = да", "Id = Id текущей продажи". После перезагрузки страницы (чистки кэша) плитка появляется. Самое интересное что другие активности появляются нормально, до этой в предыдущем процессе и после нее нормально тоже в этом же процессе. Если отключить "по процессу = да" в сигнале - все идет нормально и появляется тоже

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

 

Нравится

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

Там, где комментарий «Привязка процесса к объекту» точно всё в порядке? Может, там элемент-разветвление забыли?

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

это модифицированный стандартный процесс, в той части он так и был

Так «был создан бизнес-процесс» или таки «модифицированный стандартный процесс»?wink

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

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

 создан на основе стандартного. Таймеров нет, иногда нормально появляется иногда нет, в том и проблема что без закономерности

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

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

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

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

По тому, что удалось найти:

VwEntityObjects - Представление, не подключается, даёт ошибку при компиляции: Ошибка сохранения: Внешний ключ "FKa8AInCEe1gKbjiHdyuiD9aCSbtM" ссылается на объект "dbo.VwEntityObjects", не являющийся пользовательской таблицей.

SysModule - список объектов, есть колонка Code, но не хватает всего. В частности, объекты деталей, в него уже не попадают.

Нравится

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

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

 

 

 

 

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

 

 

 

 

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