|
|
#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), для получения значения до изменения? |
|
|
|
|
#2 |
|
Участник
|
В global есть метод buf2Buf - можно его приспособить
|
|
|
|
| За это сообщение автора поблагодарили: mazzy (5). | |
|
|
#3 |
|
Участник
|
хочется попробовать использовать dicttable еще и для получения id полей, которые были изменены в виде, например, контейнера (с помощью orig())...
buf2Buf в этом случае не катит ![]() чтобы не писать проверку if( myTable.Field1 != myTable.Orig().Field1) ... if(myTable.Field20 != myTable.Orig().Field20) |
|
|
|
|
#4 |
|
Участник
|
Вы забыли про системные поля - их не надо копировать.
Использовать Record.orig() для выявления изменений можно. Хотя факт изменения можно регистрировать в какой либо другой структуре (контейнер, Map) и использовать уже эти данные
__________________
Axapta v.3.0 sp5 kr2 |
|
|
|
|
#5 |
|
Участник
|
Цитата:
Сам факт о том что какое либо поле изменено не спасает, мне необходимо id или наименования полей, которые были изменены возвращаемые методом, я не нашел как это можно сделать через dicttable, это сократило бы код на несколько порядков и еще - один единственный метод для любой таблицы. Последний раз редактировалось AxPr-r; 28.09.2006 в 17:21. |
|
|
|
|
#6 |
|
Участник
|
Разобрался, оказалось что все просто
если кому интересно вот метод update на таблице PHP код:
PHP код:
|
|
|
|
|
#7 |
|
Administrator
|
Цитата:
И еще. В Вашем коде системные поля не изменятся по-любому.
__________________
Возможно сделать все. Вопрос времени |
|
|
|
| За это сообщение автора поблагодарили: Hans (1). | |
|
|
#8 |
|
Участник
|
ну как вариант можно рассмотреть и такое копирование, по названию полей и их одинаковых типов...
PHP код:
|
|
|
|
| За это сообщение автора поблагодарили: Poleax (1), Hans (1). | |