AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.10.2018, 11:53   #1  
Fact is offline
Fact
Участник
 
47 / 10 (1) +
Регистрация: 27.08.2018
! Статичность записи...
Есть скрипт, который должен при срабатывании 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  
skuull is offline
skuull
Участник
Most Valuable Professional
Лучший по профессии 2014
 
700 / 752 (27) +++++++
Регистрация: 08.03.2013
Адрес: ХЗ
Какой-то треш у вас тут. Зачем
X++:
SMAServiceOrderLine orderLine = SMAServiceOrderLine::find(so, 1);
если вы потом делаете
X++:
while select orderLine
            where orderLine.ServiceOrderId == orderTable.ServiceOrderId
И какие конкретно поля у вас не меняются?
Старый 12.10.2018, 14:24   #3  
Fact is offline
Fact
Участник
 
47 / 10 (1) +
Регистрация: 27.08.2018
Цитата:
Сообщение от skuull Посмотреть сообщение
Какой-то треш у вас тут. Зачем
X++:
SMAServiceOrderLine orderLine = SMAServiceOrderLine::find(so, 1);
если вы потом делаете
X++:
while select orderLine
            where orderLine.ServiceOrderId == orderTable.ServiceOrderId
И какие конкретно поля у вас не меняются?
description, к примеру (и у самой таблицы и у строк)

Последний раз редактировалось Fact; 12.10.2018 в 14:28. Причина: upd
Старый 15.10.2018, 09:52   #4  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,436 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Зачем вы в методе main перезаписываете свойство _args.record()?
X++:
_args.record(orderTable);
Как у вас вообще этот код компилируется? Там же в статическом методе нет переменной 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  
ax_mct is offline
ax_mct
Banned
 
2,548 / 1091 (0) ++++++++
Регистрация: 10.10.2005
Адрес: Westlands
Мне кажется что основная ошибка это использование static members. Какой в них здесь смысл?

Банальная путаница с обьявлением и использованием переменных. Из-за плохой инкапсуляции.
Старый 24.10.2018, 11:52   #6  
Fact is offline
Fact
Участник
 
47 / 10 (1) +
Регистрация: 27.08.2018
Цитата:
Сообщение от ax_mct Посмотреть сообщение
Мне кажется что основная ошибка это использование static members. Какой в них здесь смысл?

Банальная путаница с обьявлением и использованием переменных. Из-за плохой инкапсуляции.
Спасибо, все уже давно решил. Удалил и написал с нуля, без лишнего
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Мультипаспорт записи Ace of Database DAX: Программирование 20 29.03.2022 10:49
Ошибка записи в SalesParmSubLine FrolovAndy DAX: Программирование 2 09.01.2018 15:48
Dax12 форма ListPage: как скрыть/отобразить MenuItemButton без смены фокуса записи в гриде Aquarius DAX: Программирование 10 30.11.2016 14:36
ALEG: Доступны записи тренингов по Microsoft Dynamics NAV Blog bot DAX Blogs 0 21.03.2007 15:00
Автоматическое увеличение значения поля при создании новой записи. sguryev DAX: Программирование 3 06.02.2003 14:00

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 21:27.