Добрый день.

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

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

Нравится

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

Добрый день, Нафиса!

 

Проверку можно выполнить в методе init необходмой Вам [Name]SectionV2 схемы. Далее в методе loadGridData написать проверку (true/false) и сделать замещение, переписав esq, в зависимости от результата.

Так же есть второй вариант: в gridDataLoad запускается метод addItemsToGridData, возвращает коллекцию записей, которые хочет загрузить система в реестр. addItemsToGridData добавляет записи в коллекцию записей реестра при загрузке реестра и непосредственно добавляет в колекцию gridData результат. По аналогии в dataCollection.eachKey вставить необходимые Вам данные.

 

Прилагаю статью с описанием методов: https://academy.creatio.com/docs/7-16/developer/interface_elements/deta…

 

С уважением,

Ангелина

Добрый день, Нафиса!

 

Проверку можно выполнить в методе init необходмой Вам [Name]SectionV2 схемы. Далее в методе loadGridData написать проверку (true/false) и сделать замещение, переписав esq, в зависимости от результата.

Так же есть второй вариант: в gridDataLoad запускается метод addItemsToGridData, возвращает коллекцию записей, которые хочет загрузить система в реестр. addItemsToGridData добавляет записи в коллекцию записей реестра при загрузке реестра и непосредственно добавляет в колекцию gridData результат. По аналогии в dataCollection.eachKey вставить необходимые Вам данные.

 

Прилагаю статью с описанием методов: https://academy.creatio.com/docs/7-16/developer/interface_elements/deta…

 

С уважением,

Ангелина

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

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

на данный момент мы добавили вывод поля ввода и кнопки, но непонятно как вывести деталь с колонкой сообщения и даты отправки

 

Нравится

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

Добрый день!

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

Если у вас деталь имеет привязку, например, к контакту, то можете настроить деталь в мастере раздела и привязать СontactId детали с ContactId записи нового сообщения, деталь добавить сможете по инструкции:

https://academy.creatio.com/docs/user/customization_tools/ui_and_busine…

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

Вітаю, на деталь додано свою користувацьку кнопку, і для неї потрібно додати валідацію на ввімкнення. Тобто щоб вона була активна коли запис валідний( роблю esq запит до бази на деякі поля). 

Код кнопки:

var deactivateMenuItem = this.getButtonMenuItem({
					Caption: {"bindTo": "Resources.Strings.CnsResetMenuActionCaption"},
					Click: {"bindTo": "CnsDeactivateRecord"},
					Enabled: {bindTo: "isEnabled"}
				});

isEnabled це атрибут, який я роблю true в своєму методі де виконую запит.

Для одиничного вибору викликаю цей метод в події onActiveRowChange

onActiveRowChange: function() {
				this.callParent(arguments);
				this.canResetTransaction()
			},

Для множинного вибору ця подія не активовується. Для множинного вибору в розділі є обробник onSelectedRowsChange, але в мене в деталі він також не працює. Потрібна допомога з обробником в якому я зможу викликати цей метод або якийсь інший варіант валідацїї рядків при множинному виборі

Нравится

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

Доброго дня!

Як ідея ви можете замістити метод getEditRecordButtonEnabled і в ньому за допомогою іншого методу getSelectedItems отримати ідентифікатори обраних значень. Сюди ж можна додати задання вашого isEnabled.

getEditRecordButtonEnabled: function() {
				this.callParent(arguments);
				var values = this.getSelectedItems();
				console.log(values);
				// DO SOMETHING
			},

 

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

Добрый день

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

Далее начали переносить на препрод и дашборды не отображаются. в консоли же ошибка

что делать и куда копать, комиляция и генерация не помогают

Uncaught TypeError: Cannot read properties of undefined (reading 'widgetType')

    at i. (CardWidgetModule.js?hash=de9df00351d846d39c8c7090646e6c33:189:73)

    at Object.callback (all-combined.js:6:73147)

    at i. (all-combined.js:41:1839653)

    at i. (all-combined.js:41:1831497)

    at Object.callback (all-combined.js:6:73147)

    at i. (all-combined.js:41:1591739)

    at Object.callback (all-combined.js:6:73147)

    at i. (all-combined.js:41:198137)

    at Object.callback (all-combined.js:6:73147)

    at i._parseGetEntityResponse (all-combined.js:41:1572707)

 column: 16702

 message: Uncaught TypeError: Cannot read properties of undefined (reading 'widgetType') 

Нравится

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

Добрый день,



При добавлении графиков на страницу редактирования создаются соответствующие записи в таблицах SysWidgetDashboard и SysWidgetDashboardLcz.



Если дашборд добавляется не на страницу редактирования, а на вкладку "Итоги", то будут добавляться записи в таблицы SysDashboard и SysDashboardLcz соответственно.



Также создается соответствующая привязка этих данных к пакету, который был установлен в системных настройках "CurrentPackage" в момент их добавления. Дополнительно отметим, что при создании дашбордов в разделе "Итоги" привязка данных не создается.



Дело в том, что дашборды являются локализованными объектами системы.



