Как в скрипте карточки редактирования получить значение поля
Работаю в BPM. Создал раздел, назовем New, и все к нему(NewEditPage и т.д.). В нем помимо унаследованных важна колонка Account - справочник Контрагентов (а в карточке редактирования поле EditAccount). А в контрагенте создал колонку NewFlag, которая должна определять есть ли контрагент в разделе New. (Задача максимум)Так вот хотелось бы, чтобы при добавлении записи в New, в которой указан контрагент, в контрагенте менялся NewFlag на true, при удалении на false, а при изменении NewFlag "старого" контрагента менялся на false, "нового" на true.(Задача минимум) Для начала работы хотелось бы узнать как получить в скрипте значение поля в карточке редактирование, т.е. отклонение к предыдущей задаче это ID контрагента, выбранного в поле EditAccount.
Нравится
С помощь техподдержки задача минимум решена функцией Page.AccountEdit.Value.ToString()
Если есть предложения по задаче максимум, прошу.
Правильнее будет получать значение из Page.DataSource.ActiveRow.GetTypedColumnValue("AccountId"). Если Вы унаследовались от базовой страницы редактирования.
Мне не нравится идея хранить признак использования контрагента где-то в самом контрагенте. Лучше было бы в том месте, где вы хотите этот флаг использовать, определять фигурирует ли этот контрагент где-то. Например, если Вам нужно в какой-то момент отобразить контрагентов, у которых NewFlag = false, то можно просто наложить фильтр not exists на таблицу New.
"Раловец Ольга" написал: Например, если Вам нужно в какой-то момент отобразить контрагентов, у которых NewFlag = false
Что-то типа того. Мне нужно, чтобы в поле AccountEdit я мог выбрать тех контрагентов, которых нет в New.
"Раловец Ольга" написал:то можно просто наложить фильтр not exists на таблицу New.
А можно узнать поподробнее про то, как создавать фильтры? можете ли вы привести пример(желательно по моей ситуации)?
Вот пример, как получить контрагентов, которые не указаны в таблице New c помощью EntitySchemQuery:
var esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "Account"); esq.PrimaryQueryColumn.IsAlwaysSelect = true; esq.AddAllColumns(); var filterGroup = new EntitySchemaQueryFilterCollection(esq, LogicalOperationStrict.And); filterGroup.IsNot = true; filterGroup.Add(esq.CreateFilter(FilterComparisonType.Equal, "[New:Account].Account.Id", esq.CreateSchemaColumnExpression("Id"))); esq.Filters.Add(filterGroup); var accounts = esq.GetEntityCollection(UserConnection);
Решение с фильтром действительно лучше, сразу пропадает разветвление на добавить, удалить и изменить.
Но как его привязать к полю AccountEdit? Это делается в карточке редактирования, процессе Init?
Здравствуйте, Александр.
Уточните, пожалуйста, что Вы имеете ввиду под "привязкой" фильтра к полю? Вы хотите чтобы в окне выбора значений для этого поля, показывались лишь те контрагенты, которые отсутствуют в разделе New?
Совсем забыл. Компилятор ругается на esq.AddAllColumns();
'Terrasoft.Core.Entities.EntitySchemaQuery' does not contain a definition for 'AddAllColumns' and no extension method 'AddAllColumns' accepting a first argument of type 'Terrasoft.Core.Entities.EntitySchemaQuery' could be found (are you missing a using directive or an assembly reference?)
Добавлять все по одной или может достаточно Id?
Метод называется AddAllSchemaColumns, но Вам из этого всего для поля нужен только фильтр. Я точно не помню, но пример можно посмотреть в странице контакта/контрагента, как в зависимости от выбранной страны фильтруются города. Событие контрола, в котором нужно накладывать фильтр называется PrepareLookupFilters или как-то похоже. Обработчики этих событий могут быть зарегистрированы где-то на Init или PageLoad. Все, что нужно сделать, это по аналогии с представленным примером, передать необходимые фильтры в виде Dictionary.