Einrichten von Alarmen, Protokollierung und Fehlerbehandlung in Jitterbit Design Studio
Einführung
Ein häufiges Problem, das gelöst werden muss, ist, wie Benutzer auf Integrationsprobleme aufmerksam gemacht werden können, wie Fehler behandelt werden und wie Daten protokolliert werden können, um die Fehlerbehebung zu unterstützen. Da diese Themen eng miteinander verknüpft sind, werden wir sie gemeinsam behandeln.
Alarmierung
Das Problem ist, dass Middleware normalerweise ein Prozess im Hintergrund ist und so instrumentiert werden muss, dass sie selbst Fehler oder kritische Daten meldet. Andernfalls befindet sich ein Benutzer in einem reaktiven Modus, normalerweise nachdem ein Problem aufgetreten ist, und wird überrascht, dass ein Problem vorliegt. Weitaus besser wäre es, wenn die Middleware so konfiguriert wäre, dass sie einen Benutzer oder ein anderes System auf der Grundlage von Regeln warnt. Die häufigste Regel ist, bei einem Fehler zu warnen, aber das ist nicht das einzige Szenario. Warnungen können bei erreichten Schwellenwerten, Integritätsprüfungen oder geschäftskritischen Informationen erfolgen.
Jitterbit hat Protokollierungs- und Fehlerfunktionen sowie Systemvariablen, die die Erstellung benutzerdefinierter Alarm-, Protokollierungs- und Fehlerbehandlungsfunktionen unterstützen.
Ein gängiges Muster besteht darin, erwartete Fehlerszenarien zu identifizieren, eine kurze Warnung (normalerweise Email) zu senden und die Informationen detaillierter zu protokollieren.
Die wichtigste Alarmierungsmethode von Jitterbit ist E Email und wird mithilfe von Email Nachrichten konfiguriert, ähnlich wie ein Endpoint. Grundsätzlich fungiert Jitterbit als SMTP-Client und muss daher mit einem Host verbunden sein.
Bei einer konfigurierten Email-Nachricht gibt es mehrere Script, die zur Instrumentierung der Benachrichtigung verwendet werden können. Hier verwenden wir SendEmailMessage, wenn NetSuite den Datensatz nicht einfügen konnte. Siehe Email Funktionen für weitere Einzelheiten.
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>")
);
Wenn Sie einen Anhang senden möchten, wird die Option Email mit Anhang senden angezeigt Plugin-In ist verfügbar.
Fehlerbehandlung
Es gibt Integrationsszenarien, bei denen die Anzahl der Fehlerfälle die Anzahl der Erfolgsfälle übersteigt. Es ist jedoch sinnvoll, sich während der Entwicklung auf die erwarteten Fehlerszenarien zu konzentrieren und nach der Inbetriebnahme als Änderungen weitere Funktionen zur Fehlerbehandlung hinzuzufügen.
Nicht alle Fehlerfälle erfordern Warnungen, aber im Allgemeinen müssen die Fehler erfasst und protokolliert werden, um die Fehlerbehebung zu erleichtern. Im Allgemeinen gibt es zwei Arten von Fehlern: Betriebsfehler und datengesteuerte Fehler. Der Hauptunterschied basiert auf der Quelle: Betriebsfehler stammen von Jitterbit selbst, während datengesteuerte Fehler vom Endpoint stammen und Jitterbit sie einfach weiterleitet.
Vorgangsfehler
Die Fehlererkennung bei Operationen ist unkompliziert und einfach zu implementieren. Eine Email-Nachricht wird an eine Operation angehängt und gesendet, wenn ein Fehler auf Operationsebene vom Jitterbit-Agenten auftritt. Ein Beispiel hierfür ist, wenn ein Endpoint, wie eine Datenbank, vom Agenten nicht erreicht werden kann und ein Fehler zurückgegeben wird.
Datenbedingte Fehler
Zu den typischen datengesteuerten Szenarien gehören:
-
Meldungen oder Statusanzeigen vom Endpoint.
-
Benutzerdefinierte Datenvalidierung
-
Fehlende Daten oder Schema-Fehlanpassung
Protokollierung
Eng mit der Alarmierung verwandt ist die Protokollierung. Jitterbit protokolliert Informationen auf Operationsebene automatisch. In einigen Fällen, wie beispielsweise bei vom SFDC-Assistenten erstellten Operationen, schreibt Jitterbit Fehlermeldungen in das Protokoll.
Häufig herrscht Verwirrung darüber, wie die Quelle der Fehlermeldung sowie die Meldung selbst identifiziert werden können.
Dieser Fehler stammt beispielsweise aus einer Datenbank:
ODBC Error : (Insert/Update mode) : SQL = INSERT INTO`[MD_ORDERS] `([SF_ID]) VALUES ('00617000008N2QHAA0')
SqlState = 23000 NativeError = 515
[Microsoft][ODBC SQL Server Treiber][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
Ein Beispiel von 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
Ein Beispiel aus 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.
Ein Beispiel von Jitterbit selbst:
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/
Benutzerdefinierte Protokollierung
Zusätzliche Protokollierung kann hinzugefügt werden, um Schlüsseldaten als Hilfe bei der Fehlerbehebung aufzuzeichnen. Schlüsseldaten können sein:
- Die Ergebnisse einer Suche in einem anderen System
- Neue Datensatz-IDs
- Wenn Sie eine Bedingung verwenden, um bestimmte Datensätze herauszufiltern, können Sie die Eingabe- und Ausgabeberechnungen ausschreiben
Die wichtigste zu verwendende Funktion ist Writetooperationlog() Funktion, wie in WriteToOperationLog("Error returned is: " + ...);
.
Beispiel
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
);
Operation ausgeben
----------
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