При создании дашборда создаются записи в двух таблицах:



Запись о дашборде, созданном в локализации, соответствующей базовой культуре системы, создается в таблице [SysWidgetDashboard]/[SysDashboard];



Записи о дашбордах всех других локализаций создаются в таблице [SysWidgetDashboardLcz]/[SysDashboardLcz] и связаны с записью в таблице [SysWidgetDashboard]/[SysDashboard] по колонке [RecordId].



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



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

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

Имеется модуль в котором по стандарту не имеется встроенных расширенных и быстрых фильтров (как на картинке). Можете пожалуйста подсказать как эти фильтры реализовать, либо посмотреть код из других объектов где они могут находиться

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

Нравится

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

Добрый день!



Вы можете это реализовать при помощи базового функционала в Freedom UI - [Quick filter].

 

Bogdan, Доброго дня

 

К сожалению этот функционал работает только при версии 8.0, а мне необходимо для версии 7.18, нет ли других реализаций?

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

Не проходит импорт данных из Excel в раздел. Мапинг полей соответствует полям в объекте, куда импортируем.

Просто показывает что обработано 0%, и все. Никаких ошибок нет. Может кто подскажет, где можно посмотреть на логи импорта, чтобы понять хоть на чем оно запинается ? 

Нравится

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

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



Предоставил статью который поможет вам с данным вопросом: 



https://academy.creatio.com/docs/user/platform_basics/business_data/exc…







Рад был помочь! 

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

При добавления файла в деталь, мне нужно по дефолту записывать в поле Описание (Notes) определенный текст. На странице где эта деталь, в прааметрах детали указал defaultValues но это не работает. Файл добавляется но описание не пишется.

Как это сделать для данной детали?

Нравится

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

Добрый день!

 

Данный процесс вы можете реализовать с помощью бизнесс-процесса. Более детальная информация есть в статье ниже: 

https://academy.creatio.com/docs/user/bpm_tools/process_elements_refere…

Mariia Sorochan,

воообще не про то

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

Кожен раз при компіляції, з'являється вікно з повідомленням, що доступ до файлу web.config у папці Terrasoft.WebApp заборонено. З чим це може бути пов'язано?

Нравится

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

Добрий день!



Уточніть будь ласка, де розгорнутий сайт (локально чи в cloud)?

Bogdan,

cloud

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

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

Нравится

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

Добрый день,

 

Мы подумали как можно это реализовать и возможный вариант такой:

 

1) В схеме детали нужно создать два аттрибута:

attributes: {
			"GridDataCollectionAttr": {
				dataValueType: Terrasoft.DataValueType.COLLECTION,
				value: {}
			},
 
			"ClickNumber": {
				dataValueType: Terrasoft.DataValueType.INTEGER,
				value: 0
			},
		},

В первом GridDataCollectionAttr будет храниться скопированная коллекция реестра детали, во втором ClickNumber - количество кликов по кнопке.

 

2) В схеме детали нужно написать два метода (один - переопределение базового метода onGridDataLoaded, второй - кастомный метод, который будет динамически менять список реестра):

onGridDataLoaded: function() {
				this.callParent(arguments);
				const gridData = this.getGridData();
				if (gridData && gridData.collection.length > 0) {
					// var test = {...gridData};
					var gridDataCollectionClone = gridData.collection.clone();
					// var test = Ext.clone(gridData);
					this.set("GridDataCollectionAttr", gridDataCollectionClone);
					gridData.clear();
					// test.collection.addAll(gridDataCollectionClone.items);
					var copiedGridData = this.get("GridDataCollectionAttr");
					var originalKey = copiedGridData.keys[0];
					var originalItem = copiedGridData.getAt(0);
					gridData.insert(0, originalKey, originalItem);
				}
			},
 
			onContactAddressLoadButtonClick: function() {
				var copiedGridData = this.get("GridDataCollectionAttr");
				var copiedGridDataLength = copiedGridData.length;
				if (copiedGridDataLength != 0) {
					var numberOfClicks = this.get("ClickNumber");
					numberOfClicks += 1;
					this.set("ClickNumber", numberOfClicks);
					if (copiedGridData.length == numberOfClicks) {
						this.set("ClickNumber", 0);
						numberOfClicks = 0;
					}
					const gridData = this.getGridData();
					var keyToAdd = copiedGridData.keys[numberOfClicks];
					var itemToAdd = copiedGridData.getAt(numberOfClicks);
					gridData.clear();
					gridData.insert(0, keyToAdd, itemToAdd);
					console.log(copiedGridData);
				}
			}

3) В diff добавить саму кнопку:

 {
                "operation": "insert",
                "name": "ShowNextRecordButton",
                "parentName": "Detail",
                "propertyName": "tools",
                "values": {
                    "itemType": Terrasoft.ViewItemType.BUTTON,
                    "caption": {"bindTo": "Resources.Strings.ShowNextRecordButtonCaption"},
                    "click": {"bindTo": "onContactAddressLoadButtonClick"},
                    "style": Terrasoft.controls.ButtonEnums.style.TRANSPARENT
                }
            }

