Поделиться через


Функции сеансов времени выполнения X++

Замечание

Группы интересов сообщества теперь переехали из Yammer в Microsoft Viva Engage. Чтобы присоединиться к сообществу Viva Engage и принять участие в последних обсуждениях, заполните форму " Запрос доступа к финансам и операциям Viva Engage Community " и выберите сообщество, к которому вы хотите присоединиться.

В этой статье описываются функции времени выполнения сеанса.

curExt

Извлекает расширение, используемое для текущей компании.

str curExt()

Возвращаемое значение

Расширение для текущей компании.

Example

static void curExtExample(Args _arg)
{
    str s;
    // Sets s to the extension of the current company.
    s = curExt();
    print "Current extension is " + s;
}

curUserId

Извлекает ненумерный идентификатор, представляющий текущего пользователя.

str curUserId()

Возвращаемое значение

Ненумерный идентификатор, представляющий текущего пользователя.

Example

static void curUserIdExample(Args _arg)
{
    str s;
    s = curUserId();
    print "Current user ID is " + s;
}

funcName

Извлекает строку, содержащую текущий контекст функции.

str funcName()

Возвращаемое значение

Имя метода, выполняющего этот метод.

Замечания

Если выполнение в настоящее время находится в элементе таблицы или класса, имя метода префиксируется именем этой таблицы или класса.

Example

static void funcNameExample(Args _arg)
{
    print "Current function context is " + funcName();
}

getCurrentPartition

Извлекает короткое имя текущей секции.

str getCurrentPartition()

Возвращаемое значение

Короткое имя текущей секции.

Замечания

Максимальная длина возвращаемого имени секции данных составляет восемь символов.

Example

В следующем примере кода показаны вызовы и выходные данные, функция getCurrentPartition языка X++ и связанные функции или методы.

static public void Main(Args _args)  // X++ method.
{
    int64 iPartition;
    str sPartition;
    SelectableDataArea oSelectableDataArea;  // System ExDT.
    iPartition = getCurrentPartitionRecId();
    sPartition = getcurrentpartition();
    oSelectableDataArea = Global::getCompany( tableNum(BankAccountTable) );
    Global::info( strFmt(
            "getCurrentPartitionRecId =%1 , getCurrentPartition =%2 , getCompany =%3",
            iPartition, sPartition, oSelectableDataArea) );
}
/**** Pasted from Infolog window:
Message_@SYS14327 (03:42:38 pm)
getCurrentPartitionRecId =5637144576 , getCurrentPartition =initial , getCompany =ceu
****/

getCurrentPartitionRecId

Извлекает поле RecId текущей секции.

int64 getCurrentPartitionRecId()

Возвращаемое значение

Поле RecId текущей секции данных.

Замечания

Чтобы просмотреть пример кода, основанный на функции getCurrentPartitionRecId , см. статью "Включение фильтра для секции" в Direct Transact-SQL.

Example

В следующем примере кода показаны вызовы и выходные данные, функция getCurrentPartitionRecId языка X++ и связанные функции или методы.

static public void Main(Args _args)  // X++ method.
{
    int64 iPartition;
    str sPartition;
    SelectableDataArea oSelectableDataArea;  // System ExDT.
    iPartition = getCurrentPartitionRecId();
    sPartition = getcurrentpartition();
    oSelectableDataArea = Global::getCompany( tableNum(BankAccountTable) );
    Global::info( strFmt(
            "getCurrentPartitionRecId =%1 , getCurrentPartition =%2 , getCompany =%3",
            iPartition, sPartition, oSelectableDataArea) );
}
/**** Pasted from Infolog window:
Message_@SYS14327 (03:42:38 pm)
getCurrentPartitionRecId =5637144576 , getCurrentPartition =initial , getCompany =ceu
****/

getPrefix

Извлекает текущий префикс выполнения после последовательных вызовов функции setPrefix .

str getPrefix()

Возвращаемое значение

Текущий префикс выполнения.

Замечания

Механизм префикса упрощает написание точных сообщений об ошибках о транзакциях, выполняемых приложением. Так как иерархический дисплей создается в infolog, его можно легко определить, откуда произошла каждая ошибка.

Example

static void getPrefixExample(Args _arg)
{
    setPrefix("Prefix");
    setPrefix("Another prefix");
    print getPrefix();
}

идентификатор сессии

Извлекает номер сеанса текущего сеанса.

int sessionId()

Возвращаемое значение

Числовый идентификатор текущего сеанса.

