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

Нравится

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

Добрый день.

 

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

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

 

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

Ivan Kuchma,

Такой вопрос, можно ли добавить уже созданную деталь просто на форму мини-карточки при помощи разработки? И обязательно ли создавать под это контейнер с полями tabs?

Глеб Макаров,

рекомендую обратить внимание на похожую тему  для миникарточки с детали, а также на статью о реализации сообщений между деталями через sandbox.
Детальнее работе с sandbox можете ознакомится в статье: https://academy.terrasoft.ua/docs/7-18/developer/front-end_development/…

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

Возникла необходимость дополнительной настройки html редактора. Собственно, нужно установить другой шрифт по умолчанию и его размер, а также изменить высоту html поля. Можно ли это как-то сделать?

Нравится

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

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

HTML-редактор описан в схеме HTMLCodeEditModalBox. Можно заместить эту схему, и на вкладке "Пакет разницы" прописать свои стили.

Примечание. После замещения базовых схем могут возникнуть ошибки при обновлении.

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

- создать свой модуль (пример модуля - CommonCSSV2);
- во вкладке "Пакет разницы" прописать свои CSS (для понимания какие параметры стиля Вам необходимо использовать поможет, например, вкладка Elements в консоли браузера, т.е. отладка приложения). Стоит учесть, что необходимо будет изменять настройки самого контрола, не label;
- в замещающей схеме страницы редактирования раздела, в define прописать пользовательский модуль. Например:

define("DashboardDesignerV2", ["css!DashboardDesignerV2CSS", "CommonCSSV2"]
- в diff подключить пользовательский CSS класс.

Одеяненко Юлия,

Я, наверное, немного неверно высказался. Мне нужно донастроить hmtl-поля, которые используются, например, для ввода примечаний (Terrasoft.ContentType.RICH_TEXT). Например, сменить шрифт по умолчанию на Times New Roman 12.

Получилось сделать высоту с помощью jQuery в onEntityInitialized

var htmlEdit = $("#MyFieldHtmlEdit-html-edit");
htmlEdit.height(200);

Но в таком случае высота сбрасывается на изначальную, например, если добавить запись в деталь (с заходом на страницу записи на детали)

Бершеда Д. Н.,

действительно, неправильно поняла.

Касательно кастомизаций поля "Примечания":

- пользовательский шрифт будет сбрасываться на дефолтный из-за хардкода в схеме HtmlEditModule;

- высота поля также указана конкретная, в этой же схеме.

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

Одеяненко Юлия,

а возможно создать свой контрол на основе базового html-поля, в котором уже будет всё настроено как надо, и потом поместить его на страницу. Есть примеры подобного?

Бершеда Д. Н.,

Контрол свой создать можно, но примеры у нас, к сожалению, отсутствуют. Можно в качестве примера использовать реализацию того же базового html-поля.

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

Добрый день. Столкнулся со следующий проблемой при использовании html-полей. Если на странице присутствует несколько таких полей, то загрузка изображения в одно из них приведёт к загрузке такого же изображения и во все остальные html-поля, загруженные на странице. Т.е., если на другой вкладке есть html-поле, но вкладка ещё ни разу не открывалась, то всё хорошо. Но если второе поле на той же вкладке, или другая вкладка уже была открыта, то изображение будет загружено сразу во все. Пример diff-а ниже:

	{
		"operation": "insert",
		"name": "DescriptionHtmlEdit",
		"values": {
			"contentType": Terrasoft.ContentType.RICH_TEXT,
			"layout": {
				"colSpan": 24,
				"rowSpan": 1,
				"column": 0,
				"row": 1
			},
			"bindTo": "Description",
			"labelConfig": {
				"visible": true
			},
			"controlConfig": {
				"imageLoaded": {
					"bindTo": "insertImagesToNotes"
				},
				"images": {
					"bindTo": "NotesImagesCollection"
				}
			}
		},
		"parentName": "ProductInfoBlock",
		"propertyName": "items",
		"index": 2
	},
	{
		"operation": "insert",
		"name": "AdditionalDescriptionHtmlEdit",
		"values": {
			"contentType": Terrasoft.ContentType.RICH_TEXT,
			"layout": {
				"colSpan": 24,
				"rowSpan": 1,
				"column": 0,
				"row": 2
			},
			"bindTo": "AdditionalDescription",
			"labelConfig": {
				"visible": true
			},
			"controlConfig": {
				"imageLoaded": {
					"bindTo": "insertImagesToNotes"
				},
				"images": {
					"bindTo": "NotesImagesCollection"
				}
			}
		},
		"parentName": "ProductInfoBlock",
		"propertyName": "items",
		"index": 3
	},

Сталкивался ли кто-либо с подобной проблемой? 

Нравится

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

ага. расковыривали методы insertImagesToNotes и NotesImagesCollection и правили их. Ибо по-умолчанию система работает с одним полем Notes, и одной коллекцией под картинки NotesImagesCollection. 
Вам нужно будет под каждый контрол добавлять ещё 1 коллекцию под images

Варфоломеев Данила,

Да, в insertImagesToNotes, а точнее в методе, который он вызывает захардкодили NotesImagesCollection. То, что биндится в контрол конфиге на что-то влияет?

Бершеда Д. Н. пишет:
То, что биндится в контрол конфиге на что-то влияет?

Конечно)

