Parte II (bis) y Parte III (bis II) y Parte IV (bis): Un agregado que afecta las partes mencionadas...

Hoy tocaba hablar sobre el control de la información, pero en la aplicación real surgieron novedades que no quería dejar pasar antes de seguir.

La empresa necesita que algunos documentos que vayan a visualizarse (falta para esto), solo puedan ser vistos por un grupo asignado. Para esto se decidió que, cada documento que se suba al Sistema, deba tener los campos de Dirección y Gerencia.

En mi trabajo, los cargos laborales standard, de mayor a menor son:

Dirección - Gerencia - Jefatura - Supervisión

Es por esto que, lo primero que se hizo fue crear (en conjunto con la gente de Seguridad Informática), el conjunto de grupos de seguridad en Active Directory.

Es decir, se crearon todas las Direcciones de la empresa, así como todas las Gerencias, Jefaturas y Supervisiones. La particularidad de esto es que, dentro de una Dirección, se pusieron como miembros todos los objetos de Gerencias que corresponden a esa dirección. Con las Jefaturas se hizo lo mismo, asignando las correspondientes como miembros de la Gerencia.

En un futuro, cada objeto de usuario debería formar parte de una supervisión, lo que hará, por herencia, que a la vez sea miembro de la Jefatura, Gerencia y por último Dirección a la que pertenece.

Sin dar más vueltas, estos grupos se sincronizaron en Azure (tenemos una estructura híbrida, donde todo lo que existe en el AD onprem va a Azure).


Todo lo anterior, para comentar que, en las Bibliotecas Edición y Visualización, se agregaron dos columnas de tipo Usuario. Una llamada Dirección, y la otra Gerencia.

Y en la aplicación de Carga de Documentos se agregaron dos Comboboxes que deben levantar los datos de esas Direcciones y Gerencias:



El problema con esto, se presenta en cómo voy a levantar esos datos en Comboboxes.

A diferencia de los comboboxes explicados en Parte III...o IV, ya no recuerdo qué parte, tampoco importa... estos combos deberían levantar todos los grupos que fueron creados... pero tampoco quiero levantar todos los grupos que existen en el AD.

Lamentablemente el filtro no sirve, ya que éste tiene límite de cantidad de grupos que encuentra cuando se busca. El otro problema, es que si busco mediante un filtro, podría traer, en algún momento, un grupo que se llame de una forma similar.

Para resolver este tema, además de todos los grupos creados, se creó uno llamado Dirección General, y este tendría como miembros todas las direcciones. Sería el Anillo Único que gobierna a todos.

La idea con esto es que el ComboBox de Dirección, debe mostrarme solamente los grupos que son miembros del grupo Dirección General.

Luego, el ComboBox de Gerencia debe mostrarme las Gerencias pertenecientes a la Dirección seleccionada en el paso anterior.

La forma de lograr esto es mediante un conector llamado GruposdeOffice365, más unas funciones que voy a describir ahora.

Primero, en la sección de datos, tienen que agregar el conector, luego, validarlo con su cuenta de usuario.

Nos vamos a la vista de Árbol, donde están todos los controles, seleccionamos App y vamos a la propiedad OnStart, es decir, lo que queremos que ocurra cuando la aplicación inicie. Escribimos la siguiente función:

Set(direcciones; GruposdeOffice365.ListGroupMembers("acá-va-el-id-del-grupo"))


Esto quiere decir que, con set, crearemos una variable, que llamaremos direcciones. Esa variable utilizará el conector GruposdeOffice365, con una función que me lista los miembros de un grupo. La función termina escribiendo el ID del grupo (que se obtiene por powershell o entrando al grupo desde Azure Active Directory). El grupo que hay que poner es el de Dirección General.

Entonces, tendremos una variable llamada direcciones, que me va a traer todos los nombres de los grupos que están dentro, o sea, las Direcciones de la empresa.

Ahora vamos al combobox que usaremos para obtener esas Direcciones.

No voy a explicar qué hace cada cosa, si tienen dudas, pregunten debajo!!! :) (pregúntenme cosas, si ven esto, así me divierto un poco más.... sé que nadie lee esto, pero estaría bueno leer algún comentario de vez en cuando)...

Sí explicaré que el combobox de para las Direcciones se llama cmb_direcciones, y el de Gerencias, cmb_gerencias.


En cmb_direcciones:

OnSelect:

If(
    !(IsBlank(cmb_direcciones.Selected));
        Set(gerencias; GruposdeOffice365.ListGroupMembers(cmb_direcciones.Selected.id));
        Reset(cmb_gerencias)
)

OnChange:

Reset(cmb_gerencias)

DisplayFields y SearchFields:

["displayName"]

Items:

direcciones.value

 


En cmb_gerencias:

DisplayFields y SearchFields:

["displayName"]

Items:

gerencias.value

DisplayMode:

If(IsEmpty(cmb_direcciones.Selected) Or IsBlank(cmb_direcciones.Selected);Disabled;Edit)


Un resumen: Direcciones me va a levantar los items de la variable Direcciones, los va a mostrar de acuerdo a su DisplayName. Cuando seleccione una Dirección, se va a modificar una variable llamada Gerencias, levantándome el id de la dirección, para mostrarme en el combo de Gerencias los miembros de la Dirección seleccionada. Si Direcciones no está seleccionada, Gerencias estará deshabilitada, además, cada vez que modifique la selección de Direcciones, debe resetearse el combo de Gerencias.


Bueno, eso es todo por hoyyyyy... espero poder hacer lo de validación de datos el día de hoy!

Comentarios

Entradas más populares de este blog

Parte III (bis): Dónde está el control para adjuntar archivos?

Parte III: Poniendo cositas en el lienzo (algunos controles y sus propiedades)

Parte IV: Configurando todo lo anterior