Как привязать значения справочников вместе со страницами редактирования?

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

 

 

Нравится

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

Добрый день.



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

Именно в данных хранится нужная вам информация.

Пример данных для страницы Контакты:

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



Информация из академии:

Привязать данные к пакету 

я допускаю что дело не в привязке к пакету, а биндингу справочных значений к страницам. тогда нужно копать в сторону внесения правок в SysModuleEdit(тут для страницы конкретное значение справочника) SysEntityModuleEntity(тут указывается uid справочника) пример можно посмотреть как сделано для Activity и тут

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

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

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

А как правильно сохранить настройку на портальной странице, у портального пользователя нету кнопки сохранить настройку колонок для всех.

Подменой названия страницы в URL адресе, тогда под супервизором можно попасть на страницу портала, единственное ли это решение?

Нравится

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

Смотреть в таблицу SysProfileData, твой настройке нужно поставить в поле ContactId значение null

 

Приведу пример как я скриптом делал "настройки колонок" для всех, скопировав настройки у супервизора. Возможно еще что потребуется, сейчас не помню.

--удалял все настройки кроме тех, которые не пустые и не под пользователем супервизор. В вашем примере в key нужно подставить настройку этой самой детали. А id пользователя твоего пользователя, от которого копировать на всех
	/*	
		delete from SysProfileData where "Key" in (
		select "Key" from SysProfileData
		where ("Key" like 'Usr%GridDataView' or "Key" like '%Detail%') and SysCultureId = '1A778E3F-0A8E-E111-84A3-00155D054C03'
		and (ContactId = '410006E1-CA4E-4502-A9EC-E54D922D2C00' or ContactId is null)
		group by "Key"
		having count(*) >=2
		) and ContactId is null
	*/
