Вопрос

Всем доброго времени суток. Версия 7.12.

Помогите правильно составить фильтр. Не уверен, что вообще можно однозначно составить фильтр.

Итак, есть объект раздела, ObjectModule. На его странице есть деталь, её объект ObjectDetail.

У ObjectDetail есть колонки: Id, ObjectModuleId (используется для связи с объектом раздела), Parameter, Value (параметр и значение, оба - строки).

Нужно в запросе отобрать все записи объекта раздела  ObjectModule, в которых на детали ObjectDetail есть Parameter типа "A" со значением "Value" равным 1. То есть указан параметр соответствующего типа и имеет соответствующее значение.

Возможна ли вообще реализация такого фильтра - по детали?

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

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

Вы хотите в разделе отобразить эти данные через расширенный фильтр? Или реализацию кодом?

Интересует именно код в запросе EntitySchemaQuery.

Я примерно понимаю, что нужна группа фильтров - один по значению Parameter и второй - по значению Value.

Но вот фильтроваться должно по данным на детали, а в результатах - записи объекта раздела.

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

на клиенте запрос.

Смородинов Денис,

Как выглядит текст для данного запроса на SQL?

Судя из Вашего описания, Вам подойдет такая реализация ссылка

Пример приведен с фильтрацией по одному условию, а Вам нужно добавить ещё один фильтр в subFilters.

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

не до конца понял немного, что именно фильтруется в том примере..

Ищутся записи Account по заданному значению колонки SearchNumber  детали AccountCommunication в разделе Account? Если да, то наверно подойдёт, спасибо.

Смородинов Денис,

Ну если я вас правильно понял, то вы хотите где-то отобразить грубо говоря записи раздела, но только те которые содержат определенные значения на своей детали, получается вы фильтруете справочное поле(наверное), то тогда ваша задача решается примерно так:
За код не ручаюсь, не проверял, в блокноте накидал
 

"MyLookup": {
                    "dataValueType": this.Terrasoft.DataValueType.LOOKUP,
                    "lookupListConfig": {
                        "filters": [
                            function() {
                                var filterGroup = Ext.create("Terrasoft.FilterGroup");
 
								filterGroup.logicalOperation = Terrasoft.LogicalOperatorType.OR;
                                this.additionalFilter(function(collectionsId) {
									 for (var itemsFilters = 0; itemsFilters < collectionsId.length; itemsFilters++) {
										var nameFilter = "RandomName";
										var lefExprs = (nameFilter + itemsFilters);
										var rih = (lefExprs + "additional");
										var innerFilterGroup = Ext.create("Terrasoft.FilterGroup");
										innerFilterGroup.logicalOperation = Terrasoft.LogicalOperatorType.OR;
 
										innerFilterGroup.add(lefExprs, Terrasoft.createColumnFilterWithParameter(
											Terrasoft.ComparisonType.EQUAL,
											"Id", collectionsId[itemsFilters]));
										filterGroup.add(rih, innerFilterGroup);
									}
                                }, this);
 
                                return filterGroup;
                            }
                        ]
                    }
 
 
 
 
 
 
					additionalFilter: function(callback, scope) {
						   var esq = Ext.create("Terrasoft.EntitySchemaQuery", {
								rootSchemaName: "ObjectDetail"
							});
							esq.addColumn("ObjectModuleId");
							esq.addColumn("Parameter");
							esq.addColumn("Value");
							esq.filters.add(esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "Parameter",
								"A"));
							esq.filters.add(esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "Value",
								"1"));
 
							esq.getEntityCollection(function(response) {
								var collectionId = [];
								var resultCollection = response.collection.getItems();
								for (var i = 0; i < resultCollection.length; i++) {
									collectionId.push(resultCollection[i].get("ObjectModuleId"));
								});
								Ext.callback(callback, scope, [collectionId]);
 
							}, this);
						}

 

Литвинко Павел,

получается вы фильтруете справочное поле(наверное), то тогда ваша задача решается примерно так:

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

Смородинов Денис,

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

Смородинов Денис пишет:
не до конца понял немного, что именно фильтруется в том примере..Ищутся записи Account по заданному значению колонки SearchNumber  детали AccountCommunication в разделе Account?

Да, Вы верно поняли. Выбираются все контрагенты, у которых значение в поле SearchNumber  детали AccountCommunication равно определенному номеру.

Коллеги, всё равно не получается..

