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

Нравится

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

Есть одна неочевидная фича. Если добавить в раздел справочники запись, указав в поле "Объект" ваш объект, а в "Названии" то что вы хотите видеть в справочных окнах, то после перезахода в систему заголовки всех справочников этого объекта поменяются) 

Дмитрий А.,

а если таблица не справочник, и в справочники ее не добавлять?

Александр, попробуйте сделать как в SupervisorSingleWindowPageV2, там тоже меняют этот заголовок окна выбора:

//LookupPrefixCaption = "Выбор: ";
 
/**
 * @inheritdoc BasePageV2#getLookupPageConfig
 * @overridden
 */
getLookupPageConfig: function(args, columnName) {
	var config = this.callParent(arguments);
	var schemaColumn = this.getColumnByName(columnName);
	if (!schemaColumn) {
		return config;
	}
	var prefixCaption = resources.localizableStrings.LookupPrefixCaption;
	switch (columnName) {
		case "QueueEntitySchema":
		case "BusinessProcessSchema":
			config.captionLookup = prefixCaption + schemaColumn.caption;
			break;
		default:
			break;
	}
	return config;
},

 

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

Добрый день.

 

У нас есть раздел "Заказы" с несколькими страницами.

Нужно для определенной страницы скрыть поле.

 

Как это сделать?

Нравится

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

Заходите в мастер раздела Заказы, выбираете страницу на которой надо скрыть поле, нажимаете редактировать. Откроется дизайнер страниц и удаляете его со страницы. Или что то не так понял в постановке вопроса?

Заходите в мастер раздела Заказы, выбираете страницу на которой надо скрыть поле, нажимаете редактировать. Откроется дизайнер страниц и удаляете его со страницы. Или что то не так понял в постановке вопроса?

Алексей Следь, и потом я могу его снова восстановить, если понадобится?

Койкова Ольга,

Да, точно так же заходите и добавляете. Но если надо сделать видимость по условию, то лучше настроить бизнес-правило.

Спасибо большое! Как-то не подумала про это. Сразу в коде пошла искать.

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

Добрый день, подскажите, может кто уже решал этот вопрос.

Я добавил новое поле "Следующий платёж" и отражаю его только при указанной категории и выбранном результате активности. Я хочу, чтобы он как и поле "Отложить до" вызывался на мини-версии этой мини-карточки. 

Место указал. Подскажите как это делается и почему не отражается. Добавил поле во всех 3-х видах мини-карточки - "Добавление" "Редактирование" и "Просмотр", но не помогло. Куда дальше смотреть не знаю.

Нравится

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

Александр, перезапуск, чистка Redis и кэша браузера не помогли?

Как именно добавили для разных видов?

Зверев Александр, Добавил через мастер раздела, в редактировании мини-карточки сначала. А затем нашёл вот такой код:  

Но и с его помощью получилось добиться лишь такого результата: 

 

То есть поле показывается, но становится не редактируемым. Но если нажать карандашик справа вверху, то там это поле показано как необходимо. Но нужно чтобы оно здесь уже работало. То есть до раскрытия полной мини-карточки.

 

Что Вы имеете в виду под «мини-версией этой мини-карточки», режим просмотра (третий в мастере)?

Если так, то зачем там вообще возможность редактирования?

У Вас проблема, что поля нет или что оно заблокировано?

 

Если открыть в мастере стандартную карточку, например, контакта, видно, что в режиме просмотра нет большинства добавленных в мастере полей, а есть разработанные кодом блоки, например, JobInfoContainer. В схеме ContactMiniPage в пакете UIv2 видно его логику:

{
	"operation": "insert",
	"name": "JobInfoContainer",
	"parentName": "MiniPage",
	"propertyName": "items",
	"values": {
		"id": "JobInfoContainer",
		"visible": {"bindTo": "isViewMode"},
		"selectors": {"wrapEl": "#JobInfoContainer"},
		"itemType": Terrasoft.ViewItemType.CONTAINER,
		"wrapClass": ["jobinfo-mini-wrap"],
		"items": [],
		"layout": {
			"column": 0,
			"row": 10,
			"colSpan": 24
		}
	}
},
{
	"operation": "insert",
	"parentName": "JobInfoContainer",
	"propertyName": "items",
	"name": "JobInViewMode",
	"values": {
		"labelConfig": {
			"visible": false
		},
		"bindTo": "JobViewValue",
		"isMiniPageModelItem": true
	}
},
{
	"operation": "insert",
	"parentName": "JobInfoContainer",
	"propertyName": "items",
	"name": "AccountInViewMode",
	"values": {
		"labelConfig": {
			"visible": false
		},
		"bindTo": "Account",
		"isMiniPageModelItem": true
	}
},
...
/**
 * Job value in view mode.
 * @type {String}
 */
"JobViewValue": {
	"dataValueType": Terrasoft.DataValueType.TEXT,
	"type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN
},

В них для чтения отображается либо текст обычного поля (Account), либо вычисляемого при открытии в onEntityInitialized виртуального поля JobViewValue.

 

Для мини-карточки активности, которую дорабатываете, должно быть аналогично.

 

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

 

Или нужно там иметь именно редактирование? Стандартные поля в этом виде карточки тоже все недоступны для изменений?

 

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

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

Как обновить эту часть через js после нажатия на кнопку выбора?

 

 

Есть такой код, фильтрация добавляется нормально, данные обновляются только после использования любого другого фильтра(по типу "Ответственного").

stageFilterCallBack : function(args) {
    this.selectedRows = args.selectedRows.getItems();
    var selectdIds = [];
            	
    this.selectedRows.forEach(function(item) {
      selectdIds.push(item.value);
    }, this);
   				
    this.set("CurrentStageFiltersSelectedItems", selectdIds);
            	
	const filters = this.get("SectionFilters");
    var filialFilter = this.Terrasoft.createColumnInFilterWithParameters("Stage.Id", selectdIds);
    filialFilter.comparisonType = this.Terrasoft.ComparisonType.EQUAL;
				
    filters.removeByKey("stageFilter");
    filters.add("stageFilter", filialFilter);
				
    this.updateDetail(
    {
	  detail: "UsrSchema4Detailf84a3cb6",
      reloadAll: true
    }
  );
}

 

Нравится

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

Для обновления реестра следует использовать метод

this.reloadGridData();

updateDetail работает только для деталей

Для обновления реестра следует использовать метод

this.reloadGridData();

updateDetail работает только для деталей

Показать все комментарии
var config = {
  entitySchemaName: "OpportunityStage",
  multiSelect: true,
  columns: ["Name"]
	};
 
this.openLookup(config, this.stageFilterCallBack, this);

Создаю справочник с множественным выбором в разделе таким образом. 
Но при открытии еще раз, выбранные элементы в прошлое открытие не остаются. Как это можно реализовать? Возможно есть что-то типо "selectedTypes: [выбранные id]" в конфиге?

Нравится

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

Надо было всего лишь добавит в конфигурацию openLookup код ниже.

var currentStageFilters = this.get("CurrentStageFiltersSelectedItems");
 
var config = {
  entitySchemaName: "OpportunityStage",
  multiSelect: true,
  columns: ["Name"],
  selectedValues: currentStageFilters,
};
 

Где "currentStageFilters" это список выбранных Id справочника.

Посмотрите TsiBaseDetailWithLookup в https://marketplace.terrasoft.ua/template/templates-developing-custom-d…

Надо было всего лишь добавит в конфигурацию openLookup код ниже.

var currentStageFilters = this.get("CurrentStageFiltersSelectedItems");
 
var config = {
  entitySchemaName: "OpportunityStage",
  multiSelect: true,
  columns: ["Name"],
  selectedValues: currentStageFilters,
};
 

Где "currentStageFilters" это список выбранных Id справочника.

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

Всем добрый день!

Возник такой вопрос:

Существуют в системе Directum Типовые маршруты где необходимо работать с документами, то есть есть возможность прямо на серверном уровне открывать документ Word и Excel и его редактировать, затем после редактирования  все правки сохраняются в тех же файлах. А есть ли подобный функционал в Creatio или плагин.

Нравится

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

Анатолий, интеграции с Directum в маркете нет, но есть ряд других дополнений для работы с файлами в браузере в самой системе или коннекторов со сторонними системами документооборота. Например:

  • File X (Расширенная работа с файлами: просмотр, редактирование и версионность);
  • File core (Расширенные возможности работы с файлами через интеграцию с Google Suite. Создание / редактирование / просмотр файлов в интерфейсе Creatio);
  • Sharepoint connector (Хранение и совместная работа с файлами с помощью SharePoint);
  • Files extended (Предпросмотр, совместное онлайн-редактирование и версионность файлов);
  • Docs (Система управления корпоративной информацией на платформе Creatio).

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

Анатолий, интеграции с Directum в маркете нет, но есть ряд других дополнений для работы с файлами в браузере в самой системе или коннекторов со сторонними системами документооборота. Например:

  • File X (Расширенная работа с файлами: просмотр, редактирование и версионность);
  • File core (Расширенные возможности работы с файлами через интеграцию с Google Suite. Создание / редактирование / просмотр файлов в интерфейсе Creatio);
  • Sharepoint connector (Хранение и совместная работа с файлами с помощью SharePoint);
  • Files extended (Предпросмотр, совместное онлайн-редактирование и версионность файлов);
  • Docs (Система управления корпоративной информацией на платформе Creatio).

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

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

Добрый день!

Подскажите, пожалуйста, как можно реализовать несколько уровней в печатной форме MS Word?

 

Например:
1. Счёт
     1.1. Категория продукта 1
         1.1.1. Продукт 1
         1.1.2. Продукт 2
     1.2 Категория продукта 2
         1.2.1. Продукт 3
         1.2.2. Продукт 4

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

Нравится

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

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

Или не view, а записи в специальной таблице, наполняемой программно для каждого построения отчёта.

Идея  о возможности выводить табличные части в виде иерархического (древовидного) реестра уже заведена и принята.

View не годится, так как у разных уровней разное форматирование в Word'e.

Как я понимаю, тогда только в Fast report?

Либо чисто программно формировать в скрипте документ Word с каким угодно форматированием при помощи библиотеки  DocumentFormat.OpenXml.dll, которая загружена в систему и используется и в стандартных схемах ReportService, WordReportingDesignWorker, WordReportUtility и WordReportGenerator.

Но перед этим проверьте в маркете существующие движки отчётов, нет ли там такого формата, который Вам нужен.

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

Здравствуйте. Есть задача, для разных ролей выводить разный набор колонок, для раздела. Нашёл метод "initializeProfile" в схеме "BaseSchemaViewModel", в котором проставляется значение переменной "Profile". Я добавляю свою колонку, но в итоге она не выводится в реестр, хотя например если зайти в настройку колонок реестра, то там видна моя добавленная колонка, тогда не понятно почему она не видна в реестре раздела. Как вообще правильно сделать эту таску?

initializeProfile: function(callback, scope) {
				this.requireProfile(function(profile) {
					var profileColumnName = this.getProfileColumnName();
					if (profile && profile.DataGrid && profile.DataGrid.tiledConfig) {
						var prifileDataGrid = JSON.parse(profile.DataGrid.tiledConfig);
						prifileDataGrid.items.pop();
						prifileDataGrid.items.push({
							"bindTo": "PlaceOfBirth",
							"caption": "Место рождения",
							"position": {
							  "column": 17,
							  "colSpan": 7,
							  "row": 2
							},
							"dataValueType": 1,
							"metaPath": "PlaceOfBirth",
							"path": "PlaceOfBirth",
							"captionConfig": {
							  "visible": true
							}
						});
						profile.DataGrid.tiledConfig = JSON.stringify(prifileDataGrid);
					}
					this.set(profileColumnName, profile);
					Ext.callback(callback, scope);
				}, this);
			}

 

