Document toolboxDocument toolbox

API-Spezifikationen

Für die Nutzung der CAD-ERP-Integration mittels OTA werden hier das Datenmodell, die API-Aufrufe und die möglichen Befehle zusammen gestellt.

Als Basis muß profacto-seitig die Integration eingerichtet sein, für die Anbindung von interiorcad müssen die entsprechenden REST-Befehle wie hier beschrieben aufrufbar sein.

Implementierung in einem CAD

Folgende Kommandos werden verwendet, um Artikel, Projekte, Positionen abzuholen und die Stückliste zurückzuschreiben.

Das Grundschema hierbei ist analog zur profacto API-Dokumentation

API-Basis = http://<Servername im LAN oder WAN |LAN oder WAN-IP|>:8080/4DAction/

API-Basis + Methode + Token = http://<Servername im LAN oder WAN |LAN oder WAN-IP|>:8080/4DAction/<api-Methode>?token=<Token>

profacto-seitig ist der Port 8080 und der URL-Pfad-Abschnitt 4DAction fest vorgegeben.

Feldtypen

KürzelTypLängeBeschreibungBeispiel
RReal
klassische Fließkommazahl1367.986906707692242
IInteger32-bitGanzzahl19
AAlphamax. 255alphanumerisch mit fester LängeMünster
TTextmax. 32000freier TextDesign in Wood - Münster
BBoolean11 = true  und 0 = Falsetrue
DDate
Datum mit Zeit

0000-00-00T00:00:00.000Z

2020-04-27T09:33:48

UUUID32im Format mit geschweifter Klammer

{ABCD1234DEFG5678HIJK9012LMNO3456}

{71E4C376-4C22-46B3-85C7-346292964D0B}

OObject
JSON Object

Status

Speziell von profacto ausgehend kann man mit dem gegeben Token mittels eines Pings zum Server,

API-Basis/api_ping?token=<Token>

sehen, ob der Server überhaupt erreichbar ist und profacto-seitig die OTA-Integration aktiv.

Ein positives Ergebnis ist zB

{"restapi":"restintegration_active","theapi":"api_unknown","result":{"valid":true,"itemsync":true,"integration":true,"httpcode":"200","api":"Integration","personalnr":"10"}}

Ab profacto 2022.0.0 gibt es eine verbesserte und vereinfachte Steuerung:

API-Basis/api_get_integration?token=<Token>

Liefert mit dem attribut "active" per true/false zurück, ob die Integration in profacto überhaupt aktiviert ist.

API-Basis/api_put_integration?token=<Token>&active=true|false

Steuert ggf. die Integration für alle Anwender und gibt per success-Attribut zurück, ob eine Steuerung möglich war (wenn der Zugriff auf die Voreinstellung in profacto anderweitig vergeben ist, kann nicht gespeichert werden) und wie der Status nach der Ausfürhung ist. 

Artikel

Um Artikel aus profacto zu holen gelten dieselben Regeln wie mit der klassischen SQLite-basierten Schnittstelle für den Artikelstamm. 

Es werden Platten, Kanten, Beläge und Beschichtungen transferiert, keine Beschläge oder Fertigmöbel, Einbaugeräte, etc. 

Gelöschte Artikeldaten

Gelöschte Artikel werden nicht per Integration kommuniziert, sondern zB in der profacto Stückliste weiter empfangen, dort aber als Einmalartikel verstanden. Durch einen Vollabgleich kann man aber natürlich CAD-seitig pauschal übertragen. Inwiefern man Artikeldaten-Residuen verwalten ist dem CAD überlassen. Wir möchten verhindern, daß ältere CAD-Dateien unbrauchbar werden.

API-Befehl

MethodeTypBeispiel
ART_ICR_SendItemsGETAPI-Basis/ART_ICR_SendItems?token=<Token>&checkutc=<date_time>

Parameter

NameTypLängeBemerkungBeispiel
tokenA32obligatorisch für profacto78F146AB85164846A60C14335B29E5AB
checkutcD
optional, um nur dann den Artikelstamm zu erhalten, wenn dieser erneuert wurde (immer vollständig)2020-04-27T09:33:48

Response

AttributTypLängeBeschreibung
errorA
zB "no_items" wenn keine neuen Artikel vorhanden sind
itemnoA20Artikelnr / Artikeltypennr
descriptionT
Bezeichunung
commentT
Kommentar
shortdesc40Kurzbezeichnung
itemgroupA20Artikelgruppe
itemtypeA20Artikeltyp

Platte = 0
Belag = 1
Beschichtung = 2
Kante = 3
Beschläge = >1000

materialclassA20Materialgruppe zur Gruppierug gleichartiger Materialien
typeA20

Materialtyp

