- Drucken
So integrieren Sie NetSuite mit Tulip (Beispiel)
Übersicht
In dieser Anleitung erfahren Sie, wie Sie RESTlets in NetSuite verwenden, um Daten über Connectors mit Tulip zu teilen.
Mit den RESTlets von NetSuite können Sie beliebige strukturierte Daten mit Tulip teilen.
Um ein RESTlet einzurichten, müssen Sie jedoch mehrere Ebenen in NetSuite verwenden. Außerdem müssen Sie mit einigen vorkonfigurierten Funktionen von NetSuite vertraut sein.
Diese Anleitung zeigt Ihnen, wie Sie eine NetSuite-Tulip-Integration aufbauen, die Bestands- und Auftragsdaten aus NetSuite bezieht. Es werden einige allgemeine Muster behandelt, von denen jeder Tulip-Benutzer profitieren kann, der eine NetSuite-Integration erstellen möchte.
Netsuite Token-basierte Authentifizierung
Netsuite verfügt über eine Authentifizierungsmethode namens Token Based Authentication (allgemein als TBA bezeichnet), die auf der Spezifikation OAuth 1.0 aufbaut. Tulip unterstützt jetzt OAuth 1.0 und ermöglicht damit die Authentifizierung von Tulip Connectors an Ihrer Netsuite-Instanz mit TBA. Sie können sich für die Authentifizierung mit TBA entscheiden, da diese Authentifizierungsmethode ein langlebiges Token liefert, das für die Authentifizierung bei Netsuite verwendet werden kann.
Die folgenden Schritte setzen voraus, dass Sie wissen, wie man die Token-basierte Authentifizierung in Netsuite konfiguriert. Sie können hier mehr darüber lesen.
Um Ihren Tulip Connector für die Verwendung von Netsuite TBA zu konfigurieren, wählen Sie OAuth 1.0 als Authentifizierungsmethode für den HTTP Connector.
- Für die Signaturmethode wählen Sie HMAC-SHA256
- Stellen Sie bei Version sicher, dass sie auf 1.0 eingestellt ist.
- Geben Sie als Consumer Key den Consumer Key ein, den der Integration User, den Sie in Netsuite eingerichtet haben, zur Verfügung stellt.
- Für das Kundengeheimnis geben Sie das Kundengeheimnis ein, das der Integrationsbenutzer, den Sie in Netsuite eingerichtet haben, angegeben hat.
- Für access token, geben Sie die Token ID des Access Token ein, das Sie in Netsuite eingerichtet haben. Beachten Sie, dass dieses Zugriffstoken dem Integrationsbenutzer zugewiesen werden muss, den Sie zuvor eingerichtet haben.
- Geben Sie für Token Secret das Token Secret des Access Token ein, das Sie in Netsuite eingerichtet haben. Beachten Sie, dass dieses Zugriffstoken dem Integrationsbenutzer zugewiesen werden muss, den Sie zuvor eingerichtet haben.
- Geben Sie für realm die Subdomain Ihrer Netsuite-Instanz in Großbuchstaben ein (wenn Sie sich beispielsweise mit tstdrv123456.app.netsuite.com bei Netsuite anmelden, lautet Ihr realm/subdomain TSTDRV123456). Wenn Sie einen Bindestrich in Ihrer Netsuite-Instanz-Subdomain haben, müssen Sie diesen als Unterstrich eingeben (z.B. sb1-123456 würde als SB1_123456 eingegeben werden)
Klicken Sie auf die Schaltfläche Test in der Konnektorkonfiguration und dann auf Speichern, wenn der Test erfolgreich war. Sie sind nun bereit, RESTlets mit der TBA-Methode von Netsuite zu integrieren.
Wie man NetSuite mit Tulip integriert
Hier ist das Szenario:
- Mitarbeiter haben eine Liste von Arbeitsaufträgen, die ihnen in NetSuite zugewiesen sind. Wenn sie ihren Tag beginnen, möchten Sie, dass sie einen Arbeitsauftrag auswählen können, der ihnen in einer Tulip-App zugewiesen ist.
- Nachdem sie einen Arbeitsauftrag ausgewählt haben, möchten Sie eine Reihe von relevanten Daten, wie z.B. 10+ Detailfelder des Arbeitsauftrags, freigeben.
- Wenn der Mitarbeiter auf eine Schaltfläche drückt, um die Arbeitsanweisungen zu prüfen, leitet die App ihn auf der Grundlage der Daten des Arbeitsauftrags zu den entsprechenden Anweisungen weiter.
- Wenn sie den Arbeitsauftrag abgeschlossen haben, sollten sie zum ursprünglichen Bildschirm zurückkehren, um einen anderen Arbeitsauftrag auszuwählen.
Hier ist ein kurzes Diagramm, das die Erfahrung des Bedieners in einer Tulip-App zeigt:
Hier ist ein Beispiel für den Schritt "Wählen Sie einen Arbeitsauftrag".
Und hier ist ein Beispiel für den Schritt "Arbeitsauftragsdetails":
Dies ist ein einseitiger Datentransfer. Obwohl Tulip Daten speichert, die in NetSuite entstanden sind, werden keine neuen Daten in NetSuite gespeichert.
Aus technischer Sicht bedeutet dies:
- Beim Öffnen der App fragt Tulip einen API-Endpunkt von NetSuite mit der Mitarbeiter-ID des in der App angemeldeten Bedieners ab.
- NetSuite gibt die 6 letzten Arbeitsaufträge zurück, die diesem Mitarbeiter zugewiesen wurden.
- Dem Bediener wird automatisch der jüngste der 6 Arbeitsaufträge zugewiesen.
- Tulip fragt einen NetSuite API-Endpunkt mit der Arbeitsauftragsnummer ab.
- NetSuite gibt die relevanten Details zum Arbeitsauftrag zurück.
- Wenn der Bediener auf "Fertig" drückt, um anzuzeigen, dass er den Arbeitsauftrag abgeschlossen hat, kehren Sie zu Schritt 1 zurück.
Um dieses Tutorial verwenden zu können, müssen Sie ein NetSuite-Administrator mit etwas JavaScript-Erfahrung sein. Außerdem müssen Sie mit den Grundlagen von Tulips Connectors vertraut sein.
Hier sind zwei Ressourcen, um mehr zu erfahren:
Konfigurieren Ihrer NetSuite-Berechtigungen
Bevor Sie mit der Erstellung Ihres ersten Skripts beginnen, müssen Sie sicherstellen, dass ein paar Dinge richtig eingerichtet sind.
Wenn Sie mit der Tulip-App eine dynamische Liste von Arbeitsaufträgen für jeden Bediener erstellen möchten, müssen die Bediener zunächst ein Konto in Tulip und ein Konto in NetSuite haben.
Nach dem Anlegen eines Benutzerkontos in NetSuite erhält jeder Bediener eine eindeutige Mitarbeiter-ID. Sie können das Feld Ausweis-ID im Benutzerdatensatz in Tulip verwenden, um diese Mitarbeiter-ID hinzuzufügen.
Beispiel:
In diesem Fall ist die ID-Nummer des Mitarbeiters in NetSuite "6".
Anschließend müssen Sie als NetSuite-Administrator sicherstellen, dass Sie über ausreichende Berechtigungen verfügen, um den RESTlet-Dienst zu nutzen. Jeder API-Aufruf von Tulip muss von einem NetSuite-Benutzer mit ausreichenden Rechten kommen. Wir empfehlen, dass alle API-Aufrufe die Anmeldedaten eines NetSuite-Benutzers zur Authentifizierung verwenden.
Um zu sehen, ob Sie ausreichende Berechtigungen haben, klicken Sie auf das Menü " Setup", dann auf die Registerkarte "Benutzer/Rollen" und wählen Sie dann "Benutzer verwalten".
Wählen Sie Ihr Benutzerkonto aus der daraufhin angezeigten Liste aus, und scrollen Sie innerhalb des Kontos bis zum Ende der Seite, um Ihre Rollen zu sehen. Wählen Sie eine der Rollen aus und vergewissern Sie sich, dass sie in der Liste unten auf der Seite die richtigen Berechtigungen hat.
Verwenden Sie diesen Leitfaden von NetSuite, um zu erfahren, für welche Arten von API-Aufrufen Berechtigungen erforderlich sind.
Einrichten des Skripts in NetSuite
Bevor Sie mit den eigentlichen Skripten in NetSuite beginnen, sollten Sie definieren, welche Datenpunkte Sie in Tulip ziehen müssen.
Nehmen wir als Beispiel die Liste der Arbeitsaufträge nach Mitarbeiter. Hier ist eine Erinnerung daran, was die Bedieneroberfläche zeigen soll:
Für jeden Arbeitsauftrag, der dem Bediener zugewiesen ist, müssen Sie Folgendes abrufen:
- Die ID aus NetSuite
- Die Nummer des Arbeitsauftrags
- Die Klasse des im Arbeitsauftrag beschriebenen Produkts
- Das Enddatum
Hier ist ein Beispiel für ein Skript, das Sie erstellen könnten, um die Werte dieser Felder abzurufen:
var columns = new Array();
columns[0] = new nlobjSearchColumn('enddate')
.setSort(true);
columns[1] = new nlobjSearchColumn('status');
columns[2] = new nlobjSearchColumn('tranid');
columns[3] = new nlobjSearchColumn('custbody\_assignto');
columns[4] = new nlobjSearchColumn('trandate');
columns[5] = new nlobjSearchColumn('Klasse');
var filters = new Array();
filters[0] = new nlobjSearchFilter(
'custbody\_assignto',
null,
'ist',
datain.id,
null
);
filters[1] = new nlobjSearchFilter(
'mainline',
null,
'ist',
'T'
);
return nlapiSearchRecord(
'workOrder',
null,
filter,
Spalten
);
} ```
Ein paar Dinge werden Sie bemerken:
* Der gesamte Code ist in einer einzigen Funktion verpackt, die Sie definieren, in diesem Fall "getRecordByEmployee".
* Die Funktion benötigt einen Parameter, *datain*, den Sie später in Tulip definieren werden
* Die Funktionen nlapiSearchRecord und nlobjSearchColumn sind in der [SuiteScript-Dokumentation](http://www.netsuite.com/portal/pdf/ServerSuiteScript.pdf) definiert
Diese Funktion nimmt also eine Mitarbeiter-ID entgegen, durchsucht das Arbeitsauftragsobjekt von NetSuite nach allen Arbeitsaufträgen, die sich auf diese ID beziehen, und gibt ein Array von Arbeitsaufträgen mit 7 Schlüssel/Wertpaaren zurück. Sie werden schließlich 4 von ihnen in die Anwendung aufnehmen.
Nun müssen Sie das Skript in NetSuite einsetzen und testen.
Gehen Sie zum **File Cabinet** auf der Registerkarte Documents.
{height="" width=""}
Gehen Sie zum Ordner SuiteScripts, und laden Sie die .js-Datei über die Schaltfläche **Add File** hoch.
{height="" width=""}
{height="" width=""}
Gehen Sie dann in der Menüleiste auf die Registerkarte **Anpassung**, wählen Sie **Scripting**, **Scripts** und **New**.
{height="" width=""}
Geben Sie den Namen der Datei, die Sie gerade hochgeladen haben, in das Feld **Skriptdatei** ein, und wenn das gewünschte Skript angezeigt wird, klicken Sie auf **Skripterstellung**.
{height="" width=""}
Wählen Sie **RESTlet** aus dem nächsten Menü.
{height="" width=""}
Sie befinden sich nun auf der Seite **Skript**. Geben Sie dem Skript einen leicht erkennbaren Namen und definieren Sie dann die Funktion "Get". Dies ist die Funktion, die ausgeführt wird, wenn Sie eine GET-Anfrage an einen bestimmten API-Endpunkt senden.
Da Ihr Skript nur eine Funktion hat, fügen Sie den Namen dieser Funktion in das Feld GET ein.
{height="" width=""}
Klicken Sie unten auf der Seite auf **Speichern**.
Daraufhin erstellt NetSuite einen neuen API-Endpunkt, den Sie zum Testen und Implementieren dieser Funktion verwenden können. Er wird auf der Seite **Script Deployment** angezeigt.
{height="" width=""}
Dieser teilt einen "Deploy"-Wert und eine Skriptnummer (in diesem Fall 544). Sie werden diese in einigen Schritten benötigen.
Öffnen Sie einen REST-Client, um den Endpunkt zu testen. Beliebte Beispiele sind [Insomnia](https://insomnia.rest/) und [Postman](https://www.getpostman.com/).
Fügen Sie dann die URL und die Parameter am Ende hinzu. Stellen Sie sicher, dass Sie mit einer Mitarbeiter-ID-Nummer testen, die tatsächlich in Ihrer NetSuite-Instanz existiert!
{height="" width=""}
Anschließend erstellt Ihr REST-Client die GET-Abfrage und gibt bei Erfolg Daten zurück oder meldet einen Fehler mit einem Fehlercode. Die Daten sollten als ein Array voller Objekte mit 7 Schlüssel/Wert-Paaren erscheinen, in diesem Fall.
## Einrichten der Connector-Funktion
Jetzt müssen Sie eine Connector-Funktion in Tulip erstellen, die eine Abfrage an den angegebenen API-Endpunkt senden, die Daten empfangen und sie in Tulip speichern kann.
Erstellen Sie zunächst einen HTTP-Connector für Ihre NetSuite-Instanz. [Verwenden Sie diese Anleitung](/r230/docs/http-connectors-by-example-part-1), wenn Sie noch nie einen Connector erstellt haben. Hier sind einige Beispiele für die Details:
{height="" width=""}
{height="" width=""}
Anschließend müssen Sie eine Funktion innerhalb dieses Connectors erstellen. Sie benötigt ein Argument - die Ausweis-ID des Bedieners, der die App verwendet. Vergewissern Sie sich also, dass Sie dem Profil jedes Bedieners in Tulip eine Ausweis-ID hinzugefügt haben, bevor Sie fortfahren. Dies wird eine Zeichenkette sein.
{height="" width=""}
Fügen Sie dann eine Reihe von {{glossary.Output}}s hinzu, die in diesem Beispiel Strings sind. Sie speichern die Ergebnisse der GET-Anfrage und ermöglichen es, sie später an eine Variable im App-Editor zu senden.
Hier ist ein Beispiel mit drei Datenpunkten - ID, TranID und Enddatum - von jedem der 5 letzten Arbeitsaufträge, die dem Bediener zugewiesen wurden.
{height="" width=""}
Fügen Sie dann im Abschnitt **Abfrage** den soeben erstellten Endpunkt hinzu.
{height="" width=""}
Danach fügen Sie Ihre Abfrageparameter hinzu, einschließlich der Skriptnummer, der Einsatznummer und der ID, die Sie benötigen, um auf alle Arbeitsaufträge eines bestimmten Mitarbeiters zuzugreifen. Dies sollte die Eingabe sein, die Sie gerade erstellt haben.
{height="" width=""}
Schließlich müssen Sie Schlüssel/Wertpaare von Objekten im Array zuordnen, die in der Antwort auf die GET-Anfrage zurückgegeben werden. In diesem Fall ist die Antwort ein Array mit 5 Objekten.
So könnte das Mapping aussehen:
{height="" width=""}
Fügen Sie für die **Body-Labels** neben jedem Output den Index aus dem Array in der Antwort plus den Schlüssel der Eigenschaft hinzu, die Sie zuordnen möchten.
In der Ausgabe workOrderZeroID möchten Sie den Wert der Eigenschaft "id" des ersten Objekts im Array einlesen. Sie verwenden also "0.id", um auf die Eigenschaft "id" des Objekts mit dem Index Null zuzugreifen.
## Aufrufen der Connector-Funktion in einem Trigger
Jetzt können Sie Netsuite-Daten in Tulip-Variablen speichern. Alles, was Sie tun müssen, ist, die Trigger zu erstellen, die bestimmen, wann die Connector-Funktion ausgeführt werden soll.
Kehren wir zu unserem Anwendungsbeispiel zurück. Sie möchten eine Reihe von Arbeitsaufträgen basierend auf dem Bediener, der die App benutzt, auffüllen.
{height="" width=""}
Zu diesem Zweck sollten Sie einen [Schritt-Trigger](/r230/docs/step-level-triggers) erstellen [-](/r230/docs/step-level-triggers) einen Trigger, der ausgelöst wird, wenn ein Schritt geöffnet wird. Von diesem Trigger aus können Sie die Verbindungsfunktion aufrufen. So könnte es aussehen:
{height="" width=""}
Folgendes passiert in diesem Trigger:
* Der Trigger feuert "wenn der Schritt geöffnet wird"
{height="" width=""}
* In der ersten "Then"-Anweisung verweisen Sie auf die Funktion "get Work Orders by EmployeeID" innerhalb des NetSuite Connectors.
* Diese Funktion benötigt eine Mitarbeiter-ID, die Sie als "Badge ID" aus "App Info" einfügen.
* Das Ergebnis wird in einer Variablen namens "workOrderEmp" gespeichert, die ein Objekt mit Schlüssel/Wertpaaren ist, die den Ausgaben der Funktion entsprechen.
{height="" width=""}
In diesem Fall gibt es eine zweite "Then"-Anweisung, da die Operatoren nur mit dem letzten Arbeitsauftrag arbeiten sollen. Wenn der Schritt geöffnet wird, soll also automatisch der jüngste Arbeitsauftrag als derjenige gespeichert werden, an dem er arbeiten wird.
{height="" width=""}
Alternativ könnten Sie eine Schaltfläche "Start WO" neben jeder Zeile in der Tabelle einfügen und die Variable workOrderID auf der Grundlage des vom Bediener ausgewählten Arbeitsauftrags dynamisch aktualisieren.
Wenn der Bediener die Schaltfläche "Start WO" drückt, wird die zweite NetSuite-Connector-Funktion ausgeführt und füllt den folgenden Schritt mit allen relevanten Details über den Arbeitsauftrag.
Dieser Schritt sieht folgendermaßen aus:
{height="" width=""}
Und hier ist die Schaltfläche Trigger, die den Schritt auffüllt:
{height="" width=""}
Er nimmt die workOrderID-Variable aus dem vorherigen Schritt als Eingabe und speichert alle Ausgaben als Schlüssel/Wertpaare in einer Variablen namens workOrder.
Zusammengefasst ist dies die Reihenfolge der Ereignisse, die dazu führen, dass NetSuite-Daten erfolgreich zu einer Tulip-Anwendung hinzugefügt werden.
1. Im Tulip Player drückt der Bediener eine Taste, um die Anwendung zu starten
2. Ein Trigger wird ausgelöst, wenn der erste Schritt geöffnet wird. Dieser Auslöser ruft eine Connector-Funktion namens "get Work Orders for Employee" mit einem Argument der Ausweis-ID des aktiven Bedieners auf.
3. Die Connector-Funktion greift auf einen API-Endpunkt zu, den Sie in NetSuite erstellt haben, und gibt ein Array mit den 5 letzten Arbeitsaufträgen für diesen Mitarbeiter zurück, mit 4 Schlüssel/Wertpaaren für jedes Objekt im Array.
4. Diese Werte werden in "Outputs" gespeichert, die Sie manuell erstellt haben.
5. In der "Then"-Anweisung des Triggers schließen Sie alle "Outputs" als Schlüssel/Wert-Paare in eine Variable namens "workOrderEmp" ein, die ein Objekt ist. Dann kann auf sie in einer App zugegriffen werden.
So sieht das von der Software-Seite aus:
{height="" width=""}
In diesem Diagramm zeigt das Blitzsymbol Variablen und Eigenschaften an, die im obigen Trigger erwähnt wurden.
## Anzeige der Daten in einem Schritt
Jetzt haben Sie die Daten aus NetSuite in einer Variable namens workOrderEmp zur Verfügung. Sie müssen sie nur noch zu einem Schritt hinzufügen, um sie für einen Operator nutzbar zu machen.
workOrderEmp ist ein Objekt mit etwa 20 Schlüssel/Wert-Paaren. Um diese Informationen in einem Schritt weiterzugeben, müssen Sie lediglich einen Text verwenden, der den Wert einer Variablen enthält. Sie können dies in der Symbolleiste tun.
{height="" width=""}
Tatsächlich besteht der größte Teil des Schritts "Einen Arbeitsauftrag auswählen" aus Text mit Variablenwerten. Hier ist der Schritt im App-Editor:
{height="" width=""}
Es gibt 24 Beispiele für Text mit variablen Werten. Die Schaltfläche "Start WO" führt eine zweite Connector-Funktion aus und sendet den Bediener zu einem Schritt "Work Order Details", der ein ähnliches Muster wie dieser Schritt aufweist - über 20 verschiedene Textfelder mit variablen Werten.
Der komplizierteste Teil der NetSuite-Tulip-Integration ist die Verfolgung und Speicherung von Werten, die zwischen den beiden Softwareplattformen hin- und hergeschickt werden. Dies geschieht über mehrere Werkzeuge - den App Editor, die Seite Connectors und 3 verschiedene Teile von NetSuite.
Wenn Sie weitere Fragen zu dieser Integration haben, verwenden Sie das Chat-Fenster unten rechts auf Ihrem Bildschirm. Schauen Sie sich diesen [Leitfaden zu HTTP-Konnektoren](/r230/docs/an-overview-of-http-connectors) an, wenn Sie sich mit der Erstellung von Konnektoren und Konnektorenfunktionen vertraut machen möchten.
---
Haben Sie gefunden, wonach Sie gesucht haben?
Sie können auch auf [community.tulip.co](https://community.tulip.co/?utm_source=intercom&utm_medium=article-link&utm_campaign=all) Ihre Frage stellen oder sehen, ob andere mit einer ähnlichen Frage konfrontiert wurden!