Pattern K2BEntityServices

1

1

Introducción: ______________________________________________________ 6
1.1 1.2 1.3 1.4 1.5 ¿Qué es un patrón? ___________________________________________________ 6 ¿Qué es GeneXusPatters? _____________________________________________ 6 Trabajando con GeneXus Patterns: _____________________________________ 8 Entrando a GeneXus Patterns __________________________________________ 9 Introducción Pattern K2BEntityServices ________________________________ 13 Paso 1 : Generación de la instancia por defecto de Pais ____________________ 14 Paso 2 : Modificación de la instancia por defecto _________________________ 15 Paso 3: Aplicación de la instancia ______________________________________ 16 Vista objetos generados ______________________________________________ 16
WWPAIS: ______________________________________________________________ 17 Reportes asociados al selection: _____________________________________________ 19 ViewPAIS:______________________________________________________________ 20 PaisGeneral:_____________________________________________________________ 22 PaisCiudadWC: __________________________________________________________ 22 PromptPais: _____________________________________________________________ 23 Actualización de transacción de Pais: _________________________________________ 24

2

Guía de uso rápido del pattern K2BEntityServices: _______________________ 14
2.1 2.2 2.3 2.4
2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7

3

Pautas previas: ____________________________________________________ 25
3.1
3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.1.7

Pautas previas antes de la aplicación del Pattern K2BEntityServices: ________ 25
Transacciones: ___________________________________________________________ 25 Atributos: _______________________________________________________________ 26 Determinación de instancia por defecto: _______________________________________ 26 Posicionamiento de atributos en las pantallas:___________________________________ 27 Determinaciones de descripciones de atributos en las pantallas:_____________________ 27 Determinaciones de tipos de control en atributos: ________________________________ 28 Generación de filtros por defecto: ____________________________________________ 28

3.2

Pautas antes de aplicar la instancia: ____________________________________ 29 Update Transaction = Apply K2BWWStyle: _____________________________ 30
Actualización de web form:_________________________________________________ 30 Actualización de código: ___________________________________________________ 34 Instanciación automática de la clave foránea: ___________________________________ 38

4

Actualización de transacciones: ______________________________________ 30
4.1
4.1.1 4.1.2 4.1.3

4.2
4.2.1 4.2.2 4.2.3

Propiedades en la instancia sobre la transacción: _________________________ 40
Update Transaction:_______________________________________________________ 40 GenerateSlotsForFK: ______________________________________________________ 41 Navigation: _____________________________________________________________ 41

4.3

Propiedades avanzadas para la transacción: _____________________________ 41

5

Objetos con Grilla _________________________________________________ 42

2

5.1
5.1.1 5.1.2 5.1.3 5.1.4 5.1.5

Filtros y condiciones: ________________________________________________ 44
Mecanismo genérico para la definición de variables: _____________________________ 44 Propiedades asociadas a los filtros: ___________________________________________ 45 Forma de agregado de los filtros: ____________________________________________ 45 Tipo de control asociado a los filtros: _________________________________________ 46 Propiedad Prompt asociada a un filtro _________________________________________ 47

5.2 5.3
5.3.1 5.3.2

Órdenes:___________________________________________________________ 48 Atributos:__________________________________________________________ 49
Variables:_______________________________________________________________ 50 Seteo de propiedades de los atributos: _________________________________________ 50

5.4
5.4.1 5.4.2 5.4.3 5.4.4 5.4.5 5.4.6 5.4.7

Modos y Acciones:___________________________________________________ 51
Acciones de usuario: ______________________________________________________ 52 Propiedad RowSelection:___________________________________________________ 55 Algunas otras propiedades: _________________________________________________ 56 Acciones en vistas tabulares: ________________________________________________ 57 Condiciones asociadas a las acciones _________________________________________ 58 Nodo Standard Actions (K2BEntityServices.config) _____________________________ 59 Avanzado: Invocación acciones standards______________________________________ 60

5.5 5.6

Paginado: __________________________________________________________ 61 Propiedades del selection _____________________________________________ 62 Nodo Tabs. _________________________________________________________ 66
Generación por defecto:____________________________________________________ 66 Propiedades de los tabs:____________________________________________________ 67 Tipos de tabs:____________________________________________________________ 68

6

Objecto View: _____________________________________________________ 64
6.1
6.1.1 6.1.2 6.1.3

6.2
6.2.1 6.2.2

Avanzado: _________________________________________________________ 69
Parámetros de los tabs: ____________________________________________________ 69 User Defined Vs Referenced Tab: ____________________________________________ 70

6.3
6.3.1 6.3.2 6.3.3 6.3.4

Vistas Planas: ______________________________________________________ 70
Tab General: ____________________________________________________________ 71 Propiedad NoSkip:________________________________________________________ 72 Forma de generar la tabla: __________________________________________________ 73 NoSkip Fixed Data: _______________________________________________________ 74

6.4

Nodo Preview Fixed Data: ____________________________________________ 75 Inclusión de reportes en la instancia: ___________________________________ 81 Títulos de los reportes: _______________________________________________ 82 Reportes Excel: _____________________________________________________ 82
XmlWriter Vs ExcelDocument ______________________________________________ 82

7

Reportes _________________________________________________________ 78
7.1 7.2 7.3
7.3.1

7.4
7.4.1 7.4.2

Reportes PDF: ______________________________________________________ 83
Atributos que se visualizan:_________________________________________________ 83 Configuración avanzada: ___________________________________________________ 85

8

Propiedades avanzadas del pattern K2BEntityServices: ___________________ 88

3

3.6 8.1. crear objetos básicos propios para ser consolidados _____________________ 96 8.7 8.4 8.2 Instancias __________________________________________________________ 88 Atributos _______________________________________________________________ 88 Distribución de instancias __________________________________________________ 88 8.3 Eventos ___________________________________________________________ 104 Reglas ____________________________________________________________ 106 Variables _________________________________________________________ 106 Tabs en los filtros __________________________________________________ 107 Trucos____________________________________________________________ 110 Creación de grilla sin tabla base.2 9.1.1 8.6 9.1 9.6.8 9.1 8.3.4 Archivo de configuración (K2BEntityServices.2 10. ____________________________________________ 110 Acción que invoca a un evento de usuario.8.3 9.4 Integración con WorkFlow _______________________________________ 115 Relevant Data: _____________________________________________________ 115 Slot en la transacción:_______________________________________________ 116 Stub de salida: _____________________________________________________ 117 Importante: _______________________________________________________ 117 4 .6.3.1 11 11.1 11._____________________________________ 96 Nomeclatura de objetos ______________________________________________ 97 Manejo de parámetros _______________________________________________ 99 Fixed data en el selection _____________________________________________ 99 Componentes ______________________________________________________ 101 Web Component ________________________________________________________ 102 Attributes/Variables: _____________________________________________________ 103 9 Propiedades avanzadas de la grilla ____________________________________ 99 9.1 9.8 Organización de objetos en folders.config) _____________________ 89 Master Pages _______________________________________________________ 90 Manejo de sesión ____________________________________________________ 91 Objeto Home _______________________________________________________ 91 Objetos básicos _____________________________________________________ 92 Customización de objetos básicos ____________________________________________ 92 Recursos _______________________________________________________________ 93 Consolidación objetos básicos _______________________________________________ 93 Avanzado.2 11.4 9.3 Propiedades avanzadas de otros objetos _____________________________ 112 Propiedades avanzadas en los views ___________________________________ 112 Propiedades avanzadas de los tabs tabulares ____________________________ 112 Propiedades avanzandas para la generación de la instancia por defecto _____ 113 Hidden Attributes _____________________________________________________ 113 10.2 9.8.8.3 11.6.2 9.1 10.3 8.2 8.5 8.1 8.3 8.8.5 9.1 9.6. ____________________________________ 110 Cambiar acción standard por acción de usuario_________________________________ 110 10 10.7 9.2 8.

1 12.4 12.3 12.8 5 .2.6 12.2.1 12.11.2.2 12.2 Seguridad _____________________________________________________ 118 Método IsAuthorized _______________________________________________ 118 Seguridad basada en actividades: _____________________________________ 120 Nombramiento de actividades____________________________________________ 122 Invocación a programas de seguridad ______________________________________ 124 Seguridad en los tabs subordinados _______________________________________ 126 Alta de actividades ____________________________________________________ 126 Otra Configuración ____________________________________________________ 127 Integración con GXPortal _______________________________________________ 127 Obtención de GAMPRoEnvId. GamProId __________________________________ 128 Permisos backend GXPortal _____________________________________________ 129 12.7 12.5 12.5 Objetos básicos:____________________________________________________ 117 12 12.2.2.2.2.2.

así como la exploración con sus entidades relacionadas. 1. una base de conocimiento. uno de ellos al que se le podría llamar “trabajar con” consiste en una vista de grilla con todos los registros de la entidad y sus posibles operaciones. 1. Para aquellas personas que nunca usaron GeneXus Patters quizás sea complicado entender estos conceptos. ¿Cómo los genera?. y una parametrización. esta herramienta se llama GeneXus Patterns. GeneXus Patterns lee una base de conocimiento a través de GXPublic.2 ¿Qué es GeneXusPatters? Para el desarrollo basado en patrones existe una herramienta que permite la generación automática de objetos GeneXus. así como también la vista de esa entidad con aquellas relacionadas. pues bien genera una distribución de objetos que los consolida automáticamente en la KB.1 Introducción: El pattern K2BEntityServices es un patrón creado por el equipo de K2B para facilitar el desarrollo de aplicaciones web complejas. Básicamente GeneXus Patterns es una herramienta que dado un patrón. 6 . Tomando la filosofía del pattern WorkWith. genera objetos GeneXus. así que a continuación se dará una explicación de todo esto: • • GeneXus Patterns es una herramienta separada de GeneXus. Dentro del desarrollo web se ha encontrado que hay un patrón que se repite en los objetos que se construyen.1 ¿Qué es un patrón? Un patrón es una solución genérica a un problema que se repite. genera para una entidad paneles que permiten el acceso a los servicios de mantenimiento de la entidad.

existe una tool que permite abrir GeneXus Patters automáticamente. y a partir de esa parametrización se 7 . esta tool cierra la KB y abre patterns. ve en DOS al directorio de instalación de GeneXus Patterns (c:\Program Files\ArTech\Patterns11) y ejecuta GeneXusPatterns /register La filosofía embebida dentro del pattern es la que se muestra en la siguiente figura: Se parte de una base de conocimiento en una versión inicial. llamada instancia.• • La base de conocimiento no puede estar abierta al mismo tiempo en GeneXus y en Patterns por lo que hay que cerrar la KB para abrir patterns. a esta se le aplica un patrón según cierta parametrización. o Si no tienes esta tool habilitada en diseño. Dentro del modelo de diseño en GeneXus.

Ej: Se tiene la transacción de País. Veremos esto gráficamente en la siguiente figura 8 . se aplica el patrón. Así se tiene: Input: Transacción Pais Output: WWPais (objeto con la grilla de País). Seleccionar el patrón a aplicar 3. creando la nueva aplicación.3 Trabajando con GeneXus Patterns: Supongamos que se tiene un patrón que dada una transacción genera un listado de todos los registros de su tabla base. Los pasos entonces que hay que seguir son los siguientes: 1. En el KBExplorer seleccionar la transacción a la que se le quiere aplicar el pattern. Estos objetos se consolidan en la base de conocimiento creando una kb en versión 2 y el resto lo hace GeneXus a partir de los generadores. y se desea que se genere un objeto con una grilla conteniendo todos los países. Dar doble click en esa transacción. 5. 4. Salvar el xml que se genera (instancia predeterminada) 6. Seleccionar Apply & Consolidate Así se obtienen los objetos. 1. 2. Abrir GeneXus Patterns.generan los diferentes objetos.

En el caso de Países el usuario podría eliminar aquellos atributos que no desea mostrar en la grilla. para el caso de países es un xml con los atributos de país que se van a mostrar. que es el de configuración. Por ejemplo la instancia predeterminada de país puede ser un xml con todos los atributos de la transacción. Por ejemplo si se le aplica el patrón a la instancia de país. 1. Instancia Predeterminada: El patrón dado una transacción genera una paremetrización inicial del objeto. existen ciertos comportamientos genéricos que valen para todos los objetos. Instancia Especifica: Instancia obtenida luego de la intervención del usuario en la instancia predeterminada. Archivo de configuración: Existe en GeneXus Patterns otro archivo que parametriza el patrón. Este es genérico para todas las instancias.Instancia: Xml que indica la parametrización del patrón. Por ejemplo si en el evento Start se llama a un programa de seguridad para chequear si el usuario está autorizado o no. . Ej.4 Entrando a GeneXus Patterns 9 . ahí se almacena el nombre del programa de seguridad al que deben llamar todos los objetos que el pattern genera.

Configuración del modelo: 10 . OutPutWindow. uno es el KBExplorer y otro es el Fólder Explorer. Abajo del todo a la izquierda hay una pantalla colapsable. en el Fólder Explorer se muestran las instancias que al seleccionarlas son abiertas en la pantalla principal. uno se enfrenta a una pantalla con diferentes secciones.Al ingresar a la herramienta GeneXus Patterns. En el KB Explorer se muestran las diferentes transacciones que hay en la base de conocimiento donde a partir de ellas se puede seleccionar una transacción para generar una instancia por defecto. donde se muestran mensajes cuando se están realizando las acciones de generación de los objetos GeneXus. En la parte izquierda aparece una pantalla con dos tabs.

