Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Golang Wrapper für die PROFFIX REST API

License

NotificationsYou must be signed in to change notification settings

pitwch/go-wrapper-proffix-restapi

Repository files navigation

GitHub releaseGo Report CardCIGoDoccodecovGitHub license

Golang Wrapper für PROFFIX REST-API

Der zuverlässige Wrapper für die PROFFIX REST-API in Go.

alt text

Dieser Wrapper wird von derPedrett IT+Web AG - dem zuverlässigen und innovativen Proffix Px5 Partner -unterhalten und entwickelt.

Übersicht

Installation

go get github.com/pitwch/go-wrapper-proffix-restapi/proffixrest

Konfiguration

Die Konfiguration wird dem Client mitgegeben:

KonfigurationBeispielTypeBemerkung
RestURLhttps://myserver.ch:999stringURL der REST-APIohne pxapi/v4/
apiDatabaseDEMOstringName der Datenbank
apiUserUSRstringNames des Benutzers
apiPasswordb62cce2fe18f7a156a9c...stringSHA256-Hash des Benutzerpasswortes
apiModule[]string{"ADR", "FIB"}[]stringBenötigte Module (mit Komma getrennt)
options&px.Options{Timeout: 30}*px.OptionsOptionen (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

Optionen sindfakultativ und werden in der Regel nicht benötigt:

OptionBeispielBemerkung
Key112a5a90fe28b...242b10141254b4de59028API-Key als SHA256 - Hash (kann auch direkt mitgegeben werden)
Versionv4API-Version; Standard = v4
APIPrefix/pxapi/Prefix für die API; Standard = /pxapi/
LoginEndpointPRO/LoginEndpunkt für Login; Standard = PRO/Login
UserAgentgo-wrapper-proffix-restapiUser Agent; Standard = go-wrapper-proffix-restapi
Timeout15Timeout in Sekunden
VerifySSLtrueSSL prüfen
Batchsize200Batchgrösse für Batchrequests; Standard = 200
LogtrueAktiviert den Log für Debugging; Standard = false
HTTPClienturlfetch.Client(ctx)Eigener HTTP-Client; Standard = interner Client pro Instanz
Loggerlog.New(os.Stdout, "px: ", log.LstdFlags)Optionaler Logger; überschreibt Log-Flag
VolumeLicencefalseNutzt PROFFIX Volumenlizenzierung

Methoden

ParameterTypBemerkung
endpointstringEndpunkt der PROFFIX REST-API; z.B. ADR/Adresse,STU/Rapporte...
datainterface{}Daten (werden automatisch in JSON konvertiert)
parametersurl.ValuesParameter gemässPROFFIX REST API Docs

Folgende unterschiedlichen Methoden sind mit dem Wrapper möglich:

Get / Query
//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)
Put / Update
$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)
Patch / Update
$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)
Post / Create
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 / Delete
//Delete Endpoint ADR/Adresse with Headers_,_,_,err=pxrest.Delete(ctx,"ADR/Adresse/2")
Response / Antwort

Alle Methoden gebenio.ReadCloser,http.Header,int sowieerror zurück.

RückgabetypBemerkung
io.ReadCloserDaten
http.HeaderHeader
intHTTP-Status Code
errorFehler; 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()
Fehlerhandling / Error

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.

Spezielle Endpunkte

Logout

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.

Info

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()
Datenbank

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()
ServiceLogin

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.

PRO/Datei bzw. File Upload

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)
PRO/Datei bzw. File Download

Liest eine Datei aufgrund der DateiNr

rc,filename,_,_,err:=px.GetFile(ctx,"9PnrK4XiFzyrTdDK9HHLE80Kk2lARKS5Ppn2WNrOPqGHzCREYtidmRhUKXq-82uSvDerMckkcB3srYn9TsKvk0C1P9ca3deIeMzp5jiaeIwT4wgnH0qarwdny17-8eGq",nil)px.WriteFile(filename,rc)
GET Batch

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`
Sync Batch

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)

GET List

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

CheckApi

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.

Hilfsfunktionen

ConvertPXTimeToTime

Konvertiert einen Zeitstempel der PROFFIX REST-API in time.Time

t:=ConvertPXTimeToTime('2004-04-1100:00:00')
ConvertTimeToPXTime

Konvertiert einen time.Time in einen Zeitstempel der PROFFIX REST-API

t:=ConvertTimeToPXTime(time.Now())
ConvertLocationToID

Extrahiert die ID aus dem Header Location der PROFFIX REST-API

id:=ConvertLocationToID(header)
WriteFile

Schreibt eine Datei

px.WriteFile("C://test//test.pdf",file)

CMD / Docker

todo

Weitere Beispiele

Im Ordner/examples finden sich weitere,auskommentierte Beispiele.

About

Golang Wrapper für die PROFFIX REST API

Topics

Resources

License

Code of conduct

Stars

Watchers

Forks

Packages

No packages published

Contributors2

  •  
  •  

[8]ページ先頭

©2009-2025 Movatter.jp