28.09.2006, 15:59 | #1 |
Участник
|
Копирование строк таблицы с помощью DictTable
прочитал:
манипуляции с таблицами Можно ли имея только название(имя) таблицы добавить в неё запись? т.к. мне необходимо копировать строки таблиц, возникла идея использовать один метод класса для дублирования записей любых таблиц: Код: static common copy(int _tablenum, int _countField, // количество полей recid _recid) { DictTable dt = new DictTable(_tablenum); int i,insertMethodNum; FieldId fieldId; Common record, newrecord; ; if(dt.fieldCnt()<_countField) throw error(''); record = dt.makerecord(); select firstonly record where record.recid == _recid; newrecord = dt.makeRecord(); for(i=1;i<=_countField;i++) { fieldId = dt.fieldCnt2Id(i); newrecord.(fieldId) = record.(fieldId); } return newrecord; } я изменяю значения нескольких полей, которые должны быть отличными от оригинала и вставляю строку... Код: myTable.Data(RecordCopy::Copy(tablenum(myTable),20,recId)); myTable.TransDate = systemdateget(); ... myTable.Insert(); на сколько корректен код метода? каким образом, если возможно, использовать orig(), что то типа record.orig().(fieldId), для получения значения до изменения? |
|
28.09.2006, 16:33 | #2 |
Участник
|
В global есть метод buf2Buf - можно его приспособить
|
|
|
За это сообщение автора поблагодарили: mazzy (5). |
28.09.2006, 16:41 | #3 |
Участник
|
хочется попробовать использовать dicttable еще и для получения id полей, которые были изменены в виде, например, контейнера (с помощью orig())...
buf2Buf в этом случае не катит чтобы не писать проверку if( myTable.Field1 != myTable.Orig().Field1) ... if(myTable.Field20 != myTable.Orig().Field20) |
|
28.09.2006, 16:46 | #4 |
Участник
|
Вы забыли про системные поля - их не надо копировать.
Использовать Record.orig() для выявления изменений можно. Хотя факт изменения можно регистрировать в какой либо другой структуре (контейнер, Map) и использовать уже эти данные
__________________
Axapta v.3.0 sp5 kr2 |
|
28.09.2006, 17:12 | #5 |
Участник
|
Цитата:
Сам факт о том что какое либо поле изменено не спасает, мне необходимо id или наименования полей, которые были изменены возвращаемые методом, я не нашел как это можно сделать через dicttable, это сократило бы код на несколько порядков и еще - один единственный метод для любой таблицы. Последний раз редактировалось AxPr-r; 28.09.2006 в 17:21. |
|
28.09.2006, 18:48 | #6 |
Участник
|
Разобрался, оказалось что все просто
если кому интересно вот метод update на таблице PHP код:
PHP код:
|
|
29.09.2006, 08:23 | #7 |
Administrator
|
Цитата:
И еще. В Вашем коде системные поля не изменятся по-любому.
__________________
Возможно сделать все. Вопрос времени |
|
|
За это сообщение автора поблагодарили: Hans (1). |
29.09.2006, 14:35 | #8 |
Участник
|
ну как вариант можно рассмотреть и такое копирование, по названию полей и их одинаковых типов...
PHP код:
|
|
|
За это сообщение автора поблагодарили: Poleax (1), Hans (1). |