Module server.Funktion
Funktion - CASYMIR REST API Standard Funktionen (Intern)
Functions
| RESTFunktion.err (severity, msg, ...) | err erzeugt eine Error meldung im Casy log mit Nummerierter ausgabe | 
| RESTFunktion.sql_check_errors (conn[, errmsge]) | sql_check Prüft ob in der SQL Verbindung ein fehler besteht | 
| RESTFunktion.QuerySplit (query[, sort]) | QuerySplit Erzeugt eine Table aus dem Querystring | 
| RESTFunktion.casylog (log[, t]) | casylog Erzeugt einen Eintrag im Casylog, Table werden Rekursiv ausgefürt | 
| RESTFunktion.Reflink (T, Verweis, ID[, methode[, Verweisrel[, parameter]]]) | Reflink Durchsucht eine Tabelle nach der ID und erzeugt einen links abschnitt Der Link wird auf die Ebene der ID angefügt | 
| RESTFunktion.isoMappingTo639 (T, ID) | ISO Mapping zu ISO-639-2B AdrSprache (Ausgang) von Casy intern zu ISO Standard | 
| RESTFunktion.isoMappingFrom639 (T, ID) | ISO Mapping von ISO-639-2B AdrSprache (Eingang) von ISO Standard zu Casy Intern | 
| RESTFunktion.isoMappingTo3166 (T, ID) | ISO Mapping zu ISO 3166 ALPHA-2 OrtLand (Ausgang) von Casy intern zu ISO Standard | 
| RESTFunktion.isoMappingFrom3166 (T, ID) | ISO Mapping From ISO 3166 ALPHA-2 OrtLand (Eingang) von ISO Standard zu Casy Intern | 
| RESTFunktion.mustenter (T, ID[, mehrstufig]) | Muss Felder im Body | 
| RESTFunktion.sql_table (DB, sql[, UTC[, noTrimm]]) | Abruf SQl Befehl aus Datenbank $VARIABLE werden ersetzen aus den Local(prio), Global(sec) else '' | 
| RESTFunktion.Debug (Variable[, Text[, endl[, textausgabe]]]) | Debug Erzeugt ab Level 6 Casylog einträge, ab 7 Wird eine Datei Angelegt Webzugriff | 
| RESTFunktion.SortSql (queryStr) | SortSql ersetzt das vorzeichen welches vom Query stammt durch ein sql Code Interne Funktion von QuerySplit | 
| RESTFunktion.Status (code) | Statusmeldungen werden vorm Header senden umgemapt, DB Log des Status erfolgt vor Mapping https://support.casymir.ch/wiki/doku.php?id=support:optools:technotes:restapi#head | 
| RESTFunktion.errBody (Status, msg, Daten) | Standard Error Meldung für Head und Body | 
| RESTFunktion.TmpFilename ([Prefix[, Ext]]) | TmpFilename erzeugen. | 
| RESTFunktion.CreateTmpFile ([Prefix[, Ext[, methode]]]) | TmpFile kreieren. | 
| RESTFunktion.UtcToLocal (iso_str[, Format]) | Umwandeln ISO Zeitzonen. | 
Functions
- RESTFunktion.err (severity, msg, ...)
- 
    err erzeugt eine Error meldung im Casy log mit Nummerierter ausgabe
    
    Parameters:
- RESTFunktion.sql_check_errors (conn[, errmsge])
- 
    sql_check Prüft ob in der SQL Verbindung ein fehler besteht
    
    Parameters:- conn userdata -- DB verbindung welche auf Fehler und Mitteilungen geprüft wird
- errmsge string fehlermeldung (optional)
 Returns:- 
           string
        Error Message
    
 Usage:local errmsg = RESTFunktion.sql_check_errors(conn,err) if errmsg then retBody['error_description'] = 'Endpunkt DB Fehler: sql_check_errors ' .. tostring(errmsg) return retBody end 
