martes, 16 de abril de 2024

Procedimientos. Docap.

Docap basado en macros. (1)

La primera y más básica forma de crear un docap es utilizando el código resultante del uso de la funcionalidad Grabar macro (2). No obstante existen diferencias importantes entre el uso de la funcionalidad Grabar macro y la creación de un docap. De ello ya hemos hablado en la sección [Usos], y más concretamente en esta [entrada] y en las dos que la siguen, pero insistiremos en ello también aquí.


Empezando por esa insistencia, una diferencia no menor entre el uso de Grabar macro y la creación de un docap es que la primera no exige adentrarse en el IDE del servicio (Writer, por ejemplo) (3), pero crear un docap sí lo hace imprescindible. Las implicaciones de esto son muchas y muy importantes.

Por concretar y no repetir aquí lo ya explicado en otras entradas, me limitaré a exponer de forma resumida la creación de un docap partiendo del uso de macros simples, considerando ya conocido el procedimiento para crear un docap a partir de una única macro, así como el método de trabajo modular.

  1. Una vez analizada la secuencia de acciones que necesitamos para el docap y creadas las macros individuales necesarias, creo el script gestor desde el que se llama (Call) a cada una de las macros en el orden y momento en que las necesitamos para completar el proceso.
  2. Bien en cada una de las macros individuales, bien desde un script específico, se declaran las variables de datos y se utilizan los procedimientos para la interacción con el usuario (interface), a fin de posibilitar la entrada de datos.
  3. La forma más simple de hacerlo es que el usuario acceda al IDE y realice directamente la asignación, sin emplear ningún recurso interface específico. Esta forma tiene la ventaja de hacer innecesaria cualquier sistema de interface, pero también exige un mayor grado de conocimiento del lenguaje de programación por su parte y como procedimiento puede resultar un tanto engorroso.
  4. Una alternativa relativamente simple a lo anterior es proporcionar al usuario acceso a las variables mediante InputBox(). [Este docap] es ejemplo de esta segunda opción.
  5. Al inicio del script gestor debemos llamar necesariamente al script en el que se asignan los objetos necesarios para el funcionamiento de las macro: las variables de tipo objeto deben haber sido declaras al inicio del código, fuera de cualquier macro y la asignación se realiza en un script específico:
dim document   as object
dim dispatcher as object

 Sub VarSis

    document   = ThisComponent.CurrentController.Frame
    dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

 End Sub

 El proceso que sigo para crear un docap basado en el uso modular de macros simples está descrito con detalle [en esta lista de You Tube]


NOTAS

(1) Entrada basada en otra previa, con el mismo título, publicada originalmente con fecha 30/09/2023.

(2) Utilizo el término "macro" en sentido restringido, esto es, como código resultante del uso de la funcionalidad Grabar macro a la que accede desde el menú [Herramientas|Macros|Grabar macro]. Si por algún motivo esta funcionalidad no estuviera activada, para tenerla disponible (se aconseja) se procederá como sigue: Herramientas|Opciones|LibreOffice|Avanzado y en el menú emergente activar la casilla Activar grabación de macros (limitada)

(3) En realidad, esta afirmación no es del todo exacta, aunque sí pertinente por las diferencias que se explican también en esta entrada. En todo caso, si no hemos creado previamente un módulo dentro del documento (que es lo que cabe esperar), al intentar grabar la macro nos exigirá realizar este proceso. Para ello se accede automáticamente al IDE y nos obliga a crear un Módulo nuevo. Para hacerlo correctamente deberemos tener decidido en qué directorio lo vamos a crear, siendo recomendable (en este momento) hacerlo sobre la "carpeta" Standard del documento con el que estamos trabajando. Por defecto, el sistema crea un módulo llamado Module1. Podemos cambiar el nombre por el que deseemos, pero para lo que estamos tratando aquí ese nombre es satisfactorio.