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

Este artículo describe las funciones de ejecución de la sesión.

curExt

Recupera la extensión que usa la empresa actual.

str curExt()

Return value

La extensión para 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()

Return value

El 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()

Return value

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

Remarks

Si la ejecución se encuentra actualmente dentro del miembro de una tabla o clase, el nombre del método tiene el prefijo del 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()

Return value

Nombre abreviado de la partición actual.

Remarks

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

Example

En el ejemplo de código siguiente se muestran las llamadas y la salida de la función getCurrentPartition del lenguaje X++ y las 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()

Return value

El campo RecId de la partición de datos actual.

Remarks

Para ver un ejemplo de código que se basa en la función getCurrentPartitionRecId , vea Cómo: Incluir un filtro para la partición en Direct Transact-SQL.

Example

En el ejemplo de código siguiente se muestran las llamadas y la salida de la función getCurrentPartitionRecId del lenguaje X++ y las 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()

Return value

El prefijo de ejecución actual.

Remarks

El mecanismo de prefijo hace que sea más sencillo escribir mensajes de error precisos sobre las transacciones que realiza una aplicación. Dado que se crea una visualización jerárquica en el Infolog, puede ser más fácil determinar de dónde proviene 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()

Return value

El ID numérico de la sesión actual.

Remarks

Asigna un número de sesión cuando inicies el cliente y te conectes al Application Object Server (AOS). Cada llamada a esta función durante la vida útil del cliente devuelve el mismo valor entero. El valor devuelto es compatible con el tipo de datos extendido SessionID . Los métodos contains 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)

Parameters

Parameter Description
Argument El parámetro a probar.

Return value

1 si se utilizó 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 utiliza con mayor frecuencia con el procesamiento por lotes.

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

Parameters

Parameter Description
userId El usuario al que se va a suplantar.
classId La 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.
params Los parámetros que se van a pasar al método; opcional.
company La empresa seleccionada para la sesión suplantada; opcional.
language El idioma seleccionado para la sesión suplantada; opcional.
partition Clave de partición del tipo devuelto por la función getCurrentPartition ; opcional.

Return value

Un contenedor que contiene el valor o valores de retorno del método que llama la función runAs , si es que se devuelve algún valor.

Remarks

Esta función permite ejecutar código como otro usuario. Esta capacidad presenta una amenaza para la seguridad. Por lo tanto, esta función se ejecuta en Seguridad de acceso de 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 según amenazas. Si se detecta una vulnerabilidad de seguridad, valide la entrada a esta API. El depurador puede ignorar puntos de interrupción que están localizados en un método que llama la función runAs . El código X++ que ejecuta la función runAs debe ejecutarse como Microsoft .NET Framework Common Intermediate Language (CIL). Si no se genera CIL para el método estático objetivo, un mensaje de error indica que el método no se ha encontrado. El tipo de sistema PartitionKey es el tipo exacto del parámetro partition . 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)

Parameters

Parameter Description
_prefix Prefijo del ámbito de ejecución actual.

Return value

0 si el prefijo se establece correctamente.

Remarks

Usa la función getPrefix para obtener el prefijo completo de la ejecución. Cuando termina el ámbito, el prefijo se reinicia automáticamente al nivel anterior. El mecanismo de prefijo facilita la emisión 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 el método BB escribe en el Infolog aparecen anidados en una jerarquía. Cuando el método BB termina y el control vuelve al método AA , el prefijo que el conjunto de métodos BB no se asocia a mensajes posteriores.

Example

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