- RESTFunktion.QuerySplit (query[, sort])
- 
    QuerySplit Erzeugt eine Table aus dem Querystring
    
    Parameters:- query string Verarbeitung des Query string von der URL
- sort bool Sortierung +- in sql umwandeln (optional)
 Returns:Usage:GET /www/artikel/C202?waehrabk=EUR&debinr=123456 query = RESTFunktion.QuerySplit(QueryStr,true) local field = query.fields [nil] local sort = query.sorts [nil] local waehrabk = query.waehrabk ['EUR'] local debinr = query.debinr ['123456'] Optional kann die Sortierung +- in SQL String umgewandelt werden 
- RESTFunktion.casylog (log[, t])
- 
    casylog Erzeugt einen Eintrag im Casylog, Table werden Rekursiv ausgefürt
    
    Parameters:- log mix Inhalt zum Casylog
- t string Bezeichnung (optional)
 Usage:- local debiNr = '123456' RESTFunktion.casylog(debiNr,'Nummer Debi') May 17 17:31:41 victoria ?: (kommerz) 20733 - Nummer Debi: 123456 
- local t = {debiNr = '123456',kredNr = '654321'} RESTFunktion.casylog(t) May 17 17:31:41 victoria ?: (kommerz) 20733 - debiNr: 123456 May 17 17:31:41 victoria ?: (kommerz) 20733 - kredNr: 654321 
 
- RESTFunktion.Reflink (T, Verweis, ID[, methode[, Verweisrel[, parameter]]])
- 
    Reflink Durchsucht eine Tabelle nach der ID und erzeugt einen links abschnitt
 Der Link wird auf die Ebene der ID angefügt
    
    Parameters:- T table -- Tabele welche Rekursiv durchsucht wird
- Verweis string -- Auf welche URI Verweist wird ohne Pattern
- ID string -- Wert der die Pattern abbildet
- methode string/table -- Methode mit welcher der Link geht default GET (optional)
- Verweisrel string -- Bedeutung Link, Relation kann leerzeichen Enthalten (optional)
- parameter table -- '{parameter,feld mit wert}' (optional)
 Returns:Usage:data, err = RESTFunktion.sql_table(DB,_sql) data = RESTFunktion.Reflink(data,'artikel/','ArtNr'.'GET') data = RESTFunktion.Reflink(data,'artikel/','ArtNr'.{'GET','PATCH'}) data = RESTFunktion.Reflink(data,'artikel/','ArtNr') "links": [ { "rel": "artikel/", "type": "GET", "href": "https://casyrest.opag.loc/www/artikel/C202" } ] 
- RESTFunktion.isoMappingTo639 (T, ID)
- 
    ISO Mapping zu ISO-639-2B AdrSprache (Ausgang)
 von Casy intern zu ISO Standard
    
    Parameters:- T table -- Daten Tabel welches durchsucht wird
- ID string -- Bezeichnung, Inhalt wird ersetzt durch Mapping
 Returns:- 
           table
        T -- Modifizierte
    
 Usage:data, err = RESTFunktion.sql_table(DB,_sql) print(data["AdrSprache"]) = "D" data = RESTFunktion.isoMappingTo639(data,'AdrSprache') print(data["AdrSprache"]) = "ger" 
- RESTFunktion.isoMappingFrom639 (T, ID)
- 
    ISO Mapping von ISO-639-2B AdrSprache (Eingang)
 von ISO Standard zu Casy Intern
    
    Parameters:- T table -- Daten Tabel welches durchsucht wird
- ID string -- Bezeichnung, Inhalt wird ersetzt durch Mapping
 Returns:- 
           table
        T -- Modifizierte
    
 Usage:print(BodyTable["AdrSprache"]) = "ger" BodyTable = RESTFunktion.isoMappingFrom639(BodyTable,'AdrSprache') print(BodyTable["AdrSprache"]) = "D" 
