iscEngineListenerPF

Finalidad

iscEngineListenerPF define el prototipo con que debe cumplir la función de escucha definida por el usuario registrada en iscEngineSetListener().

Sintaxis

typedef isy_INT32 (*iscEngineListenerPF)(
    isy_UINT32  listenerData,
    ISCEVT*     event,
    isy_VOID*   pExtraInfo);

Argumentos de la función

La Tabla 139 lista los argumentos válidos utilizados con el tipo de función iscEngineSetListenerPF.

Tabla 139. Argumentos de iscEngineListenerPF

Tipo de datos Argumento Uso Descripción
isy_UINT32 listenerData entrada Los datos establecidos en el argumento syncListenerData por iscEngineSetListener() se devuelven a la función de escucha
ISCEVT* event entrada Objeto de suceso
isy_VOID* pExtraInfo entrada Reservado

Uso

Para utilizar una función de escucha definida por el usuario para supervisar el progreso de la sincronización, antes debe hacer que la función cumpla con el tipo de función iscEngineSetListenerPF. A continuación, registre la función de escucha mediante la función iscEngineSetListener(). Luego, se notificará a la función de escucha cuando se produzcan sucesos de sincronización. El argumento event es una estructura que contiene informaciones diversas sobre el suceso.

La Tabla 140 lista todos los campos de la estructura de sucesos y la finalidad de cada campo.

Tabla 140. Campos de suceso de iscEngineListenerPF

Campo Descripción
type El tipo de suceso puede ser uno de los valores siguientes (los valores reales aparecen entre paréntesis):

ISCEVTTYPE_Info (1)
Información relativa al progreso de la sincronización.

ISCEVTTYPE_Conflict (2)
Operaciones conflictivas o rechazadas en el proceso de sincronización.

ISCEVTTYPE_Query (3)
Se necesita cierta información para que la sincronización pueda continuar. La aplicación debe proporcionar cierta información necesaria (basada en el código de suceso) para que el motor de sincronización pueda continuar.

ISCEVTTYPE_Retry (4)
Se produce una excepción y se necesita una instrucción de reintento o cancelación para continuar la sincronización.

ISCEVTTYPE_Error (5)
Se ha producido un error y el motor de sincronización no puede continuar sincronizando el conjunto de suscripción.

ISCEVTTYPE_Fatal (6)
Se ha producido un error muy grave y el motor de sincronización no puede continuar sincronizando conjuntos de suscripción.
state Estado del suceso, que contiene los subcampos siguientes:

currSubsSet
Nombre del conjunto de suscripción, si no está vacío.

currSubs
Nombre de la suscripción, si no está vacío.

subsType
Tipo de la suscripción, si es distinto de 0, ordenado así:
  • 100-999 : Reservado
  • 1000-9999 : Tipo de suscripción registrado
  • 10000+ : Tipo de suscripción personalizado

    Los originadores predefinidos son (los valores reales aparecen entre paréntesis):

    • ISCSUBSTYPE_Config (100) : Configuración
    • ISCSUBSTYPE_File (101) : Suscripción de archivo
    • ISCSUBSTYPE_DB2e (102) : Suscripción de tabla de DB2 Everyplace

syncProg
Progreso de la sincronización expresando en forma de porcentaje.
retry Número de reintentos del mismo suceso, si es distinto de 0.
info Información opcional específica del suceso (si no es NULL), que es una matriz de argumentos de serie para los sucesos que no son conflictivos. Para los sucesos conflictivos, el tipo de datos es ISCLISTENCONFLICT.

El campo event.info contiene cierta información opcional específica del suceso. El código de suceso se utiliza para identificar e interpretar esta información.

La Tabla 141 lista todos los códigos de suceso por categoría de tipo de suceso.

Tabla 141. Códigos de suceso de iscEngineListenerPF

