10.01.2017, 13:42 | #1 |
Участник
|
вывод в XML только недефолтных значений. а смысл?
предположим, метод isFieldSet проверяет содержится ли в поле некое дефолтное значение или значение, отличное от дефолтного. см ветку xRecord.isFieldSet() - что это? как сейчас правильно проверять наличие поля в базе данных?
тогда я перестаю понимать смысл происходящего в коде метода record2XmlNode: X++: // loop through the fields in the table for (f = 1 ; f <= table.fieldCnt() ; f++) { fieldId = table.fieldCnt2Id(f); fieldName = table.fieldName(fieldId); if (!fieldId && !_common.isFieldSet(fieldId)) { continue; } а зачем? в чем глубинный смысл? типа сократить объем XML? а зачем? |
|
10.01.2017, 14:13 | #2 |
Участник
|
Одно из возможных объяснений: если к моменту загрузки дефолтные значения поменяются, то они не затрутся устаревшими.
|
|
10.01.2017, 14:18 | #3 |
Участник
|
но это означает, что даже после "синхронизации" данных
данные все равно останутся разными. а зачем? |
|
10.01.2017, 14:50 | #4 |
Banned
|
Как уже написали в той теме для 2012 помимо
Checks whether a field has a Set or Defaulted state. есть чуть более как true if field is has a Set or Defaulted state; otherwise, false. https://technet.microsoft.com/en-us/...sfieldset.aspx Также рассматривая этот код, я бы заключил что это это аналог "Enabled", а не простановки значения. Так как здесь надо поставить скобки: Checks whether a field has a (Set or Defaulted) state. P.S. Может быть даже "Actually in use", так как не конфигурационный "Enabled", а процессный/производный такой "Enabled". Но наверное можно думать об этом как "Enabled". Цитата:
Как я понял, это просто "признак редактирования" - устанавливается после любой записи в поле и сбрасывается после clear() / update():
Последний раз редактировалось ax_mct; 10.01.2017 в 14:58. |
|
10.01.2017, 14:54 | #5 |
Участник
|
А вас не смущает условие !fieldId &&, ну т.е. вторая часть которая isFieldSet будет выполнена только если fieldId =0 Хотя скорее всего, если fieldId будет 0, то будет трассировка стека Т.е. выводятся в данном методе все значения в том числе и дефолтные.
ПС. Конечно скорее всего описка и должно было быть что то типа if (fieldId && ! _common.isFieldSet(fieldId)).
__________________
Sergey Nefedov Последний раз редактировалось SRF; 10.01.2017 в 15:06. |
|
10.01.2017, 15:16 | #6 |
Banned
|
Цитата:
Сообщение от SRF
А вас не смущает условие !fieldId &&, ну т.е. вторая часть которая isFieldSet будет выполнена только если fieldId =0 Хотя скорее всего, если fieldId будет 0, то будет трассировка стека Т.е. выводятся в данном методе все значения в том числе и дефолтные.
ПС. Конечно скорее всего описка и должно было быть что то типа if (fieldId && ! _common.isFieldSet(fieldId)). Если логика в том что вы должны явно в initValue() ? присвоить default значение или как-то иначе но явно. Или присвоить - что всегда явно. То логика есть. Поле с которым ничего явно не сделали - игнорируется. IF ((нет поля) OR (поле не прошло defaulting или присвоение)) { continue; // То есть игнорируй } То есть defaulting должен быть явным и никак иначе? |
|
10.01.2017, 15:25 | #7 |
Участник
|
смущает.
но об этом уже говорил Logger в соседней ветке давайте про isFieldSet и дефолтные значения туда. в этой же ветке призываю сосредоточиться на способе генерации XML. в XML попадают только "не дефолтные" значения. следовательно, "дефолтные" не передаются между базами данных. (как определена эта дефолтность не так уж и важно) насколько правилен такой подход? насколько я помню ворды-эксели ругали за многословность и объемность именно потому что doc|xls|... содержат все-все-все значения. но именно эта многословность позволяла легко переходить с версию на версию... с другой стороны... в общем, что думаете о самом принципе - запись в XML только недефолтных значений? плюсы? минусы? |
|
10.01.2017, 15:27 | #8 |
Участник
|
Например, если встретится кастомизированное поле но неизмененное при симметричном разборе не будет ошибки
|
|
10.01.2017, 15:33 | #9 |
Banned
|
Попадают все поля которые имеют Set or Defaulted state. (P.S. не уверен так как нельзя полагаться на help полностью)
Но их Defaulted может быть не то что здесь "не дефолтные". Последний раз редактировалось ax_mct; 10.01.2017 в 15:48. Причина: P.S. |
|
10.01.2017, 15:36 | #10 |
Участник
|
Цитата:
сейчас же действует правило: если в базе есть поле, а в данных нет - ошибка не возникает. если в базе нет поля, а в данных нет - ошибка также не возникает. данные игнорируются. |
|
10.01.2017, 15:43 | #11 |
Участник
|
|
|
10.01.2017, 16:24 | #12 |
Участник
|
Не очень понятно. А если схема данных, согласованная с другой системой, не допускает отсутствия определенных узлов? А мы оставили в таких полях дефолтные значения, то значит они не выгрузятся?
|
|
10.01.2017, 16:49 | #13 |
Участник
|
тот код, о котором идет речь, не про схему данных, а про простой вывод записи в xml
|
|
10.01.2017, 17:26 | #14 |
Участник
|
xml по любому нужен не человеку, а какому-то ПО.
сам подход то не меняется. можно ли пропускать в некоем машинно-читаемом файле поля с дефолтными значениями? плюсы/минусы? очевидный плюс - результирующий файл будет иметь гораздо меньший объем. есть ли минусы? |
|
10.01.2017, 18:04 | #15 |
Banned
|
Цитата:
Если это предназначено для другой системы, то неприемлимо. Для уменьшения XML файла есть схема. Данный кусок это Retail. Каким то образом поле может иметь нулевое ID но при этом использоваться как переменная для передачи. Я бы читал это так. Но Бредово. Было бы более системным кодом тогда грешил бы на всякие необходимости при mapping. А так если в Retail - то там еще и не такое есть Последний раз редактировалось ax_mct; 10.01.2017 в 18:10. |
|