накидаю пример как мы это решили. методы:

insertImagesToNotes: function(files, tag) {
	this.Terrasoft.each(files, function(file) {
		this.addImageToNotes(file, tag);
	}, this);
},
addImageToNotes: function(file, tag) {
	FileAPI.readAsDataURL(file, function(tag, event) {
		if (event.type !== "load") {
			return;
		}
 
		var imagesCollection = this.get(tag);
		var image = this.getNotesImagesCollectionItem(event.target.name, event.result);
		imagesCollection.addItem(image);
	}.bind(this, tag));
},
 
init: function() {
	this.callParent(arguments);
	this.initImagesCollections();
},
initImagesCollections: function() {
	this.set("TESTImagesCollection", this.Ext.create("Terrasoft.BaseViewModelCollection"));
	this.set("TEST2ImagesCollection", this.Ext.create("Terrasoft.BaseViewModelCollection"));
	this.set("TEST3ImagesCollection", this.Ext.create("Terrasoft.BaseViewModelCollection"));
}

ну и добавление 1 элемента в дифф:

{
	"operation": "insert",
	"name": "TEST",
	"values": {
		"layout": {
			"colSpan": 24,
			"rowSpan": 2,
			"column": 0,
			"row": 0,
			"layoutName": "ProcessingTabGridLayout588b2b18"
		},
		"labelConfig": {
			"visible": false
		},
		"controlConfig": {
			"imageLoaded": {
				"bindTo": "insertImagesToNotes"
			},
			"images": {
				"bindTo": "TESTImagesCollection"
			}
		},
		"enabled": true,
		"tag": "TESTImagesCollection",
		"contentType": 4
	},
	"parentName": "ProcessingTabGridLayout588b2b18",
	"propertyName": "items",
	"index": 0
}

И далее в диффе по аналогии. Получается удобно. Для каждого элемента дописываем только новую коллекцию в initImagesCollection и через tag кидаем нужную коллекцию для конкретного элемента.

Попробовал добавить свою ImagesCollection и обработчик. Но что-то не получается. После добавления картинки теперь ничего не происходит. Что я мог упустить? Пример кода ниже:

//в diff
{
	"operation": "insert",
	"name": "DescriptionHtmlEdit",
	"values": {
		"contentType": Terrasoft.ContentType.RICH_TEXT,
		"layout": {
			"colSpan": 24,
			"rowSpan": 1,
			"column": 0,
			"row": 1
		},
		"bindTo": "Description",
		"labelConfig": {
			"visible": true
		},
		"controlConfig": {
			"imageLoaded": {
				"bindTo": "insertImagesToDescription"
			},
			"images": {
				"bindTo": "DescriptionImagesCollection"
			}
		}
	},
	"parentName": "ProductInfoBlock",
	"propertyName": "items",
	"index": 2
},
 
//в атрибутах
"DescriptionImagesCollection": {
	type: this.Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN
},
 
//в методах
 
insertImagesToDescription: function(files) {
	this.Terrasoft.each(files, function(file) {
		this.addImageToHtmlField(file, "DescriptionImagesCollection");
	}, this);
},
 
