En blogs anteriores sobre Mega Hopex V5 se revisaron los caminos que se pueden utilizar para crear y modificar los Working Environment Templates y cómo afectan al ambiente que termina utilizando el usuario final. En uno de estos ejercicios, se aplicaron TaggedValues para obtener las operaciones que pertenecen a una Unidad Organizacional, puedes ver el resultado aquí: Modificaciones WET.
De este último ejercicio quedó pendiente obtener los procesos organizacionales asociados a una unidad organizacional en la tabla de nuestro WET personalizado y dado que esta se obtendrá de manera muy similar que con las operaciones, se mostrará cómo hacer uso de un TaggedValue para mostrar la lista.
Comencemos recordando el resultado de la modificación al Working Environment Template de Business Process Analysis, se ve de la siguiente manera:
Nosotros terminamos reutilizando componentes que se utilizan en otro WET Group de Organización que el perfil de Responsable de Procesos no puede visualizar, por lo que la MetaPropertyPage de BPA - Organization List PP, es una página de visualización estándar que contiene una referencia a una macro que a su vez nos referencia a una nueva MetaPropertyPage llamada BPA - Org-Units PP y es esta última la que estaremos modificando para añadir un nuevo Item que sea un TaggedValue. La MetaPropertyPage se ve de la siguiente forma:
Del ejercicio anterior, la línea que se añadió para la columna de operaciones, corresponde al Item OperationOrgUnit y su nombre definido por un Code Template que diga "Operación", ahora agregaremos una nueva línea similar a esta para los Procesos Organizacionales.
La línea empezaría como lo siguiente:
ProcessOrgUnit = Item(),From(OrgUnit),Name(~tsoDZSv5NvUF[Proceso organizacional]),Title(Up),Param(Extra),DisabledOn(Always)
Ahora, nos falta añadir el TaggedValue. Para esto crearemos uno nuevo y al ser una lista lo que resultará, lo definiremos como VarChar en formato Estándar.
Dentro de sus propiedades, le definiremos una Implementación creando una nueva Macro de VB.
La macro por defecto vendrá con comentarios por defecto que nos ayudarán a empezar las funciones dependiendo de nuestras necesidades.
'MegaContext(Fields,Types)
'To Implement if you want to have a computed value for this attribute
Sub GetAttributeValue(Object as MegaObject,AttributeID as Variant,Value as String)
End Sub
'To Implement instead of GetAttributeValue if you want to manage a specific display or extended value
'Format : 0 internal, 1 external, 3 Display, 5 externalCode
'Sub GetExtendedAttributeValue(Format as Integer,Object as MegaObject,AttributeID as Variant,Value as String)
'End Sub
'To Implement if you want to overload the update of this attribute
'Sub SetAttributeValue(Object as MegaObject,AttributeID as Variant,Value as String)
'End Sub
'To Implement instead of SetAttributeValue if you want to manage a specific display or extended value
'Format : 0 internal, 1 external, 3 Display, 5 externalCode
'Sub SetExtendedAttributeValue(Format as Integer,Object as MegaObject,AttributeID as Variant,Value as String)
'End Sub
'To Implement for a Text attribute to fix the text format of the given text
'Sub GetTextFormat(Object as MegaObject,AttributeID as Variant,Value as Variant)
'End Sub
La función que tomaremos será la que no está comentada y empezaremos a obtener la lista de los procesos organizacionales.
La macro final quedará de la siguiente forma:
'MegaContext(Fields,Types)
'To Implement if you want to have a computed value for this attribute
Sub GetAttributeValue(Object as MegaObject,AttributeID as Variant,Value as String)
Value = ""
Set mgRoot = Object.GetRoot()
Set Procesos = mgRoot.GetSelection("Select [Proceso organizacional] Where [Operación].[Participante].[Asignación].[Nombre] = '" & Object.GetProp("Nombre corto") & "'")
dim proceso
For each proceso in Procesos
Value = Value & proceso.GetProp("Nombre Corto") & vbNewLine
Next
End Sub
En esta macro, lo que se define es un valor que será devuelto a la parametrización de la MetaPropertyPage, este valor es modificado. Obtenemos el root y se almacenará en mgRoot, que después utilizamos para ejecutar una consulta que devuelva la colección de los procesos organizacionales en donde la unidad organizacional que nos pasan como parámetro en Object, esté vinculada. Y para finalizar, se recorre esta colección en un bucle for para almacenar el nombre corto de todos los procesos organizacionales involucrados en la variable Value.
Finalmente, la línea que se añadirá a la parametrización de la MetaPropertyPage quedaría de la siguiente manera:
ProcessOrgUnit = Item(~4(ztblVUb5(9[OrgProcessTaggedValue]),From(OrgUnit),Name(~tsoDZSv5NvUF[Proceso organizacional]),Title(Up),Param(Extra),DisabledOn(Always)
Ahora sólo restaría publicar los cambios de esta PropertyPage y probar en el escritorio de Responsable de Procesos.
Como se puede observar, la columna de Proceso Organizacional se ha añadido correctamente en nuestro escritorio y muestra los procesos a los que está asociada la unidad organizacional en cuestión. Recordemos que al ser lista, no podemos ver todo el contenido en esta tabla, pero es útil generar el reporte en excel y visualizarlo.
De este modo, es como se utiliza un TaggedValue para insertar un valor en una MetaPropertyPage que requiere ser calculado y no se limita a traer únicamente un simple valor de un MetaAtributo, en este ejercicio se demostró que es posible traer una colección de nombres que pertenecen a objetos con los que la Unidad Organizacional o el objeto raíz, tiene una MetaAsociación, por lo tanto, esto ayudará a muchas implementaciones que se tengan pensadas para modificar (en este caso) una MetaPropertyPage.