Есть скрипт, который должен при срабатывании 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);
}
}