Приветствую!

 

При добавлении новой детали по новому объекту через дизайнер страницы есть поле Код, в котором автоматически генерируется именование следующего вида: Schemafdbaa726Detail

 

Корректируя данный код, условно, на MyObjectSchemaDetail на странице раздела в пакете всё равно создаётся схема со сгенерированным кодом и на странице раздела в коде в блоке details всё равно ставится сгенерированный автоматически код "schemaName": "Schemafdbaa726Detail"

 

Подскажите, это баг или фича? Просто к чему тогда поле Код, если после его заполнения его всё равно нигде нет? За что оно отвечает и где оно применимо, если, вообще, применимо?

 

Приложение версии 7.18.4.1532

На скриншоте ниже как раз форма и данное поле:

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

Нравится

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

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

https://community.terrasoft.ru/ideas/master-sozdaniya-detaley-i-normaln…

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

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

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

 

Кто-нибудь знает, возможно ли в модальное окно, описанное в данной статье, добавить детали?

Нравится

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

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

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

Добрый день!

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

Имеется деталь счета, нужно вскрыть колонку ( в скрине отметил ).

 

Как это можно сделать? 

 

Нравится

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

А не лучше ли настроить права на колонку? Так, чтобы пользователь никак её не мог увидеть (в аналитике, например)

Казанцев Андрей Юрьевич, да

Настройка колонок, выберите те колонки, которые вам нужны

Алексей-Карягин, это понятно, но нужно в зависимости от роли ее прятать

А не лучше ли настроить права на колонку? Так, чтобы пользователь никак её не мог увидеть (в аналитике, например)

Владимир Соколов,

можно подробнее где тыкать?

Бабахан Дастан пишет:

где тыкать?

Дастан, для начала можно сюда.

chapter_objects_permissions_section_permissions_administer_by_columns.png

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

Добрый день.

Как мне добавить в элемент лукапа деталь с выбором из справочника?

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

Нравится

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

Пример из нашей базы знаний (стиль сохранён).



Как запилить справочник со страницей редактирования И деталью в нагрузку.

1. Делаем деталь со страницей редактирования через мастер;

2. Создаем Schema of the Edit Page в конфигураторе, вставляем туда разметку, которую должна отображать наша страница редактирования детали:

 

define("UsrCompanyStructureTypePageV2", [],
    function() {
        return {
            entitySchemaName: "UsrCompanyStructureType",
            details: /**SCHEMA_DETAILS*/{
                "CompanyStructureDetail": {
                    "schemaName": "UsrCompanyStructureMemberDetailV2",
                    "filter": {
                        "masterColumn": "Id",
                        "detailColumn": "UsrType"
                    }
                }
            }/**SCHEMA_DETAILS*/,
            attributes: {},
            methods: {},
            rules: {},
            userCode: {},
            diff: /**SCHEMA_DIFF*/[
                {
                    "operation": "insert",
                    "name": "Name",
                    "values": {
                        "layout": {
                            "colSpan": 12,
                            "rowSpan": 1,
                            "column": 0,
                            "row": 0,
                            "layoutName": "Header"
                        },
                        "bindTo": "Name"
                    },
                    "parentName": "Header",
                    "propertyName": "items",
                    "index": 0
                },
                {
                    "operation": "insert",
                    "name": "CompanyStructureDetail",
                    "values": {
                        "itemType": 2
                    },
                    "parentName": "GeneralInfoTab",
                    "propertyName": "items",
                    "index": 1
                }
            ]/**SCHEMA_DIFF*/
        };
    });

3. Регистрируем страницу редактирования в БД через процедуру:

EXEC [dbo].[tsp_RegisterPage]
        @ModuleEntityName = N'UsrCompanyStructureType ',
        @PageName = N'UsrCompanyStructureTypePageV2',
        @TypeColumnUId = NULL,
        @TypeValue = NULL,
        @AddMenuCaptionRus = 'Добавить',
        @AddMenuCaptionEng = 'Add',
        @CardHeaderCaptionRus = NULL,
        @CardHeaderCaptionEng = NULL

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

insert into SysModuleEditLcz (id, CreatedOn, RecordId, ColumnUId, SysCultureId, Value)
select newid(), getdate(), 'D716F900-239E-44F3-98A8-DBBF3517FB9A', 'A19BF4BF-E22B-49B5-B6E0-918FF6290020', 'A5420246-0A8E-E111-84A3-00155D054C03', 'New'

