Unofficial Content
  • This documentation is valid for:

English Version

BI Web Services

Ejemplos

Puede consultar el siguiente artículo y bajar el siguiente ejemplo.
Deberá seguir los siguientes pasos en el orden especificado:

  1. Crear una base de conocimiento 8.0 o superior.
  2. Utilizar la herramienta WSDL inspector para consumir el servicio digitando la URL donde se instalaron los servicios.
  3. Consolidar el xpz asociado marcando la opción ?Do not overwrite SDTs?.
  4. Crear un modelo con interfaz Web.
  5. Especificar, Generar y compilar todos los objetos.
  6. Llamar al Web Panel Login.

Crear una sesión

Se debe llamar al método StartSession y chequear la variable status. Verificar el Web Panel Login. Pseudocódigo ejemplo:

Event 'Login'
// Starting Session
&ws.StartSession (&userName, &userPassword, &session, &status)
If (&status.Error = 0)
// Login Succeeded
&session_str = &session.ToXml()
// Set Session Information to Web Session
&WebSession.Set ("Session", &session_str)
Else
&msg = &status.ErrorDescription
Do 'Error'
EndIf
EndEvent // 'Login'

Trabajar con usuarios

Se debe llamar al método GetUserCollection para traer la colección de usuarios y posteriormente traer la información del usuario con el método GetUser. Siempre es necesario chequear la variable status; verificar el Web Panel Users. Pseudocódigo ejemplo:

Sub 'LoadUsers'
&element_str = ""
Call(PGetSessionFromWS, &session, &status) // Get a Session from a WebSession Variable
&ws.GetUserCollection(&session, &users, &status)
If &status.Error = 0
// No Error, Loading Users in comboUsers ComboBox
For &i=1 to &userCollection.Count
&item = &userCollection.Item(&i).Name
&comboUsers.Additem(&item, &item)
EndFor
&element_str = &userCollection.ToXml()
Else
&msg = &status.ErrorDescription
Do 'Error'
EndIf
&statusToXML = &status.ToXml()
EndSub

Sub 'LoadUser'
&element_str = ""
Call(PGetSessionFromWS, &session, &status) // Get a Session from a WebSession Variable
&ws.GetUser(&session, &userName, &user, &status)
If (&status.Error = 0)
// No Error, Loading User Information in variables
&userFullName = &user.FullName
&userName = &user.Name
&userNodeType = &user.NodeType
&userSupervisor = &user.IsSupervisor
Else
&msg = &status.ErrorDescription
Do 'Error'
Endif
EndSub

Trabajar con metadatas

Se debe llamar al método GetMetadataCollection para traer la colección de metadatas disponibles para el usuario conectado a través de la sesión. Posteriormente abrir una metadata con el método OpenMetadata. Siempre es necesario chequear la variable status; verificar el Web Panel Metadata. Pseudocódigo ejemplo:

Sub 'LoadMetadatas'
Call(PGetSessionFromWS, &session, &status) // Get a Session from a WebSession Variable
&ws.GetMetadataCollection(&session, &metadatas, &status)
If &status.Error = 0
// No Error, Loading Metadatas in &ComboMetadatas ComboBox
For &i=1 to &metadataCollection.Count
&item = &metadataCollection.Item(&i).Name
&ComboMetadatas.Additem(&item, &item)
EndFor
Else
&msg = &status.ErrorDescription
Do 'Error'
EndIf
&statusToXML = &status.ToXml()
EndSub

Sub 'OpenMetadata'
Call(PGetSessionFromWS, &session, &status) // Get a Session from a WebSession Variable
&ws.OpenMetadata(&session, &metadataName, &status)
If (&status.Error = 0)
Msg( 'Metadata was opened.')
&WebSession.Set ("Metadata", &ComboMetadatas)
Else
// Could not open metadata
&msg = &status.ErrorDescription
Do 'Error'
EndIf
EndSub // 'OpenMetadata'

Trabajar con Business Elements

