Цитата:
Сообщение от
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();
}
}
}
--------------------------------
Хороший рябчик, да