- RESTFunktion.isoMappingTo3166 (T, ID)
- 
    ISO Mapping zu ISO 3166 ALPHA-2 OrtLand (Ausgang)
 von Casy intern zu ISO Standard
    
    Parameters:- T table -- Daten Tabel welches durchsucht wird
- ID string -- Bezeichnung, Inhalt wird ersetzt durch Mapping
 Returns:- 
           table
        T -- Modifizierte
    
 Usage:data, err = RESTFunktion.sql_table(DB,_sql) print(data["OrtLand"]) = "CH" data = RESTFunktion.isoMappingTo3166(data,'AdrSprache') print(data["OrtLand"]) = "CH" 
- RESTFunktion.isoMappingFrom3166 (T, ID)
- 
    ISO Mapping From ISO 3166 ALPHA-2 OrtLand (Eingang)
 von ISO Standard zu Casy Intern
    
    Parameters:- T table -- Daten Tabel welches durchsucht wird
- ID string -- Bezeichnung, Inhalt wird ersetzt durch Mapping
 Returns:- 
           table
        T -- Modifizierte
    
 Usage:print(BodyTable["OrtLand"]) = "DE" BodyTable = RESTFunktion.isoMappingFrom3166(BodyTable,'AdrSprache') print(BodyTable["OrtLand"]) = "D" 
- RESTFunktion.mustenter (T, ID[, mehrstufig])
- 
    Muss Felder im Body
    
    Parameters:- T table --Orginal Table welches geprüft wird
- ID table -- Felder die vorhanden sein müssen. Beispiel: {'OrtPLZ',{'AdrFirma','AdrName'}} OrtPLZ muss vorhanden, (AdrFirma oder AdrName)
- mehrstufig boolean -- Suche nur in der ersten Ebene oder rekursiv default false (optional)
 Returns:- 
           boolean
        -- false kein fehler else table mit Fehlenden Angaben
    
 Usage:local _mussField = {'KontaktAdr','WaehrAbk','FAKTZahlArt'} data = RESTFunktion.mustenter(BodyTable,_mussField,false) if data then status = 26 msg = 'There are missing fields ' retBody = { success = success, ['msg'] = tostring(msg), ['Status'] = status, ['Data'] = { ['mustenter'] = _mussField, ['missing'] = data } } return retBody end 
- RESTFunktion.sql_table (DB, sql[, UTC[, noTrimm]])
- 
    Abruf SQl Befehl aus Datenbank
 $VARIABLE werden ersetzen aus den Local(prio), Global(sec) else ''
    
    Parameters:- DB
            userdata
- Datenbank verbindung
 
- sql
            string
- Sql zum ausführen
 
- UTC
            boolean
- Modified_UTC Zeit umrechnen default false
 
- noTrimm
            boolean
- Skipp the Trimm from String
 
 Returns:Usage:local AdrNr = 123 local PH ='ERTZ' local key = 'tzui' _sql = [[ select a.AdrNr, DatumUTC = convert(varchar(20), getdate(), 23) from Adressen a, FirmHist ph, Kunde k where a.AdrNr = $AdrNr and ph.PHKey = '$PH' and ph.AbDatum <= getdate() and getdate() <= isnull(ph.BisDatum, getdate()) and ph.FirmenID = k.FirmenID and ph.Contents = '$key' and (k.KundLief = $AdrNr or k.KundRech = $AdrNr or k.KundKontakt = $AdrNr) ]] local Pdata, err = RESTFunktion.sql_table(DB,_sql,true) if err then status = 22 msg = 'DB Error from Endpoint: '.. tostring(err) retBody = { success = success, ['msg'] = tostring(msg), ['Status'] = status, ['Data'] = data } return retBody end 
- DB
            userdata
- RESTFunktion.Debug (Variable[, Text[, endl[, textausgabe]]])
- 
    Debug Erzeugt ab Level 6 Casylog einträge, ab 7 Wird eine Datei Angelegt Webzugriff
    
    Parameters:- Variable mix wird Ausgegeben bei table findet eine Rekursion