Se debe llamar al método GetBusinessElementCollection para traer la colección de Indicadores, dimensiones o atributos disponibles de la metadata abierta. Puede traer la información del elemento con el método GetBusinessElement. En caso que sea una dimensión\atributo puede llamar al método GetBusinessElementValueCollection para traer la colección de valores. Siempre es necesario chequear la variable status; verificar el Web Panel BusinessElement*. Pseudocódigo ejemplo:

Sub 'LoadMeasures'
&be_type = "Measure" // Setting Business Element Type
Call(PGetSessionFromWS, &session, &status) // Get a Session from a WebSession Variable
&ws.GetBusinessElementCollection(&session, &be_type, &becollection, &status)
If &status.Error = 0
// Loading Measures in &ComboMeasures
For &i=1 to &businessElementCollection.Count
&item = &businessElementCollection.Item(&i).Name
&ComboMeasures.Additem(&item, &item)
EndFor
Else
&msg = &status.ErrorDescription
Do 'Error'
EndIf
EndSub

Sub 'GetBusinesesElement'
&element_str = &ComboMeasures // Name of the Business Element to get
Call(PGetSessionFromWS, &session, &status) // Get a Session from a WebSession Variable
&ws.GetBusinessElement(&session, &be_name, &be, &status)
If &status.Error = 0
// No Error, Loading information in variables
&beName = &businessElement.Name
&beDescription = &businessElement.Description
&beCardinality = &businessElement.Cardinality
&beNodeType = &businessElement.NodeType
Else
&msg = &status.ErrorDescription
Do 'Error'
Endif
EndSub

Sub 'GetBEValues'
Call(PGetSessionFromWS, &session, &status) // Get a Session from a WebSession Variable
&ws.GetBusinessElementValueCollection(&session, &be_name, &valueslike, ¬like, &values, &status)
If &status.Error = 0
// No Error, loading Values in &ComboValues
For &i=1 to &values.Count
&item = &values.Item(&i).Description
&ComboValues.Additem(&item, &item)
EndFor
Else
&msg = &status.ErrorDescription
Do 'Error'
EndIf
EndSub

Trabajar con consultas

Se debe llamar al método GetQueryCollection para traer la colección de consultas que el usuario puede ejecutar, posteriormente puede llamar a algunos de los métodos para trabajar con una consulta. Siempre es necesario chequear la variable status; verificar el Web Panel Query. Pseudocódigo ejemplo:

Sub 'LoadQueries'
Call(PGetSessionFromWS, &session, &status) // Get a Session from a WebSession Variable
&ws.GetQueryCollection(&session, &only_owned, &queryCollection, &status)
If &status.Error = 0
// No Error, Loading Queries in &ComboQueries
For &i=1 to &queryCollection.Count
&item = &queryCollection.Item(&i).QueryInfo.Name
&ComboQueries.Additem(&item, &item)
EndFor
Else
&msg = &status.ErrorDescription
Do 'Error'
EndIf
EndSub

Ejecutar consultas

Existen dos métodos para ejecutar una consulta:

  • GetQueryData
  • GetQueryHtmlData

El primero es el mas potente permitiendo ejecutar una consulta en diferentes formatos. Es necesario previamente haber establecido una sesión con el servidor, abierto una metadata y seleccionado la consulta a ejecutar ademas de configurar varios parámetros; verificar el Web Panel ExecuteQueryWithSession.

Pseudocódigo ejemplo utilizando GetQueryData:

Event 'Execute'
Call(PGetSessionFromWS , &session, &status) // Get a Session from a WebSession Variable
If &status.Error = 0
// No Error
If &queryName = ""
msg('Query not selected.')
Else
// Get Parameters
Do 'LoadParameters'
Do 'LoadServiceProperties'
// Execute Query
&ws.GetQueryData(&session , &queryName, &Parameters, &serviceProperties, &specificformat, &xmldata, &query, &status)
If &status.Error = 0
Do 'LoadQueryData'
Else
Do 'Error'
EndIf
EndIf
Else
Do 'Error'
EndIf
EndEvent
Sub 'LoadQueryData'
&queryId = &query.QueryOpenInfo.Id
Do Case
Case &queryFormat = "XmlAbstractNoFormat"
Query.Format = 0 // Text format
Query.Caption = &Specificformat
Case &queryFormat = "HtmlOWC"
// Office Web Component
Query.Format = 1 // HTML format
// When using the 'Office Web Component' control, use a TextBlock Control.
Query.Caption = &Specificformat
Case &queryFormat = "HtmlCrossBrowserControls"
// Cross-browser control Component
Query.Format = 1
Query.Caption = &Specificformat // URL returned by the queryexecution using the Cross-browser Component
OWCTable.Visible = 0
// When using the 'DevExpresst' control, use a Embedded Page Control.
EmbPageNewControl.Source = &Specificformat
Case &queryFormat = "XmlAbstractWithFormat" // Use the default XSL File distributed with GXBI Services
Query.Format = 1 // HTML format
&xslFile = PGetBIXSLFile.Udp()
&xslPath = PGetBIServicePath.Udp()
&xslPath += &xslFile
// Do the Transformation
Query.Caption = XsltApply(&specificformat, trim(&xslPath))
Otherwise
Query.Format = 0 // Text format
Query.Caption = "Unknown Format " + &queryFormat
EndCase
EndSub
Sub 'LoadServiceProperties'
// Loading "QueryDestination"
&Property = new GXBIProperty()
&Property.Name = "QueryDestination"
&Property.Value = &queryDestination
&serviceProperties.Add( &Property )
// Loading "ExecuteQuery"
&Property = new GXBIProperty()
&Property.Name = "ExecuteQuery"
&Property.Value = trim(str(&execute))
&serviceProperties.Add( &Property )
// Loading Component Version
&Property = new GXBIProperty()
&Property.Name = "Version"
&Property.Value = &Version
&serviceProperties.Add( &Property )
// Loading "QueryFormat"
Do 'CheckQueryFormat'
&Property = new GXBIProperty()
&Property.Name = "QueryFormat"
&Property.Value = &queryFormatting
&serviceProperties.Add( &Property )
// Loading "ComponentId"
&Property = new GXBIProperty()
&Property.Name = "ComponentId"
&Property.Value = "MyComponent"
&serviceProperties.Add( &Property )
EndSub

Ejemplo

BIServices-Example1

El segundo método (GetQueryHtmlData) permite ejecutar una consulta minimizando la cantidad de parámetros a configurar retornando el HTML resultado para ser embebido en cualquier TextBlock (con formato HTML) de un Web Panel GeneXus; verificar el Web Panel ExecuteQuerySample. Pseudocódigo ejemplo:

    Do 'GetParameters' // User, Password, MetadataName, QueryName, Parameters
Do 'LoadServiceProperties' // Runtime properties in serviceProperties
// Execute the Query
&specificformat = &ws.GetQueryHtmlData(&User, &password, &metadataName, &queryName, &Parameters, &serviceProperties, &status)
If &status.Error = 0
QueryResult.Caption = &specificformat // Assign the query HTML Result to the Textblock Control
Else
Do 'Error'
EndIf
EndSub

Ejemplo:

BIServices-Example2

Verifique el SDT GXBIProperty para conocer las opciones que soporta cada método.

Aplicar un Formato particular a una consulta

Si se desea aplicar un formato especial al resultado de una consulta (XmlAbstract) puede utilizar la función XSLTApply (disponible en GeneXus 9.0) para transformar en el cliente en resultado de la consulta en formato XML a HTML.

A partir del resultado de una consulta supongamos en la variable &SpecificFormat se debe llamar a la función asociada y posteriormente cargar en un TextBlock (con formato HTML) el resultado asociado (&HtmlFormat).

Event 'ExecuteQueryWithXSLT'
&ws.GetQueryData(/* Parameters */)
If &status.Error = 0
// OK
If &ApplyXSL = 'Y' // Flag to use the transformation
&HtmlFormat = XSLTApply( &specificformat, &XSLTFile)
endif
QueryResult.Caption = &HtmlFormat
Else
&msg = &status.ErrorDescription
Do 'MsgError'
EndIf
EndEvent

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