Показать сообщение отдельно
Старый 06.10.2017, 04:26   #57  
ax_mct is offline
ax_mct
Banned
 
2,548 / 1091 (0) ++++++++
Регистрация: 10.10.2005
Адрес: Westlands
Цитата:
Сообщение от wojzeh Посмотреть сообщение
а чем это принципиально отличается от связки пре-пост?
Способом доступа к переменным. Так мы берем и хакаем через Args, а так мы имеем право сделать обертку и использовать члены напрямую.

Но все равно данный паттерн "обход базового метода с временным присвоением внутреннего условия" он заслуживает патента.

У меня сейчас на четвертые сутки запуска на клиенте AX2012 самоудалилось немало заказов на живом приложении. Вылечилось одной строчкой кода для обхода стандартного удаления заголовка интер. закупки при удалении оригинального заказа. Как с таким справится ь в AX7 мне даже страшно ум приложить. По данному паттерну мне в СоС надо

X++:
RecId recId = _salesTable.RecId; 
_salesTable.RecId = 0

next purchTableDelete(_salesTable)

_salesTable.RecId = recId;
Вот она какая красота расширений!
А overlayering это слишком тупо, да.
X++:
void purchTableDelete(SalesTable _salesTable)
{
    InterCompanyPurchSalesReference interCompanyPurchSalesReference;
    PurchTable                      purchTable;

    if(!_salesTable)
    {
        return;
    }

    if (_salesTable.SkipUpdate == InterCompanySkipUpdate::Internal
    ||  _salesTable.SkipUpdate == InterCompanySkipUpdate::Both
    || !this.canCreatePurchOrder())
    {
        return;
    }

    while select PurchId from interCompanyPurchSalesReference
         index hint SalesPurchIdx
         where interCompanyPurchSalesReference.SalesId == _salesTable.SalesId
    {
        select forupdate purchTable
               index hint PurchIdx
               where purchTable.PurchId == interCompanyPurchSalesReference.PurchId
               &&    purchTable.InterCompanyOrder;
        if (purchTable.isInterCompanyOrder()
        && purchTable.SalesOSInterOrigin != SalesOSInterOrigin::Sourcing) // добавлено
        {
            purchTable.SkipUpdate = InterCompanySkipUpdate::Internal;
            purchTable.delete();
        }
    }
}
--------------------------------
Хороший рябчик, да