Si en el menú del pattern se va a Build -> Configure GX Integration se accede a un menú que permite configurar información de cómo se va a integrar Patterns con la KB. Compile • Impact. 11 . Compile. En Model se selecciona el modelo en el que se impactarán los cambios. en Apply & Consolidate se configura la acción a realizar al efectuar Apply & Consolidate. Run. Specify. ShowConsolidationLog: Si se va a visualizar el log de consolidación o no. Specify. y se puede seleccionar entre: • Import Only • Impact Model • Impact.

En la parte superior de la pantalla se cuenta con un conjunto de herramientas Que permiten: Apply Pattern: genera la exportación a consolidar en la KB bajo el directorio Templates\Import de la KB. Impact Model Specify and Generate. 12 . Apply and Consolidate: efectúa la acción seleccionada en la configuración de integración con la KB.

5 Introducción Pattern K2BEntityServices El Pattern K2BEntityServices a partir de una instancia genera los siguientes objetos: • Selection • View o General o Tabs con datos relacionados. En la siguiente sección se comenzará con un ejemplo simple en el que se mostrará la aplicación de patterns a una transacción. 1. 13 . • Prompt • Reportes PDF/Excel • Actualiza la transacción Está basado en el pattern WorkWith pero con el agregado de mayor funcionalidad para hacer que se pueda mantener la mayor parte de los objetos del estilo trabajar con dentro del patrón.Compile Run.

2. Supongamos que en la KB tenemos la siguiente estructura: Y le queremos aplicar el Pattern K2BEntityServices a la instancia de Pais. Para esto vamos a realizar los siguientes pasos. Desde diseño tools->GeneXus Patterns 2) Seleccionar el pattern K2BEnttiyServices (si es que ya no está seleccionado) 3) Seleccionar el tab KBExplorer 14 .2 Guía de uso rápido del pattern K2BEntityServices: En esta sección se mostrará la aplicación del Pattern K2BEntityServices a una trasacción de Pais.1 Paso 1 : Generación de la instancia por defecto de Pais 1) Abrir la base de conocimiento con GeneXus Patterns a.

El nodo level representa un nivel de la transacción.4) Seleccionar la transacción de Pais y dar doble click sobre ella. esto es el tab general donde se muestra información del país. y el tab de ciudades donde se muestran las ciudades de ese país. 5) Generar la instancia por defecto de Pais. View representa una vista de un registro de país. se van a modificar algunas cosas. La descripción del level es tomada en los títulos de los reportes y en las descripciones del trabajar con que tienen en description la propiedad <default>. Una vez que se tiene la instancia. Esta descripción debe estar en plural por lo tanto se modificará la descripción de la instancia por defecto para que aparezca en plural.2 Paso 2 : Modificación de la instancia por defecto Cada nodo del xml representa un objeto que se va a generar. Selection representa el trabajar con. con sus tabs relacionados. El Pattern K2BEntityServices crea un tab por cada tabla directamente subordinada a la de país. en este caso País tiene un nivel sólo por lo cual en la instancia se genero un único level. 15 . 2.

impactarlo y especificar los objetos modificados.2.4 Vista objetos generados Los objetos generados por el Pattern K2BEntityServices son generados por defecto en la carpeta Generated. 4) Compilar y ejecutar.3 Paso 3: Aplicación de la instancia 1) Salvar la instancia y dar Apply & Consolidate 2) Cerrar la KB ir a GeneXus. 2. 16 . Así rápidamente se tendrá la aplicación corriendo. 3) Pasar al modelo de ejecución.

Compararemos en ejecución lo generado con su respectiva instancia.4. Filtros y condiciones: 17 . A partir de País se generan los objetos: 2.1 WWPAIS: Generado a partir del nodo Selection: Atributos: Se colocan los atributos que se van a mostrar en la grilla.

Actions: Acciones que se pueden realizar. Modes: Acciones que van sobre la transacción: 18 .Son los filtros que va a poseer la grilla. Órdenes: Atributos por los cuales se va a poder ordenar.

Delete.4. se muestran solo los atributos que entran en la hoja. En el reporte PDF.Insert: (Top) Update. Display: (Ingrid) 2.2 Reportes asociados al selection: Imprimen lo que se muestra en la grilla tomando en cuenta. (Excel) (PDF) 19 . los filtros y órdenes.

4.3 ViewPAIS: Generado a partir del nodo view 20 .2.

uno general y otro por cada tabla directamente subordinada a la tabla base de la transacción. Posee dos tabs. Fixed Data: Es el atributo que aparece en el título del view. en este caso el tab que se muestra es el de ciudad.Se encarga de mostrar información de la entidad. 21 .

2.5 PaisCiudadWC: Tab de ciudades del País.4.2.4.4 PaisGeneral: Muestra información plana asociada a una transacción. delete. se muestra como forma de grilla. 22 . Las acciones que se pueden hacer son las de update. y la impresión plana y reportes Excel planos. El nodo tab con la propiedad type = Tabular indica que la vista es tabular. que replican la misma información que se muestra en pantalla. El tab tiene la propiedad type = grid. Su comportamiento y funcionalidad es exactamente igual que la del selection.

2.4.6 PromptPais: 23 .

24 . el formato del nodo es similar al del selection.7 Actualización de transacción de Pais: El web form.Para ser invocado como prompt.4. reglas y eventos del Pattern K2BEntityServices son generados por defecto en la transacción. permite seleccionar un país. 2.base de la instancia.

Ordenar los atributos en las transacciones según el órden en que se desean mostrar en pantalla. colocarlos a continuación del nivel inferior.1 Pautas previas antes de la aplicación del Pattern K2BEntityServices: Antes de aplicar el pattern K2BEntityServices existen ciertas pautas que hay que seguir para ayudar al usuario a que al pattern realice las inferencias correctas a la hora de generar la instancia por defecto. Factura Lìnea Total resúmen de nivel CentroCosto. atributos de resumen de nivel inferior. • • • 25 . o Ej: Factura total resumen de nivel Línea.1. o Las FK deben estar juntas con su descripción. 3. o Ej: Trn001: Pais Setear el Description Attribute de cada transacción.1 Transacciones: • Las descripciones de las transacciones y de sus niveles deben ser descriptivos y deben estar en singular. En transacciones de varios niveles.3 Pautas previas: 3.

Asignar a los atributos el tipo de control que corresponda cuando va a ser referenciado como clave foránea.3.3 Determinación de instancia por defecto: El cumplimiento de estas pautas ayudan al Pattern K2BEntityServices a la determinación de la instancia por defecto.1.2 Atributos: • • • Los titles y column titles de los atributos deben describir a ellos mismos. Es recomendable que cada atributo tenga definido un dominio. 26 .1. 3. Asignar dominio a los atributos de tipo Fecha. o Ej: Código de País : Código.

• Excepción DA: En caso de ser un atributo DA inferido se toma la descripción del nivel de la transacción del cual el atributo es DA. 27 . Ejemplo (determinación descripción DA): Se tiene el atributo ClienteNombre. • Column title. en el WWCliente se mostrará como descripción Nombre. Ej: 3. en las vistas de griila. en cambio en el WWFactura se tomará como descripción la palabra Cliente.3. en las vistas planas.4 Posicionamiento de atributos en las pantallas: El Pattern determina el posicionamiento de los atributos según el órden como han sido definidos los atributos en la transacción. En las transacciones de varios niveles el Pattern K2BEntityServices les da a los atributos de resúmen un look & feel especial además de posicionarlos por debajo de las grillas que resumen.1.1. utilizando el siguiente algoritmo.5 Determinaciones de descripciones de atributos en las pantallas: El pattern K2BEntityServices determina la descripción de los atributos en las pantallas. • Title.

De esta forma en la instancia si por ejemplo ProductoId es un DynamicCombo.7 Generación de filtros por defecto: Por defecto el pattern genera filtros por: • Description Attribute. Por algunos problemas esta propiedad ahora está tomando momentáneamente la descripción del atributo en el grupo de subtipos. 3. 28 . si en el nodo attributes de una instancia se coloca ProductoId. Este comportamiento se puede modificar en el archivo K2BEntityServices. En la generación del web form de la transacción.6 Determinaciones de tipos de control en atributos: El Pattern K2BEntityServices le asocia el tipo de control correspondiente a los atributos que aparecen en pantalla.config y colocar DefaultSubtypeForeingDADescription en SubTypeGroupDescription para que tome el nombre de la descripción del grupo de subtipos.1.Atributos que son subtipos: Por defecto se toma como descripción de subtipos inferidos cuyo supertipo es DA . A la hora de generar la transacción el Pattern K2BEntityServices coloca en el web form todos los atributos que aparecen en la transacción menos aquellos que ya han sido visualizados mediante el control info de otro atributo. ItemDescription = ProductoNombre. ItemValues = ProductoId. se mostrará el productoId. la descripción de la transacción del cual el supertipo es DA.1. Ej: Categoría Producto CategoríaID* CategoriaNombre ProductoId ProductoNombre El atributo ProductoNombre no será colocado en el web form dado que ya ProductoId al tomar como control info el dynamic combo lo estaría mostrando. Aquellos atributos que aparecerán como readonly(ej dentro de las grillas) les fuerza el tipo de control a edit. En las transacciones que el atributo es referenciado como foráneo se toma el tipo de control del atributo. Si esto es colocado en los filtros mostrará el producto id con su tipo de control asociado. 3. el tipo de control será forzado a edit cuando el atributo es clave de la transacción ej: ProductoId en la transacción Producto.

• • Description Attribute de los atributos foráneos no instanciados. 29 . Template/Filters : GenerateDateFilters. 3. o Esta descripción será mostrada como título de los reportes y como títulos de los objetos que poseen la propiedad description en <default> Por cada tab subordinado pasar el caption del tab al plural.config se puede configurar si se quiere que por defecto se generen los filtros por fecha. GenerateDateTimeFilters. o En el archivo K2BEntityServices.2 Pautas antes de aplicar la instancia: • • Pasar la description del nodo level al plural. Fechas desde y hasta por cada atributo que este definido con dominio fecha. o Por no instanciado se referiere por ejemplo: Filtro de PaisNombre en Ciudades de un Pais.

Mediante la propiedad update transaction se indica de que manera el pattern va a actualizar la transacción. en Apply K2BWWSytle. 4. sin que el pattern a la hora de volver a ser aplicado le sobrescriba los cambios hechos. Esta es la forma normal de trabajar y esta primera parte consistirá en explicar como es el comportamiento con update transaction en ese valor.4 Actualización de transacciones: La transacción es el único objeto del pattern K2BEntityServices que puede ser actualizado tanto desde Patterns como de GeneXus.1 Update Transaction = Apply K2BWWStyle: 4. En este lugar el usuario puede ubicar todos los atributos y hacer las modificaciones que el desee en esa área. Como predeterminado se tiene la propiedad update transaction.1.1 Actualización de web form: El Web Form de la transacción va a tener una sección a la que llamaremos área de datos. 30 . que indica como se va a actualizar la transacción.

según como se visualiza en la figura. Ej: Sea la transacción factura. El Pattern K2BEnttityServices a la hora de generar el web form coloca los atributos en el orden que fueron definidos en su estructura. 31 . Para las transacciones de varios niveles el Pattern K2BEntityServices también genera un look & feel especial. asociando el tipo de control especificado en la KB para los atributos foráneos.El Data Area está deliminado por la primera fila de la tabla K2BTableTrnDataContent y la última fila de esta tabla. El nivel superior siempre es plano. Para transacciones de n niveles el Pattern K2BEntityServices genera grillas para niveles hojas y freestylegrids para los niveles intermedios.

La ubicación del DataArea es similar a la ubicación del DataArea en transacciones de un nivel.El primer nivel será plano el segundo un Freestyle grid y el tercero un grid. 32 .

En el ejemplo de la factura el Pattern infiere que el atributo FacturaTotal es un resumen del nivel Línea y lo coloca al finalizar la línea. También asume que el atributo FacturaLineaTotal es un resúmen del nivel Centro de Costo y lo coloca al final de este.El Pattern K2BEntityServices asume que los atributos de un nivel superior ubicados a continuación de un nivel inferior son atributos de resumen de ese nivel y los genera con un look & feel especifico para esto. En ejecución: 33 .

2 Actualización de código: 34 .La idea en cuanto a la generación del web from de la transacción por el Pattern K2BEntityServices es que el pattern genera un web form por defecto. 4. y luego el usuario debe modificar el área de datos para adaptarlo a como va a ser el ingreso.1.

