Saltar al contenido

Configurar Alertas, Registros y Gestión de Errores

Introducción

Un problema común que debe resolverse es cómo alertar a los usuarios sobre los problemas de integración, así como también cómo manejar los errores y registrar datos para ayudar en la resolución de problemas. Dado que estos temas están estrechamente relacionados, los abordaremos juntos.

Alertando

El problema es que el middleware suele ser un proceso detrás de escena y debe instrumentarse de manera que informe errores o datos críticos. De lo contrario, un usuario está en modo reactivo, generalmente después de que ocurre un problema, y no se da cuenta de que hay un problema. Es mucho más preferible que el middleware esté configurado para alertar a un usuario u otro sistema según las reglas. La regla más común es alertar sobre un error, pero ese no es el único escenario. Las alertas pueden ser para umbrales alcanzados, comprobaciones de estado o información crítica para la empresa.

Jitterbit tiene Funciones de registro y error así como Variables del sistema que respaldan la construcción de alertas personalizadas, registro y manejo de errores.

Un patrón común es identificar escenarios de error esperados, enviar una breve alerta (generalmente correo) y registrar información con mayor detalle.

El principal método de alerta de Jitterbit es por correo y se configura utilizando los mensajes de Correo, de forma similar a un Extremo. Básicamente, Jitterbit actúa como un cliente SMTP y, por lo tanto, debe estar conectado a un alojar.

adjunto

Con un mensaje de Correo configurado, hay varias funciones de secuencia de comandos que se pueden usar para instrumentar alertas. Aquí, usamos SendEmailMessage si NetSuite no pudo insertar el registro. Consulte Funciones de Correo para más detalles.

