25.12.2007, 11:41 | #1 |
Участник
|
Проверки заполненных значений в связанных таблицах.
При импорте часто возникает необходимость проверки заполненных значений в связанных таблицах. Кодом то можно всё что угодно закинуть. А если инфа идёт из внешнего источника. На корректность вообще глупо рассчитывать. Искал специальный метод не нашёл. Пришлось написать.
X++: Static boolean CheckValidateField(Common _table) { DictTable dictTable = new DictTable(_table.TableId); DictField dictField; int fieldCount = dictTable.fieldCnt(); int i; int x; boolean ret; ; ret = true; for (i = 1; i <= fieldCount; i++) { dictField = new DictField(dictTable.id(), dictTable.fieldCnt2Id(i)); x=dictField.id(); if(!dictField.isSystem() && (dictField.baseType() == Types::String || dictField.baseType() == Types::Integer) && _table.(x)) { if (!_table.validateField(x)) ret = false; } } return ret; } Последний раз редактировалось miklenew; 25.12.2007 в 13:50. |
|
25.12.2007, 12:10 | #2 |
Участник
|
Проверок побольше сделайте.
Такие комбинации не всегда проходят: X++: dictField = new DictField; Что-то в этом роде: X++: if (!_table.validateField(x)) { sysinfo = new SysInfoAction_TableField(_table, x); if( dictField.arraySize() > 1) info(strfmt("Field %1.%2[%3] with RecId = %4 not valid", dict.tableName(_table.TableId), dictField.name(), dictField.arraySize(), _table.RecId), "", sysinfo); else info(strfmt("Field %1.%2 with RecId = %3 not valid", dict.tableName(_table.TableId), dictField.name(), _table.RecId), "", sysinfo); ret = false; }
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0 |
|
25.12.2007, 12:30 | #3 |
Участник
|
Цитата:
На счёт не всегда проходят согласен. Подправил место X++: if(!dictField.isSystem()) X++: if(!dictField.isSystem() && dictField.baseType() == Types::String && _table.(x)) |
|
25.12.2007, 12:39 | #4 |
Участник
|
X++: dictField.baseType() == Types::String А если условие на интовое поле (например). X++: . X++: dictTable = new DictTable(_table.TableId); А если он будет null - сами понимаете.... PS Про "не найдено в связанном справочнике..." система действительно сама ворчит.
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0 Последний раз редактировалось Alex_KD; 25.12.2007 в 12:41. Причина: логика хромает...=) |
|
|
За это сообщение автора поблагодарили: miklenew (1). |
25.12.2007, 12:48 | #5 |
Участник
|
Интовое и связываться будет по интовому.
Место конечно узкое. Но найдите в системе, чтоб интовое поле было ключевым. Если так можно сказать. Я таких не видел. Я лишь проверяю есть ли это значение в связанной таблице. Остальные ошибки это другие методы. Пример? |
|
25.12.2007, 13:14 | #6 |
Участник
|
Цитата:
Не подобная ли проблема и у вас? Если подобная, то решение в сообщении gl00mie в этой теме. |
|
25.12.2007, 13:20 | #7 |
Участник
|
Например:
X++: dictTable = new DictTable(0); Цитата:
Я таких не видел.
Info Сообщение (13:14:05) CustPaymSchedLine.ParentRecID Info Сообщение (13:14:05) LedgerBudget.ExpandId Info Сообщение (13:14:05) LedgerClosingTrans.OffsetAccountRecId Info Сообщение (13:14:05) LedgerKeyTrans.PeriodStart Info Сообщение (13:14:05) LedgerPeriod.PeriodStart Info Сообщение (13:14:05) LedgerPeriod.PeriodEnd Info Сообщение (13:14:05) ProdTable.GanttColorId
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0 |
|
25.12.2007, 13:37 | #8 |
Участник
|
Цитата:
Сообщение от petr
Как проверить целостность данных
Не подобная ли проблема и у вас? Если подобная, то решение в сообщении gl00mie в этой теме. Static метод лучше закинул себе его в глобал. Ещё не раз пригодиться. |
|
25.12.2007, 13:39 | #9 |
Участник
|
Цитата:
Сообщение от Alex_KD
Например:
Есть парочку (список неполный): Info Сообщение (13:14:05) CustPaymSchedLine.ParentRecID Info Сообщение (13:14:05) LedgerBudget.ExpandId Info Сообщение (13:14:05) LedgerClosingTrans.OffsetAccountRecId Info Сообщение (13:14:05) LedgerKeyTrans.PeriodStart Info Сообщение (13:14:05) LedgerPeriod.PeriodStart Info Сообщение (13:14:05) LedgerPeriod.PeriodEnd Info Сообщение (13:14:05) ProdTable.GanttColorId Подправил метод. |
|
25.12.2007, 13:55 | #10 |
Участник
|
Я бы перестраховался
Но дело ваше. На счет класса - validateWrite вызывает помимо validateField.
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0 |
|
25.12.2007, 14:22 | #11 |
Участник
|
Посмотрите классы, которые начинаются на Ax
Они делают все проверки, которые вы хотите, проверяя при заполнении поля его допустимость, и потом вызывая validateWrite перед непосредственным сохранением записи. Да и вообще может просто получиться этими классами воспользоваться вместо написания своего? |
|
25.12.2007, 14:40 | #12 |
Участник
|
Цитата:
Сообщение от kashperuk
Посмотрите классы, которые начинаются на Ax
Они делают все проверки, которые вы хотите, проверяя при заполнении поля его допустимость, и потом вызывая validateWrite перед непосредственным сохранением записи. Да и вообще может просто получиться этими классами воспользоваться вместо написания своего? Методы все мне не нужны, мне нужна проверка именно на то что я написал не больше не меньше. |
|
Теги |
relation, законченный пример, импорт данных, как правильно, проверка целостности, таблица |
|
|