Fixed] Los slots generados por este pattern se generan con nombre de propietario = K2BWorkWith El . 4. Los slots que no son fixed si no aparecen en el código el pattern los vuelve a generar y si los encuentra los deja como estaba. Esto quiere decir que si el usuario realizó modificaciones dentro de un slot de tipo fixed los perderá. Slot: Parameters Esta sección es generada por defecto y el usuario la puede modificar cuando quiera.2. 4. Esto quiere decir que el usuario puede colocar el código que desee en los slots no fixed. El código por fuera de los slots no es sobrescrito por el pattern. no lo pierde. a continuación pasaremos a describir qué son los slots. 35 . y el pattern no le pasa por arriba (nota esto solo en transacciones).<funcionalidad>[.El Pattern K2BEntityServices genera el códgio en determinadas secciones llamadas slots.2. Cuando el Pattern K2BEntityServices genera código.2 Actualización de reglas: El Pattern K2BEntityService genera las siguientes reglas. luego al volver a aplicar pasa lo siguiente: Los slots de tipo fixed se vuelven a generar completamente.1 Slot: Nomeclatura: //+ <propietario>.1.1. O sea todo el código que el usuario escriba por fuera de los slots.Fixed es opcional he identifica que ese slot es fijo y que no puede ser modificado.

Esto lo hace para cada grilla correspondiente a cada subnivel de la transacción. En caso de mostrar un error. 36 . Slot fixed para el manejo de la clase del error viewer.. Dado que no es posible tener dos reglas parms en la transacción el pattern también busca una regla parm por fuera de esta sección y de encontrarla la comenta. Para las transacciones de varios niveles genera reglas Lo que hace esto es que si el modo en insert ya agrega la primera línea en la grilla de cada uno de los niveles. hace que la clave no pueda ser seteada. y setea el valor del atributo si este está instanciado. o sea para el caso de autoenumerados el usuario nunca debe setear la clave. También hay un slot correspondiente a la instanciación automática de la clave foránea. esto lo veremos después.En ella se encuentra la regla parm. Slot para el manejo de la clave. por defecto la genera con el modo y la clave primaria de la transacción. Si es update o delete deja simplemente las que tienen que estar. coloca un formato diferente si el error se da al eliminar.

3 Actualización de eventos: El Pattern K2BEntityServices genera el siguiente código para los eventos: Esto es para el seteo del título de la transacción y los seteos del caption de los botones.4. En las transacciones de varios niveles genera un slot para el seteo del tooltip de los botones asociado al agregar líneas de cada una de las grillas.1.2. 37 .

3 Instanciación automática de la clave foránea: 38 .Slots fixed en el after trn que al culminar invocan a la subrutina k2bclose que se encarga de hacer un link al último objeto del stack. En las transacciones de varios niveles genera un slot por defecto para el evento que se ejecuta cuando se presiona el botón de agregar una linea para alguno de los niveles.1. 4.

se va a querer que el cliente ya este instanciado. El Pattern K2BEntitySErvices hace uso de la web session. y estos son leídos en la transacción. y los nombres y valores de atributos instanciados. Se guarda el nombre de la transacción que se va a invocar. Esto presupondría modificar la regla parm. Para esto en el evento Start de la transacción factura el pattern K2BEntityServices genera un slot fixed 39 . Ej: Se tiene las facturas del proveedor.Supongamos que tenemos el ejemplo de facturas y clientes. En este caso almacena el proveedor en un sdt de nombre TrnContext. en el panel invocador guarda aquellos atributos que están instanciados. y se quiere dar de alta una factura en el tab facturas de un cliente. Sin embargo existe otra forma de tener esto instanciado automáticamente sin tener que hacer modificaciones en la regla parm. antes de invocar a la transacción de factura se ejecuta la subrutina preparetransaction que se encarga de almacenar en un sdt los atributos que ya están instanciados. lo cual implicaría modificar la invocación de todos los objetos que llaman a la transacción. cuando se invoca a la transacción de facturas.

Lo primero que hace es preguntar si el nombre de la transacción que está guardado en la sesión es el mismo que el nombre del programa. El valor <default> lo lee del archivo de configuración. 4. para esto es posible deshabilitar la generación de estos slots.2. 4.2 Propiedades en la instancia sobre la transacción: Estas propiedades se encuentran en la raíz de la instancia. desde la raíz de la instancia yendo a la propiedad GenerateSlotsForFK. Hasta ahora se vio su comportamiento con el valor Apply K2BWWStyle • Do Not Update: No actualiza la transacción.1 Update Transaction: Indica como se va a actualizar la transacción. 40 . en caso de serlo recorre todos los atributos y hace un case con todos los atributos foráneos de la factura en este caso el único foráneo es el proveedor pero podrían ser más. En la siguiente sección veremos bien como funciona esto. Luego en las reglas se genera otro slot para igualar el atributo con la variable obtenida de la sesión En muchos casos la instanciación de las claves foráneas ya se tiene resuelto modificando la regla parm.

• • Only rules and events: Actualiza solo las reglas y los eventos. 4. Go To View} AfterDelete: {Return to caller} Todas estas propiedades poseen el valor <default>. • Go To View: Va al view de la instancia determinada por esa transacción.3 Propiedades avanzadas para la transacción: CancelEvent: Permite indicar el evento que se va a ejecutar al presionar cancel. Estas son After<Operation>: • Return to caller : Vuelve al web panel llamador. esto lo toma del config. El web form lo deja como lo puso el usuario. Create Default: Vuelve a generar todas las secciones default de nuevo. Continue In Transaction} AfterUpdate: {Return to caller.3 Navigation: Se especifica la navegación dentro del pattern luego de hacer las diferentes operaciones sobre la transacción. Esto permite al usuario escribir en el cancel otro evento completamente diferente al que genera Patterns por defecto. 4.config el nodo transaction.2. Esto es: vuelve a generar el web form completo. En el K2BEntityServices. de donde se toman los valores por defecto. 4.2 GenerateSlotsForFK: Se puede configurar aquí si se va a generar el slot para la instanciación automática de las claves foráneas. GoToView.2. AfterInsert: {Return to caller. • Continue In Transaction: Para inserts sigue en la transacción para agregar otro registro.config: 41 . todas las secciones de código tanto fixed como por defecto. Para esto existe en el K2BEntityServices.

42 . y el último para tener una clave manual. La función SetCódigo deberá dado el nombre del atributo clave setear el nuevo numerador y devolverlo. Los slots que están comentados son para tener una clave generada sugerida. 5 Objetos con Grilla El Pattern K2BEntityServices genera objetos con grilla en los tabs de tipo grid y en el selection. GenerateCheckButton: Indica si a la hora de generar la transacción se va a generar el botón verificar o no. El pattern genera dentro del slot K2BWW. Estos procedimientos deben ser implementados por el usuario del pattern. Veremos aquí las propiedades más importantes que podemos encontrar en estos objetos. SetNumeratorProc: Programa que setea el numerador. GenerateOptionalKeySlots: Permite configurar la invocación a procedimientos que se encargan de numerar automáticamente claves no numéricas. y deben ser referenciados desde las propiedadades: GetNumeratorProc: Programa que obtiene el numerador.Key el siguiente código: La function GetCódigo debe recibir como parámetro el nombre del atributo clave y devolver cuál es el próximo numerador que se va a utilizar. Esto es para el caso en que se desee utilizar el context dentro de los bc.GenerateGetContextForBC: Si el código que invoca al programa PK2BGetContext se genera dentro de un tag web o no.

Estudiaremos cada uno de los componentes de los objetos con grilla: Estos son los componentes comunes: • Filtros 43 .

1. 5. esto es: • Nodo Filters • Nodo Variables (se verá en capítulos posteriores) 44 .• • • • Órdenes Atributos Acciones Modos En otro capítulo posterior estudiaremos componentes avanzados que también se pueden agregar a un objeto con grilla. Estos filtros se pueden definir basados en atributos o basados en algún dominio. El nodo filtros permite al usuario definir filtros. Patterns infiere el tipo de datos del filtro según el mecanismo genérico para la definición de variables que se explica a continuación.1 Mecanismo genérico para la definición de variables: Esto es válido para todas las secciones donde se permiten ingresar variables.1 Filtros y condiciones: Nodo Filters and conditions. 5.

seteando en false se puede configurar para no salvar el estado correspondiente a dicho filtro. si es date time tomará el valor de la propiedad FilterDateTime. Conditions: Permite al usuario ingresar condiciones en el grid.Empresa) 5. cuando vuelva al objeto con grilla. esto es si el usuario en ejecución define determinados filtros. ThemeClass: Clase de tema que tomará el filtro. utilizando la propiedad savestate asociado al filtro. sino tomará el valor de la propiedad Filter. 5. 45 .• • Variables en la grilla. • Si su nombre no es igual al atributo se debe colocar en la propiedad domain el nombre del dominio. automáticamente genera la condition correspondiente a ese atributo. Enabled: Permite definir filtros readonly.1. que pueden o no estar asociados a algún filtro. Esto se puede modificar. En caso de no especificarlo toma por defecto la clase que es encuentra en ThemeClasses/K2BAttributeThemeClass. tomará el valor de la propiedad FilterDate. Ej: Filtros por Empresa obtenido del contexto (EmpresaId = &Context. crea la variable basada en ese atributo. NoSkip: Se verá más adelante. los filtros van a seguir estando.2 Propiedades asociadas a los filtros: SaveState: El pattern automáticamente para cada filtro salva el estado. y luego navega por otras pantallas. Default: Expresión a ejecutarse en el evento start. su valor <default> o true indica que se salva el estado correspondiente a ese filtro. Componentes de la grilla (se verá en capítulos posteriores) Patterns infiere el tipo de datos de la variable de la siguiente manera: • Si su nombre es igual al nombre del atributo. abre una pantalla de selección de atributos.1. según el tipo de datos. Si es fecha.3 Forma de agregado de los filtros: Para agreagar un filtro y que automáticamente se infiera su condition se puede utilizar la propiedad select attributes. Patterns define la variable con ese dominio. parado en el nodo attributes del filtro.

El label asociado al todos se puede configurar en el archivo de configuración. bajo “Labels/AllInCombo”. En caso de que el tipo de control asociado al filtro se desea que sea otro o que este condicionado al valor de otro filtro ya seleccionado.4 Tipo de control asociado a los filtros: El tipo de control asociado a los filtros es obtenido por defecto del tipo de control del atributo o dominio en el que está basado el filtro. En ese caso agrega un nuevo elemento al combo que representa el todos. parado en el filtro se puede seleccionar agregar un control info. Si el tipo de control asociado al filtro es un combo.1. 46 .5. se le puede colocar la propiedad All al fitro en true. o sea no se filtra por esa variable.

5. son las mismas que aparecen en el diálogo de control info que aparece en GeneXus. 47 . Existen dos formas de realizar la invocación al prompt según el valor ingresado en la propiedad prompt.1. Esto hace que se pueda seleccionar el valor del filtro desde un prompt.Las propiedades que se pueden asignar. Como limitación de GeneXus en los filtros no se puede utilizar un suggets con InputType description.5 Propiedad Prompt asociada a un filtro Otra forma de generar el ingreso de datos de un filtro es mediante la propiedad prompt del fitro.

48 .Solo nombre de objeto: Se pone solamente el nombre de objeto (Ej:HPromptProveedor). Regla prompt completa: En muchos casos el prompt retorna más de un parámetro. luego de poner la regla prompt sino dará error. Acá vemos un ejemplo de un WWFactura donde para seleccionar un proveedor se coloca un prompt. Para ambos casos patterns genera la imagen del prompt asociado al filtro y en la regla le concatena el on imagePrompt. &ProveedorNombre). de esta forma patterns genera la regla prompt pasándo como parámetro el filtro. &ProveedorId.2 Órdenes: El nodo órdenes permite definir los diferentes órdenes que se pueden seleccionar para visualizar la grilla. en tal caso con pasar como parámetro el filtro no alcanza. De esta forma se puede escribir la regla prompt completa Prompt(HPromtProveedor. 5. No se debe poner .

Cada orden tiene un caption que es lo que se muestra en ejecución en el combo. Indica que atributos se mostrarán dentro de la grilla. para cada atributo se puede setear si el orden es ascendente o descendente utilizando la propiedad ascending. Además cada orden esta compuesto por un conjunto de atributos. 49 .3 Atributos: Es el nodo principal de las vistas con grilla. 5.

si es un varchar tomará el valor de VarCharInGrid. Value: Lo que se coloque en value será generado en el evento load de la grilla. Autolink: En true. En particular se generará &Variable = <Value> Domain: Permite seleccionar un dominio. La definición de variables está explicada en la sección 5. 5.1 Variables: En los atributos es posible también ingresar variables. y sino tomará el valor de SelectionGrid. si es un checkbox tomará el valor de CheckBoxInGrid. en caso de ser invisible se coloca como hidden dentro de la grilla. coloca el primer atributo visible de la grilla con autoresize en false. ThemeClass: Indica la clase del tema que tendrá el atributo por defecto toma la clase del tema ubicada en ThemeClasses/K2BAttributesThemeClass.3. 50 .Las propiedades que tienen son nombre. si el atributo es DA genera el link dirigido al view correspondiente a la instancia. El atributo puede ser visible o no.1. 5. Se puede modificar esta propiedad para que el usuario puede ingresarle valor a esta variable.1 Mecanismo genérico para la definición de variables: ReadOnly: Por defecto todas las variables son de solo lectura. Level: Es posible establecer un link a un view de un nivel de la instancia. dependiendo del tipo de control. y el resto de los atributos los coloca con autoresize en true. Para esto se coloca el & adelante para indicar que va a ser una variable. cuando el largo de su tipo de datos es menor o igual que la propiedad dentro del archivo de configuración Grid/FirstColumnResizeValue. LinkTo. La propiedad autoresize del primer atributo visible de la grilla es seteada en false.3. si es un combo tomará el valor de ComboBoxInGrid.2 Seteo de propiedades de los atributos: Autoresize: Por defecto el Pattern K2BEntityServices para una correcta visualización de la grilla. para esto en LinkTo se debe poner el nombre de la instancia y level se debe indicar cuál es el nivel. la descripción que es lo que se mostrará en el título de la columna.

Las otras dos acciones standards son configurables a través de actions: Las acciones print y Excel indican que se van a generar acciones de imprimir atributos en formato pdf y Excel .ReturnOnClick: En los prompts patterns determina en qué atributo se va a hacer return on click. se toma el primer atributo visible de la grilla .4 Modos y Acciones: En los objetos con grilla. 51 . Update Delete Display Print Excel Estas son las acciones por defecto que genera el pattern en todos sus objetos. 5. cuales de estas operaciones se pueden hacer sobre la instancia. donde se puede indicar a nivel de instancia o de archivo de configuración. El valor defaul es leído del archivo de configuración en la propiedad StandardAction/<Mode>/DefaultMode ej:StandardAction/Update/DefaultMode. La ausencia de alguno de estos nodos indica que la acción no se va a generar. si no hay DA o el atributo no está visible en la grilla. Las cuatro primeras acciones están relacionadas con la forma en el que el pattern invoca al objeto transacción. el Pattern K2BEntityServices permite realizar las siguientes acciones: • • • • • • Insert. El atributo por defecto para hacer return on click es en el DA de la instancia de la que cuelga el nodo prompt. Esto es configurado en el modo modes.

delete y display se encuentran en la grilla. Aquí veremos paso por caso cada una de las propiedades. los parámetros con el que se invocará a dicho objeto.1 Acciones de usuario: El usuario puede definir sus propidas acciones que invoquen a sus propios objetos. Esto lo puede hacer agregando elementos dentro del nodo actions. Para esto hay que indicar en la propiedad GXObject el objeto al que se va a invocar y agregar en parameters. 5.En StandardActions/<Print|Excel>/DefaultMode se puede configurar a la hora de la generación de la instancia por defecto si las acciones Print y Excel acciones se van a incluir en: • Todos los objetos (default mode = true) • Solo en los selection (default mode = OnlyInSelection) • En todos menos en vistas tabulares (default mode = OnlyInSelectionAndGridTabs) La ubicación por defecto de las acciones es: Las acciones de update. 52 . y la acción Insert en Top(Right).4. las acciones de Print y Excel se encuentran en Top.

ToolTip: Solo para las imágenes. Indica el tool tip asociado a la imagen. Las acciones por defecto de Print y Excel están configuradas por defecto para tener un target Popup. • Popup: Se abre en una nueva ventana.Layout: Indica la ubicación de las acciones. Las opciones de Layout son las siguientes: • Top • Top (Right) • Top(Left) • Ingrid • Bottom Top Top(Left) Top (Right) InGrid Bottom Un punto importante es que en todos los layouts se generan imágenes. 53 . Las opciones son: • Standard: Se abre en la misma ventana que se está ejecutando. menos en el layout bottom. Caption: Solo para los botones. Target: En target se especifica en qué lugar se va a abrir la ventana correspondiente a la acción. Indica el caption que se va a mostrar correspondiente al botón. donde se colocan botones.

que da la posibilidad de agrupar los distintos tipos de acciones dentro de un combo. Nombre de la imagen correspondiente a la acción. DisableImage: En caso de tener una condition. 54 . Además de estas acciones. nombre de la imagen en caso de no cumplirse con la condición.Image: Solo para imágenes. Ahí se especifican las combo actions con cada una de las acciones que van a tener. para administrar mejor la pantalla existe lo que se llama el ComboAction. especificando adentro cada una de las acciones que va a poseer. Esto se puede hacer con un combo action.

En la figura se especifica donde se encuentran estos layouts. Las propiedades correspondientes a interfaz serán ignoradas dado que la acción se visualizará dentro de un combo en el layout especificado en las propiedades de la combo action. 5.4. Es el nombre que aparece al comienzo del combo. caption y layout. Los Layouts que posee con Top(Left) y Bottom. Top(Left) Bottom Para las acciones combo. Caption. solo se tomará el GXObject y parameters.2 Propiedad RowSelection: 55 .Las propiedades que puede poseer son nombre.

3 Algunas otras propiedades: SelectAllCheckBox: Si se va a crear un checkbox para seleccionar todas las líneas.Permite agregar una columna con un checkbox a la izquierda de la grilla.4. El nombre de este SDT será <NombredelObjeto>+SDT. y deberá ser recibido como primer parámetro de la acción. más un parámetro implícito que es un SDT con las líneas seleccionadas. Y será de tipo collection. 56 . • Single: Se permite seleccionar una sola fila en caso contrario error. GeneXus Patterns. Esto se puede ver en el archivo de configuración UserDefinedActions/ErrorNoneRowsSelected. en la siguiente figura se muestra una vista de ese SDT. ErrorMessage: Mensaje de error en caso de que no se seleccione ninguna línea. y acciones combo. (solo para acciones combo). donde se le permite seleccionar al usuario las diferentes filas. sin embargo para acciones con RowSelection = Multiple. ErrorNotSelectedLines: Si se va a mostrar algún mensaje de error en caso de que no se seleccione ninguna línea. da un error si el GXObject no existe. Esto es válido solo para acciones de Layout Bottom. Este SDT es generado por defecto por el pattern. • Multiple: Se permiten seleccionar múltiples filas. • None: La acción no tiene row selection definido. 5. consolidar para que cree el SDT luego programar el objeto correspondiente a la acción en GX. El programa generado por patterns invocará a dicho objeto con el sdt cargado de las filas seleccionadas. Para esto es recomendable poner un objeto cualquiera en GXObject. Para las acciones múltiples la acción es invocada con los parámetros que se le indican a la acción. y finalmente poner en patterns en GXObject el objeto real. En el caso del proveedor se llamará WWProveedorSDT. muchas veces es necesario tener el SDT con las filas seleccionadas para crear el objeto.

4. Estas acciones tienen que tener el valor en la propiedad Name de Update y Delete para que sean mapeandos con las acciones standards de Update y Delete. Cuando se genera una acción con un combo. 5. la ubicación de esa imagen se puede configurar en el nodo UserDefinedActions SelectActionInComboToolTip permite configurar el tooltip asociado a la imagen. se coloca una imagen a la derecha del combo donde según el item del combo seleccionado se ejecuta la acción correspondiente.Para las acciones con RowSelection =Single se dispara un error en caso de que más de una línea haya sido seleccionada. El mensaje de error se puede modificar en el archivo de configuración UserDefinedActions/ErrorMoreThanOneRowSelected.4 Acciones en vistas tabulares: En las vistas tabulares (vistas tabulares se verá en la próxima sección) las acciones de Update y Delete son generadas como botones debajo del tab y se especifican mediante acciones. 57 .

5 Condiciones asociadas a las acciones Cada acción de usuario. 58 . Para el segundo caso. Si tiene seteada una imagen de deshabilitada se muestra la imagen de deshabilitada Si no tiene seteada una imagen de deshabilitada entonces se pone invisible la acción. el valor de la imagen deshabilitada se coloca en la propiedad disableimage. En todos estos lugares donde se puede escribir una condición. hacer If Udp. esta condición puede ser denotada por una expresión booleana. Para las acciones. La forma de trabajo del pattern con condiciones es la siguiente: • Si la condición se cumple el pattern muestra la imagen. UpdateCondition. en StandardActions/Action/DisabledImage. = K2BBoolean. DeleteCondition. el pattern genera la invocación al udp en dos partes.4. dado que no se puede en GeneXus. o la invocación a un udp que retorna una variable de dominio K2BBoolean. Además debajo de modes se cuenta con el nodo InsertCondition. tiene su propiedad condition. o Si la acción es una imagen. para los modos esto se encuentra en el archivo de configuración. • Si la condición no se cumple: o Si la acción es un boton (layout bottom) se pone invisible. y DisplayCondition. primero lo asigna a una variable temporal y luego hace el If &tempboolean.True.5.

El procedimiento de seguridad tiene mayor prioridad sobre las condiciones esto es si una acción no está permitida por el proc de seguridad pero sí lo está por la condition. se puede configurar la alineación de las acciones standard top. Otras opciones que se pueden configurar son 59 . En caso de poner en layout Left.config) En esta sección se estuvo referenciando a este nodo. este procedimiento en caso de dar falso. estas acciones aparecerán a la izquierda. la acción quedará inhabilitada.4. 5. Este es un ejemplo de cómo quedarían las imágenes a la izquierda. En la raíz del nodo standard actions. pone invisible la acción.Además de estas condiciones para todas las acciones se controla si se pueden visualizar según un procedimiento de seguridad.6 Nodo Standard Actions (K2BEntityServices. Este nodo se configura todo lo relativo a una acción standard.

5. este es sustituído a la hora de generar la acción por TrnMode. Estas acciones de pronto se quieren deshabilitar solo para cuando están en la grilla. Lo mismo va a suceder con los default mode para las acciones de Print y Excel.4. En los tabs tabulares por ejemplo se tienen las acciones standards de Update y Delete.Insert. para indicar que es sólo válida en una de estas vistas. son tomadas en cuenta a la hora de aplicación de la instancia al tratar de machear el valor <deafult> de la instancia con DefaultMode del archivo de configuración. La variable &Mode indica el modo con que se invoca. TrnMode.Update o 60 . Para tal caso.4. Para el caso de las acciones update y delete en la vista tabular el Default Mode es tomado en cuenta a la hora de la generación de la instancia por defecto. pero no desde los tabs tabulares. El nodo transaction a tomar en cuenta es en el selection el de la instancia.7 Avanzado: Invocación acciones standards Por defecto las acciones update.1 Default Mode para Update y Delete. esto es acciones standard que invocan a la transacción en la grilla. En muchos casos la propiedad default mode tiene valores distintos a true o false. DefaultMode: Si por defecto se va a generar la acción. El nodo transaction indica como se va a invocar la transacción por las acciones standards especificadas en modes. Tooltip: Tooltip de la imagen. Esta información se obtiene dentro del nodo transaction. Image: Imagen. delete e insert invocan a la transacción con el modo. mientras que en los tabs subordinados se toma en cuenta el nodo transaction asociado a ese tab.Caption: Caption del botón en caso de que la acción sea un botón. Nota importante: Las propiedades DefaultMode para las acciones standard configurada a través de modes. y la PK. 5. Default Mode para Print y Excel será expicado en la sección reportes pdf y Excel. las acciones stantandard update y delete cuentan en default mode con los valores OnlyInGrid y OnlyInTabular. DisabledImage: Imagen en caso de que no se cumpla la condición para esa acción.6.

La propiedad PageCount indica si se va a invocar desde el pattern a la función que calcula la cantidad de páginas (Grid. se toman de los sucesivos parámetros del nodo transaction. esto es leído desde Grid/Page. Aquí vemos un ejemplo de una grilla con paginado. la cantidad de filas que se van a mostrar por página. El valor <unlimited> indica que no se va a paginar.TrnMode. el primer parámetro debería tener NullValue en false.Si está seteado en true se pasa como nulo. y el segundo en true. Por defecto la propiedad Page toma el valor de K2BPage.Rows que es un dominio que viene dentro los objetos básicos del pattern. 5. Por defecto siempre está en true. y en caso de haber paginado. el valor <default> lee del archivo de configuración. En el caso de una transacción de ciudad definida como llave compuesta : PaisId* CiudadId* Si el país está instanciado. Los siguientes argumenos.5 Paginado: En el nodo correspondiente al objeto con gird se encuentran dos propiedades. Muchas veces si hay muchos registros el cálculo de esto puede enlentecer la performance por lo que se puede configurar que no se calcule el page count. 61 . Si es seteado en false.delete. La propiedad Page sirve para indicar si va a haber paginado o no. El valor <default> es leído del config desde Grid/PageCount. En este panel se definieron cuatro registros por página.PageCount). Para la acción insert la propiedad que interesa es el NullValue. el valor del parámetro no es pasado como nulo.

En caso de setearle a dicha propiedad false no aparecerá la cantidad total de páginas como se muestra en la siguiente figura

Dado que no se sabe cuál es la última página la flecha de Last desaparece. La deshabilitación de la flecha de siguiente página (Next), se hace de manera heurística, si la cantidad de registros que se está mostrando es menor que el valor de la propiedad page, entonces se sabe que no hay más registros y la flecha se deshabilita. En caso contrario queda habilitada. El caso que se escapa es cuando la cantidad que se muestra es igual a la cantidad de filas por página, en tal caso no hay forma de determinar si se puede seguir paginado, o no. Ahí se habilita el botón de next y en caso de que el usuario lo presione aparecerá la siguiente página con la grilla vacía.

5.6 Propiedades del selection
Algunas propiedades del nodo selection. IsMain: Permite configurar si el objeto trabajar con es main o no. Caption: Texto que se va a mostrar en el título del trabajar con. Description: Texto que se va a mostrar en el título del trabajar con cuando el caption es vacío. Si tiene un texto se muestra ese texto. Si tiene la propiedad <default> se visualizará la description del nodo level.

62

Se muestra como título del objeto generado:

63

6 Objecto View:
El view presenta información asociada a un registro. Muestra en los tabs los datos relacionados. Es el objeto que se invoca cuando se presiona el link del DescriptionAttribute. El primer tab que se muestra en el view es un tab plano donde se visualiza información asociada a la transacción base de la instancia. A este tipo de tab se le da el nombre de tab tabular.

Por lo general el resto de los tabs son de tipo grid como se muestra en la siguiente figura.

64

En este caso la fixed data es el nombre de Pais. La fixed data esta formada por atributos fijos. que se muestran siempre independientemente de cuál sea el tab seleccionado.El nodo View está compuesto de los siguientes nodos: • • • Fixed Data Parameters Tabs Los parameters son los parámetros del view que por lo general es la PK de la transacción base de la instancia. 65 .

Sin embargo el usuario tocando la instancia puede hacer que este atributo se muestre abajo o colocar más de un atributo en la fixed data. patterns genera un tab general. 66 . En la siguiente figura se muestran atributos de la fixed data por debajo del título del view.1 Nodo Tabs. 6.1 Generación por defecto: A la hora de generar la instancia por defecto. y está configurado para que aparezca en el título del view.Por defecto la fixed data es generada con el DA de la transacción base de la instancia. También puede generar otros tabs de tipo tabular por cada transacción paralela. y luego un tab por cada transacción directamente subordinada a la transacción base de la instancia. se genera además un tab con el segundo nivel y si se configura la propiedadad Template/GenerateTabsForParallelLevels se genera un tab por cada nivel paralelo. Si la transacción es de dos niveles. La configuración de la distribución de atributos en la fixed data será vista en la sección noskip. si la propiedad en el archivo de configuración Template/GenerateTabsForParallelTransactions está configurada en true.1. 6.

Aquí veremos las propiedades de cada uno de estos tabs.1. que va a estar como componente dentro del tab. ComponentName: Nombre del web panel Genexus. Description: Descripción del tab. la única condición que debe cumplir es que debe ser único. En caso de la condición estar en false no se muestra el tab. Caption: Nombre que se visualizará en el tab. Code: Código que va a tener el tab.6. Type: Tipo de tab. de la misma forma que se puede hacer en las conditions de las 67 . Se puede poner en la condition un udp.2 Propiedades de los tabs: El view es un objeto que tiene un componente que se carga según el tab seleccionado. Por defecto se toma la descripción de la transacción. Se verá más adelante. Page. Condition: Permite poner una condición para la visualización o no de determinado tab. Tiene sentido en tabs de tipo grid. PageCount: Igual que en el selection.

6. se deben eliminar algunos atributos. El tipo de tab defaultgrid es una forma que permite mantener de manera centralizada.acciones. Listaremos aquí todos y explicaremos los restantes. donde se muestran varios registros de la entidad relacionada. 68 . los tabs que se muestran son los siguientes El primer tab es de type tabular. Si un tab es subordinado a muchas transacciones esto debería ser hecho en cada uno de los tabs. los atributos que se desean mostrar. se debe completar la propiedad BaseInstance. dado que muestra información plana de un registro y el segundo de type grid. • Grid • Tabular • UserDefined • DefaultGrid • ReferencedTab DefaultGrid: En muchos casos una vez que patterns genera el tab por defecto. Al poner type = DefaultGrid.1. Existen además otros tipos de tabs.3 Tipos de tabs: En el ejemplo que estuvimos mostrando. modificar descripciones para llegar a lo que se quiere ver en la grilla. que representa la instancia base de cuyo selection se van a tomar los atributos.

2 Avanzado: 6. el nodo attributes del tab es ignorado y se toma el nodo attributes del selection de la instancia referenciada. Patterns a la hora de seleccionar que atributos mostrar muestra solamente: CiudadId CiudadNombre La inferencia de que atributos mostrar es la siguiente: Patterns muestra todos los atributos se la instancia base menos: • Atributos que aparecen en la fixed data • Atributos que pertenecen a la PK de la transacción. Existen casos en los que en el selection se muestran atributos que no tiene sentido mostrarlos en el tab ya que se encuentran instanciados. El tab será invocado con la PK de la transacción base de la instancia. corresponde a un objeto externo no generado por patterns. Si tiene variables se desplegará un mensaje de error de consolidación.Esto funciona de la siguiente manera. no puede contener variables.1 Parámetros de los tabs: 69 .2. para esto. Referenced Tab: Será explicado en la parte Avanzado. Dado que los datos de PaisId y PaisNombre ya se encuentra instanciados no es necesario mostrarlos en la grilla ya que además lo estamos mostrando en la fixed data. 6. Y supongamos que en el selection de la ciudad se muestran los siguientes atributos: CiudadId CiudadNombre PaisId PaisNombre Supongamos que se está en el tab ciudades de un país. Limitación: El selection referenciado. o generado por otra instancia de patterns. Ej: Supongamos que se tiene la entidad Ciudad. En component name se debe poner el nombre del objeto genexus que será mostrado al seleccionar el tab. UserDefined: Existen casos en el que la información que se desea mostrar. se le puede poner al type UserDefined.

Un ejemplo de esto puede ser: FacturaId* FacturaFecha ClienteId ClienteNombre Supongamos que se cuenta con un tab genérico que muestra información de un cliente. 6. La ausencia de nodo parameteres en el tab indica que toma como parámetros el nodo parameters del view. se da cuando la relación de subordinación se da a través de subtipos. Esto indica la regla parm que va a tener el tab.2 User Defined Vs Referenced Tab: El tab user defined. cuando el componente necesita recibir ClienteId. pero sí su parm consiste en atributos que están instanciados dentro del view.3 Vistas Planas: Son secciones donde se muestran atributos o variables que no se encuentran adentro de una grilla.2. 70 . Existen casos en el que queremos reutilizar diferentes tabs en varias instancias. el view invocará al tab con ese atributo. En este caso dentro del tab aparece un nodo parameter generado a partir de un subtipo del atributo del view. Existen propiedades comunes para agrupar estos atributos. la regla parm del tab es igual a la del view. En la mayoría de los casos. donde su regla parm no es necesariamente ni la PK de la transacción. 6. ni un subtipo de la PK de la transacción. El problema que encontramos si lo ponemos user defined es que el view va a crear ese componente pasándole como parámetro el atributo FacturaId. Antes veremos algún ejemplo de vistas planas. y se desea mostrar desde el view de facturas. Tanto en el tab UserDefined como Referenced tab el resto de las propiedades serán ignoradas. que por defecto es la PK de la transacción base de la instancia. es invocado con el nodo parameters del view. Para esto en el tab referenced tab.Cada tab puede tener un nodo parameters. se coloca el nodo parameters y este nodo será interpretado como la forma en que el view invocará a dicho tab. Así si se coloca en ese Tab como parámetros ClienteId. El caso en el que la regla parm de un tab es diferente a la de un view. El view invoca a cada tab con su nodo parameters.

Layout Top Layout Bottom 71 . Las acciones por defecto son las acciones standards de modificar y eliminar.1 Tab General: Muestra información asociada a un registro. En su nodo se pueden mostrar tanto atributos como variables. o su nombre debe tener el nombre de un atributo. Para mostrar variables se debe colocar un & antes del nombre y definir su propiedad value y domain.6. Y también se generan acciones standards de imprimir reportes PDF y Excel.1Mecanismo genérico para la definición de variables: El tab general además tiene acciones. Las acciones Update y Delete son colocadas como botones debajo de los atributos (Layout Bottom) mientras que las acciones de impresión son colocadas arriba a la derecha (Top) como se muestra en la siguiente figura.3. Este comportamiento es igual a la 5.1.

Las acciones top se muestran como imágenes. La propiedad noskip en true. Los Layouts posibles son Top y Bottom.Es posible también definir en los tabs tabulares acciones de usuario de la misma forma que se hacía en los tabs de tipo grilla. indica que el atributo permanecerá en la misma línea que el atributo anterior. 72 . Acciones Usuario Layout = Top Acción Usuario Layout = Bottom 6. y es posible especificarle su propiedad Target. Por defecto patterns genera todos los atributos planos en filas diferentes (noskip= false).3. Aquí mostramos un ejemplo de la misma grilla con diferentes acciones. En caso de colocar una acción top (right) o top(left) será colocada como top.2 Propiedad NoSkip: La propiedad NoSkip es una propiedad válida para todas las vistas tabulares y permite agrupar atributos dentro de una pantalla Esta propiedad es válida para: • Fixed Data • Atributos en los tabs de tipo tabular • Filtros • Componentes ( esto se verá en avanzado).

3.A partir de esto Patterns determina los posicionamientos de los atributos y la forma de generar la tabla. El procedimiento para generar el web form es el siguiente: Dado un atributo: • NoSkip en false => a la siguiente línea. con el colspan restante para que todas las filas posean el mismo tamaño. Dado que cada fila puede tener distinto número de columnas. 6. • NoSkip en true: o Tiene Descripción => Se cierra la celda del atributo anterior y se generan dos celdas. patterns genera la última celda de una fila. esto es que en una misma columna no haya descripciones y atributos dado que estos tienen diferente alineación y hacen que el web form quede de forma incorrecta. Ejemplo: Atributo PaisId PaisNombre PaisPoblacion PaisPresidente Descripción País Población Presidente NoSkip False True False False 73 .3 Forma de generar la tabla: El objetivo a la hora de generar la tabla con los diferentes atributos es mantener siempre la alineación de las descripciones y los atributos. en una se coloca la descripción y en otra se coloca el atributoo No tiene descripción => No se cierra la celda del atributo anterior y se coloca este atributo al lado.

Una el título del view.4 NoSkip Fixed Data: Dentro de un view podemos distinguir dos secciones.PaisVicePresidente Vice-Presidente True Resultado: 6. y otra debajo del título del view.3. 74 .

El nodo fixed data es el único nodo donde la propiedad noskip en true del primer atributo tiene sentido. (propiedad description del nodo) y luego todos los atributos que esten en la primera fila uno al lado del otro ignorando su descripción. Atributo FacturaId FacturaFecha ProveedorId ProveedorNombre FacturaTotal Descripción Id Fecha Proveedor Total NoSkip True True False True False 6. La pregunta que usted se puede hacer es como se configura para un atributo de la fixed data este en el título del view o este debajo del título del view. Dado que en caso de estar en true es colocado en el título del view. la respuesta es la siguiente. A partir de la fila siguiente se aplicará el mismo algoritmo del noskip pero los atributos serán posicionados en la fila de abajo y su descripción será tenida en cuenta. Acá se muestra un ejemplo de cómo fue generada la sección noskip del view de facturas.4 Nodo Preview Fixed Data: 75 . En primer lugar se coloca la descripción del view.Título del view Debajo del título del view Dentro de estas secciones lo que se visualiza es la fixed data. Pues bien.

76 . es posible visualizar como quedarán agrupados los atributos que tienen noskip mediante la propiedad preview.En Patterns antes de aplicar. En este caso se levanta una pantalla que permite visualizar como quedará en la pantalla los atributos de la fixed data.

77 .

El objetivo de los reportes es mostrar lo mismo que se está mostrando en el web pannel. Supongamos que se tiene el siguiente trabajar con países: Sus reportes asociados: 78 .7 Reportes Todos los web panels generados por patterns a excpeción de los prompts tienen reportes asociados. Estos reportes son de dos tipos: los reportes pdf y excel. filtrado por el valor de los filtros en ese momento. Si el web panel que se está mostrando es un objeto con grilla se van a mostrar los atributos del grid ordenados por el órden seleccionado por el usuario.

Si se cambia el orden y se agrega un filtro se mostrará lo siguiente: 79 .

solo se muestran los atributos que entran en la hoja.Los atributos que se muestran son todos los del grid para los reportes Excel. mientras que en los reportes PDF donde se tiene la limitante del ancho de la página. 80 .

OnlyInSelection?. En los reportes pdf solo se muestran los atributos que entran en la fila. tal como vimos en el capítulo de las acciones.1 Inclusión de reportes en la instancia: Para incluir un reporte dentro de una instancia. genera los 81 . en False nunca se generan los reportes. Para la generación de la instancia por defecto es posible configurar en Patterns en Standard Actions la propiedad default mode correspondiente a los nodos Print y Excel. se debe en el nodo de patterns correspondiente al web pannel.Para los reportes asociados a web pannels tabulares. agregar una action de nombre Print de Layout Top y una action de nombre Excel con Layout Top. Un valor true indica que los reportes son generados para todas las instancias en todos los web pannels. para los reportes pdf y excel respectivamente. se muestra toda la información en filas acorde con la propiedad noskip. Aquí mostramos un ejemplo de reportes asociados a vistas planas. 7.

menos para los tabs de tipo tabular. Para los reportes de tipo tabular se muestra como título la descripción del view. Aquí vemos el WWPais en un reporte Excel. se muestra un subtítulo con el caption del tab correspondiente a esa vista. en las vistas tabulares se muestran todos los atributos en filas según la propiedad noskip. la segunda es que las celdas no se agrandan con el tamaño de los datos.reportes solo para el nodo selection. se muestra como título la descripción del nodo level. 7. OnlyInSelectionAndGridTabs? genera los reportes. generado con Excel document.3 Reportes Excel: Se imprimen todos los atributos que se muestran en la grilla en los web pannels de tipo grid. La primera es que estos archivos se almacenan en el servidor y permanecen ahí. aunque se cuenta con alguna pequeña desventaja.3. Utilizando el Excel Document los tildes quedarán correctamente generados en cualquier ambiente. Por esto en las pautas previas se recalca que el valor de esta propiedad se encuentre en plural. cualquier persona que conozca la url puede acceder a esa url y visualizar dichos reportes. Esto puede traer aparejado algunos problemas con java y ambientes linux en cuanto a los tildes.1 XmlWriter Vs ExcelDocument La implementación por defecto de estos reportes Excel es generando un xml y permitiendo que ese xml sea abierto por el Excel. Esto está a estudio por sopote GeneXus. 7. 7. más la primera fila de la fixed data (lo mismo que se muestra como título del view). Para solucionar esto se puede modificar el archivo de configuración.2 Títulos de los reportes: En los reportes asociados al selection. en StandardActions/Excel/Generate se puede escoger entre generarlo como XmlWriter o ExcelDocument. Para los reportes que están asociados a vistas paralelas. 82 . Para los reportes asociados a un tab de tipo Grid el título es el caption del tab.

7. Ahí se puede configurar el color de las diferentes celdas.4 Reportes PDF: La diferencia con respecto a los reportes Excel es que los pdf requieren una mayor configuración.1 Atributos que se visualizan: Por defecto. Esto puede ser hecho en el nodo Spredsheetconfiguration. Patterns selecciona los atributos que se van a mostrar en el orden que se 83 . tamaño. Además que los atributos a mostrar pueden no entrar en la hoja por los que estos se deben recortar. según tipos de fuentes. 7.Si se usa xml writter también se puede configurar el look & feel correspondiente a las celdas. etc. papel a utilizar.4.

Para agregar el nodo report y que automáticamente se coloquen los atributos que entran en la hoja. Si esto no es lo que el usuario desea es posible agregar un nodo report para modificar el comportamiento de patterns por defecto y poder indicar que se muestren otros atributos. Si el nodo Report no posee atributos. Patterns de toda maneras seleccionará de estos atributos solo los que entren en la hoja.encuentran definidos en el nodo attributes. Esta ayuda es buena cuando el usuario quiere hacer pocos cambios con respecto al reporte que viene por defecto. 84 . patterns seguirá tomando como atributos el nodo attributes. mediante la cual se ingresa un nodo report con los atributos del nodo attributes que entran en el reporte. se cuentra con la opción AddReportAttributes?. Aquellos atributos que no entran no son mostrados.

7.4.2 Configuración avanzada:
Es posible en los reportes PDF configurar el tipo de letras, formato del papel, etc. Estas configuraciones se pueden definir a nivel de config y algunas también a nivel de instancia. A nivel de Config, la configuración es dentro del nodo Report, a nivel de instancia es necesario agregar un nodo Report y allí configurar esas propiedades. Detallaremos las propiedades y si se pueden configurar por instancia mediante el nodo report y config o solo por config.

Paper Type: Tamaño del papel. Determina el alto y ancho de la página. Se despliega en un combo los tamaños de papel más comunes. (instancia y config).

Orientation: Es posible configurar si se quiere el reporte apaisado o no. (instancia y config).
• •

LeftImage: Imagen para mostrar en la esquina superior izquierda del reporte. (instancia y config). RightImage: Idem pero a la derecha. (instancia y config).

Vemos aquí un ejemplo de un reporte con imágenes a la izquierda y a la derecha

85

Las siguientes propiedades, permiten seleccionar los fuentes para las diferentes secciones del reporte. Para la fuente se puede seleccionar su tipo, su tamaño y si es negrita o italica.
• •

• • • • • • •

ReportTitleFont: Fuente utilizada para los títulos del reporte. (config) ReportSubTitleFont: Fuente utilizada para los subtítulos del reporte. Esta es tenida en cuenta solo para los tabs correspondiente a transacciones paralelas. (config) HeaderLabelFont: Labels que aparecen en el header del reporte (Fecha, Página, etc). (config) HeaderFieldFont : Fuente correspondiente a los valores de los campos que aparecen en el header (&Time, &Date, etc). (config) TitleFont : Fuente que se utiliza para los títulos correspondiente a los atributos en las vistas tabulares. (config) ColumnTitleFont : Fuente que se utiliza para los títulos de las columnas correspondiente a los atributos de las vistas de tipo grid. (config) FieldFont: Fuente correspondiente a los atributos que se visualizan en el reporte. (config) DscFilterFont: Fuente correspondiente a la descripción de los filtros. (config) FieldFilterFont: Fuente correspondiente al valor de los filtros. (config)

86

87

8. son en las conditions.1 Atributos Dentro de las instancias. En el único caso donde no se almacena el id. En un escenario donde solo se guardan los nombres. 88 .2 Distribución de instancias El referenciar los atributos mediante un id. cada vez que se renombra un atributo habría que recorrer las instancias y cambiar el nombre a mano.1. Esto lo que hace es eliminar el id de cada atributo y dejar solamente el nombre. existe lo que se llama distribución de instancias.1. El id del atributo es un identificador interno que utiliza GeneXus para los atributos. Para esto. permite que la instancia sea actualizada por ejemplo cuando se renombra un atributo. son archivos xml que se encuentran ubicados bajo el directorio templates de la KB. El hecho de referenciar los atributos mediante el id. cuando se menciona un atributo. 8. Estos se pueden agrupar dentro de carpetas. Patterns. La opción de distribuir se encuentra parándose en una instancia en el Tab Folder Explorer y ahí con el botón derecho seleccionar distribute. no se almacena sólo su nombre sino que también se almacena el id.1 Instancias Las instancias. así que en caso de renombrar un atributo que participa dentro de una condition habría que buscar allí su viejo nombre y modificarlo. en primera instancia usa el id y accede al nombre solo cuando el id no existe en la base de conocimiento. hace inválida esa referencia dentro de otra KB.8 Propiedades avanzadas del pattern K2BEntityServices: 8.

si existe toma ese. 8. el cual puede ser modificado desde el directorio de instalación de patterns o copiado a la KB para ser modificado desde allí. 89 . Si se selecciona que no permite editar el archivo de configuración.config) El archivo de configuración permite setear metadata válida para todas las instancias. se fija si existe un archivo de configuración en la KB.Para la consolidación de las instancias simplemente lo que hay que hacer es copiar dicha instancia a la carpeta templates en la KB destino. viene con un archivo de configuración por defecto. El archivo de configuración se modifica desde Tools->Change Pattern Configuration. se crea un archivo de configuración basado en el archivo por defecto. En este último caso es posible manejar diferentes archivos de configuración por base de conocimiento. en la KB. Si se selecciona que sí. Patterns a la hora de determinar que archivo de configuración tomar. En la instalación de patterns. si el archivo de configuración no existe en la KB aparece el siguiente diálogo.2 Archivo de configuración (K2BEntityServices. sino busca el que se encuentra en el directorio de instalación de patterns.

que es el que se muestra en todos los objetos y además tiene toda la lógica correspondiente a los recent links. view. esto puede ser hecho a través de Tools->change default pattern configuration. Estos objetos pueden ser customizados y adaptados a la lógica que el desarrollador desee. Este propiedad se encuentra en el nodo principal de cada uno de estos objetos. 8. modificar la interfaz del header .3 Master Pages Por defecto pattern genera cada web panel (selection. Dentro del archivo de configuración hay un nodo master page que permite seleccionar la master page adecuada para cada uno de estos objetos.etc. programa de seguridad. Luego crea el componente header. La master page puede ser especificada por instancia. La master page por defecto cuenta con un llamado al IsAuthorized. Para por ejemplo agregar un footer. El valor <default> indica que este valor se va a tomar del archivo de configuración.Si solo se quiere modificar el archivo de configuración por defecto sin la aparición de este diálogo. 90 . Se chequea la seguridad por ese objeto y en caso de no estar autorizado redirecciona a una pantalla de error. transacción y prompt) con una master page específica.

8.5 Objeto Home 91 . Se pueden definir los nombres de los programas de carga y obtención de context en el archivo de configuración. la variable Context está basado en un SDT de nombre &Context.. PK2BSetContext. etc. la empresa con la que se está trabajando. La información que se puede almacenar en esta variable puede ser el usuario conectado. Patterns provee además un objeto para setear el context. Por lo general el programa PK2BSetContext puede ser utilizada en una pantalla de login para setear en la sesión el usuario cuando este se loguea.4 Manejo de sesión Por defecto Patterns en el evento start de cada objeto invoca al procedimiento PK2BGetContext(&Context). Es posible por cada aplicación definir un context propio. de dada una variable de tipo Context la setea en el contexto. Por defecto.8. Este procedimiento lo que hace es cargar la información de sesión en una variable de tipo context para que sea accedida dentro de los objetos generados por patterns.

y en TrnContext se encuentran los procedimientos para el manejo y salvado del contexto de la transacción. se encuentra el K2BHeader y las distintas Master Pages. 8. y el web panel NotAuthorized al que al usuario es redireccionado cuando no tiene permisos.6 Objetos básicos El Pattern K2BEntityServices la primera vez que se aplica sobre una base de conocimiento. nodo Template/GenerateHome. La generación de este objeto se configura en el archivo de configuración.Dentro del pattern se puede configurar la generación de un objeto home. Estos objetos se encuentran bajo la carpeta K2BEntityServicesBasicObjects. En Theme se encuentra el tema de k2b. 92 . GridStateSaveAndRestore se encuentran los objetos básicos que se encargan de salvar y mantener el estado de los filtros.6. En Security se encuentra el proc genérico de seguridad PIsAuthorized . que lo que hace es generar una especie de menú donde en cada opción llama al trabajar con de cada uno de las instancias. En Session se encuentran los procedimientos genéricos para el seteo de sesión y del context. consolida un conjunto de objetos. Bajo el directorio Components. En el folder Stack se encuentran todos los objetos relacioneados con el mantenimiento del stack de ejecución del programa. de forma de adaptarlo a sus necesidades. los cuales se llaman objetos básicos. 8.1 Customización de objetos básicos Algunos de estos objetos pueden ser customizados por el desarrollador del pattern.

2 Recursos En el directorio correspondiente a patterns se cuenta con una carpeta de nombre k2bimages.3 Consolidación objetos básicos El Pattern la primera vez que se aplica sobre una base de conocimiento consolida los diferentes objetos básicos. Ahí se almacenan las imágenes del pattern K2BEntityServices. se pueden adaptar las master page y los headers. solo actualizar los xml que se cambiaron. y entonces se actualiza su export en ese directorio.xml se guarda información sobre los objetos básicos que se van a consolidar. headar y proc is Authorized no se consolidarán automáticamente. pero esto se puede modificar para que se usen cookies o directamente almacenarla en la base de datos. En Theme se puede modificar el tema.Dentro de Components. para que no pise un objeto creado por un usuario. 8. Por defecto se usa la web session. dentro del directorio imports. 93 . lo copia a ese directorio. En Security se puede modificar el procedimiento IsAuthorized para que chequee la seguridad. La primera vez que se aplica el pattern estas imágenes son copiadas al baseimagepath de diseño (patterns setea el base image path) y si está configurado el modelo de ejecución.True. Las export de estos objetos básicos se encuentran en la carpeta K2BEntityServices/Import. en la KB. adaptar el look & feel que viene por defecto en patterns para que se adapte a la interfaz del cliente. En el archivo imports. Por defecto siempre devuelve K2BBoolen.6.6. Los objetos básicos se encuentran distribuidos en diferentes xml. El tema. 8. Cada vez que se actualiza una versión del pattern K2BEntityServices algún objeto básico puede cambiar. para en caso de actualización. para colocar el header que requiera la aplicación. En Session se pueden modificar los programas PK2BSessionSet y PK2BSessionGet para que modifiquen la forma en que se guardan los datos de contexto.

94 .

ObjCheck: Objeto a chequear en caso de que la versión sea 1.xml por cada objeto que va a consolidar verifica la existencia del objcheck. sino no consolida nada. Version: Número de versión del objeto. copia la carpeta imports. si la versión del import que está en el directorio de patterns es mayor que el de la KB vuelve a consolidar ese xml. en caso de no existir consolida el xml. 95 .xml lo que hace es compara las versiones.xml al directorio templates de la KB. Patterns luego de consolidar los objetos básicos. Si existe el imports.FileName: es el nombre del xml dentro del directorio impots. Si no existe el imports.

8. Posibilidad de dar una organización estructurada a los objetos generados por patterns.4 Avanzado. se encuentra con la propiedad ForceBaseObjectsConsolidation. Donde se puede setear el folder en el que se van a consolidar los objetos y en FileName el nombre del archivo donde va a estar el xml que hace de Impots. Esta forma se puede modificar yendo al archivo de configuración y modificando el nodo Object Organization la propiedad Type de Standard a Fólder Organization.xml. Para esto en el archivo de configuración se puede setear en el nodo OtherImpots. 8. Así se puede establecer una jerarquía de carpetas y el lugar donde van a ser guardados los objetos. Seteada esta propiedad en true se fuerza la consolidación de estos objetos. crear objetos básicos propios para ser consolidados Es posible seleccionar otros objetos para que estos se consoliden automáticamente Estos objetos son desarrollados por el usuario del pattern.6. En dicho folder van a estar ubicados los otros xml que se desea consolidar. (para continuar con la jerarquía) y Object lugar donde se va a guardar el objeto. El Type permite seleccionar entre distintos tipos de objetos: 96 . Sobre este nodo es posible agregar : Fólder. los objetos generados por patterns se guardan en una carpeta (por defecto generated) indicada en la instancia. En la forma tradicional.Consolidación forzada de objetos básicos En la raíz del archivo de configuración.7 Organización de objetos en folders.

8 Nomeclatura de objetos Un punto importante es como el pattern determina cuál es el nombre de los objetos que va a generar. El Naming convention sugerimos utilizar siempre FormatString. Si el fólder que comienza la jearquía no existe. En la siguiente imagen los objetos serán creados en un fólder <TrnName>Generated ubicado en la carpeta donde se encuentra la transacción. 8. Ahí aparece un conjunto de objetos y como se va a generar. se debe ir en el archivo de configuración al nodo Prefix. Para esto.Para definir los nombres de los fólders se pueden utilizar los siguientes tags <TrnName> o <TrnFolder> para referirse al nombre de la transacción o el folder en el que se encuentra la transacción respectivamente. 97 . este será creado en la raíz de la kb.

Para los objetos View. Report. Para el objeto SubordinatedGrid. El nombre del objeto será PaisCiudadWC En el subordinated grid es el único caso cuyo nombre aplica a la generación de la instancia por defecto ya que el nombre se genera en la instancia bajo la propiedad componetn name del tab. TrnName se tiene el nombre de la transacción = Ciudad. <ParentLevelName> es sustituído por el nombre del nivel padre y <TrnName> por el nombre de la transacción de abajo. Prompt. el nombre se toma sustituyendo el tag <Object> por la propiedad name del nodo level de la instancia. SubordinatedGrid. 98 . Selection. Ej: Tab ciudades de un país. Tabular. En level name se tiene la propiedad Name (Pais). En el resto de los objetos el nombre es calculado a la hora de aplicar la instancia. ExcelReport.

La ubicación de la fixed data es similar que dentro del view. 9. Ej: Se tiene un trabajar con facturas que recibe el proveedor como parámetro como se muestra en la instancia. El objetivo de estas propiedades avanzadas fue siempre aumentar la cantidad de objetos que se pueden generar con el Pattern K2BEntityServices para poder mantener la mayor cantidad de objetos con formato grilla desde el Pattern. Ej: Conditions: El selection también puede recibir parámetros. En caso que se quiera recibir una variable basada en un atributo pero que no se genere la condition. y así el pattern no genera la condición automática. La regla parm la genera con variables y para instanciar el atributo de esa variable agrega una condition att = &att. 99 . luego los atributos hijos son colocados abajo. 9.1 Manejo de parámetros El Pattern K2BEntityServices genera en todos los objetos su regla parm basado en el nodo parameters. Si el primer atributo tiene noskip en true este y los de la misma fila son colocados en el cabezal del selection.2 Fixed data en el selection En el pattern K2BEntityServices es posible definir Fixed Data en el selection. se puede pasar en parámetros la variable &att.9 Propiedades avanzadas de la grilla Aquí se listará con más detalle el funcionamiento de los objetos con grilla. así como propiedades avanzadas. En los tabs si no se encuentra el nodo parameters se toma como parámetros los parameters del view.

Coloco la siguiente fixed data para mostrar con los siguientes valores correspondientes a la propiedad noskip. Se genera una sentencia where en el for each según los parámetros del selection. El pattern internamente genera variables por cada atributo y en el evento start genera un for each donde le setea a cada variable su valor. en cambio en el selection se muestra un conjunto de registros. Atributo ProveedorNombre ProveedorEstado PaisNombre Descripción Estado Pais NoSkip True False False El resultado que se obtiene es el mostrado abajo- En el view se muestra un único registro por lo tanto ya hay registros instanciados. Por las dudas que haya más de un registro en el for each se agrega un exit para quedarse solo con el primer registro. En tal caso los atributos que se muestran en la fixed data deben estar en la extendida del conjunto de registros que se muestran en el selection. En este caso el for each que genera el pattern es el siguiente: 100 .

9.3 Componentes
Es posible dentro de los objetos con grilla la inclusión de determinados componentes. Estos componentes pueden ser un conjunto de atributos, un web component, o un grid Freestyle, etc. Las ubicaciones son con respecto a la grilla son encima del grid o debajo del grid, según se muestra en la siguiente imagen.

Para agregar un componente se para en patterns y se selecciona

101

Allí se pueden asingnar las siguientes propiedades

Layout indica si el componente va a estar ubicado arriba del grid o debajo. Las valores posibles son top y bottom. Align indica la alineación del componente esto puede ser center, Left o right. Al valor <defalult> se le asigna Right para bottom y center para top. Veremos a continuación las propiedades según el tipo de componente.

9.3.1 Web Component
GXObject indica el nombre del objeto. Hay que poner el nombre completo. En caso del objeto recibir parámetros es posible parado en el nodo; seleccionar add parameters y ahí se pueden especificar los parámetros con los que se ve a crear el web component.

102

Patterns le asigna el objeto al componente solo cuando no posee parámetros sino utiliza la sentencia create en el evento refresh.

9.3.2 Attributes/Variables:
Si se coloca como Type Attributes o FreeStyleGrid es posible agregar atributos o variables.

Para identificar las variables se coloca un & adelante. Si se pone type Freestyle grid para que el Freestyle tenga tabla base es importante que se seleccione un atributo.

Las propiedades que se pueden setear son las mismas que en cualquier vista tabular, nombre, descripción, visible , no skip y theme class. Para las variables la forma de definición es la de siempre. También se puede agregar código que será colcoado a la derecha del símbolo de igual de la variable. Este código puede ser asignado en el evento start , en el evento refresh o en el evento load. Esto por ejemplo puede servir para sumar totales de algún valor de una grilla.

103

se pueda definir código a ser ejecutado en el evento o subrutina que el usuario seleccione. Esto es realizado usando el nodo events. Para esto parado en cualquier objeto es posible seleccionar add events 104 . En muchos casos se desea traer información desde un SDT para mostrar en la grilla. etc.4 Eventos Muchas veces existe cierto comportamiento que no es posible lograr utilizando las propiedades que aparecen en el xml del pattern. definir algún nuevo evento o subrutina. 9.Acá por ejemplo se muestra un componente con el total facturado por un proveedor. Para esto el pattern cuenta con la posibilidad que desde el pattern.

Estas son las propiedades que poseen los eventos. simplemente alcanza con poner en Name. En name se selecciona en qué evento se desea agregar el código. El código puede ser ingresado en algunos de los eventos ya creados por el pattern. El código es agregado al principio y al final según el código se coloque en BeginCode o EndCode. o [MainGrid. En Type se configura si lo que se va a definir es un evento o una subrutina. esto es en el Start. Load. En caso de querer definir un evento o subrutina nueva. 105 . Para esto solo alcanza con modificar el valor de la propiedad type. el nombre del evento nuevo y en Begin Code o End Code la subrutina. Refresh.Load] que representa el evento load asociado a la grilla.

Sin embargo. Para esto se cuenta con el nodo rules.5 Reglas En los objetos con grilla es posible también agregar reglas. Ahí se pueden agregar todas las reglas que uno desee. 9. existen variables que no se 106 .6 Variables Las variables que se visualizan en pantalla son por lo general definidas por el usuario. en el nodo correspondiente a su visualización.9. En dicho nodo simplemente se especifican las reglas y listo.

permitiendo de esta manera ahorrar espacio en pantalla y/o organizarlos de la forma que se quieran utilizar. 107 .encuentran en el web form.7 Tabs en los filtros Esta funcionalidad permite organizar los filtros en grupos. 9. Dichos grupos se corresponden a un tab en la página web. La única diferencia es que aquí es posible definir una vaiable de tipo sdt. El value puede ser cualquier expresión a la derecha del igual de la variable que será ejecutada en el evento start. Allí en este nodo se debe colocar el nombre de la variable sin &. La forma de definir las variables es similar al resto de los nodos donde se definen variables. pero sí se encuentran por ejemplo en el código de usuario. En la propiedad SDT se debe colocar el nombre del SDT en el que va a estar definido la variable. Para definir este tipo de variables se cuenta con el nodo variables.

108 . Es bueno notar que cada vez que se selecciona un tab no se va al servidor sino que se hace en el cliente el pasaje de un tab a otro. Ahora se puede agregar un nodo filterTab dentro de filterAttributes. Como hijo de los filtros (filter) se tiene los filterAttributes y las conditions.Es importante notar que tener los filtros en grupo no implica filtrar solo por los filtros del tab seleccionado sino que se filtra por todos los filtros en todos los tabs. el filterTab mencionado anteriormente contiene como hijo a los nodos filterAttribute.config se agrega al atributo defaultTabCaption en el nodo Grid. el valor de dicho atributo se utiliza para el caso en que se tienen tabs y a la vez filterAtributes que no esten asignados a ningún tab. en ese caso se generara un tab para dichos atributos con el caption especificado en "defaultTabCaption". Acá tenemos una captura de pantalla de los tabs. En el K2BEntityservices.

109 .

1 Creación de grilla sin tabla base.9. Para hacer que estas acciones apunten a otros objetos se debe hacer lo siguiente: • Poner en false.click. display. este código deberá generarse dentro del foreach. escribir primero el código de carga en ese objeto GeneXus luego copiarlo y pegarlo en patterns en la Evento.8. Dentro del código de los eventos. insert. delete.Load. Para esto el último paso es copiar dentro del código generado por patterns el código correspondiente a la función link de las acciones en el evento grid.8.2 Acción que invoca a un evento de usuario. 2) Escritura del for each de carga de la tabla base: Para esto en el nodo correspondiente al obejto se debe hacer add events . En patterns las acciones standard se definen a través del nodo modes. 9. Este evento es asignado a un control de la siguiente manera. add event y ahí seleccionar como evento el [MainGrid]. Esto se hace en patterns colocando un & antes del atributo. 3) Acciones Ingrid: Patterns genera el código link de las acciones con Grid dentro del evento load. etc apunten a otros objeto y no a la transacción que es como va por defecto en patterns.8. 1) Poner en el nodo attributes en lugar de atributos variables.8 Trucos 9. Si se agrega una acción de usuario sin setear el valor de GXobject. Como sugerencia.3 Cambiar acción standard por acción de usuario Se indica como hacer en patterns para que las acciones update. el modo que se desea personalizar 110 .load y colocarlo en la loadCode dentro del for each 9. Debido a que es sin tabla base. Ahí en EndCode colocar el código de carga de la grilla. es posible colocar eventos nuevos definidos por el usuario. Estando esta propiedad en true Patterns por defecto genera código para la invocación de la transacción en los distintos modos para update. se puede hacer que al cliquear en la imagen asociada a la acción se invoque al evento creando el evento &actionName. y el llamado al view para el modo display. insert y delete.

