Compartir a través de


Funciones en tiempo de ejecución de X++ para sesión

Nota:

Los grupos de interés de la comunidad ahora se han movido de Yammer a Microsoft Viva Engage. Para unirse a una comunidad viva Engage y participar en las últimas discusiones, rellene el formulario Solicitar acceso a Finance and Operations Viva Engage Community y elija la comunidad a la que desea unirse.

En este artículo se describen las funciones en tiempo de ejecución de la sesión.

curExt

Recupera la extensión que se usa para la empresa actual.

str curExt()

Valor devuelto

Extensión de la empresa actual.

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 el identificador no numérico que representa al usuario actual.

str curUserId()

Valor devuelto

Identificador no numérico que representa al usuario actual.

Example

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

funcName

Recupera una cadena que contiene el contexto de función actual.

str funcName()

Valor devuelto

Nombre del método que ejecuta este método.

Observaciones

Si la ejecución está actualmente dentro del miembro de una tabla o clase, el nombre del método tiene como prefijo el nombre de esa tabla o clase.

Example

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

getCurrentPartition

Recupera el nombre corto de la partición actual.

str getCurrentPartition()

Valor devuelto

Nombre corto de la partición actual.

Observaciones

La longitud máxima del nombre de la partición de datos que se devuelve es de ocho caracteres.

Example

En el ejemplo de código siguiente se muestran llamadas a la función getCurrentPartition del lenguaje X++ y funciones o 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 el campo RecId de la partición actual.

int64 getCurrentPartitionRecId()

Valor devuelto

Campo RecId de la partición de datos actual.

Observaciones

Para ver un ejemplo de código que se basa en la función getCurrentPartitionRecId , vea How to: Include a Filter for Partition in Direct Transact-SQL.

Example

En el ejemplo de código siguiente se muestran llamadas a la función getCurrentPartitionRecId del lenguaje X++ y funciones o 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 el prefijo de ejecución actual después de llamadas sucesivas a la función setPrefix .

str getPrefix()

Valor devuelto

Prefijo de ejecución actual.

Observaciones

El mecanismo de prefijo facilita la escritura de mensajes de error precisos sobre las transacciones que realiza una aplicación. Dado que se crea una presentación jerárquica en infolog, puede ser más fácil determinar de dónde procede cada error.

Example

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

sessionId

Recupera el número de sesión de la sesión actual.

int sessionId()

Valor devuelto

Identificador numérico de la sesión actual.

Observaciones

Se asigna un número de sesión cuando se inicia el cliente y se conecta al servidor de objetos de aplicación (AOS). Cada llamada de esta función durante la vida del cliente devuelve el mismo valor entero. El valor devuelto es compatible con el tipo de datos extendido SessionID . Contiene métodos que devuelven información sobre sesiones de usuario individuales.

Example

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

prmIsDefault

Determina si el parámetro especificado para el método actual tiene el valor predeterminado.

int prmIsDefault(anytype argument)

Parámetros

Parámetro Description
Argument Parámetro que se va a probar.

Valor devuelto

1 si se usó el valor predeterminado para el parámetro; de lo contrario, 0 (cero).

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 al autor de la llamada ejecutar un método X++ en el contexto de seguridad de otro usuario. Esta función se usa con más frecuencia con el procesamiento por lotes.

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

Parámetros

Parámetro Description
userId El usuario que se suplanta.
classId Clase que se va a invocar en la sesión suplantada.
staticMethodName Método de clase que se va a invocar en el nuevo contexto de usuario.
parámetros Parámetros que se van a pasar al método ; opcional.
empresa La empresa seleccionada para la sesión suplantada; opcional.
lenguaje Idioma seleccionado para la sesión suplantada; opcional.
partición Clave de partición del tipo devuelto por la función getCurrentPartition ; opcional.

Valor devuelto

Contenedor que contiene el valor devuelto o los valores del método al que llama la función runAs , si se devolvieron valores.

Observaciones

Esta función permite ejecutar código como otro usuario. Esta funcionalidad presenta una amenaza de seguridad. Por lo tanto, esta función se ejecuta en Seguridad de acceso al código. Las llamadas a esta función en el servidor requieren permiso de la clase RunAsPermission . Cada uso de esta interfaz de programación de aplicaciones (API) debe modelarse con amenazas. Si se detecta una vulnerabilidad de seguridad, valide la entrada a esta API. El depurador puede omitir los puntos de interrupción que se encuentran en un método al que se llama mediante la función runAs . El código X++ ejecutado por la función runAs debe ejecutarse como Lenguaje intermedio común (CIL) de Microsoft .NET Framework. Si CIL no se ha generado para el método estático de destino, un mensaje de error indica que no se encuentra el método. El tipo de sistema PartitionKey es el tipo exacto del parámetro de partición . PartitionKey es una cadena que tiene una longitud máxima de ocho caracteres.

Example

En el ejemplo siguiente se llama al método runDueDateEventsForUser en la clase EventJobDueDate . El código se ejecuta en el contexto de seguridad de un usuario. Ejecute este código aplicándolo a un método en una nueva clase.

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

Establece el prefijo para el ámbito de ejecución actual.

int setPrefix(str _prefix)

Parámetros

Parámetro Description
_prefijo Prefijo para el ámbito de ejecución actual.

Valor devuelto

0 si el prefijo se estableció correctamente.

Observaciones

El prefijo completo de la ejecución se puede capturar mediante la función getPrefix . Cuando se deja el ámbito, el prefijo se restablece automáticamente al nivel anterior. El mecanismo de prefijo facilita la escritura de mensajes de error precisos sobre las transacciones que realiza una aplicación. Por ejemplo, el método AA llama al método BB y cada método llama a la función setPrefix . Los mensajes que escribe el método BB en el Infolog aparecen anidados en una jerarquía. Cuando finaliza el método BB y el control vuelve al método AA , el prefijo establecido por el método BB no se adjunta a los mensajes posteriores.

Example

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