12.08.2009, 02:35 | #1 |
Участник
|
aosvalidateinsert - зачем нужен
есть серия методов на таблице, начиная с 4ки , aosvalidate* - зачем они нужны ? я так понимаю, что для проверки прав , но когда мне как девелоперу они могут пригодиться не совсем четко себе представляю
|
|
12.08.2009, 10:26 | #2 |
MCITP
|
Вот:
Цитата:
Сообщение от Inside Microsoft Dynamix Ax 4.0
The difference between the two sets of methods is that the validateField, validateWrite and validateDelete methods are invoked only from rich client and web client forms or if called directly from X++ code; aosValidateInsert, aosValidateUpdate and aosValidateDelete are invoked implicity from the insert, update and delete base version methods, respectively, and the aosValidateRead method is invoked when the application retrieves records from the database
__________________
Zhirenkov Vitaly |
|
12.08.2009, 10:47 | #3 |
Участник
|
Спасибо! Тот есть ксли какие-то проверки железно должны происходить при вставке записи, то эти проверки лучше запихнуть в aosvalidate*?
Есть ли сейчас способ вызвать validateField для каждого поля записи(мне нужно проверить , что все поля-ссылки имеют значение , существующее уже в таблице, на которую они ссылаюся). Можно отнаследовать sysConsistencyCheck.Но, может, появились уже кие-то другие способы вызвать эту проверку? (по идее Ax сама это же делает при сохранении записи в форме вручную) |
|
12.08.2009, 10:52 | #4 |
MCITP
|
Цитата:
Цитата:
Сообщение от IKA
Есть ли сейчас способ вызвать validateField для каждого поля записи(мне нужно проверить , что все поля-ссылки имеют значение , существующее уже в таблице, на которую они ссылаюся). Можно отнаследовать sysConsistencyCheck.Но, может, появились уже кие-то другие способы вызвать эту проверку? (по идее Ax сама это же делает при сохранении записи в форме вручную)
Аксапта сама этого не делает - она вызывает validateField только при изменении поля конкретного, а никак не при сохранении записи. При сохранении записи вручную на форме вызывается только validateWrite.
__________________
Zhirenkov Vitaly |
|
12.08.2009, 11:15 | #5 |
Moderator
|
Еще про эти методы и про весь framework можно почитать в документе "Microsoft Dynamics AX 4.0 Writing Secure X++ Code".
__________________
Андрей. |
|
13.08.2009, 00:34 | #6 |
Участник
|
А чем лучше пользоваться - sysconsitencycheck* или (перебирать поля и вызывать validateField)?
|
|
13.08.2009, 12:02 | #7 |
MCITP
|
Цитата:
SysConsistencyCheck.kernelCheckRecord()
__________________
Zhirenkov Vitaly |
|
13.08.2009, 13:37 | #8 |
Участник
|
Цитата:
Цитата:
Цитата:
X++: if (! common.recId) return; PS. Если есть острое желание проверять все поля подряд, то можно в Global завести метод наподобие такого: X++: static boolean DEV_validateAllRecordFields( Common _common, boolean _verbose = false, boolean _stopOnFirstError = true ) { DictTable dictTable; DictField dictField; FieldId fieldId; boolean ret = true; ArrayIdx i; boolean validateSingleField(FieldId _fieldExtId) { if (!_common.validateField(_fieldExtId)) { if (_verbose) warning(strfmt(@"Ошибка в поле '%1' таблицы '%2' (значение '%3')", fieldid2pname(dictTable.id(), _fieldExtId), dictTable.label(), _common.(fieldId) )); return false; } return true; } ; dictTable = new DictTable(_common.tableId); if (!dictTable) return false; fieldId = dictTable.fieldNext(0); while (fieldId && !isSysId(fieldId) ) { dictField = new DictField(_common.tableId, fieldId); if (dictField.arraySize() > 1) { for (i = 1; i <= dictField.arraySize(); i++) { if (!validateSingleField(fieldId2Ext(fieldId, i))) { ret = false; if (_stopOnFirstError) break; } } } else { if (!validateSingleField(fieldId2Ext(fieldId, i))) { ret = false; if (_stopOnFirstError) break; } } fieldId = dictTable.fieldNext(fieldId); } return ret; } Последний раз редактировалось gl00mie; 13.08.2009 в 15:22. Причина: исправил пример кода |
|
|
За это сообщение автора поблагодарили: Dron AKA andy (2), ZVV (2), IKA (1). |
14.08.2009, 01:17 | #9 |
Участник
|
спасибо за разъяснения. у нас импорт из внешнего источника. Есть таблица промежуточная (с "грязными данными"), в ней около 100 полей ( многие из которых являются FK на другую таблицу), из этой таблицы данные будут импортироваться в "рабочие" таблицы. Хочется минимальными усилиями проверить на корректность заполния всех ссылочные поля (что в таблице , на которую они ссылаются, данные такие существуют) и предотвратить попадание грязных данных в систему.
|
|
14.08.2009, 08:42 | #10 |
Участник
|
Цитата:
Сообщение от IKA
спасибо за разъяснения. у нас импорт из внешнего источника. Есть таблица промежуточная (с "грязными данными"), в ней около 100 полей ( многие из которых являются FK на другую таблицу), из этой таблицы данные будут импортироваться в "рабочие" таблицы. Хочется минимальными усилиями проверить на корректность заполния всех ссылочные поля (что в таблице , на которую они ссылаются, данные такие существуют) и предотвратить попадание грязных данных в систему.
|
|
Теги |
aos, validate, как правильно, crm2011 |
|
|