Display. o En caso de querer personalizar las acciones de Update. para esto a la acción de print generada por defecto por patterns hay que cambiarle el nombre y en GXObject colocarle el objeto al que va a invocar y en parameters los parámetros con los que se va invocar. cuya imágen sea igual a la imágen correspondiente al ícono de la acción. También se puede especificar la acción de Print. 111 .• • Crear una action. o En caso de querer personalizar la acción de Insert crear una action de Layout Top(Rigth) En GXObject poner el objeto que se desea invocar y en parameters especificarle los parámetros. Delete. colocarle a la action Layout InGrid?.

Conditions En una vista tabular es posible agregar condiciones.. También es posible agregar eventos y subrutinas. agregar código dentro de los eventos y agregar componentes a la izquierda del view. orden de compra. etc. Estas condiciones no están asociadas a ningún filtro y pueden servir para que por ejemplo se muestre la primera línea de una factura. Para esto hay que agregar el nodo filtres para luego agregar las conditions.2 Propiedades avanzadas de los tabs tabulares Dentro del tab general es posible definir variables de la misma manera que se encuentra con el nodo variables en los objetos con girlla. En los atributos que se definen en la vista tabular es posible también agregar variables que serán identificadas mediante un & adelante. pero lo que se coloque en filters no será tenido en cuenta. Una muestra de estos componentes es dada a continuación 10.10 Propiedades avanzadas de otros objetos 10.1 Propiedades avanzadas en los views Dentro de los view es posible definir variables. 112 .