RecordID – ID записи из SysModuleEdit нашей зарегистрированной страницы. Можно найти по CreatedOn (т.к. регистрация страницы по идее есть последняя операция то это будет последняя запись в таблице) или через имя схемы объекта по связи SysModuleEntityId – SysEntitySchemaUId из SysSchema

ColumnID – какая-то внутренняя константа, откуда берется не вникал

SysCultureID – ID языка на которой будет отображаться запись

Value – сам текст на кнопке

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

Пример из нашей базы знаний (стиль сохранён).



Как запилить справочник со страницей редактирования И деталью в нагрузку.

1. Делаем деталь со страницей редактирования через мастер;

2. Создаем Schema of the Edit Page в конфигураторе, вставляем туда разметку, которую должна отображать наша страница редактирования детали:

 

define("UsrCompanyStructureTypePageV2", [],
    function() {
        return {
            entitySchemaName: "UsrCompanyStructureType",
            details: /**SCHEMA_DETAILS*/{
                "CompanyStructureDetail": {
                    "schemaName": "UsrCompanyStructureMemberDetailV2",
                    "filter": {
                        "masterColumn": "Id",
                        "detailColumn": "UsrType"
                    }
                }
            }/**SCHEMA_DETAILS*/,
            attributes: {},
            methods: {},
            rules: {},
            userCode: {},
            diff: /**SCHEMA_DIFF*/[
                {
                    "operation": "insert",
                    "name": "Name",
                    "values": {
                        "layout": {
                            "colSpan": 12,
                            "rowSpan": 1,
                            "column": 0,
                            "row": 0,
                            "layoutName": "Header"
                        },
                        "bindTo": "Name"
                    },
                    "parentName": "Header",
                    "propertyName": "items",
                    "index": 0
                },
                {
                    "operation": "insert",
                    "name": "CompanyStructureDetail",
                    "values": {
                        "itemType": 2
                    },
                    "parentName": "GeneralInfoTab",
                    "propertyName": "items",
                    "index": 1
                }
            ]/**SCHEMA_DIFF*/
        };
    });

3. Регистрируем страницу редактирования в БД через процедуру:

EXEC [dbo].[tsp_RegisterPage]
        @ModuleEntityName = N'UsrCompanyStructureType ',
        @PageName = N'UsrCompanyStructureTypePageV2',
        @TypeColumnUId = NULL,
        @TypeValue = NULL,
        @AddMenuCaptionRus = 'Добавить',
        @AddMenuCaptionEng = 'Add',
        @CardHeaderCaptionRus = NULL,
        @CardHeaderCaptionEng = NULL

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

insert into SysModuleEditLcz (id, CreatedOn, RecordId, ColumnUId, SysCultureId, Value)
select newid(), getdate(), 'D716F900-239E-44F3-98A8-DBBF3517FB9A', 'A19BF4BF-E22B-49B5-B6E0-918FF6290020', 'A5420246-0A8E-E111-84A3-00155D054C03', 'New'

RecordID – ID записи из SysModuleEdit нашей зарегистрированной страницы. Можно найти по CreatedOn (т.к. регистрация страницы по идее есть последняя операция то это будет последняя запись в таблице) или через имя схемы объекта по связи SysModuleEntityId – SysEntitySchemaUId из SysSchema

ColumnID – какая-то внутренняя константа, откуда берется не вникал

SysCultureID – ID языка на которой будет отображаться запись

Value – сам текст на кнопке

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

Владимир Соколов,

Большое спасибо за информацию. Есть один момент. У меня отсутствует хранимка с таким названием. Постарался найти запрос на создание, но те, что удалось откопать, невалидны из-за измененных столбцов в таблице SysModuleEditLcz.

В этой таблице никакие изменения я, конечно, не делал)

Вроде, устанавливали. Вот здесь есть обсуждение про неё 

https://community.terrasoft.ua/questions/sozdanie-detali-s-neskolkimi-tipami-i-vypadausim-spiskom-na-knopke-add-dla-bpm-75

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

Здравствуйте, возможно ли открыть страницу записи детали по URL ссылке, используя Id записи?



Проблема, на странице редактирования "Контакта" есть деталь, хотелось бы получить url записей этой детали, при открытии детали в адресной строке браузера по прежнему такое 



