Коллеги, всем привет!
Столкнулся с проблемой создания и открытия миникарточки для нового раздела.
Добавил миникарочку по руководству на академии: создал саму карточку и зарегистрировал её в БД с помощью SQL скрипта. При наведении на ссылку записи в реестре карточка появляется.
Сейчас у меня стоит задача открывать миникарточку из карточки другой сущности.
По аналогии со стандартным функционалом я забиндил свой метод на кнопку в нужной мне карточке и пытаюсь вызвать миникарточку как то вот так:
createCertRequest: function() { this.openAddMiniPage({ entitySchemaName: "CertifRequest" //valuePairs: this.getAddMiniPageDefaultValues(typeColumnValue) }); }
Где CertifRequest это нужный мне объект миникарточки. В результате при нажатии на кнопку появляется ShowBodyMask и ничего не происходит (ошибок в консоле нет).
Если поменять CertifRequest например на Activity - то появляется миникарточка активности.
Вопрос к знатокам: как вызвать созданную мной миникарточку в нужном мне методе и что я делаю не так?
Также непонятно как сделать чтобы миникарточка вызывалась при создании новой записи в разделе. Создание новой системной настройки по аналогии с существующими (Has{EntitiyMiniPageName}AddMode) ни к чему не привело.
Заранее большое спасибо за ваши ответы.
С уважением.
Нравится
Ох зря вы полезли в разбираться в миникарточках... Это — адовая помойка и я советую обходить её как можно дальше.
По теме: вы зарегистрировали миникарточку только для режима "предпросмотра". Для режима добавления надо прописать:
"MiniPageModes": { "value": [this.Terrasoft.ConfigurationEnums.CardOperation.VIEW, this.Terrasoft.ConfigurationEnums.CardOperation.ADD] },
в аттрибутах в схеме миникарточки. После этого должно заработать.
Если не заработало, отпишитесь, возможно надо ещё что-то в базе прописать(давно делал, сейчас не вспомню все детали).
Данила,
Большое спасибо за совет - все заработало!
Очень странно, что про это нигде ничего не написано.
Если не использовать миникарточки, есть ли какой-нибудь функционал создания модальных окон?
Например нужно всплывающее модальное окно с несколькими полями и потом на основании введенных данных создать запись или запустить БП.
С уважением,
Дмитрий
Тёскин Дмитрий Валерьевич,
Вариантов несколько:
1) Свой модуль со страницей редактирования (завтра если нужно, могу приложить файлы)
2) Terrasoft.inputBox (пример рассматривался тут)
3) Террасофт любит лепить ChooserModule, по сути что-то вроде inputBox (динамически генерит модуль на основании конфига). Надо будет посмотреть, в чём фишка и если что "позаимствовать" у них реализацию)
Тёскин Дмитрий Валерьевич пишет:
Очень странно, что про это нигде ничего не написано.
Как раз таки тут я не удивлён. Это терик. У них уже как 1.5 года sdk хромает, мягко говоря. Экспириенс разработки набивается исключительно на граблях.
Куллстори: добавил миникарточку, зарегистрировал в бд, нажимаю в разделе кнопку "добавить". Система увидела её существование в EditPages, начала грузить init миникарточки, а там какой-то умник написал что-то вроде
if (operation !== Terrasoft.ConfigurationEnums.CardOperation.ADD) {return}
ииии всё. миникарточка не открылась, полная карточка не открылась, висит маска загрузки, нигде ничего нельзя нажать, пользователь не понимает что делать.
Данила,
Реверс-инжинириг какой-то получается, а не разработка :)
1) Свой модуль со страницей редактирования (завтра если нужно, могу приложить файлы)
2) Terrasoft.inputBox (пример рассматривался тут)
3) Террасофт любит лепить ChooserModule, по сути что-то вроде inputBox (динамически генерит модуль на основании конфига). Надо будет посмотреть, в чём фишка и если что "позаимствовать" у них реализацию)
Был бы очень признателен за примеры первого и третьего метода.
С InpubBox вроде бы примерно понятно, но опять же непонятно что делать, если мне нужен LookUp в этом модальном окне.
Тёскин Дмитрий Валерьевич пишет:
Был бы очень признателен за примеры первого и третьего метода.
1) вызывается модуль так (не забудьте подключить ModalBox):
var data = { cardId: this.get("Id") //параметры для модуля }; var moduleId = this.sandbox.id + "_CustomModule"; this.modalBoxContainer = ModalBox.show({ minHeight: "1", minWidth: "1", maxHeight: "100", maxWidth: "100" }); ModalBox.setSize(750, 400); //ширина, высота var moduleConfig = { renderTo: this.modalBoxContainer, id: moduleId, parameters: { Parameters: data } }; this.sandbox.loadModule("UsrMyModule", moduleConfig);
Модуль
define("UsrMyModule", ["BaseSchemaModuleV2"], function() { Ext.define("Terrasoft.configuration.UsrMyModule", { extend: "Terrasoft.BaseSchemaModule", alternateClassName: "Terrasoft.UsrMyModule", initSchemaName: function() { this.schemaName = "UsrMyModuleSchema"; }, initHistoryState: Terrasoft.emptyFn, createViewModel: function() { var viewModel = this.callParent(arguments); var parameters = this.parameters; if (parameters) { viewModel.set("Parameters", parameters.Parameters); } return viewModel; } }); return Terrasoft.UsrMyModule; });
Страница редактирования
define("UsrMyModuleSchema", [], function() { return { attributes: { "Parameters": { "dataValueType": this.Terrasoft.DataValueType.CUSTOM_OBJECT, "type": this.Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN } }, messages: {}, details: {}, methods: { init: function(callback, scope) { this.callParent(arguments); } }, diff: [] }; });