En particular estos atributos los va a generar con la propiedad visible en false. etc.1 Hidden Attributes En algunos casos existen atributos en la base de conocimiento que no se desea que el pattern los coloque en los grids. Esto puede ser debido a atributos de auditoría. Los únicos componentes permitidos son aquellos que tienen como valor de la propiedad type =webcomponent. Se debe agregar el Nodo Hidden Attributes parado en la raíz. 113 . es posible utilizar el tag <trnName> que será sustituído por el nombre de la transacción a la que se le va a aplicar el pattern.3.Componentes: De la misma manera que en los objetos con grilla es posible especificar componentes bottom y top dentro de los tabs tabulares. Ahí se puede ingresa un nombre. 10. Aquí se muestra un ejemplo de un tab tabular con componentes top y bottom. u otro tipo de atributos. no mostrar atributos que cumplen determinada nomeclatura. vista tabulares. En base a esto patterns permite a la hora de generar la instancia por defecto. Esto se realiza a nivel del archivo de configuración. En NamingConvention se debe utilizar de nomeclatura que debe tener el atributo que será ocultado por el pattern.3 Propiedades avanzandas para la generación de la instancia por defecto 10.

se le indica al pattern que en la generación de instancia por defecto se oculten todos los atributos que comiencen con <TrnName>audit.En el siguiente caso. aquellos que contengan la palabra User. 114 .. Last y finalicen con update.