Veneer = veneer
Custom = custom
Melamine = melamine
GluedWood = gw
3Layer = 3l
Solid = solid
Glass = glass

included_covering1_thicknessR
Belag-Materialstärke in mm
included_covering2_thicknessR
Belag-Materialstärke in mm
included_covering1_textureA40Texturname des 1. Dekors bei Platten
included_covering2_textureA40Texturname des 2. Dekors bei Platten
lengthR
Länge in mm
widthR
Breite in mm
thicknessR
Stärke in mm
consumptionpersqmR
Verbrauch pro Quadratmeter
uomA10Mengeneinheit kalkulatorisch
purchasepriceR
EK // Einkaufspreis
calcpriceR
KK // Selbstkosten
salespriceR
VK(1) // Verkaufspreis
texturenameA40Texturname des Trägermaterials bei Platten
picturelinkT
Link zur Bilddatei (nicht in profacto implementiert)
wasteR
Verschnitt in %
supplieridA12Lieferantennummer im ERP
suppliernameA80ERP-Bezeichnung des Lieferanten
supplierordernoA40Bestellnummer beim Lieferanten

Projekte

Um die Projekte bzw. Aufträge aus dem ERP zu holen gibt es einen Befehl

API-Befehl

MethodeTypBeispiel
Auf_ICR_SendAllGETAPI-Basis/Auf_ICR_SendAll?token=<Token>

Parameter

NameTypLängeBemerkungBeispiel
tokenA32obligatorisch für profacto78F146AB85164846A60C14335B29E5AB
projectnrA12optional, um nur ein Projekt zu holen. M059

Response

Attribut(Projekt-Element)AttributTypLänge
Projects





(0)





projectnoA

12

Projekt-Nr



projectnameT


Kommission



descriptionT


Bauvorhaben



deliverydateD


Fixtermin



deliveryweekI


Liefer-Kalenderwoche



deliveryyearI


Lieferwochenjahr



customernoA

12

Kundennummer



name1A

60

Firmenname 1



name2A

60

Firmenname 2



streetA

60

Straße



postalcodeA

10

PLZ



cityA

60

Ort



contrycodeA

10

Land 



projectfolderpathT


Projektordnerpfad



managerA

64

Sachbearbeiter/Vertreter als Personalnr



salutationA64Anrede


firstnameA64Vorname Ansprechpartner


lastnameA64Nachname Ansprechpartner


projectstateA64Projektstatus


engineernameA64Arbeitsvorbereiter - Name


managernameA64Vertreter/Sachbearbeiter - Name


procstateI
(veraltet)


procstateidI
Prozessstatus


projectstateid

I
Projektstatus


creationyearI
Jahr der Erstellung des Projekts


creationdateD
Erstellungsdatum des Projekts

(1)



Positionen

Positionen zu eine Projekt werden entweder generell abgeholt (beim ersten Aufruf zu einem Projekt) und danach gilt es die Veränderungen nachzuvollziehen, wenn zB Positionsnummern geändert werden. 

Beispiel, welche Aktionen möglich sind, und wie diese abgefangen werden können:

Orignal-PositionÄnderungAktuelle Position

P1 - Schrank 

Text ändert sich

P1 -  Regal

P2 - Tisch

wird gelöscht
P3 - KommodePositionsnummer auf 2 ändernP2 - Kommode

API-Befehl

MethodeTypBeispiel
Pos_ICR_SendPositionsGETAPI-Basis/Pos_ICR_SendPositions?token=<Token>&project=<projectnr>

Parameter

NameTypLängeBemerkungBeispiel
tokenA32obligatorisch für profacto78F146AB85164846A60C14335B29E5AB
projectA12notwendigM059

Response

Attribut(Position-Element)AttributTypLänge
Positions





(0)





projectnoA

12

Projekt-Nr



positionnoR


Positions-Nr



quantityR


Anzahl 



itemnoA20Artikel-Nr


descriptionT
Bezeichnung


itemgroupA20Artikelgruppe


lengthR



widthR



thicknessR



purchasepriceunitR



calcpriceunitR



salespriceunitR



purchasepricetotalR



calcpricetotalR



salespricetotalR



posUUIDA32

(1)




API-Befehl

MethodeTypBeispiel
api_getposdeltaGETAPI-Basis/api_getposdelta?token=<Token>&projectnr=<projectid>&sinceutc=<date_time>

Parameter

NameTypLängeBemerkungBeispiel
tokenA32obligatorisch für profacto78F146AB85164846A60C14335B29E5AB
projectnrA12notwendigM059
sinceutcD
notwendig um das Delta auf die relevanten Änderungen zu begrenzen2020-04-27T09:33:48

Beispiel-Response