addImageToHtmlField: function(file, collectionName) {
	FileAPI.readAsDataURL(file, function(event) {
		if (event.type !== "load") {
			return;
		}
		var imagesCollection = this.get(collectionName);
		var image = this.getNotesImagesCollectionItem(event.target.name, event.result);
		imagesCollection.addItem(image);
	}.bind(this));
},

 

Бершеда Д. Н. пишет:
Что я мог упустить?

инициализацию коллекции в initImagesCollections

 

Варфоломеев Данила,

Я её добавлял, только в onEntityInitialized. Попробовал Ваш вариант - всё получилось. Спасибо!

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

Добрый день!
Вводная: Клиенту не удобно использовать деталь характеристика у Продукта. Хочет все поля заполнять в самой карточке. Характеристики разные в зависимости от типа продукта.
Простое решение: Добавить все поля-характеристики в карточку и скрывать в зависимости от типа.
Вопрос: Но хотелось бы сделать красиво. Есть ли возможность для BPMOnline 7.8 отображать поле и привязывать его к колонке объекта на этапе инициализации карточки редактирования? Ext.JS позволяет это сделать, но попытки реализовать по примерам для него к успеху не привели. Прошу помочь небольшим примером.

Нравится

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

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

Поля можно скрывать бизнес-правилами. Пример:
https://academy.terrasoft.ru/documents/technic-sdk/7-8/pravilo-bindpara…

"Мотков Илья" написал:

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

Поля можно скрывать бизнес-правилами


Здравствуйте, Илья! Да, через бизнес-правила тоже можно. Но, и скрытие полей кодом, и через правила требует внесения изменений в код, каждый раз, при добавлении нового типа продукта. Необходимо сделать универсально. Т.е. динамически удалять/добавлять поля. А сами имена полей и зависимость от типа получать из справочника. При такой реализации, достаточно будет добавить запись в такой справочник, а код страницы редактирования останется прежним. Именно поэтому, нужен пример создания поля динамически.

Здравствуйте, Эмин.

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

Более простым, но не столь функциональным решением будет использовать стандартные свойства visible элементов и добавлять поля на карточку стандартными

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

Здравствуйте.
Добавил в раздел "Задачи" новую колонку, однако при нажатии на элемент этой колонки выдает следующее предупреждение:
"Не удается найти карточку редактирования для выбранного элемента"
Я пытался сравнивать с другими колонками, на различия или может я что то упустил...но исправить так и не удалось.
Подскажите пожалуйста как исправить данную ошибку
Заранее спасибо.

Нравится

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

Возможно, справочник, на который ссылается поле, зарегистрирован неверно и в нём не указана карточка.

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

Добрый день уважаемые коллеги!!!

вопрос следующий. Есть карточка редактирования. Открываем (не создаем) карточку редактирования из раздела. Во время открытия происходит инициализация меню Действия. При инициализации меню действия, форма еще не отрисована. К примеру в меню Действия есть пункт меню "Выставить счет", при инициализации ,через виртуальную колонку, выставляю доступность пункта меню "Выставить счет" значение "false". Во время работы формы хочу, чтобы при изменении к примеру статуса формы, становилась доступной пункт меню "Выставить счет". но как я только не пробовал, изменяя значение виртуальной колонки на "true", доступным пункт меню у меня так и не стал.

вопрос, как во время редактирования формы управлять доступностью меню "Действие". подскажите пожалуйста.

уже все перепробовал не хочет. помогите пожалуйста. спасибо!!!

Нравится

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

Михаил, добрый день!

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

Возможно, данное поведение выглядит странным, но только на первый взгляд. Если вспомнить, что в режиме редактирования главным на странице является модуль раздела, а модуль карточки редактирования просто подгружается в отдельный контейнер, расположенный в модуле раздела, всё становится на свои места.

Добрый день Олег!!!

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

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

Добрый день.
BPMOnline 7.3
Интересует следующее:
1. Как расположить новое поле на карточке перед уже существующими, не переопределяя положение всех этих полей(row)?
2. Как менять порядок расположения групп и деталей на карточке? Создается впечатление что положение меняется хаотично, при перемещении строк с описанием групп в коде.
3. Так же проблема с добавлением на новую деталь, уже поднималась на форуме но пока без ответа..

Нравится

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

Здравствуйте, Иван.