http://[someSite]/Nui/ViewModule.aspx#CardModuleV2/ContactPageV2/edit/a36a54a2-3c6c-44eb-aa2f-a7e75305270a , 



не url детали.

Спасибо

Нравится

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

Добрый день!

Да, BPM не меняет адрес в адресной строке.

Адрес записи детали будет следующим:

ttp://[someSite]/Nui/ViewModule.aspx#CardModuleV2/[Страница редактирования записи детали]/edit/[Id записи детали]

Добрый день!

Да, BPM не меняет адрес в адресной строке.

Адрес записи детали будет следующим:

ttp://[someSite]/Nui/ViewModule.aspx#CardModuleV2/[Страница редактирования записи детали]/edit/[Id записи детали]

Сидоров Александр В.,

Спасибо, так раньше пробовал не получилось, оказалось одна буква была не в том регистре.

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

Добрый день! 

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

Данную задачу я решил разбить на две, первая есть добавление самой детали(1), вторая уже реализация группирования(2).

1.

1.1 Для добавления детали я добавил "схема модели представления детали с реестром".

1.2 Унаследовал ее от "FileDetailV2 ( UIv2 )".

1.3 Добавил следующий код: 

define("UsrDocumentsFileDetail", [],
    function() {
		return {
			entitySchemaName: "UsrDocumentsListImage"
		};
	}
);

1.4 Затем я добавил объект "UsrDocumentsListImage" унаследовав его от "Файл ( Base )".

В объект добавил Lookup на форму, на которой будет отображаться создаваемая деталь. Подробная структура объекта:

[Id],
[CreatedOn],
[CreatedById],
[ModifiedOn],
[ModifiedById],
[Name],
[Notes],
[LockedById],
[LockedOn],
[Data],
[TypeId],
[Version],
[Size],
[ProcessListeners],
[UsrApplicationFormId] -- Lookup на форму для отображения детали

1.5 На модель страницы формы я добавил следующий код: 

details: {
    // Настройка детали [(Просмотр изображений)Документы]
    "UsrDocumenctImageViewDetailElement": {
	    "schemaName": "UsrDocumentsFileDetail",
	    "filter": {
		    "detailColumn": "UsrApplicationForm",
		    "masterColumn": "Id"
    	}
    }
},
diff: [
    {
        {
			"operation": "insert",
			// Название детали.
			"name": "UsrDocumenctImageViewDetailElement",
			"values": {
				"itemType": Terrasoft.core.enums.ViewItemType.DETAIL,
				"markerValue": "added-detail"
			},
			// Контейнеры, в котором размещена деталь.
			// Деталь размещена на вкладке [ДОКУМЕНТЫ И ФОТО].
			"parentName": "Tabd3595bedTabLabel",
			"propertyName": "items",
			// Индекс в списке добавляемых элементов.
			"index": 1
		}
    }
]

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

Лог консоли браузера: 

