Configurar alertas, registros y gestión de errores en Jitterbit Design Studio
Introducción
Un problema común que debe resolverse es cómo alertar a los usuarios sobre problemas de integración, así como cómo manejar errores y registrar datos para ayudar en la resolución de problemas. Dado que estos temas están estrechamente relacionados, los abordaremos juntos.
Alerta
El problema es que el middleware es, por lo general, un proceso que se lleva a cabo detrás de escena y debe estar instrumentado de manera que informe por sí mismo los errores o los datos críticos. De lo contrario, el usuario se encuentra en un modo reactivo, generalmente después de que ocurre un problema, y no se da cuenta de que existe un problema. Es mucho más preferible que el middleware esté configurado para alertar a un usuario o a otro sistema en función de 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, controles de estado o información crítica para el negocio.
Jitterbit tiene Funciones de registro y error así como Variables del sistema que apoyan la construcción de sistemas personalizados de alerta, registro y manejo de errores.
Un patrón común es identificar escenarios de error esperados, enviar una alerta breve (generalmente un correo) y registrar la información con mayor detalle.
El principal método de alerta de Jitterbit es por correo y se configura mediante 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.
Con un mensaje de Correo configurado, existen varias funciones de secuencia de comandos que se pueden utilizar para instrumentar las alertas. Aquí, utilizamos 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, seleccione 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 excede los casos de éxito, pero es razonable centrarse en los escenarios de error esperados durante el desarrollo y agregar más funcionalidad de manejo de errores como modificaciones después de la puesta en marcha.
No todos los casos de error requieren alertas, pero generalmente es necesario capturar el error y registrarlo para ayudar a solucionarlo. En términos generales, los errores se presentan en dos variedades: fallas operativas y errores basados en datos. La principal distinción se basa en la fuente: las fallas operativas 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 desplegar, ya que se adjunta un mensaje de correo a una operación y se envía si se produce una falla a nivel de operación del agente Jitterbit. Un ejemplo es si el agente no puede acceder a un extremo, como una base de datos, y se devuelve una falla.
Errores generados por datos
Los escenarios típicos basados en datos incluyen:
-
Mensajes o indicaciones de estado del extremo.
-
Validación de datos personalizada
-
Datos faltantes o falta de coincidencia del esquema
Registro
El registro está estrechamente relacionado con las alertas. Jitterbit registra automáticamente la información a nivel de operación. En algunos casos, como en las operaciones creadas con el asistente de SFDC, Jitterbit escribe mensajes de error en el registro.
Un punto de confusión común es cómo identificar la fuente del mensaje de error, así como el mensaje en sí.
Por ejemplo, este error proviene de una base de datos:
ODBC Error : (Insert/Update mode) : SQL = INSERT INTO`[MD_ÓRDENES] `([SF_ID]) VALUES ('00617000008N2QHAA0')
SqlState = 23000 NativeError = 515
[Microsoft][Controlador ODBC de SQL Server][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_ÓRDENES] `([SF_ID]) VALUES ('00617000008N2QHAA0')`[CÓDIGO: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 identificadores de registros
- Si se utiliza una condición para filtrar determinados registros, se pueden escribir los cálculos de entrada y salida
La función principal que se debe 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 operación 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