12.10.2018, 11:53 | #1 |
Участник
|
Статичность записи...
Есть скрипт, который должен при срабатывании Event Handlera брать определенную запись из таблицы и на ее основании создавать новую запись в этой же таблице. Но поля, которые я пытаюсь менять в методе run() - не меняются и остаются как в исходной записи.
Сам код: X++: class ServiceOrderCopyHandler_VG { static SMAServiceOrderId so; static SMAServiceOrderTable orderTable; SMAServiceOrderTable orderTableNew; static SmaServiceOrderTableCopy construct(args _args) { return new SmaServiceOrderTableCopy(); } static void main(Args _args) { SmaServiceOrderTableCopy smaServiceOrderTableCopy; ; _args.record(orderTable); if (!_args || _args.dataset() != tablenum(SMAServiceOrderTable)) throw error(error::missingRecord(funcName())); smaServiceOrderTableCopy = SmaServiceOrderTableCopy::construct(_args); smaServiceOrderTableCopy.parmOrderTable(_args.record()); smaServiceOrderTableCopy.run(); } public SMAServiceOrderTable parmOrderTable(SMAServiceOrderTable _orderTable = orderTable) { orderTable = _orderTable; return orderTable; } public void run() { SMAServiceOrderLine orderLine = SMAServiceOrderLine::find(so, 1); SMAServiceOrderLine orderLineNew; orderTableNew.clear(); buf2Buf(orderTable,orderTableNew); orderTableNew.initValue(); orderTableNew.Description = 'qqqqq'; orderTableNew.ActivityNumber = ''; orderTableNew.CompletePercent = 0; orderTableNew.ServiceOrderId = NumberSeq::newGetNum(SMAParameters::numRefServiceOrderId()).num(); orderTableNew.insert(); while select orderLine where orderLine.ServiceOrderId == orderTable.ServiceOrderId { orderLineNew.clear(); buf2Buf(orderLine,orderLineNew); orderLineNew.initValue(); orderLineNew.ServiceOrderId = orderTableNew.ServiceOrderId; orderLineNew.ActivityId = ''; orderLineNew.ProjTransId = ''; orderLineNew.Description = 'qqqqqqqqqq'; orderLineNew.insert(); } SMAServiceOrderId oldServiceOrderId = orderTable.ServiceOrderId; if (orderTable.isFormDataSource()) { FormDataSource formDS; formDS = orderTable.dataSource(); formDS.research(); formDS.positionToRecordByValue(fieldnum(SMAServiceOrderTable, RecId), queryValue(orderTableNew.RecId)); } info(strfmt("@SMAServiceOrder:OrderDuplicated", oldServiceOrderId, orderTableNew.ServiceOrderId),"", SysInfoAction_TableField::newBufferField(orderTableNew, fieldnum(SMAServiceOrderTable, ServiceOrderId))); } [DataEventHandler(tableStr(DataEntity1), DataEventType::Updated)] public static void DataEntity1_onUpdated(Common sender, DataEventArgs e) { DataEntity1 spentity = sender as DataEntity1; so = spentity.ServiceOrderId; orderTable = SMAServiceOrderTable::find(so); Args args = new Args(); args.record(sender); ServiceOrderCopyHandler_VG::main(args); } } |
|
12.10.2018, 12:15 | #2 |
Участник
|
Какой-то треш у вас тут. Зачем
X++: SMAServiceOrderLine orderLine = SMAServiceOrderLine::find(so, 1); X++: while select orderLine where orderLine.ServiceOrderId == orderTable.ServiceOrderId |
|
12.10.2018, 14:24 | #3 |
Участник
|
description, к примеру (и у самой таблицы и у строк)
Последний раз редактировалось Fact; 12.10.2018 в 14:28. Причина: upd |
|
15.10.2018, 09:52 | #4 |
Участник
|
Зачем вы в методе main перезаписываете свойство _args.record()?
X++: _args.record(orderTable); В своём листинге вы привели методы какого класса? ServiceOrderCopyHandler_VG? он наследник ServiceOrderCopyHandler? Почему в конструкторе класса ServiceOrderCopyHandler_VG создаётся экземпляр базового класса? X++: static SmaServiceOrderTableCopy construct(args _args) { return new SmaServiceOrderTableCopy(); } зачем в методе main вы создаёте объект базового класса? X++: smaServiceOrderTableCopy = SmaServiceOrderTableCopy::construct(_args); Последний раз редактировалось S.Kuskov; 15.10.2018 в 09:56. |
|
16.10.2018, 17:55 | #5 |
Banned
|
Мне кажется что основная ошибка это использование static members. Какой в них здесь смысл?
Банальная путаница с обьявлением и использованием переменных. Из-за плохой инкапсуляции. |
|
24.10.2018, 11:52 | #6 |
Участник
|
|
|
|
|