Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Nota
Los grupos de interés comunitario se han trasladado ahora de Yammer a Microsoft Viva Engage. Para unirte a una comunidad Viva Engage y participar en las últimas discusiones, rellena el formulario Solicitar acceso a la Comunidad Viva Engage de Finanzas y Operaciones y elige la comunidad a la que quieres unirte.
En este artículo se describe la biblioteca de clases en X++.
Existen dos tipos de clases: clases de aplicación y clases de sistema.
- Clases de aplicación – Implementa estas clases en X++. Puedes encontrarlas en el nodo Code > Classes en el Explorador de Aplicaciones.
- Clases del sistema : estas clases a veces se conocen como clases del kernel. Aparecen bajo el nodo Clases de Documentación > del Sistema en el Explorador de Aplicaciones. No puedes acceder al código fuente de estas clases. Para obtener una lista de las clases del sistema, consulte Referencia de API, clases y tablas.
Estructura típica de una clase de aplicación
Los siguientes tipos de bloques de código son estándar para las clases de aplicación:
- declaraciones de clase y variable: la declaración de clase contiene modificadores, como public, private y extends.
- declaraciones de variables: estos son los miembros de campo para los objetos que se construyen a partir de la clase. Al escribir la palabra clave this en una variable de instancia de clase, IntelliSense puede mostrar una lista de los miembros.
- new method: este método crea una instancia de la clase. Solo puedes llamar al constructor usando la nueva palabra clave. Las clases derivadas pueden llamar al nuevo método de su constructor llamando a la referencia del supermétodo . Para obtener más información, consulte Herencia de X++.
- finalize (método): este método finaliza una instancia de la clase. Este método es el método destructor. Sin embargo, es un destructor solo por convención. El sistema no llama automáticamente al método finalize durante la recolección de elementos no utilizados.
Métodos adicionales para una clase incluyen los siguientes tipos:
- Métodos de instancia
- Métodos estáticos
- Métodos principales
Puedes crear métodos para muchos tipos de productos. A continuación se muestran algunos ejemplos:
- Clases
- Mapas
- Vistas
- Conjuntos de datos
- Formas
- Consultas
Sustitución de clases de sistema por clases de aplicación
Utiliza las clases de aplicación sustitutivas en lugar de las clases de sistema que extienden.
En el Explorador de aplicaciones, en Clases de documentación > del sistema, varias clases de kernel o sistema tienen nombres que comienzan con una x minúscula. Estas clases se conocen como clases del sistema x. Ejemplos de estas clases de sistema son xApplication y xVersionControl. Algunas de estas clases se extienden mediante clases de aplicación. Por ejemplo, la clase Application extiende la clase del sistema xApplication .
Las clases que se derivan de las clases del sistema x se conocen como clases de aplicación sustitutas. En el Explorador de aplicaciones, en el nodo Clases , el icono situado junto a las clases de aplicación sustitutas difiere del icono estándar.
Clases del sistema X
Algunas de las clases de aplicación sustitutas están asociadas a una variable global especial que representa una instancia de la clase. Por ejemplo, la variable appl hace referencia a un objeto creado previamente de la clase Application . La ventaja de la variable appl es que el sistema mantiene el objeto durante todo el ámbito de la sesión. Su código sería menos eficiente si usara repetidamente la nueva sintaxis Application() para obtener una instancia de la clase Application . No uses la clase xApplication system. En su lugar, use la clase de aplicación Application substitute.
Puede hacer referencia a los miembros estáticos de la clase Application mediante la siguiente sintaxis estándar: Application::checkForNewBatchJobs(). Sin embargo, para referenciar los miembros de instancia de la clase Application , usa la variable appl de esa clase, si existe. Este patrón se aplica a la mayoría de las clases del sistema x. La clase de aplicación sustitutiva Session es una excepción, porque no hay una variable global especial para Session.
En la tabla siguiente se enumeran las clases de x-system que tienen una clase de aplicación sustituta correspondiente. Las variables globales especiales también se muestran para aquellas clases que tienen una.
| Clase de aplicación | Clase X-System | Variable global |
|---|---|---|
| Args | xArgs | No aplicable |
| Aplicación | xAplicación | Appl |
| Fábrica de clases | xClassFactory | Fábrica de clases |
| Compañía | xEmpresa | appl.empresa |
| Global | xGlobal | No aplicable |
| Información | xInformación | Registro de información |
| Función de menú | xMenuFunction | No aplicable |
| Sesión | xSesión | No aplicable |
| Control de versiones | xVersionControl | control de versiones |
Ejemplo de clases de x-system
En el ejemplo siguiente se muestra la sintaxis para usar varias variables especiales que hacen referencia a instancias de las clases de aplicación sustitutas.
TreeNode treeNode;
Args args;
FormRun formRun;
// appl variable
info(appl.buildNo());
// company variable
appl.company().reloadRights();
// infolog variable
treeNode = infolog.findNode("\\forms\\custTable");
info(treeNode.AOTgetProperty("Name"));
// Output is "CustTable".
// classFactory variable
args = new Args(formstr(Batch));
formRun = classFactory.formRunClass(args);
formRun.init();
formRun.run();
formRun.detach();
info("Method is ending. This is a message in the Infolog.");
// Output is "Method is ending. This is a message in the Infolog."
Clases de procesamiento por lotes
Implementa las clases utilizando el sistema de procesamiento por lotes y extendiendo las clases RunBase y RunBaseBatch . Para eliminar el botón Recurrencia del cuadro de diálogo de procesamiento por lotes , utiliza el método Args::p armEnum . Designa una clase para ejecutarla como un método batch vinculado al servidor. Los métodos por lotes enlazados al servidor son más seguros que los métodos por lotes que no están enlazados al servidor por los siguientes motivos:
- El método se ejecuta utilizando los permisos del usuario que envió el método.
- El método solo puede usar métodos específicos de clase Info y Global para interactuar con el cliente que lo está procesando. Esta restricción limita la interacción con el cliente.
Habilitar una clase para que se ejecute como un método por lotes enlazado al servidor
Cree una clase que extienda la clase RunBaseBatch .
Anula el método RunBaseBatch.runsImpersonated para que devuelva true, como se muestra en el siguiente ejemplo.
public boolean runsImpersonated() { return true; }Confirme que la clase llama solo a los siguientes métodos de clase Info y Global :
- agregar
- Info.copy
- Info.cut
- Info.import
- Info.export
- Info.line
- Info.num
- Global::error
- Global::info
- Global::warning
Los métodos Info.line e Info.num se heredan de la clase xInfo .
Elimina el botón de Recurrencia del cuadro de diálogo de procesamiento por lotes
Cuando implementes una clase usando el sistema de procesamiento por lotes, elimina el botón de Recurrencia llamando al método Args.parmEnum y pasando el valor de enumeración del sistema NoYes::Yes . La enumeración del sistema NoYes determina si el botón Periodicidad se quita del cuadro de diálogo. El valor predeterminado es NoYes::No.
En el ejemplo siguiente, se implementa la clase InventTransferMultiShip . El método BatchDialog::main crea el cuadro de diálogo Procesamiento por lotes .
static void noRecurrenceButton(Args _args)
{
Args a;
InventTransferMultiShip inventTransferMultiShip;
a = new Args();
inventTransferMultiShip = InventTransferMultiShip::construct();
a.caller(inventTransferMultiShip);
a.parmEnum(NoYes::Yes);
BatchDialog::main(a);
}
Clases de manipulación de imágenes
Dos clases de sistema te permiten manipular gráficos e iconos: Image e Imagelist.
- Imagen : esta clase le permite cargar, guardar y manipular imágenes individuales. Por ejemplo, puedes capturar una pantalla y guardarla como imagen, recortar o rotar una imagen, o cambiar la profundidad de color.
- Imagelist : esta clase le permite trabajar con un conjunto de imágenes que tienen propiedades comunes, como el tamaño y el color de transparencia. Puedes ver las listas de imágenes que usan las clases de aplicación ImageListAppl .
Modelo de objetos de consulta
El modelo de objetos de consulta contiene clases que usas para definir y ejecutar una consulta. Utiliza los objetos de consulta para definir la fuente de datos de consulta, los campos que se devuelven, rangos de registros y relaciones con fuentes de datos hijas. Las clases de consulta son más visibles cuando creas una consulta dinámica en código, pero también se usan entre bastidores cuando creas una consulta estática en el Explorador de aplicaciones.
En la tabla siguiente se describen las clases del modelo de objetos de consulta.
| Clase de sistema | Descripción |
|---|---|
| QueryRun | Esta clase ejecuta la consulta y captura los datos. |
| Consulta | Esta clase contiene algunas propiedades y tiene uno o varios orígenes de datos relacionados. Es el nivel superior de la definición de consulta. |
| QueryBuildDataSource | Esta clase define el acceso a un único origen de datos en la consulta. Si hay más de una fuente de datos al mismo nivel en una consulta, la consulta produce sentencias SQL separadas y las ejecuta secuencialmente. Si una fuente de datos es hija de otra fuente, la consulta crea una unión entre ambas fuentes. |
| QueryBuildFieldList | Esta clase define los campos que se devuelven desde la base de datos. De forma predeterminada, la lista de campos es dinámica y todos los campos se devuelven desde la tabla, el mapa o la vista de la fuente de datos. Cada origen de datos solo tiene un objeto QueryBuildFieldList . Este objeto contiene información sobre todos los campos seleccionados. Puede especificar funciones de agregado, como SUM, COUNT y AVG, en el objeto de lista de campos. |
| QueryBuildRange | Esta clase define un subconjunto de registros que se devuelven, basándose en un solo campo. Un rango se traduce en una cláusula WHERE en la instrucción SQL de consulta. Si se utiliza más de un campo para limitar la consulta (cláusula WHERE ), la fuente de datos contiene más de un rango. |
| QueryBuildDynalink | Esta clase contiene información sobre una relación (limitación) con un registro externo. Cuando se ejecuta la consulta, esta información se convierte en entradas adicionales en la cláusula WHERE de la instrucción SQL de la consulta. Esta clase solo puede existir en el origen de datos primario de una consulta. Los formularios utilizan la función cuando se sincronizan dos fuentes de datos. La fuente de datos hija contiene entonces una o más DLLs para la fuente de datos padre. La función se utiliza incluso si las dos fuentes de datos se colocan en dos formas diferentes, pero siguen sincronizadas. |
| Enlace de compilación de consulta | Esta clase especifica la relación entre los dos orígenes de datos de la combinación. Esta clase solo puede existir en un origen de datos secundario. |
También puede usar la API de SysDa para consultar datos.
Información general sobre las clases del sistema
El origen de las clases del sistema no está disponible. Una clase de sistema puede tener las siguientes características:
- Métodos estáticos (o métodos de clase)
- Métodos dinámicos
- Propiedades – Estas propiedades son funciones miembros que establecen propiedades. Un ejemplo es LeftMargin.
No puede invalidar los métodos de clase del sistema. No está previsto que uses las clases del sistema para diseñar tus objetos de aplicación desde cero. En su lugar, úselos para ampliar o modificar la funcionalidad predeterminada en el Explorador de aplicaciones. Por ejemplo, puede agregar dinámicamente información adicional a un informe existente. Como alternativa, puede cambiar las opciones que están disponibles en una página, en función de la selección del usuario en una página anterior.
Clases de colección
Las clases de colección permiten crear listas, conjuntos, estructuras, mapas y matrices.
Clases de objetos de aplicación
Estas clases de sistema contienen funciones que se activan cada vez que usas el Explorador de Aplicaciones para crear tu aplicación. Por ejemplo, el sistema utiliza la clase FormDesign cuando se define el diseño del formulario en el nodo Diseños del Explorador de aplicaciones. Estas clases también te permiten crear y modificar objetos de aplicación.
Clases de integración
Las clases suelen implementar la integración con el entorno. Estos son algunos ejemplos de las clases de esta categoría:
- COM : llamada de métodos en objetos COM.
- DLL : la llamada de las funciones DLL de Microsoft Windows.
- IO – Leer y escribir archivos externos.
- ODBCConnection : una interfaz de conectividad de base de datos abierta (ODBC) a una base de datos externa.