Здравствуйте.
Задаю здесь вопрос, т.к. в не нашёл описания таких вещей в SDK. Проблема заключается в следующем. Мне нужно (в BPMonline 7.6) разместить на странице две детали - одну справа от другой на одном уровне по горизонтали. Я пробовал определить на странице два группы следующим образом:

diff: [{
        "operation": "insert",
        "parentName": "Leftcontainer",
        "name": "MonthlyIncomesGroup",
        "propertyName": "items",
        "values": {
                itemType: Terrasoft.ViewItemType.CONTROL_GROUP,
                items: [],
                caption: {
                        "bindTo": "Resources.Strings.MonthlyIncomesGroupCaption"
                },
                controlConfig: {
                        collapsed: false
                }
        }
},
{
        "operation": "insert",
        "parentName": "RightContainer",
        "name": "MonthlyExpensesGroup",
        "propertyName": "items",
        "values": {
                itemType: Terrasoft.ViewItemType.CONTROL_GROUP,
                items: [],
                caption: {
                        "bindTo": "Resources.Strings.MonthlyExpensesGroupCaption"
                },
                controlConfig: {
                        collapsed: false
                }
        }
}
]

чтобы потом разместить в каждой из этих групп по одной детали. После запуска страницы, группа (с заголовком "ЕЖЕМЕСЯЧНЫЕ ДОХОДЫ") , размещённая в Leftcontainer позиционируется ниже, чем группа (с заголовком "ЕЖЕМЕСЯЧНЫЕ РАСХОДЫ") , размещённая в RightContainer, а мне нужно, чтобы они были на одном уровне по горизонтали. Кроме того, группа, размещённая в RightContainer слишком сильно смещена вправо, а мне нужно, чтобы она находилась ближе к левой группе. В вложенном файле прилагаю экранный снимок того, как эти группы сейчас размещены на экране. Как мне разместить две детали рядом на странице, чтобы одна была справа от другой и чтобы они были на одном уровне по горизонтали ?

Нравится

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

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

как я вам и писал ранее, для реализации вашей задачи требуется поподробнее познакомиться с разметкой Bootstrap, так же требуется поподробнее познакомиться с CSS 3.0, Для реализации вашей задачи действительно требуется создать в разметке 2 Контейнера, назвать их "Левый" и "Правый", а остальное, поведение и размещение контейнеров на странице вы делаете с помощью CSS стилей. Так же советую разобраться для начала со стандартными страницами "BasePageV2", "BaseSectionV2", какие уже стандартные контейнеры размещаются на странице, какие уже стандартные стили применены к данным контейнерам. И когда вы уже будите создавать свои 2 контейнера, вы будите понимать внутрь каких существующих контейнеров разместить свои, какие стандартные стили можно использовать, и какие свои требуется дописать.

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

Здравствуйте, Михаил. Я наследую свою страницу от "Базовая схема карточки (BasePageV2)" из пакета NUI. Я выбрал "Базовая схема карточки" в свойстве "Родительский объект" для моей страницы, когда её создавал. Если вы, как пишете, подготовите пример для моего случая, то буду вам очень благодарен.

Здравствуйте, Евгений!

Можно попробовать следующий вариант:
1) Сделать группу полей на нужной вкладке
2) Разместить на данной группе полей два Ваших контейнера, указав, их на одной строке и длиною строки [0;12] и [13;24] соответственно.

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

Не получается вывести checkbox на странице. Для его вывода написал следующий код.
В секции attributes:

"IsStreetInFIAS": {
        name: "IsStreetInFIAS",
        dataValueType: Terrasoft.DataValueType.BOOLEAN,
        type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
        value: false
}

В секции diff:

{
        "operation": "insert",
        "parentName": "Header",
        "propertyName": "items",
        "name": "IsStreetInFIAS",
        "values": {
                "bindTo": "IsStreetInFIAS",
                "caption": {
                        bindTo: "Resources.Strings.IsStreetInFIAS_checkbox_Caption"
                },
                "layout": {"column": 1, "row": 5, "colSpan": 1},
                "controlConfig": {
                        "className": "Terrasoft.CheckBoxEdit",
                        "checkedchanged": {
                                "bindTo": "OnIsStreetInFIASChanged"
                        }
                "checked": false
        }
}

При запуске процесса вывода страницы, содержащей CheckBoxEdit, в окне консоли отладчика браузера выводится следующее сообщение об ошибке: "Свойство checked Не было определено в классе Terrasoft.controls.Label". Как мне поправить исходник, чтобы чекбокс выводился?

Нравится

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

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

привожу пример как создать к примеру "Напоминания ответственному", как изображено на картинке ниже:

....
            attributes: {
                /**
                 * Напомнить ответственнному
                 */
                "UpoRemindToOwner": {
                    dataValueType: Terrasoft.DataValueType.BOOLEAN,
                    dependencies: [
                        {
                            columns: ["UpoRemindToOwner"],
                            methodName: "onRemindToOwnerChanged"
                        }
                    ]
                }
            },
....
            methods: {
                /**
                 * Обработчик события изменения поля Напомнить ответсвенному
                 * @protected
                 */
                onRemindToOwnerChanged: function() {
                    var remindToOwner = this.get("UpoRemindToOwner");
                    if (remindToOwner) {
                        var startDate = this.Terrasoft.deepClone(this.get("UpoStartDate"));
                        if (!Ext.isDate(startDate)) {
                            return;
                        }
                        startDate = this.Terrasoft.clearSeconds(startDate);
                        this.set("UpoRemindToOwnerDate", startDate);
                        this.set("UpoRemindToOwnerDateEnabled", true);
                    } else {
                        this.set("UpoRemindToOwnerDate", null);
                        this.set("UpoRemindToOwnerDateEnabled", false);
                    }
                }
            },
....
            diff: /**SCHEMA_DIFF*/[
                {
                    "operation": "insert",
                    "parentName": "GeneralInfoLeft_Remind",
                    "propertyName": "items",
                    "name": "UpoRemindToOwner",
                    "values": {
                        "bindTo": "UpoRemindToOwner",
                        "layout": { "column": 0, "row": 1, "colSpan": 12 },
                        "labelConfig": {
                            "caption": { "bindTo": "Resources.Strings.RemindToOwnerCaption" }
                        }
                    }
                },
                {
                    "operation": "insert",
                    "parentName": "GeneralInfoLeft_Remind",
                    "propertyName": "items",
                    "name": "UpoRemindToOwnerDate",
                    "values": {
                        "bindTo": "UpoRemindToOwnerDate",
                        "layout": { "column": 12, "row": 1, "colSpan": 12 },
                        "enabled": { "bindTo": "UpoRemindToOwnerDateEnabled" },
                        "labelConfig": {
                            "caption": { "bindTo": "Resources.Strings.RemindDateCaption" }
                        }
                    }
                },
            ]/**SCHEMA_DIFF*/,

если разделить на этапы:
1. В Аттрибутах создаем и описываем атрибут "UpoRemindToOwner" - это и есть CheckBox поле, система при генерации страницы и выводе на экран по типу поля сама определяет, что это CheckBox поле и выводит его на экран.
2. в Методах создаем метод "onRemindToOwnerChanged", который контролирует изменения реквизита на экране
3. Выводим на экран.

Выше привел пример кода.

Михаил, извините, а что это за контейнер GeneralInfoLeft_Remind? Какой-то контейнер, созданный самим разработчиком (в данном случае вами)?
У меня чекбокс так и не выводится ни с

"parentName": "GeneralInfoLeft_Remind"

ни с

"parentName": "Header"

Хотя ошибок ни при публикации модуля страницы, ни при запуске процесса, открывающего эту страницу, не выдаётся ни в первом, ни во втором случае.

Чекбокс появился. Я закомментировал

columns: ["UpoRemindToOwner"]

и он стал визуализироваться.

Большое спасибо за помощь, Михаил.

Евгений мой пример полностью копипастить не нужно, это пример.

"parentName": "GeneralInfoLeft_Remind"

да это мой GRID_LAYOUT. в вашем случае это может быть совсем иной GRID_LAYOUT, но не забываем следующее:
1. Прежде чем вывести информацию на экран требуется схематично, на листе пумаге, в графическом редакторе разрисовать схематично Контейнеры, Назначить им имя Классов (если потребуется верстка, то по имени класса контейнера, мы обращаемся к нему), и далее пишем код. Не забываем, что в BPMOnline используется технология Bootstrap для визуализации и отображении информации на экране.
2. Прошу отдельно изучить и ознакомиться как строятся и формируются страницы Bootstrap. Я это все вам Евгений рекомендую, чтобы вы в будущем, прежде чем писать код для начало рисовали схематично свою страницу. Понимали в каких контейнерах где что будет располагаться, понимали какие стили верстки требуется применить дополнительно, чтобы визуально было все эстетично и красиво.
3. На схематично созданной страницы, описали бы для начала какие поля будут изменяемыми, какие поля будут зависимыми. Какие события будут получены экранной формой, какие события будут переданы и какому адресату.
4. И только после этого приступать к программированию.

как я вам и говорил ранее Евгений. Чтобы мы с вами говорили на одном языке, прошу вас записаться на сайте Академия Террасофт на обучение по программированию на платформе.

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

Спасибо за помощь и поддержку, Михаил. Checkbox воспроизвёлся - отобразился на экране. Ошибок, при этом, не было. У меня сейчас такая ситуация, что приходится работать - рисовать страницы на Jscript и вместе с этим изучать этот язык, т.к. я с ним раньше никогда не сталкивался. Ещё раз благодарю за помощь.

Добрый день Евгений!!!

рекомендую в первую очередь прочесть информацию опубликованную на Академии террасофт. Вот ссылка на SDK по платформе SDK BPMOnline 7.6

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

BpmOnline 5.4
Подскажите, как работает это свойство.
Установил галочку в реестре, но никаких изменений в работе не обнаружил.
TreeGrid

Нравится

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

Иван, похоже в нынешних версиях платформы это свойство можно задать, но не используется.:confused:

Иван день добрый!!!

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

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

Добрый день Иван!!!

задача полностью понятна. Сегодня вечером разверну платформу BPMOnline 5.4 Service Desk, вспомню и проанализирую код. И подскажу вам как реализовать ваши пожелания. Спасибо!!!

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

Скажите, пожалуйста, как добавить в деталь ContactCommunicationDetailV2 поле логического типа ? Что для этого нужно написать в этом её модуле ?

Нравится

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

Добрый день Евгений!!!

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

Михаил, я прошу прощения - надо добавить логическое поле не в ContactCommunicationDetailV2, а в BaseCommunicationDetail из пакета NUI, заместив его своим клиентским модулем. Я уже заместил объект AccountCommunication из пакета Base (и добавил в замещающий объект логическое поле) и теперь разбираю листинг детали BaseCommunicationDetail в часности функцию getItemViewConfig(), формирующую конфигурацию представления элемента средства связи. Мне нужно будет, как я понимаю, заместить BaseCommunicationDetail своим клиентским модулем детали и в замещающем - добавить это логическое поле. А где (в каком месте исходника) и как (с точки зрения мнемоники Javascript) ? Это логическое поле должно визуализироваться в записи детали (в UI) в виде галочки (чекбокса).

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

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

Так.... Михаил, разрешите некоторое время... Сейчас попробую уточнить.

Нужно в каждой записи детали: средство связи и справа от него рядом галочка. Т.е., например: поле ввода номера телефона и рядом справа - галочка. А подпись у галочки - "Основной". Помогите, пожалуйста.

Добрый день Евгений!!!

вот как вы желаете. Вопрос чтобы вам помочь, реализовать у себя, и поделиться куском кода. К примеру представим в каждом добавляемом поле Будь то "Телефон", "Email" и т.д. появилась данная галочка. Вопрос нажав на нее что должно происходить, какое поведение вы закладываете в данные галочки? Что должно происходить на экране, что должно происходить в Базе данных. Уточните пожалуйста, тогда еще раз повторюсь. Реализую у себя и поделюсь куском кода. Может и мне в моих проектах будет полезно :smile:

Минуту....

Она должна отмечать основное средство связи с контактным лицом. Ведь не зря её подпись - "Основной". Т.е., если выведено несколько средств связи, например, Телефон домашний и Телефон мобильный, то установить её можно только для одного из них. Т.е., она (в установленном состоянии) указывает основное средство связи из имеющихся у данного контактного лица. И галочка - не внутри поля номера телефона или e-mail, а рядом с ним справа от него. А в БД, по сути, соответствующее её логическое поле в записи при её установке изменяет значение с false на true, а при сбросе - обратно.

Михаил, помогите, пожалуйста.

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

Хорошо, спасибо. Я пока создал модуль, замещающий BaseCommunicationDetail.

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

В модуле страницы на BPMonline 7.6, который унаследован от модуля Базовая схема карточки, переопределил функцию commandLineVisible из модуля MainHeaderModule следующим образом:

сommandLineVisible: function() {
        var isCommandLineVisible = false;
        this.set("IsCommandLineVisible", isCommandLineVisible);
        this.reloadCommandModule();
}
Но не работает. Окно командной строки с надписью "Что я могу для вас сделать GO" продолжает оставаться на экране. Что я делаю неправильно ?

Нравится

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

Добрый день Евгений!!!

я вам еще в предыдущем посте писал, что разбираться нужно с модулем MainHeaderModule, и следовательно замещать требуется модуль MainHeaderModule, а в замещенном модуле перегружать и править функцию сommandLineVisible, вот так нужно поступать. Только не забываем, что при замещение модулей в системе требуется в новый модуль переносить вручную верстку, зависимости, описание сообщений, и в замещенный модуль копируем полностью текст, находим требуемую функцию и правим. Подругому не у вас не получиться.
поэтому в карточке что зависит от базовой схемы карточки ничего перегружать (из функций) не нужно.

Н-да. Что так, что так - канительно. А метку "Страница N из M" как можно перетащить на свою страницу? Или она тоже в MainHeaderModule ?

"Бузин Евгений" написал: А метку "Страница N из M" как можно перетащить на свою страницу?

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

Случайно опубликовал 2 раза свое сообщение. Жду от вас Евгений пояснений. Спасибо!!!

Здравствуйте, Михаил. У меня в задании - сделать страничку. И в её правом верхнем углу должна быть метка "Страница N из M". Значение N должно соответственно изменяться от странице к странице. Подобная страница (с такой меткой) была создана у нас в BPMonline 7.2. Но поскольку правила написания кода страницы на Javascript в 7.2 и в 7.6 различаются, то просто скопировать - не получится.

Добрый день Евгений!!!

я конечно уже 7.2 подзабыл, но принцип программирования, он не сильно претерпел изменений. Если вам реально нужна помощь, сбросьте информацию какую конфигурацию 7.2 вы использовали, где в 7.2 была данная метка, и где в 7.6 вы желаете реализовать данный функционал. Я вам помогу или советом или кусок кода сброшу. Но если честно я немного плохо представляю, чем на практике полезна данная метка "Страница N из M".

Есть несколько контактных лиц и информация о каждом из них - на отдельной странице.

Добрый день Евгений!!!

немного конечно я так и не понял, что вы желаете. Я сегодня разверну 7.2 посмотрю о чем вы говорите. Но если вас не затруднит, не могли бы вы сбросить скриншот как бы вы желали в 7.6 это видеть. Пусть даже скриншот будет из 7.2. Спасибо!!!

Михаил, я прикрепил файл. В нём картинка.

Все теперь понял про, что идет речь. Это у вас были реализованы "мастер создания контактных лиц". Теперь чтобы мы могли далее говорить на одном языке. Уточните пожалуйста текущую версию 7.6, т.е название и билд. Я ознакомлюсь с данной конфигурацией. А после уже задам вопрос, где и что конкретно вы желаете реализовать. Я думаю по сравнению с 7.2 функционал в 7.6 сильно изменился.

Название: BPMonline Bank Sales, а какой билд - не знаю.

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

SysUserInRole - потрібно завести архів ролей користувача, щоб можна було визначити чи входив користувач до складу підрозділу в заданий період.

Створив супутній об'єкт [SysUserInRoleHistory] для того, щоб у нього писати вилучені ролі користувача.
Далі спробував створити обробник для SysUserInRoleDeleting, але при натисненні відповідної кнопки обробник не створився.

Перевірив для декількох таблиць типу [Sys*] - ситуація аналогічна.

В самому об'єкті присутні повідомлення
SysUserInRoleInserted
SysUserInRoleSaving
SysUserInRoleSaved
SysUserInRoleDeleting

Але, як вже написав, при натисненні кнопки переходу до відповідного обробника в дизайнері процесів нічого не створюється. Спробував створити обробники вручну - не спрацьовують.

Як вийти з положення?

Нравится

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

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

А почему не отслеживать изменения не через обработчик событий объекта, а через обычный бизнес процесс?

Начальный элемент - сигнал по событию добавления/изменения/удаления записи по объекту "Роль пользователя", а дальше уже стандартными элементами бизнес процесса организовать чтение записи, по которой запустился процесс, а также добавление записи о событии в созданный Вами объект.

Стереотип спрацював - тріггер на таблицю :)

