Вопрос

Коллеги всем доброго времени суток!

Подскажите кто нибудь сталкивался с такой реализацией, в модальном окне есть справочное поле с типом Terrasoft.ContentType.LOOKUP?
Если задаю данный тип то не работает, при нажатии на лупу открывается модуль справочника но в нем пусто: http://prntscr.com/m0klnc http://prntscr.com/m0kmde
если делать через Terrasoft.ContentType.ENUM то все работает.
 

{
					"operation": "insert",
					"name": "Contact",
					"parentName": "WaChangeResponsibleModulePageSelectionEditContainer",
					"propertyName": "items",
					"values": {
						"layout": {
							"colSpan": 23,
							"rowSpan": 1,
							"column": 0,
							"row": 0,
							"layoutName": "WaChangeResponsibleModulePageSelectionEditContainer"
						},
						"bindTo": "Contact",
						"contentType": Terrasoft.ContentType.ENUM,
						"labelConfig": {"visible": false},
						"hasClearIcon": false,
						"enableRightIcon": true,
						"controlConfig": {
							"placeholder": "$Resources.Strings.WaContactPlaceholderText",
							"classes": ["placeholderOpacity"],
						},
						"minSearchCharsCount": 1,
						"searchDelay": 50
					}
				},

 

У меня такой же вопрос

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

Все всплывающие окна реализованы через ModalBox и, грубо говоря, нельзя ими спамить. Активно всегда только 1 окно. Именно поэтому в миникарточках одни ENUM-ы)

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

понял, благодарю

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Добрый день!

 

Необходимо для окна справочного поля переопределить логику кнопки Добавить. Для этого я создала замещающий клиентский модуль LookupPageViewModelGenerator и изменила метод defaultModeActionButtonClick. Но возникла проблема в получении Id текущей записи (из которой происходит открытие справочного поля). Как можно получить Id?

У меня такой же вопрос

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

this.getSelectedRecords();

Id ТЕКУЩЕЙ карточки (из которой был открыт lookup)

С замещением модуля не всё просто.

Возможно, как-то можно получать Id записи из стека прошлых открытых страниц системы, с которым работают при помощи GetHistoryState, ReplaceHistoryState и PushHistoryState.

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Добрый день!

Столкнулся с проблемой, поле справочника Состояние на детали графика оплат и поставок на вкладке Паспорт в заказе, в справочнике два значения (Выполнер/Не выполнен) и более не предвидится.

Хотелось бы переделать в выпадающий список, но у поля State замещающего объекта SupplyPaymentElement в пакете с моими доработками галка "Cписок" снята и задизейблена.

Как теперь это обойти?

У меня такой же вопрос

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

Добрый день, можете в замещающей схеме добавить метаданные, сохранить их и опубликовать:
+ MetaData.Schema.D2.["0a3324bb-55c8-4791-b51f-409cfedc6fe2"].E20 true
это добавит признак список к колонке UID которой указан в квадратных скобках

Добавьте нужные Вам значения в справочник 'Состояния элемента графика поставок и оплат'.

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

нет, мне нужно, что бы это поле на детали отображалось выпадающим списком. Значения в этот справочник добавлять не надо.

Борис Леонов,

Вы можете реализовать эту функциональность на уровне карточки редактирования:

                {
                    "operation": "insert",
                    "parentName": "Header",
                    "propertyName": "items",
                    "name": "State",
                    "values": {
                        "bindTo": "State",
                        "contentType": Terrasoft.ContentType.ENUM,
                        "layout": {"column": 12, "row": 3, "colSpan": 12}
                    }
                },

Или же создать не замещающий объект, а унаследованный от SupplyPaymentElement, тогда признак 'Список' у поля 'State' будет доступен.

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

У вас первый вариант прям получилось осуществить? Я сразу так сделал, только "operation" не "insert", а "merge", не работает на детали, действует только на карточку.

А второй как провернуть, что бы остальную логику не переделывать или обойтись минимальными доработками?

Борис Леонов,

Верно, первый вариант работает только для карточки редактирования - я так и написала.

А для отображения в виде списка в редактируемом реестре подойдет только второй вариант.

Как добавить унаследованный объект описано в статье, смотрите 'Создание пользовательской схемы объекта' и 'Указание родительского объекта'.

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