por <default> = <trnName>StubOut? Los stubs serán generados la primera vez. sin modificar los parámetros para que pueda ser invocada independientemente tanto desde workflow como desde algún otro objeto GeneXus. nodo de WorkFlow?. Para indicar que una transacción participa en un proceso de WorkFlow?. Por defecto el nodo aparecerá así: Las propiedades: A partir de esta información Patterns generará los stubs de entrada. se debe ir a la instancia correspondiente a la transacción y dar de alta el WFNode. y un slot en la transacción que en el before complete invoca al slot de salida. por <default> = <trnName>StubIn Nombre del Stub de salida . En el stub de entrada patterns genera el siguiente código: 115 . los stubs de salida. ForceStubOutGeneration.1 Relevant Data: En el stub de entrada.11 Integración con WorkFlow La idea general se basa en reutilizar la misma transacción. y no volverán a ser generados por patterns a no ser que el usuario lo indique a través de las propiedades ForceStubInGeneration. se obtiene la forma en que se va a invocar a la transacción. En el WFNode se puede configurar lo siguiente: Nombre del Stub de entrada . 11. Por default patterns va a tomar como relevant data el nombre de cada uno de los parámetros del nodo transaction (sin contar el Mode).

116 . &WFAppDataSolicitudCmpId. luego quedará del lado del usuario. 11. a no ser que el modo update transaction sea <create default>.En el nodo transaction se tiene en los parámetros SolicitudCmpId?.GetApplicationDataByName(“<relevantDataName>“. De esta forma invocará el método &WFProcessInstance. Allí patterns mapeará uno a uno el nodo relevant data con el nodo parameters hijo de transaction. Es posible darle otro valor a la relevant data. patterns generará el código que invoca al Stub de salida.2 Slot en la transacción: Tanto si se tiene generateSlots en true o en false. pudiendo agregar nodos Relevant Data hijos de WFNode. Lo generará la primera vez. &WFError) Notar que patterns agrega las "".

