Вопрос

Добрый день! 

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

Данную задачу я решил разбить на две, первая есть добавление самой детали(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?

 

У меня такой же вопрос

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

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

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

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

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

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

subscriber: {
   "methodName": "sendSaveCardModuleResponse"
}

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

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

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

Войдите или зарегистрируйтесь, чтобы комментировать