завтра попробую

Добрый день, можете в замещающей схеме добавить метаданные, сохранить их и опубликовать:
+ MetaData.Schema.D2.["0a3324bb-55c8-4791-b51f-409cfedc6fe2"].E20 true
это добавит признак список к колонке UID которой указан в квадратных скобках

Колодяжный Владислав Эдуардович,

добавление метаданных работает, спасибо!

Интересно, а в методе getCellControlsConfig это можно как то провернуть?

См. тут.

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

Благодарю!

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Подскажите,можно ли виртуальное поле типа LOOKUP сделать выпадающим списком?

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

У меня такой же вопрос

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

Обычно хватает добавить в diff "contentType": Terrasoft.ContentType.ENUM

{
	"operation": "insert",
	"name": "AccountType",
	"parentName": "ProfileContainer",
	"propertyName": "items",
	"values": {
		"bindTo": "Type",
		"layout": {
			"column": 0,
			"row": 2,
			"colSpan": 24
		},
		"contentType": Terrasoft.ContentType.ENUM
	}
},

 

А если не менять данные есть?

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

Обычно хватает добавить в diff "contentType": Terrasoft.ContentType.ENUM

{
	"operation": "insert",
	"name": "AccountType",
	"parentName": "ProfileContainer",
	"propertyName": "items",
	"values": {
		"bindTo": "Type",
		"layout": {
			"column": 0,
			"row": 2,
			"colSpan": 24
		},
		"contentType": Terrasoft.ContentType.ENUM
	}
},

 

Спасибо. Все получилось.

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Добрый день! 
Появилась необходимость изменить базовое поле поиска, при выборе в окне справочного поля, и подставить туда своё значение.
Как это выглядит на примере:

 

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

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

var primaryDisplayColumn = entitySchema.primaryDisplayColumn;
if (primaryDisplayColumn) {
	this.lookupInfo.searchColumn = {
		value: primaryDisplayColumn.name,
		displayValue: primaryDisplayColumn.caption
	};
}

Значение для данной колонки берётся отсюда, но как его подменять для определённого поля - не сообразил

У меня такой же вопрос

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

В lookupListConfig просто укажи searchValue, пример:

columns: ["Id", "Name"],
searchValue: "Вериф",
columnName: "Name",
orders: [{
   columnPath: "Name",
   direction: Terrasoft.OrderDirection.ASC
}],

 

В lookupListConfig просто укажи searchValue, пример:

columns: ["Id", "Name"],
searchValue: "Вериф",
columnName: "Name",
orders: [{
   columnPath: "Name",
   direction: Terrasoft.OrderDirection.ASC
}],

 

Григорий Чех, columnName упорно изменяться не хочет. А именно значение в списке слева на первом скрине

Покажите свой код

Григорий Чех,