11. El código generado es el siguiente: 11. queda un xpz en el directorio Import del Pattern K2BEntityServices WorkFlowBasicObjects?. sino que el usuario deberá consolidarlos a mano.11. Para esto. Es importante primero consolidar los objetos básicos de patterns y luego los objetos de WorkFlow?. Ya que WorkFlow? agrega un enumerado más al dominio K2BSesItem.5 Objetos básicos: Los objetos básicos de WorkFlow? no se consolidan automáticamente.4 Importante: Para que Patterns pueda consolidar automáticamente los stubs se debe setear la propiedad AllowNonStandardFunctionsOnSaving? en el modelo de diseño. 117 . Tomará como parámetros los atributos que se encuentran en el nodo transaction y será invocado desde la transacción con esos parámetros.3 Stub de salida: Finalmente patterns generará el stub de salida.xpz. El stub de salida a diferencia del de entrada será un proc.

GxSubObjectType y GxSubObj: GXSubObjectType está basado en un dominio. Parámetros IsAuthorized GxObject:En caso de ser seguridad a nivel de objeto GXObject representa el nombre del objeto. Los valores que puede tomar son los siguientes: 118 . Si el usuario no tiene permiso para visualizar determinada acción la acción será seteada como invisible. La invocación de este proc a nivel de objeto es realizado dentro de la Master Page mientras que la invocación a este proc a nivel de acción es realizado en el objeto mismo a la hora de crear la acción.12 Seguridad Existen dos maneras de trabajar con seguridad. Explicaremos cada uno de ellos en las siguientes secciones. se redirecciona a un panel HNotAuthorized. Si el usuario no le está permitido acceder a determinado objeto. 12. dentro del pattern K2BEntityServices. Estudiaremos aquí con qué parámetros es invocado el procedimiento IsAuthorized. La idea aquí es que el pattern provee la invocación al proc IsAuthorized y el usuario de la aplicación deberá con esto implementar su propia lógica.1 Método IsAuthorized IsAuthorized es un proc genérico que devuelve true o false según si el usuario está autorizado a acceder a determinado objeto o realizar determinada acción. Una es mediante la invocación a un proc genérico isAuthorized que recibe como parámetro los nombres de los objetos y otra es utilizar un mecanismo de seguridad basado en actividades. En caso de ser seguridad a nivel de acción es el objeto al que va a invocar la acción.