If(jbroot$jbresponse$addListResponse$writeResponseList$writeResponse.status$isSuccess== true,
WriteToOperationLog("Success Id: "+FindByPos(SourceInstanceCount(),
jbroot$jbresponse$addListResponse$writeResponseList$writeResponse#.baseRef$1$RecordRef$internalId
)));
If(jbroot$jbresponse$addListResponse$writeResponseList$writeResponse.status$isSuccess== false,
$errormessage="Time Card Entry Error: "+GetEnvironmentName()+" "+
FindByPos(SourceInstanceCount(),
jbroot$jbresponse$addListResponse$writeResponseList$writeResponse#.baseRef$1$RecordRef$internalId)+ " Message: "+
SumString(jbroot$jbresponse$addListResponse$writeResponseList$writeResponse.status$statusDetail#.message$,".",false);
WriteToOperationLog($errormessage);
SendEmailMessage("<TAG>Email Messages/Jitterbit NS Data Error Message</TAG>")
);

Si desea enviar un archivo adjunto, Enviar Correo con archivo adjunto el complemento está disponible.

Manejo de Errores

Hay escenarios de integración en los que la cantidad de casos de error supera los casos de éxito, pero es razonable centrarse en los escenarios de error esperados durante el desarrollo y agregar más funciones de manejo de errores como modificaciones después de la puesta en marcha.

No todos los casos de error requieren alertas, pero generalmente requieren que el error sea capturado y registrado para ayudar en la resolución de problemas. En términos generales, los errores se presentan en dos variedades: fallas de operación y errores basados en datos. La distinción principal se basa en la fuente: las fallas de operación provienen del propio Jitterbit, mientras que los errores basados en datos provienen del extremo y Jitterbit simplemente los transmite.

Fallo de Operación

La falla de la operación es sencilla y fácil de implementar, donde se adjunta un mensaje de correo a una operación y se envía si hay una falla en el nivel de la operación desde el Jitterbit Agente. Un ejemplo es si un extremo, como una base de datos, es inalcanzable para el Agente y se devuelve un error.archivo adjunto

Errores Controlados por Datos

Los escenarios típicos basados en datos incluyen:

  • Mensajes o indicaciones de estado desde el extremo.

  • Validación de datos personalizada

  • Datos faltantes o discrepancia de esquema

Inicio Sesión

Relacionado estrechamente con las alertas está el registro. Jitterbit registra información de nivel de operación automáticamente. En algunos casos, como las operaciones creadas por el asistente de SFDC, Jitterbit escribe mensajes de error en el registro.

Un punto común de confusión es cómo identificar la fuente del mensaje de error, así como el mensaje en sí.

Por ejemplo, este error es de una base de datos:

ODBC Error : (Insert/Update mode) : SQL = INSERT INTO [MD_ORDERS] ([SF_ID]) VALUES ('00617000008N2QHAA0')
SqlState = 23000 NativeError = 515
[Microsoft][ODBC SQL Server Driver][SQL Server]Cannot insert the value NULL into column 'src_Order_ID', table 'MDM_HUB.dbo.MD_ORDERS'; column does not allow nulls. INSERT fails.
SQL Exec Direct = INSERT INTO [MD_ORDERS] ([SF_ID]) VALUES ('00617000008N2QHAA0') [CODE:10618] file: DbWriter.cpp, line 339
Failed to perform transformation using local source file:
C:/Windows/Temp/jitterbit/OpId_1130166_5e66d5c7-4005-4dd5-9b5e-1c0d593a11cb/1_MDMOpportunitiesSuccess

Un ejemplo de NetSuite:

Connector Error: org.jitterbit.integration.server.engine.connector.exception.NetSuiteWebServiceRuntimeException: FaultString: The account you are trying to access is currently unavailable while we undergo our regularly scheduled maintenance.
FaultCode: soapenv:Server.userException
detail.code: ACCT_TEMP_UNAVAILABLE

Un ejemplo de Salesforce:

Call to webservice at   https://cs41.salesforce.com/services/Soap/u/33.0/00D5500000065l9   failed. Reported error:
The webservice call failed. The web service returned a SOAP Fault:
Code: sf:INVALID_FIELD
Message: INVALID_FIELD:
Name, SBQQ__Opportunity2__r.Name, SAP_Quote_Number__c, SBQQ__Account__c
^
ERROR at Row:1:Column:42
No such column 'SAP_Quote_Number__c' on entity 'SBQQ__Quote__c'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate names.

Un ejemplo del propio Jitterbit:

The operation failed unexpectedly. If this issue persists, contact Jitterbit support.
Include as much information as you can with your bug report, such as 'JITTERBIT_HOME/log/OperationEngine.log' and files in 'JITTERBIT_HOME/DataInterchange/Temp/LOG/' so that the problem can be diagnosed.
Also try running the operation with debugging turned on and collect the files generated in DataInterchange/Temp/Debug/

Registro Personalizado

Se pueden agregar registros adicionales para registrar datos clave como ayuda para la resolución de problemas. Los datos clave pueden ser:

  • Los resultados de una búsqueda en otro sistema
  • Nuevos ID de registro
  • Si usa una condición para filtrar ciertos registros, puede escribir los cálculos de entrada y salida

La función principal a utilizar es WriteToOperationLog() función, como en WriteToOperationLog("Error returned is: " + ...);.

Ejemplo

WriteToOperationLog("----------" + "\r\n"
  + "Int id: " + searchResponse$searchResult$recordList$record.SalesOrder$internalId + "\r\n"
  + "Ord id: "+ searchResponse$searchResult$recordList$record.SalesOrder$tranId$ + "\r\n"
  + "LMD: " + searchResponse$searchResult$recordList$record.SalesOrder$lastModifiedDate$ + "\r\n"
  + "Loc: " + searchResponse$searchResult$recordList$record.SalesOrder$location$internalId + "\r\n"
  + "LMB: " + searchResponse$searchResult$recordList$record.SalesOrder$customFieldList$Last_Modified_By$value$internalId + "\r\n"
  + "Cust:" +searchResponse$searchResult$recordList$record.SalesOrder$entity$internalId
);

Registro de Operaciones de Salida

----------
Int id: 292774
Ord id: OD003374
LMD: 2016-01-29T07:07:41-08:00
Loc: 10
LMB: 10780
Cust:2857
Skip id
----------
Int id: 297849
Ord id: EU000361
LMD: 2016-01-29T07:04:48-08:00
Loc: 17
LMB: 10780
Cust:2048
Skip id
----------
Int id: 299513
Ord id: DFW001852
LMD: 2016-01-29T07:05:15-08:00
Loc: 35
LMB: 108
Cust:12028
Pass
Customer Id: 12028-16067
--Manager: 773