А если действительно триггер, на уровне SQL?

Ну це, начебто не в стилі ?..

Зато гарантированно. Логика на объекте не сработает, если удалять при помощи класса Delete или вообще прямо из базы.

Привет всем!!!

а зачем удалять напрямую из базы. А как же проверка (перед удалением) имеет право пользователь выполнять удаление или нет. Если создавать триггеры, бизнес-процессы, то считаю, что будет полная каша. Лучше уже или C# или на худой конец, что-то небольшое выполнить на клиенте на JavaScript. Привыкать считаю нужно к хорошему, пока лучше чем C# в мире не придумали.

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

Добрый день
Помогите написать на С#:

Если такое-то поле заполнено, то...

Нравится

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

Получите значение поля и сравнивайте с 0, Guid.Empty и т.п. в зависимости от типа.

тип - целое число у этого поля.
Подскажите, пожалуйста, как условие (если значение не равно 0) написать на С# ?

if (Page.DataSource.ActiveRow.GetTypedColumnValue<int>("MyField") != 0) {
//do something
} 

Добрый день

В обработчике нажатия на ОК на странице карточки задачи написала:

if ((Page.DataSource.ActiveRow.GetTypedColumnValue("HTrudEdit") = 0)&&(Page.DataSource.ActiveRow.GetTypedColumnValue("MTrudEdit") = 0))
{
Page.BaseMessagePanel.AddMessage(Warning, "Заполните трудозатраты", MessageType.Warning);
return false;
}
else
{
return true;
}