Задачи по перемещению элементов на странице необходимо решать при помощи мастера разделов.
Касательно добавления на деталь, единственным условием для отображения кнопки Добавить является наличие карточки редактирования зарегистрированной в SysModuleEdit. Были проблемы в ранних сборках, в последнем релизе (745) проблем быть не должно.

Спасибо, будем обновляться!

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

Я создал новый раздел. В рабочих местах заполнил для записи нового раздела деталь "Карточки редактирования", где установил нужную мне карточку. Она одна. И там для нее поставил галочку "Отображать детали в карточке редактирования". Но по итогу детали там не появились. Когда создавал карточку, то унаследовался от базового окна редактирования. Потом добавил туда еще компоненты со вкладками, по аналогии с другими карточками, где есть детали.
Подскажите, пожалуйста, что можно сделать, чтобы в моей карточке нового раздела появились детали.
Спасибо!

Нравится

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

Павел, очистите Redis и кеш браузера. Если детали не появятся - вложите схемы раздела для тестирования.

Наталья, схемы раздела во вложении.

Павел, схемы скачала, проведу тестирование и сообщу Вам результат.

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

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

Необходимо добавить колонки в таблицу в "гриде" карточки редактирования "Выбор 'Платежные реквизиты'" (сейчас только две колонки), которая открывается по щелчку левой кнопкой мыши на объекте LookupDateControl пользовательской ("кастомной") карточки редактирования.

Не могу найти соответствующий обработчик события.

Не могу найти саму форму "Выбор 'Платежные реквизиты'", которая открывается.

Нравится

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

"Алейник Алексей Вадимович" написал:Не могу найти саму форму "Выбор 'Платежные реквизиты'"

Потому что там наверняка используется wnd_SelectData
Чтобы отобразились какие-то другие колонки - установите для них признак "Колонка для отображения" в сервисе датасета.

Спасибо, Вы были правы.

Однако, всё равно интересно где указывается обработчик события, которое открывает форму wnd_SelectData по щелчку левой кнопкой мыши на объекте LookupDateControl?

окно указывается в свойстве SelectWindowUSI для элемента ILookupDataControl

SDK

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

Понадобилось добавить кнопку "Установить скидку на все продукты в счете" в воркспейс "Продукт" (wnd_OfferingDetailTreeArea) детали раздела "Счета". Решил изучить как обрабатываются события нажатий на другие кнопки воркспейса wnd_OfferingDetailTreeArea. Однако, я не нашёл ни одного привязанного к кнопкам обработчика. Кроме того, оказалось, что в "Невизуальных коммпонентах" к dlData не привязан никакой датасет.
Пожалуйста, объясните, как это всё работает? Где обработчики? Откуда подгружаются данные и куда они выгружаются при работе, если к воркспейсу не привязан датасет?
Где мне впредь искать ответы на данные вопросы? Неужели придётся каждый раз обращаться по таким вопросам на community или в тех. поддержку? Должно же это быть где-то расписано?

Нравится

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

Во-первых, wnd_OfferingsDetailTreeArea.
Обработчики там должны быть, странно. В скрипте wnd_OfferingsDetailTreeAreaScript вижу:

function btnAddRootOnClick(Control) {
	AddRootData();
}
 
function btnAddChildOnClick(Control) {
	AddChildData();
}
 
function btnCopyOnClick(Control) {
	CopyData();
}
 
function btnEditOnClick(Control) {
	EditData();
}

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

"Зверев Александр" написал:Датасет не привязан, поскольку эта деталь может быть в разных разделах и привязывается программно при открытии раздела.

Если точнее, Датасет привязывается в скрипте Воркспейса Счетов:

if (pcDetails.ActivePage.Name == pgOfferingsDetail.Name) {
		SetAttribute(wndOfferingsDetail.Window, 'WorkspaceDataset',
			BaseWorkspace.GridDataset)
		SetAttribute(wndOfferingsDetail.Window, 'DateFieldName', 'InvoiceDate');
		SetAttribute(wndOfferingsDetail.Window, 'AccountFieldName', 'CustomerID');
		RefreshCommonDetail(BaseWorkspace, wndOfferingsDetail, 
			'InvoiceID', 'InvoiceID', 'ds_OfferingInInvoice');
}

В RefreshCommonDetail 5-ым параметром передается USI датасета, который хотите в данном случаи привязать.

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

Всем спасибо!

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