Замечания

Номер сеанса назначается при запуске клиента и подключении к серверу объектов приложения (AOS). Каждый вызов этой функции во время жизни клиента возвращает одно целочисленное значение. Возвращаемое значение совместимо с расширенным типом данных SessionID . Содержит методы, возвращающие сведения о отдельных сеансах пользователей.

Example

static void sessionIdExample(Args _arg)
{
    int session;
    session = sessionId();
    print "This session ID is number " + int2Str(session);
}

prmIsDefault

Определяет, имеет ли указанный параметр для текущего метода значение по умолчанию.

int prmIsDefault(anytype argument)

Параметры

Параметр Description
Аргумент Параметр для тестирования.

Возвращаемое значение

1 , если использовалось значение по умолчанию для параметра; в противном случае — 0 (ноль).

Example

static void prmIsDefaultExample(Args _arg)
{
    void fn(boolean b = true, int j = 42)
    {
        if (prmIsDefault(b) == 1)
        {
            print "First parameter is using the default value.";
        }
        else
        {
            print "First parameter is not using the default value.";
        }
    }
    fn();
    fn(false);
}

runAs

Позволяет вызывающему объекту запускать метод X++ в контексте безопасности другого пользователя. Эта функция чаще всего используется с пакетной обработкой.

container runAs(
    str userId,
    int classId,
    str staticMethodName
    [,
    container params,
    str company,
    str language,
    str partition
    ])

Параметры

Параметр Description
userId Пользователь для олицетворения.
classId Класс, вызывающий в олицетворенный сеанс.
staticMethodName Метод класса для вызова в новом контексте пользователя.
params Параметры, передаваемые методу; необязательный.
компания Компания, выбранная для олицетворенного сеанса; необязательный.
language Язык, выбранный для олицетворенного сеанса; необязательный.
partition Ключ секции типа, возвращаемого функцией getCurrentPartition ; необязательный.

Возвращаемое значение

Контейнер, содержащий возвращаемое значение или значения метода, вызываемого функцией runAs , если были возвращены какие-либо значения.

Замечания

Эта функция позволяет запускать код от имени другого пользователя. Эта возможность представляет угрозу безопасности. Поэтому эта функция выполняется в разделе "Безопасность доступа к коду". Вызовы этой функции на сервере требуют разрешения из класса RunAsPermission . Каждое использование этого интерфейса программирования приложения (API) должно быть моделировано. Если обнаружена уязвимость безопасности, проверьте входные данные в этом API. Отладчик может игнорировать точки останова, расположенные в методе, который вызывается с помощью функции runAs . Код X++, выполняемый функцией runAs , должен выполняться как Общий промежуточный язык Microsoft .NET Framework (CIL). Если CIL не был создан для целевого статического метода, сообщение об ошибке указывает, что метод не найден. Системный тип PartitionKey — это точный тип параметра секции . PartitionKey — это строка, которая имеет максимальную длину восьми символов.

Example

В следующем примере вызывается метод runDueDateEventsForUser в классе EventJobDueDate . Код выполняется в контексте безопасности пользователя. Запустите этот код, применяя его к методу в новом классе.

server static public void Main(Args _args)
{
    RunAsPermission perm;
    UserId runAsUser;
    SysUserInfo userInfo;
    userInfo = SysUserInfo::find();
    runAsUser = userInfo.Id;
    perm = new RunAsPermission(runAsUser);
    perm.assert();
    runAs(runAsUser, classnum(EventJobDueDate), "runDueDateEventsForUser");
    CodeAccessPermission::revertAssert();
}

setPrefix

Задает префикс для текущей области выполнения.

int setPrefix(str _prefix)

Параметры

Параметр Description
_приставка Префикс текущей области выполнения.

Возвращаемое значение

Значение 0 , если префикс был успешно установлен.

Замечания

Полный префикс выполнения можно получить с помощью функции getPrefix . Когда область слева, префикс автоматически сбрасывается на предыдущий уровень. Механизм префикса упрощает написание точных сообщений об ошибках о транзакциях, выполняемых приложением. Например, метод AA вызывает метод BB , а каждый метод вызывает функцию setPrefix . Сообщения, которые метод BB записывает в infolog, отображаются в иерархии. Когда метод BB заканчивается, и элемент управления возвращается в метод AA , префикс, заданный методом BB , не присоединяется к последующим сообщениям.

Example

static void setPrefixExample(Args _arg)
{
    int i;
    i = setPrefix("Prefix");
    print i;
}