D365 10.0.12
Имеется пользовательский веб сервис который выполняет некий функционал в Д365.
Этот сервис вызывается из веб магазина и очень важно чтобы он работал от имени пользователя который его вызывает, т.к. необходимо проверять права на выполнение этого функционала в Д365.
Для этого клиент попросил добавить в сервис дополнительный параметр с именем пользователя и выполнять функционал от имени этого пользователя.
Использую классический RunAs, и все вроде хорошо, только при попытке выполнить получаю сообщение "Error executing code: GatewayTrans object does not have method processAs", несмотря на то, что класс и метод есть, компиляция успешна, и даже ДБ синхронизация была выполнена и виртуальная машинка перезагружена.
Кроме рекомендации перестроить CIL для 2012 (что звучит странно для Д365) нагуглить ничего не получается. Прошу помощь клуба в решении!
Вызов:
X++:
returnValue = GatewayTransService::runAsUser(dataContract.userId(), classNum(GatewayTrans), "processAs",
[dataContract.Id(),
dataContract.CustAccount(),
dataContract.transDate(),
dataContract.revRecContractStartDate(),
dataContract.userId(),
dataContract.allCompanies(),
dataContract.process()]
);
X++:
static public CreditCardStr runAsUser(UserId _userId, int _classNum, str _methodName, container _params)
{
RunAsPermission perm;
Str returnValue;
perm = new RunAsPermission(_userId);
perm.assert();
[returnValue] = runAs(_userId, _classNum, _methodName, _params);
CodeAccessPermission::revertAssert();
return returnValue;
}
И сам вызываемый метод:
X++:
class GatewayTrans
{
public static /*server*/ Str processAs(
CustomId _Id,
CustAccount _CustAccount,
TransDate _transDate,
TransDate _revRecContractStartDate,
UserId _userId,
boolean _allCompanies,
boolean _process = true
)
{