AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
DAX
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 10.01.2017, 13:42   #1  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
вывод в 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 только недефолтные значения.
а зачем? в чем глубинный смысл?
типа сократить объем XML? а зачем?
Миниатюры
Нажмите на изображение для увеличения
Название: ax7.PNG
Просмотров: 342
Размер:	32.4 Кб
ID:	11136  
Старый 10.01.2017, 14:13   #2  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,427 / 1771 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Одно из возможных объяснений: если к моменту загрузки дефолтные значения поменяются, то они не затрутся устаревшими.
Старый 10.01.2017, 14:18   #3  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
но это означает, что даже после "синхронизации" данных
данные все равно останутся разными.

а зачем?
Старый 10.01.2017, 14:50   #4  
ax_mct is offline
ax_mct
Banned
 
2,548 / 1091 (0) ++++++++
Регистрация: 10.10.2005
Адрес: Westlands
Как уже написали в той теме для 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  
SRF is offline
SRF
Участник
MCBMSS
Axapta Retail User
 
362 / 542 (19) +++++++
Регистрация: 08.08.2007
Записей в блоге: 1
А вас не смущает условие !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  
ax_mct is offline
ax_mct
Banned
 
2,548 / 1091 (0) ++++++++
Регистрация: 10.10.2005
Адрес: Westlands
Цитата:
Сообщение от SRF Посмотреть сообщение
А вас не смущает условие !fieldId &&, ну т.е. вторая часть которая isFieldSet будет выполнена только если fieldId =0 Хотя скорее всего, если fieldId будет 0, то будет трассировка стека Т.е. выводятся в данном методе все значения в том числе и дефолтные.

ПС. Конечно скорее всего описка и должно было быть что то типа if (fieldId && ! _common.isFieldSet(fieldId)).
Если логика в том чтобы избежать неуправляемого defaulting когда вы ничего с полем не делали, а enum принимает значение 0 и прочее.
Если логика в том что вы должны явно в initValue() ? присвоить default значение или как-то иначе но явно.
Или присвоить - что всегда явно.
То логика есть. Поле с которым ничего явно не сделали - игнорируется.

IF ((нет поля) OR (поле не прошло defaulting или присвоение))
{
continue; // То есть игнорируй
}

То есть defaulting должен быть явным и никак иначе?
Старый 10.01.2017, 15:25   #7  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
смущает.
но об этом уже говорил Logger в соседней ветке
давайте про isFieldSet и дефолтные значения туда.

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

насколько правилен такой подход?
насколько я помню ворды-эксели ругали за многословность и объемность именно потому что doc|xls|... содержат все-все-все значения.
но именно эта многословность позволяла легко переходить с версию на версию...

с другой стороны...

в общем, что думаете о самом принципе - запись в XML только недефолтных значений?
плюсы? минусы?
Старый 10.01.2017, 15:27   #8  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2922 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Например, если встретится кастомизированное поле но неизмененное при симметричном разборе не будет ошибки
Старый 10.01.2017, 15:33   #9  
ax_mct is offline
ax_mct
Banned
 
2,548 / 1091 (0) ++++++++
Регистрация: 10.10.2005
Адрес: Westlands
Цитата:
Сообщение от mazzy Посмотреть сообщение
в XML попадают только "не дефолтные" значения.
Попадают все поля которые имеют Set or Defaulted state. (P.S. не уверен так как нельзя полагаться на help полностью)

Но их Defaulted может быть не то что здесь "не дефолтные".

Последний раз редактировалось ax_mct; 10.01.2017 в 15:48. Причина: P.S.
Старый 10.01.2017, 15:36   #10  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от belugin Посмотреть сообщение
Например, если встретится кастомизированное поле но неизмененное при симметричном разборе не будет ошибки
что имеешь в виду под симметричным разбором?

сейчас же действует правило:
если в базе есть поле, а в данных нет - ошибка не возникает.
если в базе нет поля, а в данных нет - ошибка также не возникает. данные игнорируются.
Старый 10.01.2017, 15:43   #11  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2922 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от mazzy Посмотреть сообщение
что имеешь в виду под симметричным разбором?
Я имею ввиду при разборе сгенерированного XML.

Если там что-то ненулевое, это может быть важно. Соотвественно при импорте правильно не игнорировать что-то важное. Да и отлаживаться удобнее.
Старый 10.01.2017, 16:24   #12  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,158 / 1286 (47) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Не очень понятно. А если схема данных, согласованная с другой системой, не допускает отсутствия определенных узлов? А мы оставили в таких полях дефолтные значения, то значит они не выгрузятся?
Старый 10.01.2017, 16:49   #13  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2922 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от Raven Melancholic Посмотреть сообщение
Не очень понятно. А если схема данных, согласованная с другой системой, не допускает отсутствия определенных узлов? А мы оставили в таких полях дефолтные значения, то значит они не выгрузятся?
тот код, о котором идет речь, не про схему данных, а про простой вывод записи в xml
Старый 10.01.2017, 17:26   #14  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
xml по любому нужен не человеку, а какому-то ПО.
сам подход то не меняется.

можно ли пропускать в некоем машинно-читаемом файле поля с дефолтными значениями?
плюсы/минусы?

очевидный плюс - результирующий файл будет иметь гораздо меньший объем.
есть ли минусы?
Старый 10.01.2017, 18:04   #15  
ax_mct is offline
ax_mct
Banned
 
2,548 / 1091 (0) ++++++++
Регистрация: 10.10.2005
Адрес: Westlands
Цитата:
Сообщение от mazzy Посмотреть сообщение
xml по любому нужен не человеку, а какому-то ПО.
сам подход то не меняется.

можно ли пропускать в некоем машинно-читаемом файле поля с дефолтными значениями?
плюсы/минусы?

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

Если это предназначено для другой системы, то неприемлимо. Для уменьшения XML файла есть схема.

Данный кусок это Retail. Каким то образом поле может иметь нулевое ID но при этом использоваться как переменная для передачи. Я бы читал это так. Но Бредово.
Было бы более системным кодом тогда грешил бы на всякие необходимости при mapping. А так если в Retail - то там еще и не такое есть

Последний раз редактировалось ax_mct; 10.01.2017 в 18:10.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
kurthatlevik: AX suggestion: XML Columns and XML indexes Blog bot DAX Blogs 0 28.08.2015 13:11
axStart: How to use XSLT in AIF and what’s wrong with empty xml Nodes. Blog bot DAX Blogs 0 27.04.2008 18:07
Inside Dynamics AX 4.0: The XML Structure Blog bot DAX Blogs 0 04.10.2007 11:20
Inside Dynamics AX 4.0: XML Document Integration Blog bot DAX Blogs 0 04.10.2007 11:20
Отчеты: вывод значений из несвязанных таблиц ArturK DAX: Программирование 1 15.08.2003 11:08
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 16:46.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.