Тут ещё и связь для детали своеобразно установлена, и фильтр тоже...

Итак, объект ObjectModule. В нём есть колонка-строка Request.

Объект ObjectDetail. В нём есть другая колонка-строка RequestDetail, деталь привязана по этим колонкам-строкам (Request == RequestDetail, не через справочные колонки). Ну и колонки Parameter, Value.

Далее конструкция:

var subFilters = Terrasoft.createFilterGroup();	
subFilters.addItem(Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "Parameter", "A"));
//subFilters.addItem(Terrasoft.createColumnInFilterWithParameters("Value", ["1","2"]));
filters.add(Terrasoft.createExistsFilter("[ObjectDetail:RequestDetail].Request", subFilters));

Вылезает ошибка: элемент коллекции с именем "ObjectDetail:RequestDetail].Request" не найден.

Кажется, разобрался.

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

Добрый день. 

В Мастере разделов, при сохранении изменений, или просто при соханении выдаёт ошибку:

SqlException. Cannot define foreign key constraint 'FKDLqrwK7RvllotJ6M6yTi9oYcUA' with cascaded DELETE or UPDATE on table 'Contact' because the table has an INSTEAD OF DELETE or UPDATE TRIGGER defined on it. Could not create constraint. See previous errors.

Подскажите решение.

 

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

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

Если зайти в конфигурацию, открыть схему таблицы Contact и пересохранить её возникают ли какие-то ошибки или схема пересохраняется без ошибок?

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

данная ошибка возникает при обновлении структуры БД, не только в Контактах, но и в Проектах и т.п.

Каждый раз при сохранении, даже если не были внесены изменения возникает данная ошибка.

 

Crystal It Admin пишет:
Каждый раз при сохранении, даже если не были внесены изменения возникает данная ошибка.

1. Это Вы сейчас пишете о работе мастера раздела?

А в конфигурации схема таблицы пересохраняется?

2. Проверьте, если скомпилировать всю конфигурацию будут возникать ошибки?

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

Судя по тексту, ругается на некий триггер на таблице контактов, который не даёт создавать каскадные связи со ссылкой на неё. А Вы в мастере разделов создали каким-то образом такую связь. Связь другого раздела с контактом.

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

Был создан бизнес-процесс, в нем создается активность типа "Выполнить задачу" с названием "Провести презентацию". В ней есть привязка процесса к обьекту. Запускается она по событию изменения стадии (в условии фильтр: "по процессу = да", "Id = Id текущей продажи". После перезагрузки страницы (чистки кэша) плитка появляется. Самое интересное что другие активности появляются нормально, до этой в предыдущем процессе и после нее нормально тоже в этом же процессе. Если отключить "по процессу = да" в сигнале - все идет нормально и появляется тоже

 

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

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

Там, где комментарий «Привязка процесса к объекту» точно всё в порядке? Может, там элемент-разветвление забыли?

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

это модифицированный стандартный процесс, в той части он так и был

Так «был создан бизнес-процесс» или таки «модифицированный стандартный процесс»?wink

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

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

 создан на основе стандартного. Таймеров нет, иногда нормально появляется иногда нет, в том и проблема что без закономерности

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

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

Всем доброго времени суток. Версия 7.12.

Задача - нужен справочник, из которого можно было бы выбрать любой объект в системе и получить его код.

По тому, что удалось найти:

VwEntityObjects - Представление, не подключается, даёт ошибку при компиляции: Ошибка сохранения: Внешний ключ "FKa8AInCEe1gKbjiHdyuiD9aCSbtM" ссылается на объект "dbo.VwEntityObjects", не являющийся пользовательской таблицей.

SysModule - список объектов, есть колонка Code, но не хватает всего. В частности, объекты деталей, в него уже не попадают.

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

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

Посмотри  SysSchema там по типу менеджера схемы можно выбрать то что тебе нужно (название схемы). Создать представление наложить на него созданный объект и получить справочник. 

 

 

 

 

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

Была создана кнопка (на основе кнопки "добавить заказ") в продажах "Добавить проект". Все работатет отлично, только при создании проекта не проставляется номер проекта. Номер с автоникриментом проставляется на основе статьи https://academy.terrasoft.ru/documents/technic-sdk/7-12/primer-ispolzov…, но там он только при создании проекта из меню и копировании его там, а как сделать что бы при создании проекта через бизнес-процесс проставлялся этот номер?

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

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

Можно как вариант так

В Этой же статье (по ссылке) есть ниже пример "Алгоритм реализации кейса на стороне сервера"  получение номера в событийного подпроцессе.

В этого случая не важно как будет создан объект через клиента или БП, он получит номер в любом случае. Если что то неясно опишите более подробно что вам нужно.

согласно этому коду - номер генерится при наступлении одного из событий "добавление" или "копировании", но процесс создает проект через элемент "добавить данные" а потом открывается на редактирование и при этом не isAddMode() не isCopyMode() не срабатывает и указывают на false, не давая пройти if для генерации номера

"

Прочитайте внимательно мой первый пост.

if (this.isAddMode() || this.isCopyMode()) 
- это относится к варианту когда нумерация сделана
 на клиенте (тобишь при нажатии кнопки сохранить копировать в карточке или реестре)

 Вам нужно посмотреть вторую часть статьи (Листать вниз пока не увидите раздел "Алгоритм реализации кейса на стороне сервера")

 

Те формирование номера можно делать в карточке (на клиенте) при первом сохранении  (this.isAddMode() || this.isCopyMode()) или в событийном БП объекта (При любом создании нового экземпляра объекта) Но не одновременно - это избыточно и не нужно!!!

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

1) сделать 2 сист настройки

