Добрый день. Подскажите, пожалуйста, возможно ли средствами Creatio использовать формулу в дашборде "Показатель" на главной странице? Например, в представлении "Итоги" для определенного раздела это можно сделать при помощи дашборда "Список" и сводной таблице.
К сожалению, в дашборд "Показатель" нет возможности использовать формулу.
Как альтернативное решение, в Classic UI есть возможность настроить сводную таблицу (дашборд - список) и вывести ее на главную страницу для пользователя.
Здравствуйте коллеги. Имеется некий массив в детали, и кнопка на ней. Требуется выводить один элемент по нажатию кнопки, после следующего нажатия выводить следующий и убирать прошлый. Пожалуйста, дайте хоть какую нибудь подсказку
В первом 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);}}
И добавить локализируемую строку ShowNextRecordButtonCaption в схему детали.
Задумка такая, что при первичной загрузке реестра выполняется проверка на то, есть ли в реестре записи или нет. Если их нет, то кастомизация ничего не сделает, реестр просто завершит загрузку. Если же реестр не пустой, то мы копируем его в аттрибут GridDataCollectionAttr, оригинальный реестр очищаем, из аттрибута берем первый элемент коллекции и записываем его в оригинальный реестр. По нажатию на кнопку мы проходим по копии и по номеру нажатия выбираем соответствующий элемент из копии, очищаем оригинальный грид и пишем выбранный из копии элемент в оригинальный грид. Если кол-во кликов по кнопке становится равным длине копии (аттрибута) - обнуляем счетчик и начинаем сначала.
Проверили код - работает, проверяли на детали с адресами контактов. Вам нужно просто все это же настроить для кастомной детали, код можно и не изменять.
В первом 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);}}
И добавить локализируемую строку ShowNextRecordButtonCaption в схему детали.
Задумка такая, что при первичной загрузке реестра выполняется проверка на то, есть ли в реестре записи или нет. Если их нет, то кастомизация ничего не сделает, реестр просто завершит загрузку. Если же реестр не пустой, то мы копируем его в аттрибут GridDataCollectionAttr, оригинальный реестр очищаем, из аттрибута берем первый элемент коллекции и записываем его в оригинальный реестр. По нажатию на кнопку мы проходим по копии и по номеру нажатия выбираем соответствующий элемент из копии, очищаем оригинальный грид и пишем выбранный из копии элемент в оригинальный грид. Если кол-во кликов по кнопке становится равным длине копии (аттрибута) - обнуляем счетчик и начинаем сначала.
Проверили код - работает, проверяли на детали с адресами контактов. Вам нужно просто все это же настроить для кастомной детали, код можно и не изменять.
Приношу извинения за недопонимаем. Относительно сортировки в отчетах приложения Excel reports builder, на данный момент нет возможности настроить сортировку записей в данном решении.
Есть только базовая возможность задать перечень необходимых колонок для отчета.
Для получения инструкции и необходимых файлов для обновления на NetCore, необходимо обратиться к технической поддержке Terrasoft по адресу support@terrasoft.ru.
Было создано ручками более сотни Привязок данных, автоматический более 500 штук с типом Данных в Конфигурациях. Кто-нибудь решал вопрос с актуализацией данных? Как массово их актуализировать? Во время разработки куча изменений и очень трудоемко каждый запись актуализировать отдельно.
Специального механизма массовой актуализации данных в интерфейсе нет.
Как вариант, можно использовать разработку в файловой системе. Если выгрузить привязки в ФС, то с помощью любого продвинутого текстового редактора и регулярных выражений можно произвести массовые изменения по файлам привязок, а потом загрузить полученные файлы обратно в БД (ну или залить в SVN). Аналогичные манипуляции можно провести напрямую в БД (таблица SysPackageSchemaData), только в таком случае процесс будет еще более сложным.
using System;using Terrasoft.Core;namespace Terrasoft.Configuration{/// <summary>/// Макрос, возвращает текущую дату +n дней от текущей./// </summary>publicclass NrbEmailCurrentDatePlusMacros : IMacrosInvokable
{public UserConnection UserConnection
{
get;
set;}public string GetMacrosValue(object arguments){
var date = DateTime.Today;if(!arguments.Equals(null)){
var days = Convert.ToInt32(arguments.ToString());
date = date.AddDays(days);}return date.Date.ToString("dd.MM.yyyy");}}}
При работе с макросом возникает ошибка "Input string was not in a correct format." на этапе конвертации Convert.ToInt32(arguments.ToString()); ,так как в строке возвращается объект и id записи, которые не преобразовать в число.
Коллеги, добрый день. Из релиза новой мажорной версии 7.18 видно, что реализованы глобальные изменения в продукте. Возникло несколько вопросов - совместимы ли будут кастомные доработки с новой версией? Поскольку поменялся Дизайнер страниц, смею предположить, что он стал более эффективным и не придется ли переделывать страницы. Это же касается и различного рода интеграций
Возникло несколько вопросов - совместимы ли будут кастомные доработки с новой версией? - на такой вопрос в целом достаточно сложно ответить ввиду того что нет понимания о каких именно доработках идет речь. Что конкретно они используют в системе и соответсвенно как может повлиять обновление на них. Но в целом, резких переходов (отказов от какого либо фукнционала) разработчики стараются избегать, чтобы как-раз не было проблем обратной совместимости. Обычно если к примеру какой-то метод который используется сторонней доработкой планируется убрать через несколько релизов, при компиляции вы будете получать соответствующие предупреждения, которые будут сообщать что тот или иной метод устарел и необходимо использовать новый.
Также в целом самый простой сбосом проверить будет ли работать к примеру то или иное дополнение после обновления - обновить копию. Фактически так всегда необходимо делать, в начале обновлять копию, проверять функционал и при необходимо вносить правки в кастомную логику.