| 
			
			 | 
		#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.  | 
| 
	
 | 
| 
			
			 | 
		#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  | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
На счёт не всегда проходят согласен. Подправил место X++: if(!dictField.isSystem())X++: if(!dictField.isSystem() && dictField.baseType() == Types::String && _table.(x)) | 
| 
	
 | 
| 
			
			 | 
		#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). | |
| 
			
			 | 
		#5 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Интовое и связываться будет по интовому. 
		
		
		
		
		
		
		
	Место конечно узкое. Но найдите в системе, чтоб интовое поле было ключевым. Если так можно сказать. Я таких не видел. Я лишь проверяю есть ли это значение в связанной таблице. Остальные ошибки это другие методы. Пример?  | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
Не подобная ли проблема и у вас? Если подобная, то решение в сообщении gl00mie в этой теме.  | 
| 
	
 | 
| 
			
			 | 
		#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  | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от petr
			 
 
			Как проверить целостность данных 
		
	Не подобная ли проблема и у вас? Если подобная, то решение в сообщении gl00mie в этой теме. Static метод лучше закинул себе его в глобал. Ещё не раз пригодиться.  | 
| 
	
 | 
| 
			
			 | 
		#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 Подправил метод.  | 
| 
	
 | 
| 
			
			 | 
		#10 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Я бы перестраховался 
		
		
		
		
		
		
			![]() Но дело ваше. На счет класса - validateWrite вызывает помимо validateField. 
				__________________ 
		
		
		
		
	AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0  | 
| 
	
 | 
| 
			
			 | 
		#11 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Посмотрите классы, которые начинаются на Ax 
		
		
		
		
		
		
			
		
		
		
		
	Они делают все проверки, которые вы хотите, проверяя при заполнении поля его допустимость, и потом вызывая validateWrite перед непосредственным сохранением записи. Да и вообще может просто получиться этими классами воспользоваться вместо написания своего?  | 
| 
	
 | 
| 
			
			 | 
		#12 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от kashperuk
			 
 
			Посмотрите классы, которые начинаются на Ax 
		
	Они делают все проверки, которые вы хотите, проверяя при заполнении поля его допустимость, и потом вызывая validateWrite перед непосредственным сохранением записи. Да и вообще может просто получиться этими классами воспользоваться вместо написания своего? Методы все мне не нужны, мне нужна проверка именно на то что я написал не больше не меньше.  | 
| 
	
 | 
| Теги | 
| relation, законченный пример, импорт данных, как правильно, проверка целостности, таблица | 
| 
	
	 | 
	
		
  |