|
![]() |
#1 |
Участник
|
Спасибо! Тот есть ксли какие-то проверки железно должны происходить при вставке записи, то эти проверки лучше запихнуть в aosvalidate*?
Есть ли сейчас способ вызвать validateField для каждого поля записи(мне нужно проверить , что все поля-ссылки имеют значение , существующее уже в таблице, на которую они ссылаюся). Можно отнаследовать sysConsistencyCheck.Но, может, появились уже кие-то другие способы вызвать эту проверку? (по идее Ax сама это же делает при сохранении записи в форме вручную) |
|
![]() |
#2 |
MCITP
|
![]() Цитата:
Цитата:
Сообщение от IKA
![]() Есть ли сейчас способ вызвать validateField для каждого поля записи(мне нужно проверить , что все поля-ссылки имеют значение , существующее уже в таблице, на которую они ссылаюся). Можно отнаследовать sysConsistencyCheck.Но, может, появились уже кие-то другие способы вызвать эту проверку? (по идее Ax сама это же делает при сохранении записи в форме вручную)
Аксапта сама этого не делает - она вызывает validateField только при изменении поля конкретного, а никак не при сохранении записи. При сохранении записи вручную на форме вызывается только validateWrite.
__________________
Zhirenkov Vitaly |
|
![]() |
#3 |
Участник
|
А чем лучше пользоваться - sysconsitencycheck* или (перебирать поля и вызывать validateField)?
|
|
![]() |
#4 |
MCITP
|
![]() Цитата:
![]() SysConsistencyCheck.kernelCheckRecord()
__________________
Zhirenkov Vitaly |
|
![]() |
#5 |
Участник
|
Цитата:
Цитата:
Цитата:
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). |
![]() |
#6 |
Участник
|
спасибо за разъяснения. у нас импорт из внешнего источника. Есть таблица промежуточная (с "грязными данными"), в ней около 100 полей ( многие из которых являются FK на другую таблицу), из этой таблицы данные будут импортироваться в "рабочие" таблицы. Хочется минимальными усилиями проверить на корректность заполния всех ссылочные поля (что в таблице , на которую они ссылаются, данные такие существуют) и предотвратить попадание грязных данных в систему.
|
|
![]() |
#7 |
Участник
|
Цитата:
Сообщение от IKA
![]() спасибо за разъяснения. у нас импорт из внешнего источника. Есть таблица промежуточная (с "грязными данными"), в ней около 100 полей ( многие из которых являются FK на другую таблицу), из этой таблицы данные будут импортироваться в "рабочие" таблицы. Хочется минимальными усилиями проверить на корректность заполния всех ссылочные поля (что в таблице , на которую они ссылаются, данные такие существуют) и предотвратить попадание грязных данных в систему.
|
|
Теги |
aos, validate, как правильно, crm2011 |
|
|