Tipo de suceso: ISCEVTTYPE_Info
Código de suceso Inform. suceso (argc) Descripción
ISCEVT_InfGeneral (1000) NULL Información general (para depuración).
ISCEVT_InfSyncStarted (1001) NULL Sincronización iniciada.
ISCEVT_InfPrepMsg (1002) NULL Preparando mensaje.
ISCEVT_InfSendMsg (1003) NULL Enviando mensaje.
ISCEVT_InfWaitMsg (1004) NULL En espera de respuesta del servidor.
ISCEVT_InfApplyMsg (1005) NULL Aplicando mensaje del servidor.
ISCEVT_InfCancelingSync (1006) NULL Cancelando sincronización.
ISCEVT_InfSubsSetStarted (1007) NULL Iniciada la sincronización de un conjunto de suscripción.
ISCEVT_InfSyncingSubs (1008) NULL Ha comenzado la sincronización de una suscripción.
ISCEVT_InfSubsSetFailed (1009) NULL La sincronización de un conjunto de suscripción ha fallado.
ISCEVT_InfSubsSetCanceled (1010) NULL Se ha cancelado la sincronización de un conjunto de suscripción.
ISCEVT_InfSubsSetSucceeded (1011) NULL La sincronización de un conjunto de suscripción ha finalizado satisfactoriamente.
ISCEVT_InfSyncSucceeded (1012) NULL Sincronización satisfactoria.
SCEVT_InfSyncFailed (1013) NULL La sincronización (de algunos conjuntos de suscripción) ha fallado.
ISCEVT_InfSyncCanceled (1014) NULL Sincronización cancelada (por el usuario).
ISCEVT_InfSyncProg (1015) NULL Progreso de la sincronización expresando en forma de porcentaje.
ISCEVT_InfNoNewChange (1016) NULL No hay ningún cambio del servidor nuevo; saltarse las fases de extracción y confirmación.
ISCEVT_InfLoginFailed (1017) NULL La información de inicio de sesión especificada supera el proceso de autentificación.

Tabla 142. Códigos de suceso de iscEngineListenerPF

Tipo de suceso: ISCEVTTYPE_Conflict
Código de suceso Inform. suceso (argc) Descripción
ISCEVT_CftReject (2000) ISCLISTENCONFLICT Se han encontrado conflictos de datos en la sincronización. Los datos conflictivos reales se representan en forma de estructura ISCLISTENCONFLICT y su puntero de referencia se devuelve a la aplicación a través de event.info.

Tabla 143. Códigos de suceso de iscEngineListenerPF

Tipo de suceso: ISCEVTTYPE_Retry
Código de suceso Inform. suceso (argc) Descripción
ISCEVT_TryNetConn (4601) NULL Volver a intentar conectar con el servidor.
ISCEVT_TrySendRequest (4602) NULL Volver a intentar enviar la petición.
ISCEVT_TryRecvReply (4603) NULL Volver a intentar recibir la respuesta.
ISCEVT_TryRecvTimeout (4604) NULL Esperar más tiempo la respuesta de recepción.
SCEVT_TryRecvAck (4605) NULL Volver a intentar recibir un reconocimiento.

Tabla 144. Códigos de suceso de iscEngineListenerPF

Tipo de suceso: ISCEVTTYPE_Query
Código de suceso Inform. suceso (argc) Descripción
ISCEVT_QueCancel (5000) NULL Consultar si el usuario cancela y vuelve (los valores reales aparecen entre paréntesis):
  • ISCRTNCB_ReplyYes (3): Si el usuario cancela
  • ISCRTNCB_ReplyNo (2) : Si el usuario decide continuar
  • ISCRTNCB_Default (0) : Valor por omisión (es decir, ISCRTNCB_ReplyNo)
ISCEVT_QueCancelUponError (5001) NULL Consultar si el usuario cancela y vuelve (los valores reales aparecen entre paréntesis):
  • ISCRTNCB_ReplyYes (3): Si el usuario cancela
  • ISCRTNCB_ReplyNo (2) : Si el usuario decide continuar
  • ISCRTNCB_Default (0) : Valor por omisión (es decir, ISCRTNCB_ReplyNo)
ISCEVT_QueLogin (5002) ISCLISTENARG(3)

info->argv[0]

info->argv[1]

info->argv[2]

Información de inicio de sesión solicitada por un adaptador. La función de escucha debe proporcionar la información solicitada en event_info y tiene que devolver ISCRTNCB_Done con el valor real (1).

Nombre de destino de la fuente de datos

Almacenamiento intermedio en blanco para contener el nombre de usuario

Almacenamiento intermedio en blanco para contener la contraseña

ISCEVT_QueSubsTarget (5003)

ISCLISTENARG(1)

info->argv[0]

Información de base de datos solicitada por un adaptador. La función de escucha puede proporcionar la información solicitada en la información del suceso y devolver ISCRTNCB_Done o devolver ISCRTNCB_Default para utilizar el directorio de destino por omisión.

