Добрый день, коллеги! Я думаю, что начинающим разработчикам этот пост пригодится.

По мотивам поста 2013 года, который нашелся в поиске по тексту ошибки.

https://community.terrasoft.ua/questions/osibka-pri-publikacii

Возникла проблема не точно такая же, но с аналогичным текстом ошибки: после изменения схемы, а именно небезопасного изменения\удаления поля из схемы, возникла ошибка: "У действия по проверке наличия в колонке Имя_колонки в схеме Имя_схемы условия обязательности не выбрано действие для исправления". Возврат к предыдущему состоянию схемы и выполнение требований изменить условие обязательности не помогли. Такая ошибка возникла на колонке, в котором уже были значения.

Если возникает такая ошибка при изменении поля, в котором уже имеются значения, но выполнение условий (установка\снятие обязательности и другие) не помогают, предлагаю следующий алгоритм решения.

1) Скопировать через update в другое поле значение проблемной колонки. Или выгрузить в excel пары Отображаемое значение-значение проблемной колонки для последующего импорта.

2) Очистить значения колонки во всех строках через update. Удалить из схемы проблемную колонку. Сохранить схему. Опубликовать схему.

3)  Добавить в схему идентичную колонку (лучше с другим кодом колонки)

4) Опубликовать схему

5) Скопировать через update\импортировать сохраненные данные колонки.

Как не допустить такую ситуацию?

1) Если не обходимо изменить поле на уровне БД, в котором уже есть значения, то:

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

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

Если есть дополнения\возражения, прошу в комментарии. Спасибо.

Нравится

Поделиться

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

Добрый день, Подскажите пожалуйста как сделать страницу где можно настроить фильтры для отчета как на скриншотах ?

Мне нужно сделать отчет с отфильтрованными данными

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

 

 

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

Нравится

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

Такие отчёты привязываются к разделу записями в SysModuleAnalyticsReport, где в полях указаны Id схемы отчёта и схемы его параметров. Для этого отчёта окно параметров задаётся в ContactAnniversariesReportFilter.

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

Спасибо, я разобрался и сделал такую же страницу в разделе котором мне нужно.

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

Как отловить событие выбора справочника ?

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

Нравится

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

Чем onchange плох?

this.on("change:UsrAuto", function() {
	this.UpdateFinanceTab();
}, this);

 

Чем onchange плох?

this.on("change:UsrAuto", function() {
	this.UpdateFinanceTab();
}, this);

 

Алексей-Карягин,

Да в принципе ни чем, просто я не знал о нём ..

спасибо огромное, это отлично работает

Подскажите, пожалуйста, куда вставить этот код. Если в methods, то как его связать с полем справочника? Если непосредственно в код объявления справочника, то в какое свойство? Спасибо.

Руслан Хасанов, 

этот код нужно вставлять тогда когда нужно прослушивание события, например после загрузки карточки в метод onEntityInitialized

 

methods: {
    onEntityInitialized: function(){
        this.callParent();
        this.on("change:Amount", function(){
            window.alert("lalala");
        }, this);
    }
}

 

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

Пытаюсь создать схему представления детали с полями по примеру из https://academy.terrasoft.ru/documents/technic-sdk/7-10/sozdanie-polzova... . Версия системы - 7.10.1.1161. В данном примере из документации при создании схемы представления детали с полями в качестве базового объекта нужно указать Base fields detail ( BaseFinance ), однако в выпадающем списке он отсутствует. Никак не могу понять, что именно я делаю не так. Буду признателен за любую помощь/подсказки.

Нравится

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

Проверьте, есть ли вообще в Вашей конфигурации такая схема, так как она есть только в банковских продуктах bpm'online — bank customer journey, bank sales и lending.
Если у Вас один из перечисленных выше продуктов и такая схема есть в Вашей конфигурации, тогда для того, чтобы её можно было указать в качестве базовой в Вашем пакете, Ваш пакет должен наследоваться от пакета Base Finance с этой схемой.

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

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

Возникла задача: при публикации сообщения в Ленту в карточке обращения, выполнять определенные действия.

Делаю бизнес-процесс, у которого в качестве входного элемента - сигнал, который срабатывает на добавление записи в объект "Сообщение\комментарий". Далее, как я понимаю, мне надо указать Id_Схемы, в которой было опубликовано сообщение (у меня это id раздела Обращение). Указываю Id_Схемы в фильтре входного элемента. Процесс не срабатывает.
Может кто-нибудь подскажет что я делаю не так? Как отловить только нужные мне сообщения?

P.S.: если указываю этот же Id_Схемы при вставке комментария в ленту из процесса (через элемент добавления данных -> в поле Схема указываю Id_Схемы), все отлично отрабатывает

Нравится

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

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

Нужно указывать не Id схемы, а UId.
UId можно получить следующим запросом:

select distinct UID from SysSchema
where Name = 'Case' /*Указываем название схемы*/
and ExtendParent = 0 /*Указываем, что нужна незамещенная схема*/

В разных конфигурациях Id схемы будет разным, но UId будет совпадать.

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

"Демьяник Алексей" написал:Нужно указывать не Id схемы, а UId.

Доброе утро. Спасибо, указала UId вместо Id_Схемы и получилось отловить комментарий, который был опубликован в обращении!

Но теперь возник другой вопрос - а как мне узнать в каком именно обращении было опубликовано сообщение?
Пробовала элементом "чтение данных" прочитать сообщение в ленте и у него поле "Экземпляр объекта" и потом найти обращение, у которого Id = экземпляр_объекта (который я получила при чтении данных). Но что-то не срабатывает.

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

Скриншоты чтений данных предоставьте, пожалуйста.

"Демьяник Алексей" написал:Скриншоты чтений данных предоставьте, пожалуйста.

Добрый день. Скриншот прикрепила.

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

Такая реализация будет работать, если было добавлено обычное сообщение, которое не является комментарием другого сообщения.

Если сообщение является комментарием, тогда необходимо дополнительно прочитать значение поля "Родительское сообщение". Сообщение является комментарием, если:

  1. У сообщения не заполнено поле "Экземпляр объекта"
  2. У сообщения заполнено поле "Родительское сообщение"

Также, такой процесс будет запускаться при добавлении сообщения в любом разделе системы (зависит от настроек стартового сигнала). Таким образом, если сообщение было добавлено в раздел "Активности", то чтение данных по объекту "Обращение" наврядли что-то прочитает.

Также хочу обратить внимание, что для раздела "Обращения" есть два объекта, которые хранят обычные сообщения и портальные сообщения. В зависимости от бизнес-задачи необходимо вычитывать данные из разных объектов.

"Демьяник Алексей" написал:Также, такой процесс будет запускаться при добавлении сообщения в любом разделе системы (зависит от настроек стартового сигнала).

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

"Демьяник Алексей" написал:Такая реализация будет работать, если было добавлено обычное сообщение, которое не является комментарием другого сообщения.

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

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

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

Хотелось бы произвести каким либо способом - пакетный или массовый импорт схем выгруженных в формате MD-файлов. (т.к. их достаточно много)

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

Нравится

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

Здравствуйте, Илья.

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

Подробное описание работы с утилитой и примеры вы можете найти по данной ссылке: https://academy.terrasoft.ru/documents/technic-sdk/7-9/rabota-s-utilito….

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

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

Подскажите, как можно осуществить проверку наличия таблиц и их колонок БД по именам, используя EntitySchemaManager в веб-сервисе? Чтобы проверить перед внесением изменений в БД.

Нравится

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

В Terrasoft 3.Х нет механизма EntitySchemaManager. Там всё устроено иначе.

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

В Terrasoft 3.Х нет механизма EntitySchemaManager. Там всё устроено иначе.


Понял. Спасибо.

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

Добрый день.

Потребовалось увеличить длину поля Description, было ограничение в 250 символов.
Что в итоге сделали: объект переопределили, добавили нужные колонки, а у уже существующего поля Description (был в базовом объекте) изменили тип со Строки(250 символов) на Строку бесконечной длины. Причем, это было сделано в тестовой конфигурации, в Default осталось как было.
Но теперь возникает ошибка при сохранении замещаемого объекта:

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

В связи с чем возникли вопросы:
1. А так можно было делать, изменить тип у поля в базовом классе? Если нет, то почему в интерфейсе это доступно? А если да, то как исправить ошибку?
2. Как теперь вернуть объект в исходное состояние? Импорт объекта из default не помогает.

Версия bpmonline 7.2

Нравится

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

Добрый день, покажите пожалуйста расширенные настройки замещающего объекта, вероятно вы поменяли не только длину строки, но и значения по умолчанию.
Так же посмотрите в какое положение были установлены поля: "Обязательная для заполнения" и "Значение по умолчанию" в базовом объекте. Если были установлены в "Нет". Попробуйте оставить значения в замещающем объекте как:
Обязательная для заполнения: Нет
Значение по умолчанию: (Нет) ...Не устанавливать значение по умолчанию.
Так же посмотрите в базе данных, в вашей таблице Reminding, какого типа сейчас колонка Description?

Так же:
1. Изменить тип базового поля можно, путем создания замещающего объекта и изменения типа поля. В вашем случае ошибка возникала по причине изменения других настроек поля, и программа вас просила выполнить обновление полей, которые после изменения таблицы, требуют наличия значения в изменяемой колонке.

2. Изменения типа колонок в таблицах распространяется на все рабочие пространства. Для того что бы тип колонки у объекта был таким же как был. Его нужно установить таким каким он был в вашем замещающем объекте и опубликовать.

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

