profacto bietet einen token-gesicherten Zugriff auf ausgewählte Tabellen und Felder mit sehr flexibler Architektur.
- Bei Wünschen für zusätzliche Tabellen, API-Sets oder als externer Entwickler sprich uns gerne an.
- Ein API-Access beinhaltet einen parallelen Zugriff je API-Token + IP-Adress-Kombination für ein Zeitfenster von 15 Minuten ab dem erstem Aufruf.
- Jeder neue Aufruf innerhalb dieses Zeitfenster verlängert die Nutzungsphase dieses API-Accesses um weitere 15 Minuten.
- Je profacto Lizenz (exkl. TZE-Clients) ist ein freier Zugriff bereits integriert. In profacto SmallBusiness ist die API für die Zeiterfassung und Integration (s.u.) reduziert.
- Zusätzlich erhält jede profacto Lizenz (inkl. Small Business, StartUp) einen parallelen OTA-Integration Zugriff, der wie ein zweckbestimmter API-Zugriff ebenso berechnet wird.
- Weitere API-Acessess (auch für die OTA-Integration) können ab profacto 2021 für profacto (exkl. SmallBusiness, StartUp) separat erworben werden. Bis dahin wird kein erweitertes Entgelt erhoben, selbst wenn man mehr Zugänge nutzen möchte.
API - Wieso, weshalb, warum?
Access Protocol Interface - oder einfach formuliert, eine Softwareschnittstelle mit einem einheitlichen Zugriffsprotokoll für alle.
...
Man kann die Daten mittels eines Standard-Browsers abrufen und sofort sehen. Man muß sich nicht im Firmennetzwerk bewegen. Zugleich setzt die API ein tieferes technisches Verständnis von HTTP/REST-Zugriffen voraus und dient in erster Linie der Kommunikation von Anwendung zu Anwendung.
Architektur
Im Kern setzt das API auf einem aufgaben- oder rollenbasierten Spektrum an Zugriffen, wie zB die Zeiterfassung oder die CAD-Integration (die künftig als Sonder-API im Bereich der Integration beschrieben wird).
...
Dazu gehört, daß man bestimmten Mitarbeitern (ein Personal-Datensatz ist Voraussetzung) ein Token gibt, mit dem der Zugriff gewährt, aber eben auch zeitlich limitiert oder entzogen werden kann.
Zugriff
In den Voreinstellungen, profacto Administration werden die Tokens vergeben.
...
Das Token kopieren Sie im Zweifelsfall einfach heraus.
Aufruf
API-Basis = http://<Servername im LAN oder WAN |LAN oder WAN-IP|>:8080/4DAction/<api-Methode>?token=<Token>
...
Der Port 8080 ist hart vorgegeben und darf nicht geändert werden.
Daten lesen mit api_get
API-Basis = http://<Servername im LAN oder WAN |LAN oder WAN-IP|>:8080/4DAction/api_get?token=<Token>
...
http://meinServer:8080/4DAction/api_get?token=124&table=Ansprechpartner&fields=Anrede,Geschlecht,Name,VorName,email,Telefon,MobilTel,isInaktiv,Suchfeld1&query=TypNr%3D131
Operatoren
Für eine Übersicht der query-Syntax bitte folgende Darstellung verwenden (Übersetzung folgt).
Symbole zum Vergleichen von Attribut und Value. Es gibt folgende Symbole:
Vergleich Symbol(e) Kommentar Ist gleich =, == Erhält passende Daten, unterstützt den Joker @, berücksichtigt weder Groß- und Kleinschreibung noch diakritische Zeichen. ===, IS Erhält passende Daten, bewertet @ als Standardzeichen und nicht als Joker, berücksichtigt weder Groß- und Kleinschreibung noch diakritische Zeichen. Ungleich zu #, != unterstützt den Joker (@) !==, IS NOT bewertet @ als Standardzeichen und nicht als Joker Kleiner als < Größer als > Kleiner als oder gleich <= Größer als oder gleich >= Enthalten in IN Erhält Daten, die mit mindestens einem Wert in einer Collection bzw. einem Satz Werte übereinstimmt Nicht enthalten in einer Anweisung NOT Klammern sind zwingend, wenn NOT vor einer Anweisung mit mehreren Operatoren verwendet wird Enthält Schlüsselwort % Schlüsselwörter lassen sich in Attributen vom Typ String oder Bild verwenden - Value: Wert zum Vergleichen mit dem aktuellen Wert der Eigenschaft.
Für eine Suche nach einem String innerhalb eines anderen String (eine Suche "Enthalten in") verwenden Sie den Joker (@) in value, um den zu suchenden String zu isolieren, zum Beispiel: "@Smith@".
Für numerische Werte dient Punkt als Dezimaltrenner. Datumsangeben müssen im Format "YYYY-MM-DD" sein.
Bei einer Suche mit einem IN Vergleichsoperator muss value eine Collection sein bzw. Werte, die zum Typ des Attributspfads zwischen eckigen Klammern [] passen, getrennt durch Kommas (bei Strings müssen Anführungszeichen " mit "\" abschließen). LogicalOperator: verbindet mehrere Bedingungen in der Suche (optional). Es gibt folgende logische Operatoren (Sie können Name oder Symbol übergeben):
Konjunktion Symbol(e) AND &, &&, and OR |, ||, or - order by Attribut: Sie können eine Anweisung order by Attribute in der Suche hinzufügen, so dass die Ergebniswerte sortiert werden. Sie können mehrere Sortieranweisungen, durch Komma getrennt, verwenden, (z.B. order by Attribut1 desc, Attribut2 asc). Die Sortierung ist standardmäßig aufsteigend. Übergeben Sie 'desc' für absteigende Reihenfolge und 'asc' für aufsteigende Reihenfolge
Tabellen und Feld-Namen
Die Namen aller Tabellen und Felder in profacto können hier eingesehen werden
...
für query ist dies jedoch zwingend.
Ausgabe der Daten
Die Daten werden als JSON-String zurückgegeben.
...
Man sieht, daß trotzdem alle zulässigen Felder unterstützt werden, die Abfrage deswegen nicht komplett scheitert.
Neue Daten schreiben mit api_put_*
API-Basis = http://<Servername im LAN oder WAN |LAN oder WAN-IP|>:8080/4DAction/api_put_<areaname>
...
Die Namen aller Tabellen und Felder in profacto können hier eingesehen werden. Für die verschiedenen put-Befehle wird auf jeweils eine Tabelle schreibend zugriffen. Bestimmte Felder dürfen nicht geschrieben werden, dies ist unten in der Dokumentation jeweils aufgeführt.
Link: Datenbankstruktur
Verhalten bei gesperrten Datensätzen
Versuchen Sie mit einem api_put_* Aufruf Daten zu verändern die gerade in Profacto geöffnet sind schlägt der Aufruf fehl.
Daraufhin wird eine Response zurückgegeben die das ganz klar kommuniziert und ermöglicht automatisiert auf solche Situationen einzugehen.
api_getapilist - Auflistung aller API's
Erforderliche Parameter:
...
{"error":"","success":true,"APIList":["Integration","Zeiterfassung","APIPinger","Produktion","Kunden","Kontakte","Lieferanten","Artikel","Lager","Bestellung","Personal","Aktivitäten","Projekte","Dateien","extragroup"]}
api_put_contact - Ansprechpartner anlegen
Erforderliche Parameter:
...
Ausgeschlossene Parameter:
PKUUID_90
Optionale Parameter:
Telefon, Telefax
...
{"success":true,"error":"","processingTime":6996,"errorMsg":""}
api_put_customer - Kundenanlage
Erforderliche Parameter:
...
{"success":true,"wasUpdate":false,"mainKey":"n20-01170","processingTime":54,"errorMsg":""}
api_put_project - Projekt anlegen
Erforderliche Parameter:
...
{"success":true,"error":"","wasUpdate":false,"AuftragsNr":"S014","processingTime":7819,"errorMsg":""}
api_put_time - erfasste Arbeitszeit in das System Einbuchen
Erforderliche Parameter:
...
In der JSON-Rückmeldung wird auch die neue vergebene UUID zurückgeliefert:
{"success":true,"error":"","processingTime":1326,"errorMsg":"","recNum":885,"UUID":"3665FF277C1C4589AD07C075EA159314"}
api_time_getpositions - Projektpositionen
Erforderliche Parameter:
...
{"positions":[{"positionsnr":"1","bezeichnung":"Infomaterial Display X\r\rHochglanz weiß gemäß Entwurfskizze von Mies van der Rohe\r6 Flyerfäche\r4 Zeitschriften"},{"positionsnr":"2","bezeichnung":"Theke \r\rSockel mit indirekter LED-Beleuchtung\r3 PC-Arbeitsplätze\r2 Kassenzonen\rAudioguide-Wechselstation"}]}
api_time_getday - Gebuchte Zeit-Einträge für einen Tag abrufen
Erforderliche Parameter:
...
{"success":true,"error":"","zeiten":[{"AuftragsNr":"M059","VonZeit":21600,"BisZeit":43200,"PositionsNr":3,"KSTNR":200,"GesamtZeit":6,"Bemerkung":"","Nachweis":false,"FeedbackRequired":true,"BisZeitIstPausenAnfang":false,"VonZeitIstPausenEnde":false,"Zeitart":"B","Pause":0.5},{"AuftragsNr":"M059","VonZeit":43200,"BisZeit":64800,"PositionsNr":3,"KSTNR":400,"GesamtZeit":6,"Bemerkung":"","Nachweis":false,"FeedbackRequired":true,"BisZeitIstPausenAnfang":false,"VonZeitIstPausenEnde":false,"Zeitart":"B","Pause":0.5}],"processingTime":6,"errorMsg":"","procTime2":0}
api_getZeitModell - Zeitmodell für einen Mitarbeiter für einen Tag abrufen
Erforderliche Parameter:
...
{"error":"","success":true,"zeitmodell":{"PersonalNr":"10","Name":"Krtek Maulwurf","Datum":"2020-10-13T22:00:00.000Z","PersUrlaubVerplantHHMM":0,"pers_ILEintritt":"12.08.04","pers_ILAustritt":"-","pers_ILUrlaubAnspruch":"160 h = 2.0 Tage","pers_ILUrlaubRest":"100 h = 1.2 Tage","pers_ILZeitmodell":"","pers_ILZeitmodellVon":"Von: jeher","pers_ILZeitmodellBis":"Bis: auf Weiteres","pers_ILMontag":"6:00 - 18:00","pers_ILMontagP1":"9:00 - 9:30","pers_ILMontagP2":"12:30 - 13:00","pers_ILDienstag":"6:00 - 18:00","pers_ILDienstagP1":"9:00 - 9:30","pers_ILDienstagP2":"12:30 - 13:00","pers_ILMittwoch":"6:00 - 18:00","pers_ILMittwochP1":"9:00 - 9:30","pers_ILMittwochP2":"12:30 - 13:00","pers_ILDonnerstag":"6:00 - 18:00","pers_ILDonnerstagP1":"9:00 - 9:30","pers_ILDonnerstagP2":"12:30 - 13:00","pers_ILFreitag":"6:00 - 16:00","pers_ILFreitagP1":"9:00 - 9:30","pers_ILFreitagP2":"12:30 - 13:00","pers_ILZeitmodellStdWoche":"40 Std./Wo","pers_ILZeitmodellStdWocheHHMM":144000,"zArbVon":21600,"zArbBis":64800,"zArbStd":8.5,"zPause1Von":32400,"zPause1Bis":34200,"zPause2Von":45000,"zPause2Bis":46800}}
Lagerbedarfsmeldung
api_newstockdemand?ArtikelID=ABC123 - die ArtikelID wird parallel zur ArtikelTypenNr erstellt.
...
Aufruf löst einen Bestellvorschlag des Artikels basierend auf den Mindest und Maximalbeständen aus. Sinnvollerweise nur für Artikel im Standardlagersortiment, und der Aufruf sollte über QRCode per Smartphone erfolgen, damit man als Rückmeldung auch sieht, ob es geklappt hat.
Zeiten erfassen mit api_time_start
Die API api_time_start gibt ein Webanwendung (WebZE) wieder mit der Zeiten in Profacto gebucht werden können. Der Mitarbeiter identifiziert sich anhand eines persönlichen und Aufgaben bezogenen Tokens.
...