Directorio para la suscripción.


Tabla 145. Códigos de suceso de iscEngineListenerPF

Tipo de suceso: ISCEVTTYPE_Error
Código de suceso Inform. suceso (argc) Descripción
ISCEVT_ErrOpenAdapter (300) NULL No se ha podido abrir el adaptador <nombre adaptador>.
ISCEVT_ErrLoadAdapter (301) NULL No se ha podido cargar el adaptador <nombre adaptador>.
ISCEVT_ErrCloseAdapter (302) NULL No se ha podido cerrar el adaptador <nombre adaptador>.
ISCEVT_ErrAuthenticateKey (306) NULL Ha fallado la autentificación (clave de cifrado no válida); se cancela anormalmente la sincronización.
ISYNCEVT_ErrClientCryptoFailed (307) NULL Ha fallado el cifrado o descifrado del cliente; se cancela anormalmente la sincronización.
ISCEVT_ErrEncryptNotAvail (308) NULL No se dispone de cifrado.
ISCEVT_ErrEncryptLibOpen (309) NULL No se ha podido abrir la biblioteca de cifrado.
ISCEVT_ErrSubsNotFound (311) NULL El servidor no ha encontrado la suscripción.
ISCRTN_ErrSubsNotAvail (312) NULL El servidor ha bloqueado la suscripción.
ISCRTN_ErrSubsDefAltered (316) NULL Se ha modificado la definición de la suscripción desde la última vez que el motor de sincronización sincronizó la configuración.
ISCEVT_ErrAllocResource (400) NULL No se han podido asignar recursos de adaptador.
ISCEVT_ErrConnectData (401) NULL No se ha podido conectar con los datos de destino.
ISCEVT_ErrDisconnectData (402) NULL No se ha podido desconectar de los datos de destino.
ISCEVT_ErrNoData (403) NULL No se han encontrado datos.
ISCEVT_ErrMessageFormat (412) NULL Formato de mensaje inesperado.
ISCEVT_ErrNotFound (413) ISCLISTENARG(2)

info->argv[0]

info->argv[1]

No se han encontrado los datos solicitados.

Nombre de destino de la fuente de datos

Nombre de los datos

ISCEVT_ErrEndOfData (414) NULL Fin de datos inesperado.
ISCEVT_ErrDataTooLong (415) ISCLISTENARG(3)

info->argv[0]

info->argv[1]

info->argv[2]

Los datos son demasiado largos y se han truncado.

Nombre de destino de la fuente de datos

Nombre de los datos

Nombre del elemento de datos (si no está vacío)

ISCEVT_ErrSyncDisabled (417) NULL El servidor ha informado de que el usuario no está habilitado.
ISCEVT_ErrServerException (418) NULL El servidor ha informado de excepciones desconocidas.
ISCEVT_ErrReadOnly (420) ISCLISTENARG(2)

info->argv[0]

info->argv[1]

Se ha intentado actualizar datos de sólo lectura.

Nombre de destino de la fuente de datos

Nombre de los datos

ISCEVT_ErrOperation (421) NULL Operación no permitida sobre los datos.
ISCEVT_ErrUnauthorized (423) NULL No se tiene autorización para acceder a los datos de destino.
ISCEVT_ErrNotAvailable (424) ISCLISTENARG(2)

info->argv[0]

info->argv[1]

Los datos solicitados no están disponibles.

Nombre de destino de la fuente de datos

Nombre de los datos

ISCEVT_ErrNotSupported (425) ISCLISTENARG(3)

info->argv[0]

info->argv[1]

info->argv[2]

No se da soporte a los datos solicitados.

Nombre de destino de la fuente de datos

Nombre de los datos

Nombre del elemento de datos (si no está vacío)

ISCEVT_ErrNetConn (601) NULL No se ha podido conectar con el servidor.
ISCEVT_ErrSendRequest (602) NULL No se ha podido enviar la petición.
ISCEVT_ErrRecvReply (603) NULL No se ha podido recibir la respuesta.
ISCEVT_ErrRecvTimeout (604) NULL Se ha excedido el tiempo de espera mientras se recibía la respuesta.
ISCEVT_ErrRecvAck (605) NULL No se ha podido recibir un reconocimiento.
ISCRTN_ErrCloseNetLib (608) NULL No se ha podido cerrar la biblioteca de la red
ISCEVT_ErrOutOfMemory (610) NULL Falta de memoria.
ISCEVT_ErrInternal (698) ISCLISTENARG(1)

