• No se han encontrado resultados

3 Crear carpetas de trabajo

3.6 Trabajar con macros

3.6.17 Uso de rellamadas

Analysis ofrece diversas rellamadas que se ejecutan con determinados eventos. Siempre se ejecuta la rellamada 'Workbook_SAP_Initialize'. El resto de rellamadas que se enumera más abajo se debe registrar con el método API 'SAPExecuteCommand' antes de usarlas por primera vez. Para anular el registro de rellamadas, también puede usar 'SAPExecuteCommand'.

En un libro de trabajo, las rellamadas se pueden registrar solo una vez. Si registra una de las rellamadas una segunda vez, la primera se sobrescribirá.

Nota

La rellamada 'Workbook_SAP_Initialize' debe estar definida en la sección 'ThisWorkbook' del editor VBA. El resto de rellamadas debe estar definido en un módulo. Si se definen en la sección 'ThisWorkbook' o en la de una hoja de trabajo, debe hacer referencia a ellas de forma completa durante el registro. En la sección 'ThisWorkbook', por ejemplo, debe usar ThisWorkbook.<MacroName> como referencia.

Workbook_SAP_Initialize

Use esta rellamada para definir la lógica de inicio de la carpeta de trabajo. Esta rellamada se parece al evento 'Workbook_Open' que Microsoft Office Excel ofrece, pero se ejecuta después del evento de Microsoft Office Excel y después del inicio estándar de Analysis. Si abre una carpeta de trabajo en Microsoft Office Excel y, a

continuación, activa el complemento de Analysis, el evento de Excel se ejecuta al abrir la carpeta de trabajo, y el inicio estándar de Analysis y la rellamada se ejecutan después de la activación de Analysis.

La rellamada se tiene que definir como una subrutina sin parámetros de entrada.

Ejemplo

' defined in ThisWorkbook

Public Sub Workbook_SAP_Initialize() ' register callbacks

Call Application.Run("SAPExecuteCommand", "RegisterCallback", "AfterRedisplay", "Callback_AfterRedisplay")

Call Application.Run("SAPExecuteCommand", "RegisterCallback", "BeforePlanDataSave", "Callback_BeforePlanDataSave")

Call Application.Run("SAPExecuteCommand", "RegisterCallback", "BeforePlanDataReset", "Callback_BeforePlanDataReset")

End Sub

Las rellamadas 'AfterRedisplay', 'BeforPlanDataSave' y 'BeforePlanDataReset' se registran durante el inicio de las carpetas de trabajo y, por lo tanto, se pueden usar en el proyecto de VBA.

AfterRedisplay

Use esta rellamada para definir la lógica que debe ocurrir cada vez que se vuelva a mostrar la carpeta de trabajo. Por ejemplo, puede adaptar automáticamente el formato de la carpeta de trabajo después de cada nueva visualización.

La rellamada se tiene que definir como subrutina sin parámetros de entrada. La rellamada se llama solo si 'Pause Refresh' es false en el nivel del libro de trabajo o el usuario solicita explícitamente 'Actualizar todo'. También se llama solo si se ha modificado el libro de trabajo.

Ejemplo

' defined in a module

Public Sub Callback_AfterRedisplay()

ThisWorkbook.Worksheets("Sheet1").Cells(1, 1).Value = "Last redisplay: " ThisWorkbook.Worksheets("Sheet1").Cells(1, 2).Value = Now()

End Sub

Con esta rellamada, el texto "Last redisplay: " se muestra en la celda A1 de la hoja de trabajo 1, y en la celda A2 se muestran la fecha y la hora de la última visualización. La información se actualiza después de cada nueva actualización.

Ejemplo

Con el código siguiente, puede obtener las tablas de referencias y las fuentes de datos que se han modificado desde la última acción del usuario y se han actualizado en las hojas.

Nota

Estas llamadas solo funcionan con 'Callback_AfterRedisplay'. De lo contrario, devolverán un error. Los objetos justo se han eliminado y no formarán parte de la matriz devuelta.

lResult= Application.Run("SAPGetProperty", "CHANGED_CROSSTABS") Se devuelve una matriz como 'SAPListOf' con nombre técnico, nombre y fuente de datos. lResult= Application.Run("SAPGetProperty", "CHANGED_DATASOURCES") Se devuelve una matriz como 'SAPListOf' con nombre técnico y nombre.

BeforePlanDataSave

Use esta rellamada para definir la lógica que se debe ejecutar cada vez que un usuario guarde datos de planificación. Por ejemplo, puede ejecutar una función de planificación (SAPExecutePlanningFunction).

Las rellamadas se tienen que definir como una función que devuelve un valor booleano sin parámetros de entrada. Si el valor que devuelve la función es falso, el almacenamiento no se ejecutará.

Ejemplo

' defined in a module

Public Function Callback_BeforePlanDataSave() As Boolean Dim lResult As Integer

lResult = Application.Run("SAPExecutePlanningFunction", "PF_1") If lResult <> 1 Then

' planning function execution failed, cancel save

Call MsgBox("Planning Function (PF_1) execution failed. Data will not be saved.", vbCritical, "Error") Callback_BeforePlanDataSave = False Else Callback_BeforePlanDataSave = True End If End Function

Cada vez que un usuario selecciona el botón Guardar para almacenar datos de planificación, se ejecuta la función de planificación PF_1. Si se puede ejecutar la función de planificación, se guardan los datos de planificación. Si se produce un error en la ejecución, aparecerá un cuadro de mensaje con el texto "Planning Function (PF_1) execution failed. Se muestra "Los datos no se guardarán".

BeforePlanDataReset

Use esta rellamada para definir la lógica que se debe ejecutar cada vez que un usuario restablezca los datos de planificación al estado que se hubiera guardado antes. Por ejemplo, puede definir que se le pregunte al usuario si está seguro de que los datos se restablezcan.

Las rellamadas se tienen que definir como una función que devuelve un valor booleano sin parámetros de entrada. Si el valor que devuelve la función es 'falso', el restablecimiento no se ejecutará.

Ejemplo

' defined in a module

Public Function Callback_BeforePlanDataReset() As Boolean Dim lAnswer As VbMsgBoxResult

lAnswer = MsgBox("Do you really want to reset planning data?", vbYesNo, "Reset") If lAnswer = vbYes Then

Callback_BeforePlanDataReset = True Else

Callback_BeforePlanDataReset = False End If

End Function

Cada vez que un usuario introduzca datos de planificación y seleccione Atrás Al estado guardado anteriormente , aparecerá un cuadro de mensaje con el texto "¿Realmente desea reinicializar datos de planificación?" Si el usuario selecciona 'Sí', los datos introducidos se restablecen al estado guardado anteriormente. Si el usuario selecciona 'No', no se ejecuta el restablecimiento.

Información relacionada

SAPExecuteCommand [página 65]

SAPExecutePlanningFunction [página 70]