Показать сообщение отдельно
Старый 14.01.2019, 10:04   #10  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,038 / 1629 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Для USR-разработчиков, по-моему, SysOperation предпочтительнее, потому что позволяет более четко отделить сервис от контракта и UI для интерактивного ввода параметров, что способствует повторному использованию сервисных операций в тех местах, которые изначально не предполагались.
Вот это как раз непонятно. Вы же помните что unpack контракта у SysOperation происходит неявно в методе new? Т.е. вызывая SysOperation из кода вы вообще рискуете получить случайный набор параметров на входе.
Это на мой взгляд фундаментальный баг, о котором многие забывают(или не знают)
Например первая ссылка по запросу Post purchase order through code Ax2012 выдает следующий фрагмент кода(что отлично работало в 2009, когда класс был наследником от RunBase), который может прекратить работать в любом момент - из за того что юзер под которым это запускается может разнести PO из интерфейса со спец. параметрами(типа проверки кредитного лимита)

X++:
static void postPurchaseOrder(Args _args)
{
PurchTable purchTable = PurchTable::find();
PurchFormLetter purchFormLetter;

purchFormLetter = PurchFormLetter::construct(DocumentStatus::PurchaseOrder);
purchFormLetter.update(purchTable, , systemDateGet(), PurchUpdate::All);
}