Unofficial Content

english version here

Ha sido implementado un "RSS Feed Pattern" que tiene como objetivo generar un RSS feed a partir de la información de una KB. Puede obtener más información y el propio pattern aqui.

Este articulo tiene como objetivo documentar: cómo funciona dicho pattern y que genera el mismo.

Puede encontrar una introducción al tema RSS aqui.

¿Cómo funciona el RSS Feed pattern?

El funcionamiento es sencillo: se seleccionan las transacciones a las cuales se quiere aplicar el pattern (aquellas sobre las cuales se quiere generar un RSS Feed)  y luego de aplica el mismo que genera un grupo de objetos de acuerdo a los valores configurados en la instancia. Este grupo de objetos son esencialmente procedures que arman y retornan el RSS (xml).

Viendolo en funcionamiento

Para entenderlo más fácil se pueden ver videos hechos a partir de la utilización del pattern en una aplicación (mínima) de Facturación:

Step 1: Aplicando el patrón sobre la transacción de clientes y viendo los resultados

Este video muestra como aplicar el RSS Feed Pattern a la transacción de clientes. Luego se puede el resultado de "consumir" el feed utilizando RSS Bandit que es un reader "standalone" o utilizando RSS Popper que es un reader integrado a outlook.

Step 2: Aplicando el RSS feed pattern y el Work With Pattern a toda la base de conocimientos 

Este video muestra como aplicar el RSS feed pattern a toda la KB y además como integrar en la misma también el "work with pattern". Luego se puede ver el resultado en ejecución tanto utilizando RSS Popper como RSS Bandit

Step 3: Modificando la instancia del pattern

Los ejemplos anteriores mostraban como aplicar el RSS Feed pattern con los valores por defecto. En este caso se parte de un ejemplo un poco más complejo que es la transacción de Invoices (facturas).

La mismo no solo tiene más de un nivel, sino que tiene la característica de no tener un "Description Attribute" del primer nivel. Ese "Description Attribute" es el utilizado por default para el "title y "description" incluidas en el RSS. De este modo lo que se puede hacer es configurar en las propiedades "ItemTitle" e "ItemDescription" de la instancia del pattern, otros atributos que funcionen como "Description Attribute".

En particular en el ejemplo lo que se incluye un atributo, sino expresiones más complejas del tipo "Invoice"+str(InvoiceNbr), lo cual también es posible y muchas veces conveniente.

Se puede ver el video mostrando más detalles de este ejemplo (modificación de la instancia, el resultado a nivel de los objetos generados, ejecución, etc)  aqui

Más sobre lo que el pattern genera

El pattern crea dos tipos de objetos: básicos y especificos.

Los básicos son procedimientos que empiezan un XML (PBeginRSS), lo terminan (PEndRSS) o graban un Item/element del RSS (PRSSWriteItem).

Además un objeto(PRSSisAuthorized) que es invocado en cada "feed" para comprobar que el usuario está autorizado a consumirlo. Por defecto este procedimiento solo retorna "true", la idea es que si se tiene en la KB un procedure que realmente chequea la seguridad, se modifique este proc para que invoque al de seguridad real de la KB.

Los especificos son los que se generan para cada feed. Por ejemplo, si se parte del feed de Customers visto anteriormente se crearán el objeto PRSSCustomers, el PRSSgetCustomersitems y el Webpanel: RSSCustomersAddFavorite.

PRSSCustomers es una especie de "controller" del resto de los objetos, el fuente (resumido) es:

// controla la seguridad
PRSSisAuthorized.Call(&Pgmname, &isAuthorized)

If &isAuthorized = RSSBoolean.True

 

// Comienza el archivo XML
PBeginRSS.Call(&Name, &ShortContent, &Link, &Xml, &BaseUrl)

 

// llama a otro procedimiento que retorna un SDT (&items) a retornar en el RSS
 PrssgetCustomersitems.Call(&Items)

 

// recorre el SDT retornado grabando cada item
 For &Item in &Items
 PRSSWriteItem.Call(&Xml, &Item.Title, &Item.Description, &Link)
 Endfor

 

// Finaliza el archivo XML
 PEndRSS.Call(&Xml)
 
Endif

 PRSSgetCustomersitems lo que hace es recorrer la tabla correspondiente (en este caso los clientes) de acuerdo a las propiedades configuradas en la instancia (cantidad de items, orden, etc) y retorna un SDT con los elementos a ser retornadoen el RSS.

// Cantidad de items a mostrar
&ItemsQuantity = 20
&Quantity = 0

 

&Items = new RSSEntityItems()

 

For each (CustomerID)

    If &Quantity <= &ItemsQuantity

        &Item = new RSSEntityItems.Item()
        &Item.Title = CustomerName
        &Item.Description = CustomerName
        &Item.Link = link(HViewCustomers,ltrim(CustomerID.ToString()))
        &Items.Add(&Item)

else

exit

    Endif

 

    // Aumentar la cantidad
    &Quantity += 1

Endfor

 

Last update: February 2024 | © GeneXus. All rights reserved. GeneXus Powered by Globant