Вопрос

Проблема с созданием миникарточки для нового раздела

Коллеги, всем привет!

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

Добавил миникарочку по руководству на академии: создал саму карточку и зарегистрировал её в БД с помощью SQL скрипта. При наведении на ссылку записи в реестре карточка появляется.

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

 Сейчас у меня стоит задача открывать миникарточку из карточки другой сущности.

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

createCertRequest: function() {
	this.openAddMiniPage({
		entitySchemaName: "CertifRequest"
		//valuePairs: this.getAddMiniPageDefaultValues(typeColumnValue)
	});
}

Где CertifRequest это нужный мне объект миникарточки. В результате при нажатии на кнопку появляется ShowBodyMask и ничего не происходит (ошибок в консоле нет).

Если поменять CertifRequest например на Activity - то появляется миникарточка активности.

Вопрос к знатокам: как вызвать созданную мной миникарточку в нужном мне методе и что я делаю не так?

Также непонятно как сделать чтобы миникарточка вызывалась при создании новой записи в разделе. Создание новой системной настройки по аналогии с существующими (Has{EntitiyMiniPageName}AddMode) ни к чему не привело.

Заранее большое спасибо за ваши ответы.

С уважением.

Нравится

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

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

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

"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: []
		};
	});

 

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