Здравствуйте, коллеги, подскажите решение такой проблемы!

Система BPMonline Bank Sales 7.5

Задача: есть деталь "Удостоверение личности" в разделе Физ. лица. Необходимо при открытии карточки реактирования детали скрывать часть полей этой карточки в зависимости от значения чекбокса "Резидент/Нерезидент" карточки раздела этого Физ. лица.

Как решить задачу понятно. Вопрос в том, на какое событие при открытии карточки детали читать значение связанного поля "Contact" для дальнейшего построения EQS запроса и определения значения чекбокса "Нерезидент" объекта Contact?

На события init, initEntity, onRender запрос this.get("Contact") выдает ошибку "undefined"

Заранее благодарен за помошь!

Нравится

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

"Геращенко Александр Михайлович" написал:запрос this.get("Contact")

на самой детали срабатывает this.get("MasterRecordId");

К сожалению this.get("MasterRecordId"); тоже не работает - "undefined"

Александр, попробуйте в методе onEntityInitialized после вызова родительского метода (this.callParent(arguments);). В это время уже должны быть доступны значения инициализированных полей карточки.

Олег, спасибо, все получилось!

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

Добрый день,
Как можно создать другую копию схемы процесса.
Например, есть процесс Test1, надо создать почти точно такjй же процесс Test2

Нравится

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

А простое копирование сервиса диаграммы Вы не пробовали? потом в скопированом сервисе убираем или добавляем нужные элементы...
или у Вас БПМ-онлайн? или немного другая задача?

П.С. сорри, с утра туплю:smile: уже сама увидела, что BPM-online..

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

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

Как написала Анна, в файле метаданных процесса достаточно поменять имя процесса (поле "А2" в начале файла) и его уникальный UId (это должен быть GUID). Хочу только подчеркнуть, что UId процесса в файле встречается много раз, так что менять его лучше всего в режиме "Поиск и замена" в каком-нибудь текстовом редакторе. Иначе рискуете получить не открывающуюся в дизайнере процессов схему.
метаданные схемы процесса

Аналогично копируется и схема страницы: выгужаем в md-файл. В начале файла можно увидеть старые значения Id, Name и Caption.

{
  "Id": "feab5118-585f-4729-8920-587088a5b4d4",
  "ManagerName": "PageSchemaManager",
  "StateInSolution": 0,
  "Name": "ContractEditPage",
  "Caption": "Страница карточки договора",
  "ParentId": "85086f2a-99e3-4268-860c-d26f53ec85dc",
  "MetaData": "{\r
\n  \"MetaData\"": {\r

Спасибо,
Только что протестировал, все хорошо работает.

И вопросы на засыпку
1. Получается также можно скопировать и страницы?
2. После создания копии проблем с оригиналом не будет? Например с уникальными гуидами элементов процесса

Пардон Саша,
Ваше сообщение увидел чуть позже

И последний вопрос:

Как правильно перенести разработки на тестовую базу?

Как у нас сейчас реализована архитектура:
1. База разработки
2. Тестовая база
3. Боевая

Доработки делаются на базе разработки, а потом админы каждую неделю обновляет тестовую(перенос разработки - на тест).
Но бывает, когда надо срочно перенести разработку.
Раньше делали экспорт - импорт - публикация. Но это засоряет сервер приложении при публикации и в таблице "SysSchemaInSolution" создаются 2 копии этого элемента (1- е при импорте, 2-е при публикации)
Потом стали публикавать через VS, чтобы темпы не засоряли сервер. Но изменения происходят после перезагрузки сервера приложении

Как правильно перенести изменения не затрагивая работающих пользователей???

"AlikBory" написал:
2. После создания копии проблем с оригиналом не будет? Например с уникальными гуидами элементов процесса

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

Менять в копии процесса GUID-ы элементов не обязательно, т.к. в текущей реализации важна их уникальность в пределах одной схемы процесса. Два разных процесса могут иметь элементы с одинаковыми Id. Учитывая высокую вероятность наделать ошибок при тотальной замене GUID-ов по всей схеме, я бы настоятельно не рекомендовал это делать :smile:

"AlikBory" написал:

Как правильно перенести разработки на тестовую базу?

Как правильно перенести изменения не затрагивая работающих пользователей???


Штатным режимом переноса изменений как раз является "экспорт-импорт-публикация". При такой операции новые версии схем подхватываются системой незаметно для других пользователей.
В таблице "SysSchemaInSolution" хранятся все версии всех схем. В результате имеется возможность откатить некорректные изменения.
Если количество старых версий схем в "SysSchemaInSolution" для Вас критично, старые версии можно чистить из этой таблицы. Номер версии хранится в колонке Version, чем больше число - тем новее версия. Главное - чтобы для каждой конфигурации оставалась хотя бы одна запись для каждой схемы.

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