Нравится

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

Александр, добрый день!

 

Реализовать вашу задачу можно добавив в таблицу SysProfileData записи с определёнными ключами и правильным содержанием ObjectData и переопределив метод получения Profile получать нужное содержание по сформированному ключу по вашему условию.
Но также нужно учесть много нюансов, например, когда запись в таблице SysProfileData с сформированным ключом будет пустой и т.п.

А вы не слишком заморочились? Не проще ли научить пользователей менять состав колонок? 

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

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

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

Не хватает настройки формата: минута и час

Нравится

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

И "Год и неделя"

Дамиан, Владимир, спасибо за информацию, завели такую идею.

Логика наполнения этого выпадающего списка реализована в схеме ChartDesigner:

/**
 * Returns the object of types of date.
 * @private
 * @return {Object} Returns the object of types of date.
 */
getDateTimeFormatDefaultConfig: function() {
	const dateTimeFormatDefaultConfig = {
		"Year": {
			value: "Year",
			displayValue: this.get("Resources.Strings.DateTimeFormatYear")
		},
		"Month;Year": {
			value: "Month;Year",
			displayValue: this.get("Resources.Strings.DateTimeFormatMonthYear")
		},
		"Month": {
			value: "Month",
			displayValue: this.get("Resources.Strings.DateTimeFormatMonth")
		},
		"Week": {
			value: "Week",
			displayValue: this.get("Resources.Strings.DateTimeFormatWeek")
		},
		"Day;Month;Year": {
			value: "Day;Month;Year",
			displayValue: this.get("Resources.Strings.DateTimeFormatDayMonthYear")
		},
		"Day;Month": {
			value: "Day;Month",
			displayValue: this.get("Resources.Strings.DateTimeFormatDayMonth")
		},
		"Day": {
			value: "Day",
			displayValue: this.get("Resources.Strings.DateTimeFormatDay")
		},
		"Hour": {
			value: "Hour",
			displayValue: this.get("Resources.Strings.DateTimeFormatHour")
		}
	};
	return dateTimeFormatDefaultConfig;
},

Если не хотите вносить глобальные доработки в механизм графиков, а нужно задать для одной конкретной диаграммы, в качестве быстрого обходного решения можно включить в браузере отладчик, поставить breakpoint в этой функции и в консоли исправить этот объект dateTimeFormatDefaultConfig в момент открытия настройки графика, а затем сохранить настройки с выбранным новым значением.

У меня так получилось, когда подменил одно из значений на:

{value:"Week;Year", displayValue: "Неделя и год"}

После сохранения с такой настройкой диаграмма выглядит нужным образом:

Формат для часов и минут, увы, не подобрал. Вероятно, такой фильтрации в ESQ и нет.

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

Создал веб-сервис опроса погоды. В выходных данных есть поля дат. Эти даты надо сконвертировать из int в DateTime.

Не могу понять, как обратиться к параметрам веб-сервиса из задания-сценария?

Set("dt", GetDt(Get<int>("WebService1.dt")));
Set("sys_sunrise", GetDt(Get<int>("WebService1.sys_sunrise")));
Set("sys_sunset", GetDt(Get<int>("WebService1.sys_sunset")));
return true;

 

Нравится

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

Можно точнее? Что значит из int в DateTime?

public DateTime GetDt(int unixDate)
{
    var dt = new DateTime(1970,1,1,0,0,0,0, DateTimeKind.Utc);
    dt = dt.AddSeconds(unixDate).ToLocalTime();
    return dt;
}

Стандартный метод преобразования unix long в DateTime.

Дамиан, Вы можете создать в БП параметры нужного типа и связать их со входящими параметрами веб-сервиса. Затем из скрипта работать уже с ними, используя Get.

Зверев Александр,

Можете привести код или ссылки?

Дамиан, как работать с параметрами при помощи Get, есть тут.

Я имею в виду, что в дизайнере БП привязать параметр процесса к исходящему параметру веб-сервиса, а затем работать уже с ним.

 

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