Compartilhar via


Funções runtime de sessão de X++

Observação

Grupos de interesse da comunidade mudaram do Yammer para o Microsoft Viva Engage. Para ingressar em uma comunidade do Viva Engage e participar das discussões mais recentes, preencha o formulário Solicitar acesso às Finanças e Operações viva engage community e escolha a comunidade que você deseja ingressar.

Este artigo descreve as funções de tempo de execução da sessão.

curExt

Recupera a extensão usada para a empresa atual.

str curExt()

Valor de retorno

A extensão da empresa atual.

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

Recupera a ID não numérica que representa o usuário atual.

str curUserId()

Valor de retorno

A ID não numérica que representa o usuário atual.

Example

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

funcName

Recupera uma cadeia de caracteres que contém o contexto da função atual.

str funcName()

Valor de retorno

O nome do método que está executando esse método.

Observações

Se a execução estiver atualmente dentro do membro de uma tabela ou classe, o nome do método será prefixado com o nome dessa tabela ou classe.

Example

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

getCurrentPartition

Recupera o nome curto da partição atual.

str getCurrentPartition()

Valor de retorno

O nome curto da partição atual.

Observações

O comprimento máximo do nome da partição de dados retornado é de oito caracteres.

Example

O exemplo de código a seguir mostra chamadas e saídas da função getCurrentPartition da linguagem X++ e funções ou métodos relacionados.

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

Recupera o campo RecId da partição atual.

int64 getCurrentPartitionRecId()

Valor de retorno

O campo RecId da partição de dados atual.

Observações

Para ver um exemplo de código que depende da função getCurrentPartitionRecId , confira Como incluir um filtro para partição no Transact-SQL Direto.

Example

O exemplo de código a seguir mostra chamadas e saídas da função getCurrentPartitionRecId da linguagem X++ e funções ou métodos relacionados.

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

Recupera o prefixo de execução atual após chamadas sucessivas para a função setPrefix .

str getPrefix()

Valor de retorno

O prefixo de execução atual.

Observações

O mecanismo de prefixo torna mais simples gravar mensagens de erro precisas sobre as transações executadas por um aplicativo. Como uma exibição hierárquica é criada no Infolog, pode ser mais fácil determinar de onde veio cada erro.

Example

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

sessionId

Recupera o número da sessão da sessão atual.

int sessionId()

Valor de retorno

A ID numérica da sessão atual.

Observações

Um número de sessão é atribuído quando o cliente é iniciado e se conecta ao AOS (Application Object Server). Cada chamada dessa função durante a vida útil do cliente retorna o mesmo valor inteiro. O valor retornado é compatível com o tipo de dados estendido SessionID . Os métodos contém informações de retorno sobre sessões de usuário individuais.

Example

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

prmIsDefault

Determina se o parâmetro especificado para o método atual tem o valor padrão.

int prmIsDefault(anytype argument)

Parâmetros

Parâmetro Description
Argument O parâmetro a ser testado.

Valor de retorno

1 se o valor padrão do parâmetro foi usado; caso contrário, 0 (zero).

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

Permite que o chamador execute um método X++ no contexto de segurança de outro usuário. Essa função é usada com mais frequência com o processamento em lote.

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

Parâmetros

Parâmetro Description
userId O usuário a ser representado.
classId A classe a ser invocada na sessão representada.
staticMethodName O método de classe a ser invocado no novo contexto de usuário.
parâmetros Os parâmetros a serem passados para o método; opcional.
empresa A empresa selecionada para a sessão representada; opcional.
linguagem O idioma selecionado para a sessão representada; opcional.
partição A chave de partição do tipo retornado pela função getCurrentPartition ; opcional.

Valor de retorno

Um contêiner que contém o valor retornado ou os valores do método que é chamado pela função runAs , se algum valor foi retornado.

Observações

Essa função possibilita executar o código como outro usuário. Essa funcionalidade apresenta uma ameaça à segurança. Portanto, essa função é executada em Segurança de Acesso ao Código. As chamadas para essa função no servidor exigem permissão da classe RunAsPermission . Cada uso dessa API (interface de programação de aplicativo) deve ser modelado por ameaças. Se uma vulnerabilidade de segurança for descoberta, valide a entrada para essa API. O depurador pode ignorar pontos de interrupção localizados em um método chamado usando a função runAs . O código X++ executado pela função runAs deve ser executado como CIL (Common Intermediate Language) do Microsoft .NET Framework. Se CIL não tiver sido gerado para o método estático de destino, uma mensagem de erro indicará que o método não foi encontrado. O tipo de sistema PartitionKey é o tipo exato do parâmetro de partição . PartitionKey é uma cadeia de caracteres que tem um comprimento máximo de oito caracteres.

Example

O exemplo a seguir chama o método runDueDateEventsForUser na classe EventJobDueDate . O código é executado no contexto de segurança de um usuário. Execute esse código aplicando-o a um método em uma nova classe.

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

Define o prefixo para o escopo de execução atual.

int setPrefix(str _prefix)

Parâmetros

Parâmetro Description
_prefixo O prefixo para o escopo de execução atual.

Valor de retorno

0 se o prefixo foi definido com êxito.

Observações

O prefixo completo para a execução pode ser buscado usando a função getPrefix . Quando o escopo é deixado, o prefixo é automaticamente redefinido para o nível anterior. O mecanismo de prefixo torna mais simples gravar mensagens de erro precisas sobre as transações executadas por um aplicativo. Por exemplo, o método AA chama o método BB e cada método chama a função setPrefix . As mensagens que o método BB grava no Infolog aparecem aninhadas em uma hierarquia. Quando o método BB termina e o controle retorna ao método AA , o prefixo definido pelo método BB não é anexado às mensagens subsequentes.

Example

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