&IsAuthorized) Por cada uno de los tabs del view o PIsAuthorized. &IsAuthorized) Por acción o PIsAuthorized. • Tab: Se encuentra dentro de un View. Como primer parámetro se pasa el nombre del objeto que es invocado por la acción.Call("PMultiRowAction".Call(ContentHolder. El siguiente parámetro no debe ser tomado en cuenta. Y se invoca para ver si el tab está autorizado o no. • Undefined: No hay contexto. De esta forma las invocaciones al proc IsAuthorized serán las siguientes: • Por objeto: o PIsAuthorized.Insert. • Action: El contexto es el chequeo de seguridad de una acción.Action. • Mode: Indica que se está invocando a una acción standard. El siguiente parámetro es el código del tab. El siguiente parámetro será el nombre de la acción. TrnMode.Tab. &IsAuthorized) • • • 119 . Es seguridad a nivel de objeto. GxSubObjectType.UnDefined.Item(&Index). GxSubObjectType. &Tabs. El siguiente parámetro va a ser el modo con el que se va a invocar a la transacción. GxSubObjectType. GxSubObjectType.Mode.Identifica que valor se pasará en el parámetro GXSubObj. &IsAuthorized) Por modos en los que se invocan a la transacción dentro del objeto o PIsAuthorized.Call(&Pgmname.Pgmname. "".Call("TPais". "MultiRowButton".Code.

(Display) • Posibilidad de visualizar los registros relacionados. El valor GXPortal.(Delete) • Posibilidad de visualizar un registro.2 Seguridad basada en actividades: La siguiente forma de configurar la seguridad. (Update) • Posibilidad de eliminar un regitro. El Pattern K2BEntityServices se encarga de manejar el acceso a actividades relacionadas con operaciones en la transacción base. 120 . es mediante la seguridad basada en actividades. Estas son: • Posibilidad de dar de alta un registro. • Posibilidad de ver un conjunto de registros en forma de listado. Para poder configurar esta lógica en la raíz de la instancia se cuenta con la propiedad. (Insert) • Posibilidad de actualizar un regitro. pero de todas formas siempre el usuario está en la posibilidad de implementar su propia lógica ya que el pattern lo único que hace es realizar las invocaciones.12. que no está habilitada se inhabilitaría no solo el objeto que implementa esa actividad sino que también se inhabilita el control que desea acceder a ese objeto. permite configurar la seguridad basada en actividades. (List) El Pattern K2BEntityServices maneja el acceso y la implementación de estas actividades. Para cada actividad. AccessControlType. Su valor <default> es tomado del nodo GXPortal/AccessControlType. De esta forma podría chequear en forma conjunta todas estas actividades. Esta filosofía es obtenida de GXportal y apronta la KB para que la seguridad sea completamente mantenida por el lado de GXPortal.

se tiene permisos para acceder a una actividad si: • Se tiene permisos para acceder a la actividad padre o a esa actividad.Dentro de las actividades es posible distinguir entre dos tipos de actividades. Actividades de mantenimiento y actividades de visualización. Las actividades de mantenimiento (Maintenance) están compuestas por: • Insert • Update • Delete Las actividades de visualización (Visualization) estarán compuestas por: • Display • List Para esto el pattern automáticamente define una jerarquía de actividades. Se define que. En caso de no tener permisos: • En el objeto que representa la actividad se redirecciona a un objeto que informa sobre el error. donde agrupa las actividades según si son de Visualization o Maintenance. • En los llamadores se inhabilitan los controles que intentan acceder a esa actividad. 121 .

1 Nombramiento de actividades Cada actividad que se realiza en el pattern. también podría dar de alta Departamentos.12. Para esto es necesario que a la hora de generar el nombre de la actividad no dependa del nombre de la transacción sino de algo más global que abarque un conjunto de transacciones. Si uno pude dar de alta Productos. O sea si uno puede dar de alta Paises. clases de productos. Y en realidad el nombramiento de una actividad es el siguiente: <EntityName><tipoActividad>. Por ejemplo a uno le gustaría tener un permiso solo para poder actualizar estructuras geogríaficas. etc. 122 . Para esto surgió dentro del Pattern K2BEntityServices el concepto de Entidad o Business Entity (entidad de negocios). Generalmente el nombre es generado mediante <TrnName><tipoactividad>. Lo mismo puede pasar con el alta de Productos. etc. unidades de ese producto. Siendo tipo actividad el tipo que puede ser: Insert Update Delete Maintenance Display List Visualization De esta manera el Pattern K2BEntityServices realiza las invocaciones. Para poder incluir una transacción dentro de una entidad se puede agregar a la instancia el nodo Businee Entity y poner el nombre de la entidad. Muchas veces se desea poder agrupar un conjunto de actividades en una sola. pueda dar de alta también tipos de productos. Ciudades.2. tiene su nombre que es generado automáticamente por el pattern K2BEntityServices.

Nombramiento de actividades: En realidad el nombramiento de actividad no es fijo. Determinación de nombre de la entidad: • Si la instancia no tiene Business Entity el nombre de la entidad es el nombre de la transacción base de la instancia. Esto puede ser configurado en el archivo de configuración. En el nodo GXPortal/ActivitiesNaming se pone el nombre de las actividades.De esta manera las actividades se van a crear en función de ese nombre de entidad. • Si tiene Business entity el nombre de la entidad es el nombre del Business Entity. <TrnName> será sustituido por el nombre de la entidad. 123 .

2.2 Invocación a programas de seguridad El programa de seguridad que debe ser implementado y que tiene la lógica de integración con GXPortal. La invocación a estos programas es realiza desde el Pattern de la siguiente forma: En la transacción seguridad a nivel de objeto: 124 . Si el usuario está autorizado a realizar la actividad o la padre el campo IsAuthorized asociado al item de la colección deberá ser colocado en K2BBoolean. El otro programa que es invocado desde Patterns es el programa IsAuthorizeGXPortalSingle en lugar de recibir un sdt. FatherActivityName es el nombre de la actividad Padre. El procedimiento simplemente lo que hace es cargar el sdt con un elemento e invocar al IsAuthorizedGXPortalSDT. si se está autorizada o no.True. pero en el caso de control de seguridad es a modo informativo y no es utilizado. En ProgramName se puede colocar el nombre de un objeto GeneXus que representa esa actividad. Este recibe como parámetro un sdt que representa una lista de actividades y devuelve por cada una. recibe dos actividades la hija y la padre.12. El nombre del sdt es K2BGXPortalActivityList y estos son sus campos. y retorna verdadero o falso si el usuario está autorizado a realizar alguna de esas actividades. ActivityName es el nombre de la actividad. es el IsAuthorizedGXPortalSDT.

En los trabajar con: 125 .

3 Seguridad en los tabs subordinados La seguridad dentro de los tabs subordinados es completamente diferente al del resto de los objetos de la instancia.2. Por defecto se comunica con las APIs de GXPortal y da de alta todas las actividades en el backend para que luego el usuario pueda asignarles permisos. De esta forma. este debería encargarse también de darlas de alta. 126 . Patterns a la hora de generar la seguridad en estos tabs. Si la encuentra y está configurada con seguridad en GXPortal. obtiene el nombre de la transacción y busca una instancia con ese nombre. entonces obtiene el nombre de la entidad asociada a esa transacción y chequea la seguridad con los nombres de actividades obtenidos. dado que las operaciones sobre los tabs subordinados pertenecen a otra entidad. Para este caso el pattern crea un procedimiento genérico que da de altas las actividades.12. a partir del nodo transaction. si no invoca al proc IsAuthorized. 12.2. Este procedimiento genérico se llama gxportalloadactivitylist y es invocado por el web panel hgxportalloadactivitylist.4 Alta de actividades Dado que el Pattern K2BEntityServices genera el nombre de las actividades.

5 Otra Configuración En el nodo GXPortal se cuenta también con la propiedad CheckSecurityForBC. los reportes y tabs subordinados 12. solo las padres o ambas.6 Integración con GXPortal Como se menciono anteriormente toda esta lógica es completamente integrable con GXPortal. en false solo se chequea la seguridad para las operaciones de mantenimiento de la transacción y acceso al view. La generación de este procedimiento es configurable Si se coloca GenerateLoadActiviesListProc en true. el pattern genera este procedimiento. GXPortal/ControlAccess/EntityList es un booleano.2. Esto se configura en LoadActivitiesConfiguration. Esto es si la lógica de seguridad en GXPortal será chequeada cuando el objeto es invocado como busiesscomponent. 127 .Este procedimiento recorre todas las instancias y da de alta las actividades generadas en ellas. En caso de estar en true se genera un slot en las transacciones que se fija que el usuario este autorizado a la hora de hacer alguna operación con el bc. 12. Indica si se va a chequear la seguridad para la actividad de listado. No se chequea la seguridad a nivel de objeto para los trabajar con. Este programa es configurable para que de de alta solo las actividades hijas.2.

Sobre este punto.GAMProEnvSrvVirDir = "<virtualdir>" order by g. se deberá modificar en la tabla GamProEnv los directorios virtuales de esos módulos y hacerlos que apunten al mismo dir virtual. Ante cualquier problema se cuenta con el web panel de la versión anterior. dentro de la aplicación. GamProId Es importante que todos los módulos que forman parte de la aplicación (módulo es menú de aplicación en el portal) esten bajo el mismo directorio virtual. Los procedimientos para el alta de actividades se encuentra con el web panel GXPortalLoadActivityListTest. Sino.2.7 Obtención de GAMPRoEnvId. Dado que este web panel es nuevo. Para obtener el GAmProEnvId y GamProId esto se calcula obteniendo el menor GAmProId. esto se obtiene ejecutando en el MySQL la sentencia SELECT g. este proc es el que se encarga de dar de alta las actividades bajo el botón add activities. Para ejecutar este proc se debe estar logueado en el frontend de gxportal en la aplicación que se deben dar de alta las actividades. • Tener en la KB los objetos de integración K2BEntityServices GXPortal. 12. El primer registro que cumple esta condición es el que se tiene que dar de alta. Importante: El procedimiento que da de altas las actividades si la actividad ya existe simplemente hace un update de la misma.1.gamproenvid. y GamRepId. Los objetos básicos de integración de K2BEntiytServices con GXPortal son provistos por el Pattern K2BEntityServices. actualmente esto se calcula de forma automática. y da de alta las actividades.2. hgxportalloadactivitylist que básicamente lo que hace es dar de alta estas actividades pidiendo que el usuario ingrese el GAmRepId. ver la siguiente sección. En las últimas versiones de GXPortal esto ya es así. que retorna el GamProId. se cuenta con un test.4 o superior • Tener en la KB consolidados los objetos de integración de aplicaciones con GXPortal. como obtener estos datos y como configurar esta seguridad en versiones anteriores de GXPortal.gamproid.gamproid FROM gamproenv g where g. y GamProId. Sobre este tema consultar con el equipo de GXPortal para mejores instrucciones. g.Para esto es imprescindible tener: • Versión de GXPortal 4. 128 . y GamProId. En las versiones anteriores el usuario debía poner a mano el nombre del GAmRepId.

8 Permisos backend GXPortal Para esto se debe ir al backend y para cada rol asignarle los permisos sobre las actividades que se desee que el rol tenga permisos. 129 .2.12.

130 .

131 .

Cualquier consutla sobre este último punto sugerimos consultar al equipo de GXPortal. 132 .

Sign up to vote on this title
UsefulNot useful