|
10.01.2017, 13:06 | #1 |
Участник
|
Я бы это перевел как "true - если в поле задано какое-то значение или стоит значение по умолчанию. Иначе false". Может этот метод проверяет null значения ?
Кстати, подчеркнутый код какой то странный. X++: if (!fieldId && !_common.isFieldSet(fieldId)) X++: _common.isFieldSet(fieldId) Может имелось в виду X++: if (!fieldId || !_common.isFieldSet(fieldId)) Последний раз редактировалось Logger; 10.01.2017 в 13:08. |
|
|
За это сообщение автора поблагодарили: mazzy (2), S.Kuskov (1). |
10.01.2017, 13:09 | #2 |
Дмитрий Ерин
|
Как я понял, это просто "признак редактирования" - устанавливается после любой записи в поле и сбрасывается после clear() / update():
X++: static void Job(Args _args) { FieldId fieldId = fieldNum(CustTable, AccountNum); CustTable custTable; ttsBegin; info(strFmt('%1', custTable.isFieldSet(fieldId))); // false custTable.AccountNum = "XXX"; info(strFmt('%1', custTable.isFieldSet(fieldId))); // true custTable.clear(); info(strFmt('%1', custTable.isFieldSet(fieldId))); // false select forupdate firstonly custTable; info(strFmt('%1', custTable.isFieldSet(fieldId))); // false custTable.AccountNum = ""; info(strFmt('%1', custTable.isFieldSet(fieldId))); // true custTable.doUpdate(); info(strFmt('%1', custTable.isFieldSet(fieldId))); // false ttsAbort; }
__________________
|
|
|
За это сообщение автора поблагодарили: mazzy (5), Logger (1), dech (4). |
11.01.2017, 09:12 | #3 |
Участник
|
Цитата:
False, если поле вообще не трогали.
__________________
// no comments |
|
11.01.2017, 11:12 | #4 |
Участник
|
Цитата:
По-моему, тут о разных понятиях речь. В моем понимании задача логики defaulting'а - неявно подтягивать значения по умолчанию либо значения связанных полей на основе тех полей, которые заданы явно. Например, проставили в шапку заказа на продажу код клиента - defaulting должен подтянуть из клиента фин.аналитики, адрес доставки, способ оплаты, налоговую группу, etc. Особенность работы defaulting'а была и есть в том, что он не должен перезаписывать явно заданные "извне" значения, скажем, если мы вместе с кодом клиента явно прописали адрес доставки не по умолчанию, до defaulting не должен его перезаписывать "своим" значением. Именно для отслеживания того, какие поля были заданы, а какие нет, и использовался прежде метод isFieldSet(). В том числе он использовался для того, чтобы в defaulting'е одного поля понять, было ли задано явно или "по умолчанию" другое поле. Цитата:
Возможно, люди, писавшие ритейл-модуль, просто гоняли тесты производительности перед выпуском, посмотрели в каком-нить профайлере, сколько новых объектов в памяти генерит вызов SysDictTable.fields(), сопоставили это с особенностью работы сборщика мусора в CIL, ужаснулись - и сделали перебор полей по-старинке |
|
|
За это сообщение автора поблагодарили: mazzy (2), Logger (3), ax_mct (4). |
11.01.2017, 15:51 | #5 |
Banned
|
Как понимаю все сходится на том что .isFieldSet() аналог "isTouched including defaulting".
Интересный вопрос в каком случае имеем Default state для поля. и будет ли данный Default state установлен (и как результат .isFieldSet() == true) при вызове super() в initValue(). Предполагаемые варианты получения Default state == true Вариант 1: значение, отличное от записанного в базу Вариант 2: дефолтное присваивание, если отличается от варианта 1. Например присваивание сделанное в initValue() Вариант 3. вызов super() в initValue(). То есть Default state не может получаться при использовании оператора присваивания. Лично мне ближе Вариант 3. Цитата:
Цитата:
Цитата:
Сообщение от gl00mie
Не важно значение поля, важен факт того, было ли оно явно установлено.
... В моем понимании задача логики defaulting'а - неявно подтягивать значения по умолчанию либо значения связанных полей на основе тех полей, которые заданы явно. ... В общем, действительно, дело в том, трогали ли поле |
|
10.01.2017, 13:23 | #6 |
Участник
|
Цитата:
То есть если вы в табличный буфер что-то записали, состояние поля изменится. |
|
|
За это сообщение автора поблагодарили: mazzy (2), Logger (1). |
10.01.2017, 17:11 | #7 |
Участник
|
Цитата:
Или бывает такое, что в пределах от 1 до table.fieldCnt() есть что-то, не имеющее идентификатора поля? |
|
10.01.2017, 17:37 | #8 |
Banned
|
Цитата:
Сообщение от Raven Melancholic
Больше похоже, что код вообще непонятно что делает. Как может быть fieldId == 0, если этот fieldId только что получен при помощи table.fieldCnt2Id(...) вызываемого при переборе полей из SysDictTable.
Или бывает такое, что в пределах от 1 до table.fieldCnt() есть что-то, не имеющее идентификатора поля?
Кто его знает что они накрутили сейчас. От AX2012 уже много что отличается. |
|