info->argv[0]

Se han producido otros errores internos.

Estado del error (en forma de serie).


Tabla 146. Códigos de suceso de iscEngineListenerPF

Tipo de suceso: ISCEVTTYPE_Fatal
Código de suceso Inform. suceso (argc) Descripción
ISCEVT_FatSyncCfgAbort (303) NULL Ha fallado la sincronización de la configuración; se cancela anormalmente la sincronización.
ISCEVT_FatAuthenticateFailed (304) NULL Ha fallado la autentificación; se cancela anormalmente la sincronización.
ISCEVT_FatIncompVersion (310) NULL Versión de cliente de sincronización incompatible.
ISCEVT_FatInvalidSession (313) NULL ID de sesión no válido.
ISCEVT_FatSyncGroup (314) NULL El usuario no pertenece a ningún grupo de sincronización.
ISCEVT_FatRegisterDevice (315) NULL No se ha podido registrar el dispositivo para el usuario.
ISCEVT_FatNetOpenConn (600) NULL No se ha podido abrir una conexión con el servidor.
ISCEVT_FatOpenNetLib (606) NULL No se ha podido cargar la biblioteca de la Red.
ISCEVT_FatResolveHost (609) NULL No se ha podido resolver el nombre de host.
ISCEVT_FatServerForbidden (611) NULL Está prohibido sincronizar con el servidor.
ISCEVT_FatServerNotFound (612) NULL No se ha encontrado el servidor
ISCEVT_FatServer (613) NULL Error del servidor.
ISCEVT_FatServerNotAvail (614) NULL El servidor no está respondiendo.
ISCEVT_FatNetUnknown (699) NULL Error desconocido de la red.

Ejemplo:

isy_INT32 mySyncListener(
    isy_UINT32 listenerData,
    ISCEVT*     event,
    isy_VOID*  pExtraInfo)
{
    char *statusMsg = appEventCodeToMessage(event);
    int   timesRetried;
 
    switch (event->type) {
      case ISCEVTTYPE_Info:
        appStatusBar(statusMsg);
        // appStatusBar puede ser cualquier rutina que muestre el statusMsg
        // (por ejemplo, en una barra de estado)
                return ISCRTNCB_Done;
 
      case ISCEVTTYPE_Retry:
        timesRetried = event->retry;
        if (timesRetried >= 3) // Intentar como máximo 3 veces
            return ISCRTNCB_ReplyNo;
        else
            return appRetryCancelBox(statusMsg, 10); // tiempo de espera 10 seg
        // appRetryCancelBox puede ser cualquier rutina que muestre una ventana
        // con dos botones: Cancelar y Reintentar. Devuelve
        //   ISCRTNCB_ReplyYes, si el usuario pulsa Reintentar
        //   ISCRTNCB_ReplyNo, si el usuario pulsa Cancelar
        // Si el usuario no hace una selección, devuelve ISCRTNCB_Default.
          break;
 
        // todos los otros tipos de suceso no importan
				  default:
        return ISCRTNCB_Default;
    } // switch (event->type)
} // mySyncListener

Códigos de retorno

Si el tipo de suceso es ISCEVTTYPE_Retry, la función de escucha devuelve uno de los códigos siguientes:

Si el tipo de suceso es ISCEVTTYPE_Query, el significado del código de retorno depende del valor del código del suceso. En otras palabras, la función de escucha comprueba el código del suceso y devuelve el valor apropiado. Pero, si el usuario no responde a la consulta, la aplicación devuelve el código siguiente:

Para los tipos de suceso distintos de ISCEVTTYPE_Retry e ISCEVTTYPE_Query, el motor de sincronización ignora el código de retorno. La función de escucha simplemente devuelve ISCRTNCB_Done.

Nota: Para aquellos sucesos que no son de interés, la función de escucha simplemente devuelve ISCRTNCB_Default y permite que el motor de sincronización emprenda la acción por omisión.

Nota: Un asterisco (*) encima indica la acción por omisión para diversos tipos de suceso.

Restricciones

La función de escucha definida por el usuario debe seguir el protocolo del motor de sincronización. En caso contrario, es posible que el motor de sincronización no funcione correctamente.

Conceptos relacionados

Tareas relacionadas

Consulta relacionada