Показать сообщение отдельно
Старый 17.09.2020, 18:04   #1  
alicedr is offline
alicedr
Участник
 
173 / 43 (2) +++
Регистрация: 06.07.2012
Адрес: Канада
D365: runAs "Error executing code: object does not have method"
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
	)
   
    {