В итоге при опубликовании система выдала ошибки:

В чем моя ошибка, подскажите, пожалуйста?

Вы используете =, а надо ==.

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

Доброго времени суток всем.
Дайте, пожалуйста, ссылку на примеры (или ещё лучше - руководства) по написанию, на Javascript, модуля закладки и модуля детейла, на руководство о том, как связать модуль закладки с модулем страницы, на которой эта закладка должна быть расположена. И, если это будут всего лишь примеры, а не руководства, то чтобы были пояснения - комментарии там что ли. Но, опять же, желательно, чтобы эти комментарии были понятны для "чайника".

Нравится

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

Какая версия и какой продукт Вас интересует?

BPMonline 7.6 Bank Sales

Евгений,

Вам необходимо ознакомиться с информацией в SDK:
http://academy.terrasoft.ru/documents/?product=SDK&ver=7.6.0

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

Спасибо. Обращаюсь к SDK по ходу работы, когда есть время - много делать приходится.

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

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

Нравится

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

Если речь о Service Desk, то см.в странице BaseServiceRequestInBPMonlineEditPage функцию GetServicePlannedWorkingTime и то место, где она вызывается, блок БП «Установить Плановые Трудозатраты и Показать Сообщение».

Добрый день! А подскажите, где собственно в интерфейсе Сервис Деска есть блок бизнес-процесса «Установить Плановые Трудозатраты и Показать Сообщение» ?

Увидела, что это ветка про 5.х.
Спасибо, тогда не нужно, думала речь про 7.х

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

Реализацию подсчета трудозатрат, в версии продукта 7.х, есть возможность реализовать созданием БП, который будет считать время между созданием и завершением всех активностей по определенному ID обращения.

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

Здравствуйте. Те, кто хорошо знает модуль BankModuleUtilites - скажите, пожалуйста, что представляет собой конструкция utilites, начинающаяся с 172-й строки в этом модуле и заканчивающаяся на 357-й строке? Это какой-то особый список функций ? Или что ?

Нравится

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

А BankModuleUtilites — это в какой версии и какой верикали системы?

Модуль BankModuleUtilites - в версии BPMonline 7.2. Используется в приложении кредитного конвеера для Гагаринского банка.

Здравствуйте. Функции, описанные в модуле BankModuleUtilities, используются в продукте bpm'online bank 7.2.2 для создания представлений модулей. Эти функции возвращают конфигурации элементов управления, на основе заданных параметров.

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