Error while sending request 
	response status: 500 (ItemNotFoundException)
	request url: ../DataService/json/SyncReply/SelectQuery
	method: POST
	request data: {"rootSchemaName":"UsrDocumentsListImage","operationType":0,"filters":{"items":{"211c1207-255e-48c2-8eb6-e011b92fdfc6":{"filterType":1,"comparisonType"...
 
Uncaught{message: "Элемент коллекции с именем UsrDocumentsListImage не найден"}
 
user: Supervisor/7f3b869f-34f3-4f20-ab4d-7480a5fdf647
 file: http://localhost:83/0/configuration/d79cf7d52ccb236d2d57879ca34250e6ru-RU/FileDetailV2.js
 line: 183
 column: 7
 message: Uncaught Terrasoft.UnknownException: Элемент коллекции с именем UsrDocumentsListImage не найден 
 date: Mon Nov 12 2018 17:05:55 GMT+0300 (Москва, стандартное время)
 stack: undefined

Вопрос: 

Как исправить данную проблему и что означает данная ошибка? 

Нравится

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

Добрый день, а в таблице все поля корректно заполняются?

Попробуйте в объекте UsrDocumentsListImage переименовать поле UsrApplicationForm на UsrDocumentsListImage, возможно дело кроется в методе initParentEntity 

Колодяжный Владислав Эдуардович,

Спасибо за Ваш ответ! 

Заполняется все кроме  lockedById([uniqueidentifier] NULL) и lockedOn([datetime2](7) NULL). 

В случае переименования в объекте UsrDocumentsListImage поля UsrApplicationForm на UsrDocumentsListImage компилятор ругается:

Элемент c идентификатором "UsrDocumentsListImage" уже существует

Может, набор и имена полей в объекте и в select-запросе отличаются. Посмотрите в Fiddler-е наполнение request data полностью.

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

Добрый день! 

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

Вопрос:

Как этого можно достичь? Возможно как то переопределить базовую деталь с полями? Или возможно вместо "списка с иконками отображений" (в случае не возможности или трудоемкости достижения поставленной задачи) добавить поле с ссылкой на "хранилище"(вкладку) с изображениями(возможностью редактирования, т.е. добавления/удаления)?

  

Нравится

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

Такое сделано в дополнении Image preview for bpm'online.

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

Большое спасибо!

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

Добрый день!

 

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

В первом детале создал сообщение, и зарегистрировал в методе init.

init: function() {

                    this.callParent(arguments);

                    window.console.log("begin finance come here to show where error");

                    var messages = {

                        "GetFinanceBlock": {

                            mode: Terrasoft.MessageMode.BROADCAST,

                            direction: this.Terrasoft.MessageDirectionType.PUBLISH

                        }

                    };

                    this.sandbox.registerMessages(messages);

                    window.console.log("end finance come here to show where error");

}

 И при выборе запись из таблицы, вызывается метод  rowSelected, где публикуется сообщение:

rowSelected: function(primaryColumnValue) {

                    this.sandbox.publish("GetFinanceBlock", {arg1 : primaryColumnValue}, ["key"]);

                    window.console.log("end publish");

}

 

Во второй деталь метод init добавил subscribe для данного сообщение:

init: function() {

                    this.callParent(arguments);

                    window.console.log(" child come here to show where error");

                    var message={

                        "GetFinanceBlock": {

                            mode: Terrasoft.MessageMode.PTP,

                            direction: Terrasoft.MessageDirectionType.SUBSCRIBE

                        }

                    };

                    this.sandbox.registerMessages(message);

                    this.sandbox.subscribe("GetFinanceBlock", this.onMessageSubscribe, this, ["key"]);

                    window.console.log(" child end subscribe");

                },

                onMessageSubscribe: function(args) {

                    window.console.log("child call method subscribe args " + args + " " + JSON.stringify(args));

                },

И добавил метод обработчик onMessageSubscribe для анализа передачи данные из первого модуля.

 

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

 

Можете подсказать чем связано такая проблема.

 

С уважием, Асылан.

 

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

 

 

Нравится

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

Если я правильно вас понял, то у вас на странице находится 2 детали.

При выборе определенного значения на Детали №1, должна отобразиться деталь №2.

Сообщение вы публикуете в Детали №1, но принять это сообщение, вы должны на странице, где находятся обе эти детали.

Создайте атрибут, например, в который устанавливайте значение true, когда получено сообщение. А видимость детали повесьте на этот атрибут.

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

Да, вы все правильно поняли. Спасибо , попробую . 

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

Попробовал анологичная ситуация. Сообщение отправляется, но подписчик не получает.

 

Асылан,

А как вы подписываетесь на сообщение?

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

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

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

 

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

В целом, проблем с этим нет, но есть одна единственная проблема. У меня объявлена деталь на странице редактирования. В этом описании указан еще и subscriber, чтобы отрабатывать различные функции в случае возникновения событий об изменениях детали. Так вот визарды зачищают этот участок кода схемы страницы, что ломает бизнес логику страницы. Вопрос в том, каким еще способом можно определить подписку на стандартные события изменения детали, чтобы перенести код в секцию methods?

 

Нравится

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

О, да! И мне постоянно на это отвечала поддержка, что этого не может быть :)

Владимир Соколов,

а поддержка случайно не предлагала какие-то воркэраунды?

у меня, конечно, есть мысли, как "обезопасить" себя от перетерания, но это будет добавлять еще один пакет в систему и лишнюю замещающую схему

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

subscriber: {
   "methodName": "sendSaveCardModuleResponse"
}

где sendSaveCardModuleResponse имя метода.

Терещук Сергей,

оО! Спасибо! Помогло.

Терещук Сергей,

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

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