- Text string Bezeichnungstext zum ersten parameter (optional)
- endl int Fügt die Anzahl der Zeilen umbrüche hinzu (optional)
- textausgabe bool intern use bei Rekursion ob Text ausgeben werden soll (optional)
 Usage:local Status = 22 RESTFunktion.Debug(Status,'Status',1) 
- RESTFunktion.SortSql (queryStr)
- 
    SortSql ersetzt das vorzeichen welches vom Query stammt durch ein sql Code
 Interne Funktion von QuerySplit
    
    Parameters:- queryStr string sucht Zeichen vor dem Text und ersetzt diese am ende
 Returns:
- RESTFunktion.Status (code)
- 
    Statusmeldungen werden vorm Header senden umgemapt,
 DB Log des Status erfolgt vor Mapping
 https://support.casymir.ch/wiki/doku.php?id=support:optools:technotes:restapi#head
    
    Parameters:- code int,string Interne Code umwandlung in HTTPStatus
 Returns:- 
           int
        HTTP Status Code
    
 
- RESTFunktion.errBody (Status, msg, Daten)
- 
    Standard Error Meldung für Head und Body
    
    Parameters:- Status int -- Nummer für den Status
- msg string -- Meldeung welche erscheint
- Daten mix -- Daten die angehängt werden sollen body
 Returns:- 
           table
        -- Tabelle welche direkt an return gegeben werden kann
    
 Usage:Waehr, err = RESTFunktion.sql_table(DB,_sql,false) if err then return RESTFunktion.errBody(22,'DB Error from Endpoint: ' .. tostring(err),Waehr) end 
- RESTFunktion.TmpFilename ([Prefix[, Ext]])
- 
    TmpFilename erzeugen.
 Erzeugt einen Pfadnamen für eine temporäre Datei.
    
    Parameters:- Prefix
            string
- Dateiname Vorspann, Default nil
 
- Ext
            string
- Dateiname Abspann z.B '.pdf', Default nil
 
 Returns:- 
           Filename
- Dateiname
 Usage:RESTFunktion.TmpFilename('Test_','.pdf') Test_lua_q9VA6Y.pdf local basename = RESTFunktion.TmpFilename() if not basename then return RESTFunktion.errBody(26, 'Cannot create Tempdir') end -- basename == /home/kommerz/tmp/lua_q9VA6Y 
- Prefix
            string
- RESTFunktion.CreateTmpFile ([Prefix[, Ext[, methode]]])
- 
    TmpFile kreieren.
 Erzeugt eine temporäre Datei und öffnet diese zum Beschreiben.
    
    Parameters:- Prefix
            string
- Dateiname Vorspann, Default nil
 
- Ext
            string
- Dateiname Abspann z.B '.pdf', Default nil
 
- methode
            string
- Default 'w' @see https://www.casymir.ch/files/gtkdoc3/lua/manual.html#pdf-io.open
 
 Returns:- 
           Datei
- Filehandle
 
- 
           FilePath
- DateiPath/Name
 
 Usage:local file, basename = RESTFunktion.CreateTmpFile('Test_','.pdf','wb') if not file then return RESTFunktion.errBody(26, 'Cannot create Tempfile') end -- file == file (0xe96250) '/home/kommerz/log/tmp/Test_lua_q9VA6Y.pdf' -- basename == /home/kommerz/log/tmp/lua_q9VA6Y file:write('abc') file:close() 
- Prefix
            string
- RESTFunktion.UtcToLocal (iso_str[, Format])
- 
    Umwandeln ISO Zeitzonen.
    
    Parameters:- iso_str
            string
- Dateiname Vorspann, Default nil
 
- Format
            string
- Default '*t' @see https://www.casymir.ch/files/gtkdoc3/lua/manual.html#pdf-os.date
 
 Returns:- 
           string,table
        Formatierte Lokale Zeit
    
 
- iso_str
            string