--	в тут обновляем contactId на null (для системы если стоит null, то это считается настройкой по умолчанию.
 /*	
	update SysProfileData set ContactId = null
	where "Key" like 'Usr%GridDataView' or "Key" like '%Detail%' and SysCultureId = '1A778E3F-0A8E-E111-84A3-00155D054C03' and ContactId = '410006E1-CA4E-4502-A9EC-E54D922D2C00'
  */

 

Смотреть в таблицу SysProfileData, твой настройке нужно поставить в поле ContactId значение null

 

Приведу пример как я скриптом делал "настройки колонок" для всех, скопировав настройки у супервизора. Возможно еще что потребуется, сейчас не помню.

--удалял все настройки кроме тех, которые не пустые и не под пользователем супервизор. В вашем примере в key нужно подставить настройку этой самой детали. А id пользователя твоего пользователя, от которого копировать на всех
	/*	
		delete from SysProfileData where "Key" in (
		select "Key" from SysProfileData
		where ("Key" like 'Usr%GridDataView' or "Key" like '%Detail%') and SysCultureId = '1A778E3F-0A8E-E111-84A3-00155D054C03'
		and (ContactId = '410006E1-CA4E-4502-A9EC-E54D922D2C00' or ContactId is null)
		group by "Key"
		having count(*) >=2
		) and ContactId is null
	*/
--	в тут обновляем contactId на null (для системы если стоит null, то это считается настройкой по умолчанию.
 /*	
	update SysProfileData set ContactId = null
	where "Key" like 'Usr%GridDataView' or "Key" like '%Detail%' and SysCultureId = '1A778E3F-0A8E-E111-84A3-00155D054C03' and ContactId = '410006E1-CA4E-4502-A9EC-E54D922D2C00'
  */

 

Трефилов Павел Сергеевич,

Большое спасибо!

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

Доброго времени суток.

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

Нравится

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

Добрый день

Сергей, такая возможность есть. Настройки хранятся в объекте SysDashboard  (Итог). Вам нужно привязать данные к пакету.

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

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

Есть раздел UsrTenant, в нем есть поле Room, принимающее значения из справочника UsrRoom. В свою очередь, в UsrRoom есть поле-справочник Shop, принимающее значение из справочника UsrShop. В UsrShop есть текстовое поле Name. Задача - показать в карточке UsrTenant значение UsrTenant.Room.Shop.Name (сделать привязку элемента управления на это значение), лучше в режиме "только чтение". Как это сделать?



Теоретически, можно прикрутить к UsrTenant атрибут, привязать к нему элемент управления в diff, в UsrTenant.onEntityInitialized() определять значение Room.Shop.Name через EntitySchemaQuery и присваивать его атрибуту. Но нет ли способа, позволяющего напрямую привязать элемент управления по такой иерархии? Что-то, может, вроде:

 

// Конечно, прямо в таком виде код не работает, выдается ошибка, 
// что невозможно найти колонку по конфигурации Room.Shop.Name
{
  "operation": "insert",
  "name": "ShopNameView",
  "values": {
    "layout": {
      "colSpan": 12,
      "rowSpan": 1,
      "column": 12,
      "row": 1,
      "layoutName": "Header"
    },
    "bindTo": "Room.Shop.Name",
    "enabled": false,
    "contentType": 5
  },
  "parentName": "Header",
  "propertyName": "items",
  "index": 3
}

 

Нравится

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

Добрый день.

 

В атрибутах добавляете виртуальное поле, которое будет отображаться в карточке:

			"DBMReady": {
				"dataValueType": Terrasoft.DataValueType.BOOLEAN,
				"type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
				"value": false
			}

В атрибутах указываете, какие поля справочного поля нужно ещё получить:

			"BTContactPatient": {
				"lookupListConfig": {
					"columns": ["BTDBMReady"]
				}
			},

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

			onEntityInitialized: function() {
				this.callParent(arguments);
				if (!this.isNew) {
					this.setPatientFieldsValue();
					}
			},
			setPatientFieldsValue: function() {
				var patient = this.get("BTContactPatient");
				if (!patient) {
					return;
				}
				this.set("DBMReady", patient.BTDBMReady);
			},

 

Алла Савельева,

Добрый день. Может, я не совсем точно донес свою мысль...



В общем, моя ситуация такова, что BTDBMReady - не скалярное значение, а ссылка на справочник. И атрибуту на странице мне нужно присвоить, например, BTContactPatient.ВTDBMReady.CustomParameter (т.е. простым

ВTDBMReady.displayValue тут не обойтись). Можно ли это сделать без EntitySchemaQuery? 

Юрий, а почему не использовать EntitySchemaQuery?

Пример заполнения виртуальных полей таким образом есть в OpportunityMiniPage пакета Opportunity:

/**
 * Last activity in opportunity.
 * @type {Object}
 */
"LastActivity": {
	"dataValueType": Terrasoft.DataValueType.LOOKUP,
	"type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
	"referenceSchemaName": "Activity"
},
 
/**
 * Last activity result caption in opportunity.
 * @type {String}
 */
"LastActivityCaption": {
	"dataValueType": Terrasoft.DataValueType.TEXT,
	"type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
	"value": ""
},
...
onEntityInitialized: function() {
...
	this.getLastActivity();
...
	this.callParent(arguments);
},
...
/**
 * Gets last activity from opportunity.
 * @protected
 */
getLastActivity: function() {
	var esq = this.getLastActivitySelect();
	esq.getEntityCollection(function(response) {
		if (response && response.success) {
			var collection = response.collection;
			if (collection.getCount() > 0) {
var firstItem = collection.getByIndex(0);
this.setLastActivityAttributes(firstItem);
			}
		}
	}, this);
},
 
/**
 * Sets last activity attributes.
 * @protected
 * @param {Object} activity Activity object from response.
 */
setLastActivityAttributes: function(activity) {
	var date = this.getShortDate(activity.get("DueDate"));
	this.set("LastActivityCaption", Ext.String.format(
			this.get("Resources.Strings.LastActivityCaption"), date));
	this.set("LastActivity", {
		value: activity.get("Id"),
		displayValue: Ext.String.format("{0} / {1}", activity.get("CategoryName"),
				activity.get("StatusName"))
	});
},
 
/**
 * Gets last activity select.
 * @protected
 * @return {Terrasoft.EntitySchemaQuery} Last activity select query.
 */
getLastActivitySelect: function() {
	var esq = Ext.create("Terrasoft.EntitySchemaQuery", {
		rootSchemaName: "Activity"
	});
	esq.rowCount = 1;
	esq.addColumn("Status.Name", "StatusName");
	esq.addColumn("ActivityCategory.Name", "CategoryName");
	var dueDate = esq.addColumn("DueDate");
	dueDate.orderPosition = 0;
	dueDate.orderDirection = Terrasoft.OrderDirection.DESC;
	this.setLastActivityRequestFilters(esq);
	return esq;
},
 
/**
 * Sets last activity filters.
 * @protected
 * @param {Terrasoft.EntitySchemaQuery} esq Activity select query.
 * @return {Terrasoft.EntitySchemaQuery} Activity select query with filter.
 */
setLastActivityRequestFilters: function(esq) {
	var id = this.get("Id");
	if (!Ext.isEmpty(id)) {
		esq.filters.add("opportunityFilter", Terrasoft.createColumnFilterWithParameter(
			Terrasoft.ComparisonType.EQUAL, "Opportunity", id));
	}
	return esq;
},

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

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