{
	"deltas": [
		{
			"2020-04-29T14:23:44": {
				"PositionID": "6E7093EDD578488D8E5A7895BDC738AD",
				"CurrentPosNr": 1,
				"Description": "Infomaterial Display X\r\rHochglanz weiß gemäß Entwurfskizze von Mies van der Rohe\r6 Flyerfäche\r4 Zeitschriften",
				"OldPosNr": 1,
				"Event": "Position_changed"
			}
		},
		{
			"2020-04-29T14:23:55": {
				"PositionID": "AED06E22B90A492B8A85B59CD3CBE6FF",
				"CurrentPosNr": 14,
				"Description": "Videopräsentation und Wartebereich\r\rBank in L-Form\rProjektionsfläche mit Lautsprechern\rBeamerverkleidung an der Decke\r\r",
				"OldPosNr": 4,
				"Event": "Position_number_changed"
			}
		},
		{
			"2020-04-29T14:24:00": {
				"PositionID": "B09B61BAB7924ABCAEF19A172B84F9E7",
				"CurrentPosNr": 6,
				"Description": "Garderobe\r\rTheke in mausgrau\r\rTaschenaufbewahrung\rSchirmständer\rSchließfächer\rGarderobensystem von alfa3 integriert",
				"OldPosNr": 6,
				"Event": "Position_deleted"
			}
		}
	]
}


Falls es den Auftrag gar nicht gibt 
"error"="no_project_found"
"givenprojectno"="project" // die übergebene Projektnummer wird wieder zur Referenz zurückgegeben

"project"=false

Falls es keine Positionen gibt, die verändert wurden

"project"=true
"error"="no_posdeltas_found"

Stückliste

API-Befehl

MethodeTypBeispiel
STK_ICR_ReceivePOSTAPI-Basis/STK_ICR_Receive?token=<Token>

Daten


Die Daten werden im JSON-Format übertragen. 

AttributElementAttributTypLängeBemerkung
Coverings





0





backB



edge1B



edge2B



edge3B



edge4B



elementnoI
Lackschicht 1, 2, 3, etc. muß hochgezählt werden


frontB



itemnoA



partidI



positionnoA



projectnoA



unituidU
Eindeutige KorpusID
deleteduuids

U
UUID eines gelöschte Elements












Parts





0
O
je Bauteil ein Element


caduuidU
Bauteil ID - zentrale Identifikation


commentT



descriptionT



e13corner

K13Ecke: Integer - Kantenreihenfolge aus interiorcad
  • KabEcke Definiert die Kantenverbindung zwischen a und b
  • a geht durch = 0
  • b geht durch = 1
  • Gehrung = 2
  • Derzeit (Stand: Ende 2014) umdefiniert auf Kantenreihenfolge. Das heißt: 4stellige Zahl mit den Ziffern 1-4 in beliebiger Permutation, z.B. 1432 oder 3421


e42corner

e42corner - K42Ecke: Integer - Gehrungsreihenfolge aus interiorcad
  • Derzeit (Stand: Ende 2014) umdefiniert auf Gehrung pro Ecke, dargestellt als 1 für Gehrung und 0 für keine Gehrung. Die Zahl wird bei Verarbeitung in einen vierstelligen String umformatiert, aus 11 wird also "0011", aus 110 wird "0110", aus 1101 wird "1101".


edge1A
Artikelnummer der Kante


edge1lengthI
leer


edge1thckI
Bauteildicke


edge2A
Artikelnummer der Kante


edge2lengthI
leer


edge2thckI
Bauteildicke


edge3A
Artikelnummer der Kante


edge3lengthI
leer


edge3thckI
Bauteildicke


edge4A
Artikelnummer der Kante


edge4lengthI
leer


edge4thckI
Bauteildicke








graindirection

enum (L,W,N) - Maserrichtung Bauteil


graindirectionl1b




ispolygonalB
definiert, ob das Bauteil polygonal, also nicht rechteckig ist


itemnoA
Artikelnummer


joblistA
Name des CNC-Programms


joblistpathA
Pfad zum CNC-Programm


joblistbackA
Name des CNC-Programms


joblistbackpathA
Pfad zum CNC-Programm


joblistformatA
Name des CNC-Programms


joblistformatpathA
Pfad zum CNC-Programm


laminate1backA
Belag innen


laminate1backthckR
Belagstäke


laminate1frontA
Belag außen


laminate1frontthckR
Belagstärke
Objects





0



Fittings





0



Shapes





0



Document



Gesendet ab interiorcad 2021 F4.1


documentidT
UUID des Dokumentes


pathT
Pfad des Dokumentes


projectnoT
Projekt-Nummer des Dokumentes

Beispiel JSON

Wie eine Stückliste mit diversen Teile aussehen kann, lässt sich exemplarisch an folgender Datei ansehen: