Hallo zusammen, wie heute Morgen im Live-Stream (Youtube Live-Streams: ECMind Tech-Talks im Sommer & Herbst) versprochen, würde ich hier noch den Beispielcode zeigen, mit dem Ihr den Team Manager um eine ERP-Anbindung zu ergänzen:
Im Beispiel werden diese beiden Server-Events genutzt:
Wir haben hier JS-Events genommen, wer noch VBS schreiben möchte ist natürlich frei. Der Empty-Job ist der Einsprungpunkt, welcher vom Team Manager genutzt wird.
enaio®-Event KernelBeforeJob::krn.EmptyJob
const teamManager = rc.require("TeamManager");
teamManager.dispatchJob(rc);
Wie Ihr seht, ruft diese Funktion mehr oder weniger nur die folgende Library auf. Wer will, kann den gesamten Code auch direkt im EmptyJob
eintragen, die Aufteilung in eine zusätzliche Bibliothek macht es nur etwas übersichtlicher.
Library TeamManager
class TeamManager {
dispatchJob(rc) {
if(!rc.apps.inputParams.has("jobName")){
return;
}
const jobName = rc.apps.inputParams.get("jobName").value;
switch(jobName) {
case "demo_job":
this.getOpenOrders(rc)
break
}
}
// Diese Funktion macht die Hauptarbeit, nimmt die Daten von enaio® entgegen,
// ruft die Metadaten des ERPs ab und formatiert diese um
getOpenOrders() {
const username = rc.apps.inputParams.get("dmsUsername").value;
const response = this.getJSONSync(`https://static.ecmind.ch/sap/${username}/getOpenOrders.json`);
const orders = response.map((o) => {
let orderStr = `**Bestellung ${o.order}:**\n`;
orderStr = orderStr + `- Kunde: **${o.customer}**\n`;
orderStr = orderStr + `- Bestelldatum: **${o.order_date}**\n`;
orderStr = orderStr + `- Summe. **EUR ${o.order_volume}**\n`;
return orderStr;
});
let responseString = `#### Offene Bestellungen von ${username}:\n`;
responseString = responseString + orders.join('\n');
// Diese Parameter steuer die Ausgabe im Team Manager
rc.apps.outputParams.set("jobSucceeded", response.length > 0);
rc.apps.outputParams.set("message_success", responseString);
rc.apps.outputParams.set("message_error", `**${username} hat keine offenen Bestellungen**`);
rc.apps.outputParams.set("displayType", "markdown");
rc.apps.outputParams.set("displayTimeMs", 15000);
}
// Diese Methode hilft dabei, ein JSON von einer URL zu laden.
// Aufgrund von Vorgaben von eniao® muss dies synchron erfolgen.
getJSONSync(url) {
var xhr = new rc.com.ActiveXObject("MSXML2.XMLHTTP");
xhr.open("GET", url, false);
xhr.send();
if (xhr.status === 200) {
return JSON.parse(xhr.responseText);
} else {
rc.apps.logger.error(xhr.status.toString());
console.error("Error fetching JSON:", xhr.status, xhr.statusText);
return [];
}
}
}
module.exports = new TeamManager();
Die REST-Schnittstelle zum ERP ist hier fiktiv, damit ich es online zeigen kann, ohne ein echtes System exponieren zu müssen:
https://static.ecmind.ch/sap/${username}/getOpenOrders.json
liefert für den $(username)
= BAER_ADRIAN
etwa dies:
[
{
"order": 7326283,
"customer": "Schmidt Renovierungsservice GmbH",
"order_date": "2024-06-15",
"order_volume": 15000.50
}, {
"order": 8427364,
"customer": "Meisterhandwerk Müller AG",
"order_date": "2024-07-01",
"order_volume": 20000.00
}, {
"order": 9562738,
"customer": "Zimmerei und Holzbau König GmbH",
"order_date": "2024-07-05",
"order_volume": 18000.75
}
]
Details zur Erweiterung des Team Managers findet Ihr natürlich auch im Admin-Handbuch. Ich freue mich auf Eure Fragen oder Gegenbeispiele.