2) сделать событийный процесс объекта

3) Опубликуйте 

4) Тестируй

В примере в событийном процессе объекта вы настраиваетесь на событие добавление записи! Она наступает при любом добавлении записи в объект. через механизмы ESQ в том числе через элемент БП добавить данные (как у вас в принскрине все должно быть нормально)!!!!!!

 

Если не получится или не поймещ что делать пиши что сделал по пунктам с принскринами.

 

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

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

 не работает почему-то

 

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

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

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

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

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

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

 есть один большей минус этого способа по причине него он не подходит "

Поскольку автогенерация кода и его сохранение в колонку выполняется на стороне сервера при возникновении события [Перед сохранением записи], то значение кода невозможно сразу же отобразить на странице добавления продукта. Это связано с тем, что событие [Перед сохранением записи] возникает на стороне сервера уже после отправки запроса на добавление записи из клиентской части приложения.

"

1) Напишите как называется ваш проект и какие сис. настройки вы сделали (их имена). Имя системных настроек жестко привязано к имени объекта.

2) В примере для хранения номера  используется поле Code объекта. Если у тебя поле для номера называется по другому UsrNumber в БП должно быть

string.IsNullOrEmpty(Entity.GetTypedColumnValue<string>("UsrNumber "))

 

Entity.SetColumnValue("UsrNumber ", UserTask1.ResultCode);

См статью для понимания где произвести замены

3) В сам объект проект ты добавил событийный процесс в котором перед добавлением записи сделали все по инструкции? Обращаю внимание что все объекты событийного  подпроцесса должны находится в контейнере событийный субпроцесс (Это элемент БП внизу списка найдеш!) На картинке не видно что у тебя подпроцесс в событийном контейнере

По вашему последнему коментарию по идее прошло соханение отработал БП и номер должен подтянутся, если єтого не произошло можно искуственно освежить данные  в карточке но скорее всего это не понадоюится. Проверьте что проэкт создается и номер формируется. Возможные проблемы с формированием я описал выше

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

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

Можно как вариант так

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

Здравствуйте, подскажите пожалуйста как можно добавить условия в выборку записей в секции, например:

...
where isActive = 0
...

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

 

Спасибо!

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

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

Сериков Асхат Кайратович,

Если требуется, чтобы записи загружались изначально и фильтр нельзя было отрубить, то в схеме секции:

//можно ещё использовать функцию getFilters
initQueryFilters: function(esq) {
	var filters = this.callParent(arguments);
	//добавляем свои фильтры
	return filters;
}

 

Фильтр?

 

Алексей-Карягин пишет:

Фильтр?

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

Сериков Асхат Кайратович,

Если требуется, чтобы записи загружались изначально и фильтр нельзя было отрубить, то в схеме секции:

//можно ещё использовать функцию getFilters
initQueryFilters: function(esq) {
	var filters = this.callParent(arguments);
	//добавляем свои фильтры
	return filters;
}

 

Сериков Асхат Кайратович пишет:
Сейчас так и работает, через фильтр. Но они не всегда срабатывают быстро, бывает что подгружает все записи, потом моргает и показывает только нужные. То есть сначала выгрузил все и только потом применил фильтрацию.