"Gun": {
   "dataValueType": Terrasoft.DataValueType.LOOKUP,
   "lookupListConfig": {
      columns: ["LkpGauges", "UsrConfigProduct"],
      searchValue: "Вериф", // Вот это работает, в инпуте value заполняется
      columnName: "UsrConfigProduct",
      orders: [{
          columnPath: "UsrConfigProduct"
          direction: Terrasoft.OrderDirection.ASC
      }],
      "filters": [ //Фильтры ]
   }
}

 

Григорий Чех,

Это справочное поле, не уверен, что сыграет роль. Но на всякий случай скажу. 

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

Это интересно. Т.е. теоретически можно прокинуть searchColumn в lookupInfo, но если у объекта есть колонка для отображения - всё перетрется.

варианта 2:

- Доделывать Lookup-модуль

- Оставить как есть, убрать в схеме детали отображаемое поле.

 

Попробуйте так

"Gun": {
   "lookupListConfig": {
      searchValue: "Вериф",
      searchColumn: "UsrConfigProduct"
   }
}

 

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

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

Самое интересное в том, что у меня получалось прокинуть значения. Но при обращении к lookupinfo он забирает все равно свои значения, которые получил из схемы ConfItem.js (куда ссылается справочное поле). И там прописано поле для отображения
(PrimaryDisplayColumnName)

 

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

пробовал и так - не работает... 

Попробуй переопределить loadVocabulary как то так\:

loadVocabulary: function(args, tag) {
    var column = this.getColumnByName(tag);
    args.schemaName = column.referenceSchemaName; //подставь свой
     this.callParent(arguments);
 }

Если не получится отпишись, вечером смогу проєксперементировать.

Григорий Чех,

не совсем понял, что менять. Однако там все равно схема (ConfItem) по которой открытие справочника производится, я думаю, что её подменить можно, но это не то, что мы ищем

Прокинуть как-то туда primaryDisplayColumnName, у меня не увенчалось успехом

VadimCh пишет:
Однако там все равно схема (ConfItem) по которой открытие справочника производится

 Я немного неправильно описал.
Схема ConfItem генерится на основании объекта в конфигурации. На ConfItem ссылается справочное поле, которое вы пытаетесь открыть. Соответственно и берется PrimaryDisplayColumnName из ConfItem. Те 2 варианта так и остаются: либо менять PrimaryDisplayColumnName в null в каждом объекте на которое ссылается нужное вам справочное поле, либо переделать логику LookupPage.

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

В рамках реализации задачи, заместил LookupPage, и переработал тот кусок кода, который скидывал в посте, и присоединил новую схему

"lookupListConfig": {
  lookupPageName: "KmFiltrationBaseLookup",
}

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

VadimCh,

А не могли бы Вы посоветовать что и где переработать, чтобы решить эту проблему?

Alex Zaslavsky,

Да, конечно

Чтобы решить именно эту проблему, требуется создать модуль, 

// Полный листинг схемы, создаем свой модуль, и пихаем туда эту схему, дав ей своё название
 
define("KmFiltrationBaseLookup", ["LookupPage", "LookupPageViewGenerator", "LookupPageViewModelGenerator",
"ProcessModuleUtilities", "LookupUtilities", "css!LookupPageCSS"],
	function(LookupPage, LookupPageViewGenerator, LookupPageViewModelGenerator, ProcessModuleUtilities) {
		return Ext.define("Terrasoft.configuration.KmFiltrationBaseLookup", {
			alternateClassName: "Terrasoft.KmKLSHLookupPage",
			extend: "Terrasoft.LookupPage",
			gridWrapClasses: ["custom-lookup-control"],
 
			init: function(callback, scope) {
				callback = callback || Terrasoft.emptyFn;
				if (this.viewModel) {
					callback.call(scope);
					return;
				}
				var lookupInfo = this.getLookupInfo();
				if (this.Ext.isArray(lookupInfo)) {
					var configIndex = 0;
					var parameters = this.parameters;
					if (!this.Ext.isEmpty(parameters)) {
						configIndex = parameters.index;
					}
					this.lookupInfo = lookupInfo[configIndex];
					this.lookupsInfo = lookupInfo;
				} else {
					this.lookupInfo = lookupInfo;
				}
				this.processModuleFlag = this.sandbox.publish("CardProccessModuleInfo", null, [this.sandbox.id]);
				this.initHistoryState();
				this.getSchemaAndProfile(this.lookupInfo.lookupPostfix, function(entitySchema, profile) {
					if (this.isDestroyed) {
						return;
					}
                    // Здесь сам объект, и сюда мы прокидываем свои свойства
                    // Свойства для каждой колонки находятся в схеме объекта (ConfItem.js Пример!)
					entitySchema.primaryDisplayColumn = {
						caption: "Модель",
						columnPath: "UsrConfigProduct.UsrName",
						dataValueType: 1,
						isInherited: false,
						isRequired: true,
						isValueCloneable: false,
						name: "UsrConfigProduct.UsrName",
						size: 250,
						uId: "c4f28c00-8c5d-46cd-98de-f38d2e52a2dc",
						usageType: 0
					};
 
					var primaryDisplayColumn = entitySchema.primaryDisplayColumn;
 
					if (primaryDisplayColumn) {
						this.lookupInfo.searchColumn = {
							value: primaryDisplayColumn.name,
							displayValue: primaryDisplayColumn.caption
						};
					}
					this.lookupInfo.entitySchema = entitySchema;
					this.lookupInfo.gridProfile = profile;
					var viewModel = this.viewModel = this.generateViewModel();
					viewModel.lookupInfo = this.lookupInfo;
					viewModel.load(profile, callback, scope);
				});
			}
		});
	}
);

 

Alex Zaslavsky,

 
			//в атрибутах её подключаем
			"Gun": {
				"dataValueType": Terrasoft.DataValueType.LOOKUP,
				"lookupListConfig": {
					lookupPageName: "KmFiltrationBaseLookup",
				}
			}

 

VadimCh,

Благодарю, попытаемся разобраться :)

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Добрый день, коллеги.

Кейс: 

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

------

Не могу найти подобную реализацию в стандартной поставке. Если такой реализации нет, то решение создавать замещающий модуль BaseProfileSchema и там править lookupConfig?

У меня такой же вопрос

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

Эн нет. Так легко вы не отделаетесь. Любые модификации окошка выбора из справочника - это модификации модулей. В вашем случае -LookupPageViewGenerator, там, где генерируется header. Возможно ещё в  LookupPage потребуется прописать видимость для подсказки (только для Account-справочника)

Эн нет. Так легко вы не отделаетесь. Любые модификации окошка выбора из справочника - это модификации модулей. В вашем случае -LookupPageViewGenerator, там, где генерируется header. Возможно ещё в  LookupPage потребуется прописать видимость для подсказки (только для Account-справочника)

Если кому-то интересно решение, то:

Благодаря двум постам на сообществе:

https://community.terrasoft.ru/questions/problema-s-zameseniem-modula-lookuppageviewmodelgenerator

https://community.terrasoft.ru/search?search_api_fulltext=%D0%9D%D0%B0%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5+%D1%81%D1%82%D0%B0%D0%BD%D0%B4%D0%B0%D1%80%D1%82%D0%BD%D0%BE%D0%B9+%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D1%8B+LookupPage&field_tags=&sort_by=search_api_relevance

Пришел к не очень красивому, но все же решению

Дальше выжимки из двух постов и немного костылей:

Так и не получилось изменять diff окошка Lookup’а, но можно кастомить кнопки, так что я реализовал подсказку через кнопку, на нажатие которой ничего не происходит.

Много будет повторятся из постов, но что-то будет более подробно показано:

1. Сначала создаем Модуль UsrCustomLookupPage (например), наследование не определяем, но ставим зависимость:

Название ставим строго по списку, а саму зависимость ищем по заголовку:

LookupPage – Выбор из справочника

LookupPageViewGenerator – LookupPageViewGenerator

LookupUtilities – LookupUtilities

MaskHelper – MaskHelper

LookupPageCSS Стили модуля справочника

Сам код, комменты есть, но суть в расширении LookupPage и переопределении двух методов renderLookupView, generateViewModel:

define("UsrCustomLookupPage", ["LookupPage", "LookupPageViewGenerator", "LookupPageViewModelGenerator",
"ProcessModuleUtilities", "LookupUtilities", "css!LookupPageCSS"],
	function(LookupPage, LookupPageViewGenerator, LookupPageViewModelGenerator, ProcessModuleUtilities) {
		return Ext.define("Terrasoft.configuration.UsrCustomLookupPage", {
			alternateClassName: "Terrasoft.UsrCustomLookupPage",
			extend: "Terrasoft.LookupPage",
			gridWrapClasses: ["custom-lookup-control"],
			renderLookupView: function(schema, profile) {
				var config = this.getLookupConfig(schema, profile);
				var topPanelConfig = LookupPageViewGenerator.generateFixed(config);
				var buttonsConfig;
				//Получаем ссылку на аттрибут-массив конфигурационных объектов-кнопок
				//Используем Underscore.some с возможностью прерывания переборы по возврату от предиката "true"
				_.some(topPanelConfig.items, function(target) {
					//выделяем объект группы кнопок (Wrapper) по id контейнера
					if (target.id === "selectionControlsContainerLookupPage") {
						//в нем ищем подчиненные объекты являющиеся массивом
						_.some(target, function(target) {
							//согласно структуры конфигурационного объекта панели
							//"чистым" массивом является только объект с конфигами кнопок
							if (Array.isArray(target)) {
								//сохраняем ссылку на него в переменной для дальнейшего использования
								buttonsConfig = target;
								//Прерываем перебор
								return true;
							}
						});
						//Прерываем перебор
						return true;
					}
				});
				//Создаем новую кнопку, клонируя любую, первой как правило идет кнопка "Отмена"
				var newButton1 = Terrasoft.deepClone(buttonsConfig[0]);	
				//Используем Underscore.extend для объединения склонированного объекта
				//с анонимным объектом-разницы в котором опишем необходимые изменения
				_.extend(
					newButton1,
					{
						//меняем стиль
						style: "white",
						caption: "ПОДСКАЗКА: В случае отсутствия нужного Контрагента в списке, необходимо добавить запись вручную"
					}
				);
				// ставим свою кнопку в начало массива, то есть наверх (в окне Lookup'а)
				buttonsConfig.splice(0, 0, newButton1);
				// находим нашу кнопку в массиве и ставим обработчик события нажатия
				_.some(buttonsConfig, function(target) {
					if (target.caption === 
						"ПОДСКАЗКА: В случае отсутствия нужного Контрагента в списке, необходимо добавить запись вручную") {
						// Устанавливаем обработчик
						target.click = {
							bindTo: "AddRequestButton"
						};
						return true;
					}
				});
				this.renderLookupControls(config, topPanelConfig);
			},
			generateViewModel: function() {
				var viewModelConfig = LookupPageViewModelGenerator.generate(this.lookupInfo);
				if (!this.lookupInfo.columnValue && this.lookupInfo.searchValue) {
					viewModelConfig.values.searchData = this.lookupInfo.searchValue;
					viewModelConfig.values.previousSearchData = this.lookupInfo.searchValue;
				}
				//Добавляем свой пользовательский метод
				viewModelConfig.methods.AddRequestButton = function() {
					return true;
				};
				var viewModel = this.Ext.create("Terrasoft.BaseViewModel", viewModelConfig);
				viewModel.Ext = this.Ext;
				viewModel.sandbox = this.sandbox;
				viewModel.Terrasoft = this.Terrasoft;
				if (this.lookupInfo.updateViewModel) {
					this.lookupInfo.updateViewModel.call(viewModel);
				}
				viewModel.initCaptionLookup();
				viewModel.initHasActions();
				viewModel.initLoadedColumns();
				if (!this.Ext.isEmpty(this.lookupInfo.filterObjectPath)) {
					viewModel.updateFilterByFilterObjectPath(this.lookupInfo.filters, this.lookupInfo.filterObjectPath);
				}
				if (this.lookupInfo.hideActions) {
					viewModel.set("hasActions", false);
				}
				return viewModel;
			},
		});
	}	
);

2. Этот модуль вы можете добавлять к любому Lookup’у в lookupConfig в атрибут lookupPageName: "UsrCustomLookupPage". В моем случае я создал Замещающий клиентский модуль, который наследуется от BaseProfileSchema. Копируем весь код, кроме методов и добавляем модуль UsrCustomLookupPage:

define("BaseProfileSchema", ["ConfigurationEnums", "NetworkUtilities", "css!BaseProfileSchemaCSS", "ProfileSchemaMixin",
			"MiniPageUtilities", "UsrCustomLookupPage"],
	function(ConfigurationEnums, NetworkUtilities, UsrCustomLookupPage) {
		return {
			hideEmptyModelItems: true,
			mixins: {
				ProfileSchemaMixin: "Terrasoft.ProfileSchemaMixin",
				MiniPageUtilities: "Terrasoft.MiniPageUtilities"
			},
			attributes: {
				/**
				 * Value of master column.
				 */
				"MasterColumnValue": {
					dataValueType: Terrasoft.DataValueType.GUID,
					value: null
				},
				/**
				 * Master column info.
				 */
				"MasterColumnInfo": {
					dataValueType: Terrasoft.DataValueType.CUSTOM_OBJECT
				},
				/**
				 * Data-item-marker template.
				 */
				"DataItemMarkerTpl": {
					dataValueType: Terrasoft.DataValueType.TEXT,
					value: "{0} {1}Container"
				}
			},
			messages: {
				/**
				 * @message EntityInitialized
				 * Master's entity initialized event.
				 */
				"EntityInitialized": {
					mode: this.Terrasoft.MessageMode.BROADCAST,
					direction: this.Terrasoft.MessageDirectionType.SUBSCRIBE
				},
				/**
				 * @message GetEntityColumnChanges
				 * Processes changes of entity column.
				 */
				"GetEntityColumnChanges": {
					mode: this.Terrasoft.MessageMode.BROADCAST,
					direction: this.Terrasoft.MessageDirectionType.SUBSCRIBE
				},
				/**
				 * @message GetColumnsValues
				 * Returns requested column values.
				 */
				"GetColumnsValues": {
					mode: this.Terrasoft.MessageMode.PTP,
					direction: this.Terrasoft.MessageDirectionType.PUBLISH
				},
				/**
				 * @message GetLookupQueryFilters
				 * Gets lookup query filters.
				 */
				"GetLookupQueryFilters": {
					mode: this.Terrasoft.MessageMode.PTP,
					direction: this.Terrasoft.MessageDirectionType.PUBLISH
				},
				/**
				 * @message GetColumnInfo
				 * Returns info by column.
				 * @param {String} columnName Column name.
				 */
				"GetColumnInfo": {
					mode: this.Terrasoft.MessageMode.PTP,
					direction: this.Terrasoft.MessageDirectionType.PUBLISH
				},
				/**
				 * @message UpdateCardProperty
				 * Changes the value card model.
				 * @param {Object} config Config action.
				 * @param {String} config.key Column name.
				 * @param {Mixed} config.value Column value.
				 * @param {Object} config.options Update column params.
				 */
				"UpdateCardProperty": {
					mode: this.Terrasoft.MessageMode.PTP,
					direction: this.Terrasoft.MessageDirectionType.PUBLISH
				},
				/**
				 * @message OpenCard
				 * Opens card.
				 * @param {Object} config Config for open card.
				 * @param {String} config.moduleId Module identifier.
				 * @param {String} config.schemaName Entity schema name.
				 * @param {String} config.operation Record operation/
				 * @param {String} config.id Primary column value.
				 * @param {Array} config.defaultValues Array of default values.
				 */
				"OpenCard": {
					mode: this.Terrasoft.MessageMode.PTP,
					direction: this.Terrasoft.MessageDirectionType.PUBLISH
				},
				/**
				 * @message CardModuleResponse
				 * On card module response message.
				 */
				"CardModuleResponse": {
					mode: this.Terrasoft.MessageMode.PTP,
					direction: this.Terrasoft.MessageDirectionType.SUBSCRIBE
				}
			},
 
			methods: {
				getLookupConfig: function(config) {
					var masterColumnInfo = this.get("MasterColumnInfo");
					var lookupListConfig = masterColumnInfo.lookupListConfig;
					var entitySchemaName = masterColumnInfo.referenceSchemaName || this.entitySchemaName;
					var masterColumnName = this.get("masterColumnName");
					var lookupConfig = {
						entitySchemaName: entitySchemaName,
						multiSelect: false,
						columnName: masterColumnName,
						hideActions: true,
						lookupListConfig: lookupListConfig,
						columns: lookupListConfig && lookupListConfig.columns,
						filters: this.getLookupQueryFilters(masterColumnName),
						lookupPageName: "UsrCustomLookupPage"
					};
					this.Ext.apply(lookupConfig, config);
					return lookupConfig;
				}
			}
		};
	}
);

Собственно все.

Больше всего мне не нравится, что выпадающий список «вид» сместился вниз из-за слишком длинной надписи кнопки подсказки. Может кто-нибудь знает как «вид» добавить в массив кнопок, ну или скрыть, в противном случае?

Neverhood,

Касаемо "Вида", то в сторону CSS посмотрите, думаю можно без проблем подвигать куда-надо, либо сам вид, либо вашу подсказку видоизменить и т.д.

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Добрый день!

При открытии любого лукапа в системе, рядом с названием объекта справочника пишется undefined.  При этом в консоли никаких ошибок нет. Схем связанных с открытием лукапов не переопределял. Подскажите, пожалуйста, в чем может быть причина ошибки.

 

 

У меня такой же вопрос

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

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

Дмитрий, здравствуйте!

Значение, которое у Вас выводится как undefined, берется из локализируемой строки в схеме LookupPageViewModelGenerator, название строки - CaptionLookupPage. Проверьте, возможно, там затерлось значение, или эта локализируемая строка вообще отсутствует.

Юлия, спасибо! Действительно, схема LookupPageViewModelGenerator была мной переопределена, а параметр LookupPageCaptionPrefix был не заполнен.

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Приветы,

 

Все методы работали. 

Разработка велась в "своем" пакете, а создавалось изначально поле в кастоме.

Решили перенести в свой пакет, перенес, в итоге то что в нем выбирается и страница его не пишет в Бд. Притом ранее созданные итемы с имеющимися данными в разделе отображаются, вот только при их открытии они не показываются и сохранение выбранного значения не происходит т. е. поле в бд есть, в объекте тоже, но как будто нет тк оно не изменяется при работе пользователя

 

Есть описание

{
                    "operation": "insert",
                    "name": "BpSpeekAddr",
                    "parentName": "GeneralInfoGridLayout",
                    "propertyName": "items",
                    "values": {
                        "dataValueType": this.Terrasoft.DataValueType.ENUM,
                        "caption": "Адрес собеседования",
                        "controlConfig": {
                            "list": {
                                "bindTo": "SpeakAddressItems"
                            },
                            "prepareList": { bindTo: "initSpeakAddressItems" },
                            "placeholder": {
                                "bindTo": "Адрес собеседования"
                            }
                        },
                        "layout": {
                "colSpan": 12,
                "rowSpan": 1,
                "column": 12,
                "row": 4,
                        }
                    }
                },

У меня такой же вопрос

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

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

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

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

            attributes: {
                "SpeakAddress": {
                    type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
                    dataValueType: Terrasoft.DataValueType.LOOKUP,
                    referenceSchemaName: "AccountAddress",
                    isLookup: true,
                    lookupListConfig: {
                        "filter": function () {

Как написать sql запрос

select ad.id, ad.Address

from 
  AddressType at, 
  AccountAddress ad

where 
    at.Name = 'Собеседования' and 
    at.Id = ad.AddressTypeId

                        }
                    }
                    //isRequired: true
                },

У меня такой же вопрос

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

Здравствуйте попробуйте что то вроде такого:
 

lookupListConfig: {
    "filters": [ 
        function () {
            var addressTypeId = this.get("AddressType").value;            
            var filterGroup = Ext.create("Terrasoft.FilterGroup");
            filterGroup.add("CV", Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,"[AccountAddress:AddressType].Name", "Собеседования"));
            filterGroup.add("Type", Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,"[AccountAddress:AddressType].Id", addressTypeId));
            return filterGroup;
             }
    ]
}

 

как работать с фильтрами описано в статье - https://academy.terrasoft.ru/documents/technic-sdk/7-12/primenenie-filt…

Нигрескул Алексей,

Спасибо. 

Своими силами попробовал написать и совпало с вашим советом

 "filter": function () {
                            var filterGroup = Ext.create("Terrasoft.FilterGroup");
                            filterGroup.add("IsAddressType",
                                Terrasoft.createColumnFilterWithParameter(
                                    Terrasoft.ComparisonType.EQUAL,
                                    "[AccountAddress:AddressType].Id",
                                    "[AccountAddress.AddressType].Id"));//из таблицы
                            filterGroup.add("IsSpeak",
                                Terrasoft.createColumnFilterWithParameter(
                                    Terrasoft.ComparisonType.EQUAL,
                                    "[AccountAddress:AddressType].Name",
                                    "Собеседования"));
                            return filterGroup;
                        }

Делал как раз по той статье, клиентский esq синтаксис - это для наркоманов :)

QArt,

Нигрескул Алексей,

Не заработало

Добрый день.

Вот оптимизированный sql запрос:

Вот esq строка для фильтра:

Так же проверьте устраивает ли вас результат исходного sql запроса (т.е. выполните запрос непосредственно из SQL Server Management Studio)

 

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Есть lookup как повесить на его onchage функцию???

 

У меня такой же вопрос

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

"UsrField1": {
                dependencies: [
                    {
                        columns: ["UsrField2"],
                        methodName: "someMethodName"
                    }
                ]
            }

Вы об этом? Если в поле "UsrField2" Вы что-то изменили, то запускается Ваш метод "someMethodName". 

Вот статья на академии: https://academy.terrasoft.ua/documents/technic-sdk/7-12/atributy-svoystvo-attributes

Там нужно посмотреть раздел "Дополнительные свойства атрибутов", свойство dependencies

Золотарев Артем Андреевич,

Спасибо, получилось!

 

Войдите или зарегистрируйтесь, чтобы комментировать