- Notifications
You must be signed in to change notification settings - Fork0
Golang Wrapper für die PROFFIX REST API
License
pitwch/go-wrapper-proffix-restapi
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
Der zuverlässige Wrapper für die PROFFIX REST-API in Go.
Dieser Wrapper wird von derPedrett IT+Web AG - dem zuverlässigen und innovativen Proffix Px5 Partner -unterhalten und entwickelt.
Übersicht
go get github.com/pitwch/go-wrapper-proffix-restapi/proffixrest
Die Konfiguration wird dem Client mitgegeben:
| Konfiguration | Beispiel | Type | Bemerkung |
|---|---|---|---|
| RestURL | https://myserver.ch:999 | string | URL der REST-APIohne pxapi/v4/ |
| apiDatabase | DEMO | string | Name der Datenbank |
| apiUser | USR | string | Names des Benutzers |
| apiPassword | b62cce2fe18f7a156a9c... | string | SHA256-Hash des Benutzerpasswortes |
| apiModule | []string{"ADR", "FIB"} | []string | Benötigte Module (mit Komma getrennt) |
| options | &px.Options{Timeout: 30} | *px.Options | Optionen (Details unter Optionen) |
Beispiel:
import ( px"github.com/pitwch/go-wrapper-proffix-restapi/proffixrest")varpxrest,err=px.NewClient("https://myserver.ch:999","USR","b62cce2fe18f7a156a9c719c57bebf0478a3d50f0d7bd18d9e8a40be2e663017","DEMO", []string{"ADR","FIB"},&px.Options{},)
Optionen sindfakultativ und werden in der Regel nicht benötigt:
| Option | Beispiel | Bemerkung |
|---|---|---|
| Key | 112a5a90fe28b...242b10141254b4de59028 | API-Key als SHA256 - Hash (kann auch direkt mitgegeben werden) |
| Version | v4 | API-Version; Standard = v4 |
| APIPrefix | /pxapi/ | Prefix für die API; Standard = /pxapi/ |
| LoginEndpoint | PRO/Login | Endpunkt für Login; Standard = PRO/Login |
| UserAgent | go-wrapper-proffix-restapi | User Agent; Standard = go-wrapper-proffix-restapi |
| Timeout | 15 | Timeout in Sekunden |
| VerifySSL | true | SSL prüfen |
| Batchsize | 200 | Batchgrösse für Batchrequests; Standard = 200 |
| Log | true | Aktiviert den Log für Debugging; Standard = false |
| HTTPClient | urlfetch.Client(ctx) | Eigener HTTP-Client; Standard = interner Client pro Instanz |
| Logger | log.New(os.Stdout, "px: ", log.LstdFlags) | Optionaler Logger; überschreibt Log-Flag |
| VolumeLicence | false | Nutzt PROFFIX Volumenlizenzierung |
| Parameter | Typ | Bemerkung |
|---|---|---|
| endpoint | string | Endpunkt der PROFFIX REST-API; z.B. ADR/Adresse,STU/Rapporte... |
| data | interface{} | Daten (werden automatisch in JSON konvertiert) |
| parameters | url.Values | Parameter gemässPROFFIX REST API Docs |
Folgende unterschiedlichen Methoden sind mit dem Wrapper möglich:
//Contextctx:=context.Background()//Einfache Abfragerc,_,statuscode,err:=pxrest.Get(ctx,"ADR/Adresse/1", url.Values{})//Abfrage mit Parameternparam:= url.Values{}param.Set("Filter","Vorname@='Max'")rc,_,statuscode,err:=pxrest.Get(ctx,"ADR/Adresse",param)
$pxrest=newClient(...)vardatamap[string]interface{}=map[string]interface{}{"Name":"Muster GmbH","Ort":"Zürich","Zürich":"8000", }rc,header,statuscode,err:=pxrest.Put(ctx,"ADR/Adresse",data)
$pxrest=newClient(...)vardatamap[string]interface{}=map[string]interface{}{"Ort":"Zürich","Zürich":"8000", }rc,header,statuscode,err:=pxrest.Patch(ctx,"ADR/Adresse/1",data)
vardatamap[string]interface{}=map[string]interface{}{"Name":"Muster GmbH","Ort":"Zürich","Zürich":"8000", }//Query Endpoint ADR/Adresse with Headersrc,header,statuscode,err:=pxrest.Post(ctx,"ADR/Adresse",data)
//Delete Endpoint ADR/Adresse with Headers_,_,_,err=pxrest.Delete(ctx,"ADR/Adresse/2")
Alle Methoden gebenio.ReadCloser,http.Header,int sowieerror zurück.
| Rückgabetyp | Bemerkung |
|---|---|
io.ReadCloser | Daten |
http.Header | Header |
int | HTTP-Status Code |
error | Fehler; Standardrückgabe ohne Fehler istnil |
Beispiel (Kein Header, Ohne Statuscode):
// Returns no Header (_)rc,_,_,err:=pxrest.Get(ctx,"ADR/Adresse/1", url.Values{})
Beispiel (Mit Header, Ohne Statuscode):
// Returns Headerrc,header,_,err:=pxrest.Post(ctx,"ADR/Adresse/1",data)// Print Header->Locationfmt.Print(header.Get("Location"))
Hinweis: Der Typio.ReadCloser kann mittels Buffer Decode gelesen werden:
rc,header,_,err:=pxrest.Get(ctx,"ADR/Adresse/1", url.Values{})buf:=new(bytes.Buffer)buf.ReadFrom(rc)resp:=buf.String()fmt.Printf(resp,err)deferrc.Close()
Detaillierte Fehlerinformationen der REST-API können über den Fehlertyp PxError ermittelt werden.
// Query with Errorrc,_,_,err:=pxrest.Get(ctx,"ADR/Adresse/xxx", url.Values{})fmt.Print(err.(*PxError).Message)// Message fieldfmt.Print(err.(*PxError).Status)// Status fieldfmt.Print(err.(*PxError).Fields)// Failed fields
Im Standard wird das FeldMessage sowie fehlgeschlageneFields ausgegeben.
Loggt den Client von der PROFFIX REST-API aus und gibt die Session / Lizenz damit wieder frei.
Hinweis: Es wird automatisch die im Client gespeicherte PxSessionId für den Logout verwendet
statuscode,err:=pxrest.Logout(ctx)
Der Wrapper führt denLogout auch automatisch bei Fehlern durch damit keine Lizenz geblockt wird.
Ruft Infos vom EndpunktPRO/Info ab.
Hinweis: Dieser Endpunkt / Abfrage blockiert keine Lizenz
rc,err:=pxrest.Info(ctx,"112a5a90fe28b23ed2c776562a7d1043957b5b79fad242b10141254b4de59028")// Buffer decode for plain text responsebuf:=new(bytes.Buffer)buf.ReadFrom(rc)resp:=buf.String()fmt.Printf(resp,err)deferrc.Close()
Ruft Infos vom EndpunktPRO/Datenbank ab.
Hinweis: Dieser Endpunkt / Abfrage blockiert keine Lizenz
rc,err:=pxrest.Database(ctx,"112a5a90fe28b23ed2c776562a7d1043957b5b79fad242b10141254b4de59028")// Buffer decode for plain text responsebuf:=new(bytes.Buffer)buf.ReadFrom(rc)resp:=buf.String()fmt.Printf(resp,err)deferrc.Close()
Loggt den Client mit einer gegebenen PxSessionId ein (wird z.B. bei Erweiterungen verwendet)
pxrest.ServiceLogin(ctx,"7e024696-49e4-e54e-1a20-ffc0ba9a1374")
Der Wrapper führt denLogout auch automatisch bei Fehlern durch damit keine Lizenz geblockt wird.
Lädt Datei zum EndpunktPRO/Datei hoch.
fp:="C:/test.png"file,err:=ioutil.ReadFile(fp)rc,headers,status,err:=pxrest.File(ctx,"Demofile.png",file)// Buffer decode for plain text responsebuf:=new(bytes.Buffer)buf.ReadFrom(rc)resp:=buf.String()fmt.Printf(resp,err)deferrc.Close()// Get temporary filename from Headersid:=proffixrest.ConvertLocationToID(headers)
Liest eine Datei aufgrund der DateiNr
rc,filename,_,_,err:=px.GetFile(ctx,"9PnrK4XiFzyrTdDK9HHLE80Kk2lARKS5Ppn2WNrOPqGHzCREYtidmRhUKXq-82uSvDerMckkcB3srYn9TsKvk0C1P9ca3deIeMzp5jiaeIwT4wgnH0qarwdny17-8eGq",nil)px.WriteFile(filename,rc)
Gibt sämtliche Ergebnisse aus und iteriert selbständig über die kompletten Ergebnisse der REST-API.Ideal wenn z.B. nicht klar ist wieviele Ergebnisse vorliegen aber trotzdem alle gebraucht werden.
Hinweis: Das mögliche Total der Ergebnisse wird aus dem HeaderFilteredCount ermittelt
//Set Paramsparams:= url.Values{}params.Set("Fields","AdressNr,Name,Ort,Plz")//GET Batch on ADR/Adressen with Batchsize = 35rc,total,err:=pxrest.GetBatch(ctx,"ADR/Adresse",params,35)//Returns all possible results in `rc`, the complete amount of results as int in `total` and//possible errors in `err`
Synchronisiert Daten im Batch Modus.Damit lassen sichbeliebig viele Einträge eines Endpunktes (z.B: 100 Artikel) synchronisieren - der Wrapper wähltautomatisch die passende Methode aus und aktualisiert den JSON-Body (abhängig vom Vorhandensein eines Keyfields und dessen Ergebnis einer GET-Abfrage)
//First entry has AdressNr and exist -> PUT, second has no AdressNr -> POSTjsonExample:=`[{ "AdressNr": 276, "Name": "EYX AG", "Vorname": null, "Strasse": "Zollstrasse 2", "PLZ": "8000", "Ort": "Zürich" }, { "Name": "Muster", "Vorname": "Hans", "Strasse": "Zürcherstrasse 2", "PLZ": "8000", "Ort": "Zürich" }]`created,updated,failed,errors,total,err:=pxrest.SyncBatch(ctx,"ADR/Adresse","AdressNr",true,[]byte(jsonExample))//Results// created -> [333]// updated -> [276]// failed -> []// errors -> []// total -> 2// err -> nil
Der Batch läuft von Anfang bis Ende durch - die Keyfelder der Ergebnisse werden in den jeweiligen Variablenupdated,created,failed,errors ausgegeben.
Hinweis: Der ParameterKeyfield wird genutzt um je nach Methode das Schlüsselfeld im URL - Slug automatischanzupassen. Der ParameterremoveKeyfield wird verwendet um das Keyfield aus dem Body zu entfernen (z.B: bei ADR/Adressen)
Gibt direkt die Liste der PROFFIX REST API aus (ohne Umwege)
//Get Filefile,headers,status,err:=pxrest.GetList(ctx,"ADR_Adress-Etiketten Kontakte.labx",nil)//Write Filepx.WriteFile("C://test//test.pdf",file)//Hilfsfunktion um Dateien zu schreiben
Hinweis: Der Dateityp (zurzeit nur PDF) kann über den HeaderFile-Type ermittelt werden
Prüft, ob die API funktioniert (Basis-Test)
//CheckApierr:=pxrest.CheckApi(ctx)
*Hinweis: Die Test - Funktion loggt sich ein, prüft ob eine PxSessionId vorhanden ist und ruft eine Adresse ab.
Konvertiert einen Zeitstempel der PROFFIX REST-API in time.Time
t:=ConvertPXTimeToTime('2004-04-1100:00:00')
Konvertiert einen time.Time in einen Zeitstempel der PROFFIX REST-API
t:=ConvertTimeToPXTime(time.Now())
Extrahiert die ID aus dem Header Location der PROFFIX REST-API
id:=ConvertLocationToID(header)
Schreibt eine Datei
px.WriteFile("C://test//test.pdf",file)
todo
Im Ordner/examples finden sich weitere,auskommentierte Beispiele.
About
Golang Wrapper für die PROFFIX REST API
Topics
Resources
License
Code of conduct
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Uh oh!
There was an error while loading.Please reload this page.
Contributors2
Uh oh!
There was an error while loading.Please reload this page.