Нет, фильтры работают не так. По условиям фильтрации класс EntitySchemaQuery формирует SQL-запрос, который и идёт от сайта в базу. А уже по нему из базы возвращается коллекция записей-результатов.

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

 

Сериков Асхат Кайратович,

Если у вас нет багов в логике страницы, то фильтр как раз и выберет только то, что нужно на уровне БД, не на уровне страницы. Представьте себе, что у вас миллион записей, сколько бы времени занимала их выборка и фильтрация на клиенте?

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

Реализовала такой запрос:

var esqKit = new EntitySchemaQuery(userConnection.EntitySchemaManager, "Kit");
                EntitySchemaQuery kitsCountSubQuery;
                esqKit.AddColumn("Id", AggregationTypeStrict.Count, out kitsCountSubQuery);
                esqKit.Filters.Add(esqKit.CreateFilterWithParameters(FilterComparisonType.Equal, "BTContactPatient",
                    patientId));
                EntityCollection kitsCollection = esqKit.GetEntityCollection(userConnection);

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

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

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

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

Алла, нужно запомнить объект-результат AddColumn в переменную, а потом посмотреть её Name. Как тут:

var gridPageEntitySchemaQuery = (EntitySchemaQuery)GridPageEntitySchemaQuery;
var monthColumn = gridPageEntitySchemaQuery.AddColumn(gridPageEntitySchemaQuery.CreateMonthFunction(columnName));
var yearColumn = gridPageEntitySchemaQuery.AddColumn(gridPageEntitySchemaQuery.CreateYearFunction(columnName));
var aggregationValueColumn = gridPageEntitySchemaQuery.AddColumn(
	gridPageEntitySchemaQuery.CreateAggregationFunction(AggregationTypeStrict.Count,
	gridPageEntitySchemaQuery.RootSchema.PrimaryColumn.Name));
EntitySchemaQueryFilterCollection filters = gridPageEntitySchemaQuery.Filters;
filters.Add(gridPageEntitySchemaQuery.CreateFilterWithParameters(FilterComparisonType.IsNotNull,columnName));
var entityCollection = gridPageEntitySchemaQuery.GetEntityCollection(Page.UserConnection);
string dateName = string.Empty;
int month = 0;
foreach (var item in entityCollection) {
	var aggregationValue = item.GetTypedColumnValue<double>(aggregationValueColumn.Name);
	month = item.GetTypedColumnValue<int>(monthColumn.Name);
	dateName =  item.GetTypedColumnValue<string>(yearColumn.Name)+ "-" +(month < 10 ? "0" + month.ToString() : month.ToString());
	series.Add(dateName, aggregationValue);
}

 

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

Спасибо за подсказку - все получилось.

Если интересно, то данная колонка называется просто 'Column'.

А если вторую сделать?

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

Добрый день!

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

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

Или можно учесть как то абзац при такой схеме?

Спасибо!

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

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

Если мы говорим, о стандартных печатных формах Word, то все форматирование можно настроить в шаблоне печатной формы.

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

Откуда клиент хочет переносить блоки с документов Word ? Тогда лучше на основе этого документа сделать шаблон или штатными средствами или самостоятельно вставить в нужніх местах макроподстановки, открыть на чтение прочитать документ и заменить макроподстановки в шаблоне на нужные значения!

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

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

Григорий Чех, я дам узкий пример. Если в поле Примечание  применить функцию список например, то в печатной форме мы увидим список с левыми символами (скрин прилагаю).

Это не «какие-то левые символы», а HTML-теги форматирования текста. Теги для создания списка: li и ol.

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

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

В веб-интерфейсе системы теги отображаются в нужном формате. При переносе в печатную форму текст нужно адаптировать под их формат. Например, вместо настоящего списка имитировать маркеры вставкой символа «•».

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

Нужно при создании лида проверить есть ли уже компания комбинацией БИН и города. Сделал через валидацию, данные читаются все с базы нормально, но проблема в правильном построении callback функции, так как JS пока запускает проверку в базе уже отвечает return в валидацию. PsCode - это БИН поле, City - это города поле

setValidationConfig: function() {
	this.callParent(arguments);
	this.addColumnValidator("PsCode", this.validateCodePlusCity);
},
validateCodePlusCity : function() {
	var invalidMessage = this.get("Resources.Strings.CodePlusCityErrorMessage");
	var code = this.get("PsCode");
	var city = this.get("City");
	if (!code) {
		code = "";
	}
	if (!city) {
		city = "";
	}
	var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {rootSchemaName: "Account"});
	esq.filters.logicalOperation = Terrasoft.LogicalOperatorType.AND;
	esq.filters.addItem(Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,
		"Code", code));
	esq.filters.addItem(Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,
		"City.Id", city.value));
	esq.getEntityCollection(function(result) {
		if (result.success) {
			invalidMessage = "";
		}
	}, this);
	return {
		invalidMessage: invalidMessage
	};
}

 

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

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

setValidationConfig: function() {
	this.callParent(arguments);
	this.validateCodePlusCity(function(invalidMessage) {
		//Здесь доступно значение invalidMessage
		this.addColumnValidator("PsCode", invalidMessage);
	}, this);
 
},
validateCodePlusCity : function(callback, scope) {
	var invalidMessage = this.get("Resources.Strings.CodePlusCityErrorMessage");
	var code = this.get("PsCode");
	var city = this.get("City");
	if (!code) {
		code = "";
	}
	if (!city) {
		city = "";
	}
	var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {rootSchemaName: "Account"});
	esq.filters.logicalOperation = Terrasoft.LogicalOperatorType.AND;
	esq.filters.addItem(Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,
		"Code", code));
	esq.filters.addItem(Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,
		"City.Id", city.value));
	esq.getEntityCollection(function(result) {
		if (result.success) {
			invalidMessage = "";
			Ext.callback(callback, scope, [invalidMessage]);
		}
	}, this);
}

 

В esq.getEntityCollection нужно передавать функцию которая обработает результат выборки, в вашем случае скорее всего выдаст сообщение об неуникальности лида! Смотрите асинхронные события JS

Те обработка полученных в запросе данных идет асинхронно!

 

 

 

 

Попробуйте примерно так:

setValidationConfig: function() {
	this.callParent(arguments);
	this.validateCodePlusCity(function(invalidMessage) {
		//Здесь доступно значение invalidMessage
		this.addColumnValidator("PsCode", invalidMessage);
	}, this);
 
},
validateCodePlusCity : function(callback, scope) {
	var invalidMessage = this.get("Resources.Strings.CodePlusCityErrorMessage");
	var code = this.get("PsCode");
	var city = this.get("City");
	if (!code) {
		code = "";
	}
	if (!city) {
		city = "";
	}
	var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {rootSchemaName: "Account"});
	esq.filters.logicalOperation = Terrasoft.LogicalOperatorType.AND;
	esq.filters.addItem(Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,
		"Code", code));
	esq.filters.addItem(Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,
		"City.Id", city.value));
	esq.getEntityCollection(function(result) {
		if (result.success) {
			invalidMessage = "";
			Ext.callback(callback, scope, [invalidMessage]);
		}
	}, this);
}

 

Если вам нужно валидейтить перед сохранением то имхо лучше использовать asyncValidate Пример ниже callback нужно передать в esq.getEntityCollection.  Если нужно проверять при изменении, можно создать виртуальную колонку и при смене города или БИН менять ее значение в зависимости от результата проверки. А в  setValidationConfig проверять результат проверки уникальности города из виртуальной колонки. Если не получится пишите.

asyncValidate: function(callback, scope) {
    this.callParent([function(response) {
        if (!this.validateResponse(response)) {
            return;
        }
        Terrasoft.chain(
            function(next) {
                this.myValidationMethod(function(response) {
                    if (this.validateResponse(response)) {
                        next();
                    }
                }, this);
            },
            function() {
                callback.call(scope, response);
            },
        this);
    }, this]);
}

 

Спасибо! Отличные ответы, думаю применить теперь еще в других частях кода их.

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

Здравствуйте.

 

Каким образом возможно переименовать название поля в Мобильном приложении?

Заранее спасибо.

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

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

Точно не помню, но попробуйте посмотреть в Дизайнере системы - Дизайнер мобильной версии, выбираете нужное рабочее пространство, раздел и там смотрите, что можно с полем сделать.

В «Мастере мобильного приложения» можно только выбирать поля, уже существующие в объекте. Соответственно, чтобы переименовать, нужно менять в самом объекте раздела, его в дизайнере (или в переводах, нужно смотреть). Но так поле переименуется везде.

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