miércoles, 18 de octubre de 2023

Procedimientos. Docap.

DOCAP. Impress + Writer 

Ya vimos una primera formulación de un docap complejo que combina Calc con Writer. Analizaré en esta entrada otra formulación diferente en cuanto a uno de los servicios: utilizo Impress en lugar de Calc. Este cambio se explica fácilmente: ahora necesito las funcionalidades de Impress como recurso de manejo de información visual.

Aunque el esquema de funcionamiento es similar al modelo Calc + Writer, también se aprecian diferencias también, motivo por el cual he creído conveniente crear esta entrada.

Similitudes: Ahora Impress hace de servicio principal, lo que implica que no tenemos, como en el caso anterior, un gestor + un soporte para la salida de la información. Ahora tenemos un servicio-soporte para la exposición de la información y la aplicación de la actividad (Impress) y otro para la misma función que ya cumplió antes. Y en el intermedio el procesamiento de los datos recogidos en la fase inicial de la ejecución. 

Podemos representar lo anterior de forma simplificada mediante este esquema...

    

... entendiendo el condicional como mera representación de la fase de procesamiento, ya que es mucho más complejo, como veremos a continuación.

En la fase input se diferencian dos procedimientos de trabajo:
  • La introducción de datos de identificación, que se realiza mediante un cuadro de diálogo asociado a la presentación
  • Y la ejecución de la tarea, que se resuelve mediante comandos asociados a las figuras de cada diapositiva
El proceso comprende las siguientes fases:
  • El paso de los datos de identificación y de puntuación del ítem a matrices de datos
  • El conteo de aciertos
  • La calificación y valoración del resultado
  • Y la composición del texto a grabar en el documento de salida
Finalmente, en la fase de output se diferencian dos fases:
  • El acceso al documento-base y su apertura en modo plantilla (aquí se presenta una diferencia importante respecto al modelo de docap anterior, en el que se creaba ese documento)
  • Y el traslado de datos a las posiciones de marcador previamente establecidas en dicho documento (esta es una posibilidad que permite trabajar con documentos definidos previamente).
El [video] que sigue muestra esta estructura de forma detallada y en [esta entrada] puedes encontrar información complementaria a la que te presento aquí.




En la fase input, el uso de cuadro de diálogo [ver en GUI] está determinado por las propias limitaciones de Impress en cuanto al acceso a los sistemas gráficos de interface. 

DialogLibraries.LoadLibrary("Standard")
oPresentaCB=CreateUNODialog(DialogLibraries.Standard.getByName("DlgIdAl"))
oPresentaCB.Execute()

La segunda parte del input aprovecha las posibilidades que ofrece LO de asociar los elementos gráficos a macros/script.

El procesamiento de datos se centra en dos procesos:
  • Pasar los datos de los controles del cuadro de diálogo a una matriz string (sDatos()) para facilitar su procesamiento y, con ello, identificar al sujeto que realiza la actividad.
oDato(0) = oPresentaCB.getControl("DtFechaInfo")
sDato(0)= oDato(0).Text
  • Contabilizar los resultados y analizarlos en términos cuantitativos mediante el uso de instrucciones y estructuras OOo Basic.
For i = 0 To 11
Suma = Suma + Puntos(i)
Next
  • Con ambos, y mediante la concatenación de textos y variables, se elabora el contenido que posteriormente será traslado al soporte writer.
If Porcentaje > 80 Then
Valoracion= "Dado que el porcentaje de acierto es superior al 80%, se considera que el/la alumn@ comprende adecuadamente los conceptos básicos trabajados"
Else
Valoracion= "Dado que el porcentaje de acierto es inferior al 81%, se considera que el/la alumn@ no comprende suficientemente los conceptos básicos trabajados"
End If

Finalmente, el output empieza por el acceso al documento-base...

sRutaAcceso = ConvertToUrl("D:InfoCB.odt")
oDocModelo = StarDesktop.loadComponentFromURL( sRutaAcceso, "_blank", 0, mOpciones() )

... y finaliza con el traslado del contenido a las posiciones (marcadores de texto) que se establecieron en el documento-base en el momento en que éste se creó. 

oMrcFechaInfo = oDocModelo.getBookmarks().getByName("MarcaFechaInfo")
oMrcFechaInfo.getAnchor.setString(sDato(0))