И добавить локализируемую строку ShowNextRecordButtonCaption в схему детали.

 

Задумка такая, что при первичной загрузке реестра выполняется проверка на то, есть ли в реестре записи или нет. Если их нет, то кастомизация ничего не сделает, реестр просто завершит загрузку. Если же реестр не пустой, то мы копируем его в аттрибут GridDataCollectionAttr, оригинальный реестр очищаем, из аттрибута берем первый элемент коллекции и записываем его в оригинальный реестр. По нажатию на кнопку мы проходим по копии и по номеру нажатия выбираем соответствующий элемент из копии, очищаем оригинальный грид и пишем выбранный из копии элемент в оригинальный грид. Если кол-во кликов по кнопке становится равным длине копии (аттрибута) - обнуляем счетчик и начинаем сначала.

 

Проверили код - работает, проверяли на детали с адресами контактов. Вам нужно просто все это же настроить для кастомной детали, код можно и не изменять.

Добрый день,

 

Мы подумали как можно это реализовать и возможный вариант такой:

 

1) В схеме детали нужно создать два аттрибута:

attributes: {
			"GridDataCollectionAttr": {
				dataValueType: Terrasoft.DataValueType.COLLECTION,
				value: {}
			},
 
			"ClickNumber": {
				dataValueType: Terrasoft.DataValueType.INTEGER,
				value: 0
			},
		},

В первом GridDataCollectionAttr будет храниться скопированная коллекция реестра детали, во втором ClickNumber - количество кликов по кнопке.

 

2) В схеме детали нужно написать два метода (один - переопределение базового метода onGridDataLoaded, второй - кастомный метод, который будет динамически менять список реестра):

onGridDataLoaded: function() {
				this.callParent(arguments);
				const gridData = this.getGridData();
				if (gridData && gridData.collection.length > 0) {
					// var test = {...gridData};
					var gridDataCollectionClone = gridData.collection.clone();
					// var test = Ext.clone(gridData);
					this.set("GridDataCollectionAttr", gridDataCollectionClone);
					gridData.clear();
					// test.collection.addAll(gridDataCollectionClone.items);
					var copiedGridData = this.get("GridDataCollectionAttr");
					var originalKey = copiedGridData.keys[0];
					var originalItem = copiedGridData.getAt(0);
					gridData.insert(0, originalKey, originalItem);
				}
			},
 
			onContactAddressLoadButtonClick: function() {
				var copiedGridData = this.get("GridDataCollectionAttr");
				var copiedGridDataLength = copiedGridData.length;
				if (copiedGridDataLength != 0) {
					var numberOfClicks = this.get("ClickNumber");
					numberOfClicks += 1;
					this.set("ClickNumber", numberOfClicks);
					if (copiedGridData.length == numberOfClicks) {
						this.set("ClickNumber", 0);
						numberOfClicks = 0;
					}
					const gridData = this.getGridData();
					var keyToAdd = copiedGridData.keys[numberOfClicks];
					var itemToAdd = copiedGridData.getAt(numberOfClicks);
					gridData.clear();
					gridData.insert(0, keyToAdd, itemToAdd);
					console.log(copiedGridData);
				}
			}

3) В diff добавить саму кнопку:

 {
                "operation": "insert",
                "name": "ShowNextRecordButton",
                "parentName": "Detail",
                "propertyName": "tools",
                "values": {
                    "itemType": Terrasoft.ViewItemType.BUTTON,
                    "caption": {"bindTo": "Resources.Strings.ShowNextRecordButtonCaption"},
                    "click": {"bindTo": "onContactAddressLoadButtonClick"},
                    "style": Terrasoft.controls.ButtonEnums.style.TRANSPARENT
                }
            }

И добавить локализируемую строку ShowNextRecordButtonCaption в схему детали.

 

Задумка такая, что при первичной загрузке реестра выполняется проверка на то, есть ли в реестре записи или нет. Если их нет, то кастомизация ничего не сделает, реестр просто завершит загрузку. Если же реестр не пустой, то мы копируем его в аттрибут GridDataCollectionAttr, оригинальный реестр очищаем, из аттрибута берем первый элемент коллекции и записываем его в оригинальный реестр. По нажатию на кнопку мы проходим по копии и по номеру нажатия выбираем соответствующий элемент из копии, очищаем оригинальный грид и пишем выбранный из копии элемент в оригинальный грид. Если кол-во кликов по кнопке становится равным длине копии (аттрибута) - обнуляем счетчик и начинаем сначала.

 

Проверили код - работает, проверяли на детали с адресами контактов. Вам нужно просто все это же настроить для кастомной детали, код можно и не изменять.

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

Как удалить эту кнопку на преднастроенной странице:

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

Нравится

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

Добрый день!

Чтобы данная кнопка не отображалась нужно выключить фичу UseProcessPerformerAssignment на странице /0/Nui/ViewModule.aspx#Features после чего очистить кэш.

Дима Вовченко,

 

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

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