BENUTZERHANDBUCH Programmierer-Handbuch BENUTZERHANDBUCH Vertrieb TOOLMAKER ADVANCED EFFICIENCY GMBH D-86916 Kaufering, Westendstraße 34 Telefon: (+49) 08191-968-111 Telefax: (+49) 08191-968-100 Hotline TOOLMAKER HOTLINE Telefon: (+49) 040-559 19 62 Telefax: (+49) 040-559 19 08 Bildschirme Die abgebildeten iSeries-Masken in diesem Handbuch entsprechen nur bedingt dem tatsächlichen Layout. Handbuch Version 2.10 (ausgedruckt am 24.02.2015), Handbuch bezieht sich auf Software Release 2.10 Layout: Toolmaker Advanced Efficiency GmbH, Kaufering © Copyright: 2009-2014 Toolmaker Advanced Efficiency GmbH B EN UT ZERHA ND BUC H 3 Inhalt Vertrieb ....................................................................................................................... 2 Hotline ........................................................................................................................ 2 Inhalt .......................................................................................................................... 3 1. ..................................................................................................... Allgemeine Informationen 9 1.1 Neuerungen seit Version 2.11 ............................................................................................ 12 2. ............................................................................................................... Quellen und Objekte 14 2.1 Bibliotheken ...................................................................................................................... 14 2.2 Binderverzeichnisse ........................................................................................................... 14 2.3 Aktivierungsgruppen .......................................................................................................... 15 2.4 Copy-Strecken .................................................................................................................. 16 2.4.1 Upgrade und Änderung von Copy-Strecken ............................................................. 16 2.4.2 Einbindung von Copy-Strecken ................................................................................ 17 2.4.3 Copy-Strecke WX_HSPECS H-Bestimmungen....................................................... 17 2.4.3.1 Individuelle Anpassung der H-Bestimmungen............................................. 19 2.4.3.2 Individuelle H-Bestimmungen .................................................................... 19 2.4.4 WX_HCOPYR Copyright ....................................................................................... 20 2.4.5 Copy-Strecke WX_FLDREF Referenz-Felder und Datenstrukturen ......................... 21 2.4.5.1 Copy-Strecken zur Referenzierung von Variablen ....................................... 21 2.4.5.2 Referenzierung und Prototypen ................................................................. 22 2.4.5.3 Referenz-Datenstruktur FLDREF ................................................................ 22 2.4.5.4 Referenz-Datenstrukturen für lange Text-Felder.......................................... 23 2.4.6 WX_PROTO Prototypen ........................................................................................ 25 2.5 Default-HTML-Dokumente ................................................................................................. 26 3. .................................................................................... Erstellen von WOPiXX-Programmen 27 4. ...............................................................................................................WOPiXX-Prozeduren 29 4.1 WOPiXX-Prozeduren im Überblick ...................................................................................... 29 4.1.1 Prozeduren für Work-Tables..................................................................................... 29 4.1.2 Prozeduren für Change Tables ................................................................................. 30 4.2 Parameter in WOPiXX-Prozeduren ..................................................................................... 31 4.3 Aufbereitungsoptionen für WOPiXX .................................................................................... 32 4.3.1 Steuerungsoptionen für HTML-Dokumente ............................................................... 32 4.3.1.1 Steuerungsoptionen nur für Work-Tables ................................................... 32 4.3.2 Vergleichsoperatoren für Filter Felder ........................................................................ 32 4.3.3 Aufbereitungsoptionen für Filter-Felder...................................................................... 34 4.3.4 Aufbereitungsoptionen für Spalten ............................................................................ 38 4.3.5 Aufbereitungsoptionen Kontext-Menü-Punkte ........................................................... 39 4.3.6 Aufbereitungsoptionen für Buttons ........................................................................... 42 4.3.7 Aufbereitungsoptionen für Detail-Anzeigen ................................................................ 43 4.3.8 Aufbereitungsoptionen für Header ............................................................................ 44 4.4 Standard-Bearbeitungs-Modi ............................................................................................. 44 4.5 Bedingtes Anzeigen von Ein-/Ausgabe-Feldern ................................................................... 45 4.6 Bedienerhilfe ..................................................................................................................... 48 4.7 Reihenfolge der Prozedur-Aufrufe....................................................................................... 49 4.8 Physische Dateien, SQL Tabellen oder Views...................................................................... 52 4.8.1 DDS beschriebene logische Dateien ......................................................................... 52 4.8.2 Dateien direkt verknüpfen oder SQL Views?.............................................................. 52 B EN UT ZERHA ND BUC H 4 4.8.3 Datei- und Feld-Namen............................................................................................ 53 4.9 Datenstrukturen und Ein-/Ausgabe-Felder .......................................................................... 53 4.10 Mehrsprachigkeit ............................................................................................................... 54 4.11 Work-Programm ............................................................................................................... 55 4.11.1 Template für Work-Programm .................................................................................. 56 4.11.2 Wx_OpnHTMLWrk() HTML Dokument öffnen ......................................................... 56 4.11.3 Prozeduren zur Definition von Filter-Feldern .............................................................. 57 4.11.3.1 WX_GENFLT() Generischer Filter ............................................................. 57 4.11.3.2 Wx_FltFile() Datei für Filter definieren........................................................ 59 4.11.3.3 Wx_FltFld() Filter-Feld definieren .............................................................. 61 4.11.3.4 Wx_FltFileFld() Filterfile und 1.Feld definieren............................................ 64 4.11.3.5 Wx_BegEnhFlt() Beginn erweiterter Filter ................................................. 66 4.11.4 Bedingte Filter-Felder Condition Group .................................................................. 67 4.11.4.1 Wx_FltIf() Beginn der Condition Group..................................................... 68 4.11.4.2 Wx_FltElse Else-Anweisung .................................................................... 68 4.11.4.3 Wx_FltEndIf() Ende Condition Group ....................................................... 69 4.11.4.4 Condition Group - Beispiel für den Aufruf ................................................... 70 4.11.5 Inline-Filter............................................................................................................... 70 4.11.5.1 WX_FltHelp Bedienerhilfe zu Filter hinzufügen .......................................... 72 4.11.5.2 Wx_FltNoHelp Bedienerhilfe für Filter unterbinden .................................... 73 4.11.6 Prozeduren für Kontext-Menü und Buttons ............................................................... 74 4.11.6.1 Wx_NoCtxMnuItm() Ohne Standard-Kontext-Menü.................................. 75 4.11.6.2 Wx_CtxMnuItmChange() Menü-Punkt Ändern.......................................... 76 4.11.6.3 Wx_CtxMnuItmCopy() Menü-Punkt Kopieren ........................................... 77 4.11.6.4 Wx_CtxMnuItmDelete() Menü-Punkt Löschen .......................................... 78 4.11.6.5 Wx_CtxMnuItmProperty() Menü-Punkt Anzeigen/Eigenschaften................ 79 4.11.6.6 Wx_CtxMnuItmDefault() Standard-Kontext-Menü ..................................... 80 4.11.6.7 Wx_CtxMnuItm() Kontextmenüpunkt definieren .......................................... 81 4.11.6.8 Wx_NoWrkBtn() Ohne Standard-Buttons................................................. 83 4.11.6.9 Wx_WrkBtnAdd() Button Hinzufügen/Erfassen ......................................... 84 4.11.6.10 Wx_WrkBtnDefault() Standard-Buttons.................................................... 85 4.11.6.11 Wx_WrkBtn() Button definieren .................................................................. 86 4.11.6.12 Wx_WrkBtnReseq- Resequenzierung ........................................................ 88 4.11.6.13 Wx_WrkBtnEdtList Editierbare Worktables .............................................. 89 4.11.7 Prozeduren zur Erstellung der Work Tables ............................................................... 90 4.11.7.1 Wx_WrkFile() Datei für Work Table definieren ........................................... 90 4.11.7.2 Prozeduren zur Definition von Schlüsseln ................................................... 93 4.11.7.2.1 Wx_WrkKeyRRN() Schüssel = Relative Satz-Nr. ................... 93 4.11.7.2.2 Wx_WrkKeyFld() Definieren Schlüssel-Felder ........................ 94 4.11.7.3 Wx_WrkFld() Feld/Spalte definieren ............................................................ 95 4.11.7.4 Wx_WrkWhere() Where-Bedingungen ........................................................ 97 4.11.7.5 Wx_WrkDftOrder() Default-Sortierung (Order By)......................................... 98 4.11.7.6 Wx_WrkSQLMan() SQL Select-Statement .................................................. 99 4.11.8 Prozeduren zur Ausgabe von Worktables ................................................................100 4.11.8.1 Wx_NoRcdTxt() - Anzahl Datensätze ausblenden .....................................101 4.11.8.2 Wx_RcdTxt Beliebiger Satz-Text ............................................................102 4.11.8.3 Wx_WrtWrkTbl() Worktable ausgeben ....................................................103 4.12 Ermitteln von Schlüssel-Werten .........................................................................................104 4.12.1 Wx_GetDBKeyInt() Ganzzahliger Schlüssel-Wert....................................................105 4.12.2 Wx_GetDBKeyArrInt() Gruppe von ganzzahligen Schlüssel-Werte...........................105 4.12.3 Wx_GetDBKeyDec() Numerischer Schlüssel-Wert .................................................106 4.12.4 Wx_GetDBKeyArrDec() Gruppe von dezimalen Schlüssel-Werten...........................107 4.12.5 Wx_GetDBKeyChar() Alphanum. Schlüssel-Wert ...................................................108 4.12.6 Wx_GetDBKeyArrChar() Gruppe von alphanumerischen Schlüssel-Werten .............109 4.12.7 Wx_GetDBKeyUC() Unicode-Schlüssel-Wert .........................................................110 B EN UT ZERHA ND BUC H 5 4.13 4.14 4.15 4.16 4.12.8 Wx_GetDBKeyArrUC() Gruppe von Unicode- Schlüssel-Werten .............................111 4.12.9 Wx_GetDBKeyFldChar() Zusammengesetzte Schlüssel..........................................112 4.12.10 Wx_GetDBKeyFldArrChar() Gruppe von zusammengesetzten Schlüsseln.113 Ermitteln und Setzen von Parameter-Werten......................................................................114 4.13.1 Allgemeine Parameter .............................................................................................115 4.13.1.1 Wx_SetParmChar() Setzen Parameter ....................................................116 4.13.1.2 Wx_SetParmArrChar() Setzen mehrere Parameter ..................................116 4.13.1.3 Wx_SetParmUC() Setzen Unicode-Parameter.........................................117 4.13.1.4 Wx_SetParmArrUC() Setzen mehrere Unicode- Parameter ......................118 4.13.1.5 Wx_GetParmChar() Ermitteln Parameter-Wert ........................................119 4.13.1.6 Wx_GetParmArrChar() Ermitteln mehrere alphanumerische Parameter .....120 4.13.1.7 Wx_GetParmUC() Ermitteln Unicode-Para-meter-Wert ............................120 4.13.1.8 Wx_GetParmArrUC() Ermitteln mehrere Unicode-Parameter-Werte..........121 4.13.2 Benannte Parameter ...............................................................................................122 4.13.2.1 Wx_SetNamedParm() Setzen alphanumerischen Parameter ....................122 4.13.2.2 Wx_SetNamedParmUC() Setzen Unicode-Parameter..............................123 4.13.2.3 Wx_SetNamedParmDec() Setzen numerischen Parameter mit DezimalPositionen ..............................................................................................................124 4.13.2.4 Wx_SetNamedParmInt() Setzen ganzzahligen numerischen Parameter ....125 4.13.2.5 Wx_SetNamedParmDate() Setzen Datums-Parameter ............................125 4.13.2.6 Wx_SetNamedParmTime() Setzen Zeit-Parameter ..................................126 4.13.2.7 Wx_SetNamedParmTimestamp() Setzen Zeitmarken-Parameter..............127 4.13.2.8 Wx_GetNamedParm() Ermitteln benannten alphanumerischen ParameterWert 128 4.13.2.9 Wx_GetNamedParmUC() Ermitteln benannten Parameter-Wert in Unicode 128 4.13.2.10 Wx_GetNamedParmDec() Ermitteln benannten numerischen Parameter-Wert mit Dezimal-Positionen ...........................................................................................129 4.13.2.11 Wx_GetNamedParmInt() Ermitteln benannten ganzzahligen Parameter-Wert 130 4.13.2.12 Wx_GetNamedParmDate() Ermitteln benannten Datums-Parameter-Wert 131 4.13.2.13 Wx_GetNamedParmTime() Ermitteln benannten Zeit-Parameter-Wert ......131 4.13.2.14 Wx_GetNamedParmTimestamp() Ermitteln benannten ZeitmarkenParameter-Wert......................................................................................................132 Ermitteln/Prüfen Modi .......................................................................................................133 4.14.1 Wx_isModeAdd() Modus Hinzufügen ....................................................................134 4.14.2 Wx_isModeChange() Modus Ändern .....................................................................135 4.14.3 Wx_isModeCopy() Modus Kopieren ......................................................................136 4.14.4 Wx_isModeDelete() Modus Löschen .....................................................................136 4.14.5 Wx_isModeProperty() Modus Anzeigen .................................................................137 4.14.6 Wx_isModeWrite() Modus Hinzufügen oder Kopieren .............................................138 4.14.7 Wx_isModeSave() Modus Sichern .........................................................................139 4.14.8 Wx_isModeApply() Modus Übernehmen................................................................140 4.14.9 Wx_isModeUpdate() Modus Sichern oder Übernehmen .........................................140 4.14.10 Wx_isModeOutput() Modus Anzeigen oder Eigenschaften .......................141 4.14.11 Wx_isMode() Prüfen beliebigen Modus ...................................................142 4.14.12 Wx_isModeReseq() Resequenzierung ....................................................143 4.14.13 Wx_isModeEdtList() Editierbare Worktable..............................................144 Umsortierung von Datensätzen in einer List-Anzeige ..........................................................145 4.15.1 Wx_GetReseqArrInt() Numerische Schlüssel-Werte in neuer Reihenfolge ................146 4.15.2 Wx_GetReseqArrChar() alphanumerische Schlüssel-Werte in neuer Reihenfolge .....147 4.15.3 Wx_GetReseqArrUC() Unicode-Schlüssel-Werte in neuer Reihenfolge ....................149 4.15.4 Wx_GetReseqString() AlphaString mit Schlüsseln in neuer Reihenfolge ...................150 4.15.5 Wx_GetReseqStringUC() Unicode-String mit Schlüsseln in neuer Reihenfolge .........151 Editierbare List-Anzeigen ..................................................................................................152 B EN UT ZERHA ND BUC H 6 4.17 4.18 4.19 4.20 4.16.1 XML-Dokument für editierbare Worktables - Aufbau .................................................153 4.16.2 Wx_GetEdtListXML() Empfangen alphanumerisches XML-Dokument mit geänderten Werten.............................................................................................................................154 4.16.3 RPG-Code Empfangen/Verarbeiten XML-Dokument..............................................155 Direkter Aufruf von CGI-Programmen ................................................................................156 4.17.1 Wx_CallPGM() Direkter Aufruf CGI-Programm .......................................................156 Change Programm ...........................................................................................................159 4.18.1 Template für Change-Programm .............................................................................160 4.18.2 Wx_OpnHTMLChg() HTML Dokument öffnen ........................................................161 4.18.3 Wx_ChgNavTab() Reiter definieren ........................................................................162 4.18.4 Wx_ChgBtn Buttons definieren .............................................................................164 4.18.5 Wx_ChgFile() Datei für Change Table definieren .....................................................166 4.18.6 Wx_ChgFld() Felder in Change Tables definieren ...................................................167 4.18.7 Wx_ChgFileFld() Datei und 1.Feld definieren ..........................................................170 4.18.8 Definieren Arbeits-Felder/Variablen ..........................................................................172 4.18.8.1 Wx_ManChgFld() Definieren Variable für jeden Datentypen ......................173 4.18.8.2 Wx_ManChgFldChar Def. alphanumerische Variable fixer Länge..............175 4.18.8.3 Wx_ManChgFldVarChar Def. alphanumerische Variable variabler Länge ..177 4.18.8.4 Wx_ManChgFldUC2 Definieren Unicode-Variable mit fixer Länge ............179 4.18.8.5 Wx_ManChgFldVarUC2 Definieren Unicode-Variable mit variabler Länge .181 4.18.8.6 Wx_ManChgFldPack() Definieren gepackte numerische Variable .............183 4.18.8.7 Wx_ManChgFldZone() Definieren gezonte numerische Variable ...............184 4.18.8.8 Wx_ManChgFldInt() Definieren ganzzahlige Variable ................................186 4.18.8.9 Wx_ManChgFldFloat() Definieren Fließkomma-Variable ...........................188 4.18.8.10 Wx_ManChgFldDate() Definieren Datums-Variable ..................................189 4.18.8.11 Wx_ManChgFldTime() Definieren Zeit-Variable ........................................191 4.18.8.12 Wx_ManChgFldTimestamp() Definieren Zeit-Variable...............................192 4.18.8.13 Wx_ManChgFldRef() Definieren Variable basierend auf Referenz-Feld ......194 4.18.9 Bedienerhilfe ..........................................................................................................195 4.18.9.1 Wx_ChgHelp Bedienerhilfe hinzufügen ...................................................197 4.18.9.2 Wx_ChgNoHelp Bedienerhilfe unterbinden .............................................197 4.18.10 Bedingte Ein-/Ausgabe-Felder Condition Group .....................................198 4.18.10.1 Wx_ChgIf() Beginn der Condition Group .................................................199 4.18.10.2 Wx_ChgElse() Else-Anweisung...............................................................199 4.18.10.3 Wx_ChgEndIf() Ende Condition Group....................................................200 4.18.10.4 Condition Group Beispiel..........................................................................201 4.18.11 Definition von HTML-Tabellen ...................................................................201 4.18.11.1 Wx_HTMLTbl Definition Tabelle..............................................................201 4.18.11.2 Wx_HTMLTblColHdg() Definition Spalten ................................................203 4.18.12 Wx_GetChgInput() Empfangen Eingabe-Daten .......................................205 4.18.13 Error-Handling .........................................................................................206 4.18.13.1 Wx_FldErr() Individuelle Fehlermeldung für Ein-/Ausgabe-Feld .................207 4.18.13.2 Wx_MultFldErr() Individuelle Fehlermeldung für mehrere Felder ................209 4.18.13.3 Wx_isChgFldErr() Prüfung mindestens eine individuelle Fehlermeldung.....211 4.18.14 Prozeduren zum Beenden von Change Tables ..........................................212 4.18.14.1 Wx_RtnPrv() Rücksprung auf vorgelagertes Programm ...........................212 4.18.14.2 Wx_WrtChgTbl() Beenden Change Programm ........................................213 Header-Informationen .......................................................................................................215 4.19.1 Wx_HdrText() Beliebigen Text in Header ausgeben ................................................215 4.19.2 Wx_HdrFile() Datei für Header-Informationen .........................................................217 4.19.3 Wx_HdrFld() Feld für Header-Informationen ...........................................................219 4.19.4 Wx_HdrFileFld() Datei und erstes Feld für Header ..................................................222 Sonstige Funktionen .........................................................................................................223 4.20.1 Wx_SplitStringArr() String in Feldgruppe splitten ....................................................223 4.20.2 Wx_SplitStringArrUC2() Unicode-Test in Feldgruppe splitten ..................................225 B EN UT ZERHA ND BUC H 7 5. ............................................................................................................... Beispiel-Programme 228 5.1 Work-Programm EXWRKAD01 .........................................................................................228 5.1.1 Programm EXWRKAD01 Web-Anzeige .................................................................228 5.1.2 Programm EXWRKAD01 - Source Code..................................................................228 5.2 Change-Programm EXCHGAD01 Adress-Stamm............................................................230 5.2.1 H-, F- und globale D-Bestimmungen .......................................................................232 5.2.2 Haupt-Programm ...................................................................................................233 5.2.3 Int_ReadData() Einlesen Daten..............................................................................236 5.2.4 Int_HdrFldDfn() Header Information .......................................................................236 5.2.5 Int_ChgFldDfn() Ein-/Ausgabe-Feld-Definition ........................................................237 5.2.6 Int_ChkInput() Eingabe-Prüfung ............................................................................240 5.2.7 Int_WrtUpdate() Daten fortschreiben .....................................................................240 5.2.8 Int_Dlt() Datensätze löschen .................................................................................242 6. .............................................................................................................WOPiXX Verwaltung 244 6.1 Starten/Beenden WOPiXX-Server......................................................................................244 6.2 Anmeldung unter WOPiXX ................................................................................................246 6.3 WOPiXX Menü im Überblick ...........................................................................................248 6.3.1 WOPiXX Verwaltungs-Programme ........................................................................248 6.3.2 WOPiXX IBM i Allgemeine Verwaltung ...................................................................251 6.4 WOPiXX Benutzer verwalten...........................................................................................253 6.4.1 List-Anzeige: Benutzer ............................................................................................254 6.4.2 Detail-Anzeige: Ändern/Erstellen Benutzer ...............................................................256 6.4.2.1 Erstellen/Ändern Anwender ......................................................................256 6.4.2.2 Erstellen/Ändern Gruppen-Profile..............................................................260 6.5 Bibliothekslisten................................................................................................................263 6.5.1 Allgemeine Bibliothekslisten ....................................................................................264 6.5.1.1 List-Anzeige Bibliothekslisten....................................................................264 6.5.1.2 Bibliothekslisten bearbeiten ......................................................................265 6.5.1.2.1 Bibliothekslisten erfassen...........................................................265 6.5.1.2.2 Bibliothekslisten anzeigen/ändern/kopieren ................................267 6.5.1.2.3 Bibliothekslisten löschen............................................................268 6.5.1.3 Bibliothekslisten verwalten........................................................................269 6.5.1.3.1 Bibliothek hinzufügen ................................................................270 6.5.1.4 Verwendung der Bibliothekslisten .............................................................271 6.5.2 Zuordnen Bibliotheksliste zu Anwendung .................................................................272 6.5.2.1 Zuordnung Bibliotheksliste/Anwendung bearbeiten....................................274 6.5.2.1.1 Zuordnung Bibliotheksliste / Anwendung erstellen ......................274 6.5.2.1.2 Zuordnung Bibliotheksliste / Anwendung ändern ........................275 6.5.2.1.3 Zuordnung Bibliotheksliste / Anwendung löschen .......................275 6.5.2.1.4 Alle Bibliothekslisten/ Anwendung anzeigen................................276 6.5.2.1.5 Bibliotheksliste anzeigen/bearbeiten ...........................................277 6.5.3 Zuordnen Bibliotheksliste zu Programm ...................................................................277 6.5.3.1 Zuordnung Bibliotheksliste/Anwendung bearbeiten....................................278 6.5.3.1.1 Zuordnung Bibliotheksliste / Programm erstellen ........................278 6.5.3.1.2 Zuordnung Bibliotheksliste / Programm ändern/anzeigen ............279 6.5.3.1.3 Zuordnung Bibliotheksliste / Programm löschen .........................280 6.5.3.1.4 Bibliothekliste anzeigen/bearbeiten ............................................280 7. ....................................................................................... Einrichten WOPiXX-Anwendungen 282 7.1 Anwendung .....................................................................................................................282 7.1.1 List-Anzeige Anwendungen.....................................................................................282 7.1.2 Wartung der Anwendungsdaten ..............................................................................285 7.1.2.1 Neue Anwendung erstellen.......................................................................286 7.1.2.2 Anwendung anzeigen/ändern ...................................................................289 B EN UT ZERHA ND BUC H 8 7.2 7.3 7.4 7.5 7.6 7.7 7.8 7.9 7.10 7.11 7.12 7.13 7.1.2.3 Anwendung löschen ................................................................................291 Standard Buttons/Items für List-Anzeigen..........................................................................291 Standard Buttons .............................................................................................................293 Anwendung kopieren........................................................................................................295 Anwendung umbenennen .................................................................................................296 Anwendungsmenü ...........................................................................................................298 7.6.1 List-Anzeige Anwendungsmenü ..............................................................................299 7.6.1.1 Anwendungsmenü bearbeiten ..................................................................301 7.6.1.2 Anwendungsmenü-Punkt erstellen............................................................301 7.6.1.3 Anwendungsmenü-Punkt anzeigen/ändern ...............................................304 7.6.1.4 Anwendungsmenü-Punkt löschen ............................................................305 Sprachen .........................................................................................................................306 7.7.1 List-Anzeige Sprachen ............................................................................................307 7.7.2 Sprachen bearbeiten ..............................................................................................308 7.7.2.1 Sprachen erfassen ...................................................................................309 7.7.2.2 Sprachen anzeigen/ändern.......................................................................310 7.7.2.3 Sprachen löschen ....................................................................................310 Parameter-Control-Informationen ......................................................................................311 7.8.1 List-Anzeige Parameter-Control-Daten ....................................................................313 7.8.2 Parameter-Control-Header bearbeiten .....................................................................316 7.8.3 Parameter-Control-Daten erstellen ..........................................................................317 7.8.4 Parameter-Control-Daten löschen ...........................................................................320 7.8.5 Parameter-Control-Detail-Informationen...................................................................320 7.8.5.1 Parameter-Control-Details erstellen...........................................................323 7.8.5.2 Parameter-Control-Details ändern/anzeigen ..............................................325 7.8.5.3 Parameter-Control-Details löschen ...........................................................326 Parameter übernehmen ....................................................................................................326 SQL-Abfrage ....................................................................................................................328 7.10.1 List-Anzeige SQL-Abfragen .....................................................................................330 7.10.2 SQL-Abfrage Erstellen ............................................................................................334 7.10.3 SQL-Abfragen Ändern/Anzeigen .............................................................................338 7.10.4 SQL-Abfragen Löschen ..........................................................................................339 7.10.5 SQL-Abfragen Spalten List-Anzeige ......................................................................340 7.10.5.1 SQL-Abfragen Spalten bearbeiten ............................................................342 7.10.6 SQL-Abfragen Berechtigungen List-Anzeige..........................................................347 7.10.6.1 SQL-Abfragen Berechtigungen erfassen ...................................................349 7.10.6.2 SQL-Abfragen Berechtigungen anzeigen/ändern .......................................350 7.10.6.3 SQL-Abfragen Berechtigungen löschen ....................................................351 SQL-Abfragen umbenennen .............................................................................................352 SQL-Abfragen übernehmen (kopieren)...............................................................................353 Parameter/Combo-Boxen.................................................................................................355 7.13.1 Vorhandene Comboboxen/Parameter .....................................................................356 7.13.2 List-Anzeige Parameter / Comboboxen verwalten .................................................356 B EN UT ZERHA ND BUC H 9 1. Allgemeine Informationen WOPiXX ist eine Sammlung von ILE Prozeduren und Funktionen, mit deren Hilfe Web-Anwendungen allein mit RPGIV erstellt werden können. Kenntnisse von HTML, JavaScript, CSS oder stateless Programmierung sind nicht erforderlich. WOPiXX basiert auf dem Tool Dirweb. Directweb steuert den Aufruf und die Verarbeitung von Web-Programmen mit Hilfe von AJAXTechnologien (Asynchronous Javascript And XML). Der Programmierer muss lediglich über WOPiXX die anzuzeigenden Dateien, Felder oder Spalten definieren und sofern gewünscht Aufbereitungsoptionen für die einzelnen Felder angeben. Weiterhin liefert Directweb Werkzeuge zur Verwaltung und Integration der Web-Programme. So können die Web-Programme in einem Menü hinterlegt werden. Bibliothekslisten können auf Programm- oder Anwendungsebene zugeordnet werden. Es bestehen Möglichkeiten zur Hinterlegung von Informationen und SQL-Statements, die in die WOPiXX-Programme eingebunden werden können, und die zur Laufzeit als Combo-Boxen oder Matchcode-Programme aufbereitet werden. Aktuell werden von Dirweb/WOPiXX die folgenden Anzeige-Formate unterstützt: List-Anzeigen (oder Work Tables/Programme): Listanzeigen können mit Subfiles in der Green-Screen-Programmierung verglichen werden. Über AJAX-Technologien sind automatisch (ohne zusätzliche Programmierung) Funktionen, wie Vertauschen der einzelnen Spalten, beliebige Festlegung der Spaltenbreite, auf- und absteigende Sortierung nach einzelnen Spalten oder Nachladen von Datensätzen integriert. Für Listanzeigen können diverse Filter definiert werden, durch die zur Laufzeit nur die gewünschten Informationen aus den Tabellen selektiert werden. Kontext-Menü-Punkte und Buttons zum Aufruf von Folge-Programmen können beliebig definiert werden. B EN UT ZERHA ND BUC H 10 Kontext-Menü Anzeige bei Rechtsclick Abbildung 1: Beispiel List-Anzeige/Work Table Detail-Anzeige (oder Change Tables/Programme): Detail-Anzeigen entsprechen den Detail-Anzeigen in der Green-Screen-Programmierung. Der Programmierer definiert die Dateien/Tabellen oder Views, sowie die anzuzeigenden/zu erfassenden Felder/Spalten. Es ist möglich diverse Reiter anzulegen unter denen die Felder/Spalten gruppiert werden. Aufbereitungsoptionen der einzelnen Felder/Spalten werden über SchlüsselWorte gehandelt. Das Einlesen der Daten, die Prüfungen sowie das Fortschreiben der Daten obliegt weiterhin dem Programmierer. Auch bei der Detail-Anzeige können Buttons für Bearbeitungsoptionen (z.B. Sichern der erfassten Daten) oder zum Aufruf von Folge-Programmen definiert werden. B EN UT ZERHA ND BUC H 11 B EN UT ZERHA ND BUC H 12 Abbildung 2: Detail-Anzeige / Change Table 1.1 Neuerungen seit Version 2.11 Benannte Parameter Informationen für den Folge-Aufruf (bzw. für die komplette Session) können in Form von benannten Parametern, d.h. unter einem beliebigen Namen gesichert werden. Es werden Funktionen zur Verfügung gestellt, über die benannte Parameter(-Werte) in fast jedem beliebigen Datentyp (Alpha, Unicode, gepackt/gezont, ganzzahlig, Datum, Zeit und Zeitmarke) gesichert werden kann. Des weiteren werden Funktionen zur Verfügung gestellt, über die die gesicherten benannten Parameter-Werte in den o.g. Datentypen empfangen werden können. Editierbare Listen Durch die Definition des Buttons EdtList bzw. den Aufruf der Funktion Wx_WrkBtnEdtList() können Spalten-Inhalte in List-Anzeigen geändert werden. Bei Klick auf den definierten Button werden die geänderten Spaltenwerte an das Programm zurückgegeben. Durch die Angabe des Schlüssel-Wortes Output bei der Spalten-Definition können die Spalten vor einer Änderung geschützt werden. ShortCuts für Buttons und Kontext-Menü-Anzeigen Mit Hilfe des neuen Schlüssel-Wortes ShortCut können für alle Buttons (in List- und Detail-Anzeigen), sowie für Kontext-Menü-Punkte ShortCuts definiert werden. Die ShortCuts stellen für den Anwender eine Alternative zum Mouseclick bzw. zur Kontext-Menü-Auswahl über die rechte Mouse-Taste dar. B EN UT ZERHA ND BUC H 13 Neue Schlüssel-Worte für Comboboxen DayName DayNameNum MonthName MonthNameNum Combobox mit Wochentagsnamen jeweils in der Spache des aktuellen Anwenders Rückgabe-Wert: Name des Wochentags Sortierung nach numerischem Wochentag (Montag=1, Sonntag=7) Combobox mit Wochentagsnamen jeweils in der Sprache des aktuellen Benutzers Rückgabe-Wert: Numerischer Wochentag (Montag=1) Sortierung nach dem numerischen Wochentag Combobox mit Monatsnamen jeweils in der Sprache des aktuellen Benutzers Rückgabe-Wert: Monats-Name Sortierung nach dem numerischen Monat Combobox mit Monatsnamen jeweils in der Spache des aktuellen Benutzers Rückgabe-Wert: numerischer Monat (Januar=1) Sortierung nach dem numerischen Monat Bilder in List-Anzeigen (Aufpoppen in vorgegebener Größe) Bilder in Listanzeigen werden über das Schlüssel-Wort image gesteuert. Wird nur das Schlüssel-Wort image angegeben, so wird beim Mouseover das Bild in Original-Größe angezeigt. Über zusätzliche Parameter bei Schlüssel-Wort image kann die Anzeigegröße festgelegt werden Image(Breite,Höhe) Schlüssel-Wort isLink Bei Schlüssel-Wort isLink wird bei einem Klick per Default in das Folge-Programm im Änderungsmodus verzweigt. Wird das Schlüssel-Wort isLink(Output) angegeben, wird in das Folge-Programm im Anzeigemodus verzweigt. B EN UT ZERHA ND BUC H 14 2. Quellen und Objekte 2.1 Bibliotheken Für die WOPIX-Entwicklung wurden zunächst die folgenden Bibliotheken angelegt. WOPIX Objekt-Bibliothek WOPIXSRC Quellen-Bibliothek In der Quellen-Bibliothek WOPIXSRC befindet sich der Source Code für alle WOPiXX-Programme und Service-Programme, sowie die DDS-Datei-Beschreibungen und die SQL-Skripte zur Erstellung von Datenbankenobjekten (Tabellen, Views, Indices, Sequences, etc.). Die Quellenbibliothek WOPIXSRC wird nicht ausgeliefert. Alle zur Erstellung von WOPiXX-Programmen benötigten Quellen, d.h. Prototypen, Referenz-Felder und Referenz-Datenstrukturen sind in der Bibliothek WOPIX hinterlegt und werden somit ausgeliefert. Da WOPiXX auf Directweb basiert wird auch die Bibliothek DIRWEB ausgeliefert. In dieser Bibliothek befinden sich alle zur Laufzeit benötigten Programm- und Service-Programm-Objekte, sowie Prototypen und Referenz-Felder und Referenz-Datenstrukturen, die zur Erstellung von Directweb und/oder WOPiXX-Programmen erforderlich sind. Für die Umwandlung von WOPiXX-Programmen sollten die beiden Objekt-Bibliotheken in der folgenden Reihenfolge in der Bibliotheksliste hinterlegt sein: QTEMP WOPIX DIRWEB Die Bibliothekslisten, die zur Laufzeit verwendet werden, werden in Directweb gesetzt. Wartungsprogramme über die die Bibliothekslisten vordefiniert und zugeordnet werden können, werden zur Verfügung gestellt. Werden die Bibliotheken WOPIX und DIRWEB nicht in der Bibliotheksliste für die individuellen WOPiXXProgramme hinterlegt, werden sie zur Laufzeit (der WOPiXX-Programme) automatisch in die Bibliotheksliste aufgenommen 2.2 Binderverzeichnisse Alle WOPiXX- und Directweb-Prozeduren sind in Service-Programmen hinterlegt. Um die Auflistung der Service-Programme beim Erstellen der individuellen WOPiXX-Programme zu vermeiden, wurden die Service-Programme in Binder-Verzeichnissen zusammengefasst. B EN UT ZERHA ND BUC H 15 Alle Service-Programme, in denen WOPiXX-Prozeduren enthalten sind, sind in Binderverzeichnis WXBNDDIR in Bibliothek WOPIX hinterlegt. Die Service-Programme mit den Dirweb-Prozeduren sind in Binderverzeichnis DWBNDDIR in Bibliothek DIRWEB hinterlegt. Die Binder-Verzeichnisse müssen beim Erstellen der individuellen WOPiXX-Programme angegeben werden. Toolmaker stellt die Copy-Strecke WX_HSPECS (2.4.3 Copy-Strecke WX_HSPECS H-Bestimmungen) in Datei QCPYLESRC in Bibliothek WOPIX zur Verfügung. Wird diese Copy-Strecke in die individuellen WOPiXX-Programme integriert, werden die Binder-Verzeichnisse beim Erstellen der Programme mit Option 14 in PDM bzw. dem CL-Befehl CRTBNDRPG (CRPG-Binderprogramm erstellen) automatisch integriert. * Binding Directories /IF NOT DEFINED(HBndDir) H BndDir('WXBNDDIR': 'DWBNDDIR': 'QC2LE') /ENDIF Source Code 1: H-Bestimmungen 2.3 Binderverzeichnisse Auszug aus Copy-Strecke WX_HSPECS Aktivierungsgruppen Da es sich sowohl bei den WOPiXX- als auch bei den Dirweb-Prozeduren um echte ILE Prozeduren handelt, können die individuellen WOPiXX-Programme nicht in der Default-Aktivierungsgruppe (= Default-Wert in Befehl CRTBNDPRG) erstellt werden, d.h. die Option DFTACTGRP=*NO ist nicht zulässig. Da in dem steuernden Dirweb-Programm intensiv mit Pointern gearbeitet wird und Pointer bzw. die zugeordneten Speicherbereiche nicht in unterschiedlichen Aktivierungsgruppen verwaltet werden können, müssen die individuellen WOPiXX-Programme in der gleichen Aktivierungsgruppe wie das steuernde Dirweb-Programm ausgeführt werden, d.h. die Option muss im Compile-Befehl oder den H-Bestimmungen angegeben werden. Bei Einbindung der Copy-Strecke WX_HSPECS (2.4.3 Copy-Strecke WX_HSPECS HBestimmungen), wird beim Erstellen der individuellen WOPiXX-Programme mit Option 14 im PDM bzw. dem CL-Befehl CRTBNDRPG die Aktivierungsgruppe auf *CALLER gesetzt. * Activation Group /IF NOT DEFINED(HActGrp) /DEFINE HActGrp /IF Defined (*CRTBNDRPG) H DftActGrp(*No) ActGrp('QILE') /ENDIF /ENDIF Source Code 2: H-Bestimmungen Aktivierungsgruppe Auszug aus Copy-Strecke WX_HSPECS B EN UT ZERHA ND BUC H 16 2.4 Copy-Strecken Für die Entwicklung von Web-Anwendungen mit WOPIXX werden die folgenden Copy-Strecken zur Verfügung gestellt. WX_HSPECS H-Bestimmungen - Alle wichtigen Schlüssel-Worte WX_HCOPYR H-Bestimmung - Schlüsselwort Copyright WX_FLDREF D-Bestimmungen Referenz-Felder und -Datenstrukturen WX_PROTO D-Bestimmungen Alle WOPiXX-Prototypen Alle Copy-Strecken und Prototypen, die in den Bibliotheken DIRWEB und WOPIX ausgeliefert werden, können vom Programmierer zur Definition von Referenz-Feldern oder Datenstrukturen bzw. zum Aufruf von Prozeduren verwendet werden. Anmerkung: Die in den Bibliotheken WOPIX und DIRWEB zur Verfügung gestellten Copy-Strecken können vom Programmierer in die Programme eingebunden werden. Der Source Code in den Copy-Strecken sollte jedoch vom Programmierer nicht verändert werden. Toolmaker übernimmt keine Verantwortung für Fehler, die durch Manipulation der zur Verfügung gestellten Quellen auftreten könnten. 2.4.1 Upgrade und Änderung von Copy-Strecken Diese Copy-Strecken werden jeweils bei einem Upgrade von WOPiXX ausgetauscht. Referenz-Felder und Datenstrukturen, die in den Copy-Strecken hinterlegt sind werden von Toolmaker nur in Ausnahmefällen geändert. Alle Parameter-Felder, die in Prototypen definiert sind, basieren auf diesen Referenz-Definitionen. Vorhandene Prozeduren bzw. deren Prototypen werden von Toolmaker allenfalls dahingehend erweitert, dass optionale Parameter ans Ende der Parameter-Liste hinzugefügt werden. Anmerkung: Nach einem Upgrade sollten die individuellen WOPiXX-Programme erneut kompiliert werden, um sicherzustellen, dass die Parameter- und VariablenDefinitionen übereinstimmen. Um Probleme mit abweichenden Feld-Definitionen zu vermeiden, sollten Variablen und Parameter-Felder, die an WOPiXX-Prozeduren übergeben werden mit Schlüssel-Wort LIKE oder LIKEDS basierend auf den entsprechenden Referenz-Felder bzw. Datenstrukturen definiert werden. B EN UT ZERHA ND BUC H 17 2.4.2 Einbindung von Copy-Strecken Die von Toolmaker zur Verfügung gestellten Copy-Strecken können wahlweise mit /COPY oder /INCLUDE in die individuellen Quellen eingebunden werden. Der Unterschied zwischen beiden Angaben liegt darin wie der SQL Precompiler die Copy-Strecken behandelt. Bei Verwendung von /COPY wird die Copy-Strecke vom SQL Precompiler aufgelöst, während sie bei Einbindung mit /INCLUDE übergangen wird. Dies hat besonders bei verschachtelten CopyStrecken Konsequenzen, da er SQL Precompiler verschachtelte Copy-Strecken nicht unbedingt verarbeiten kann. Anmerkung: 2.4.3 Copy-Strecken mit Informationen, die von SQL nicht verwendet werden mit /INCLUDE eingebunden werden. Copy-Strecke WX_HSPECS H-Bestimmungen Die Copy-Strecke WX_HSPECS in der Quellen-Datei QCPYLESRC in der Bibliothek WOPIXX enthält die H-Bestimmungen, die von Toolmaker zur Verfügung gestellt werden. Die Copy-Strecke WX_HSPECS bzw. die integrierte Copy-Strecke H_SPECS (in Quellen-Datei QCPYLESRC in Bibliothek DIRWEB) enthält die folgenden Schlüssel-Worte: * Binding Directory /IF NOT DEFINED(HBndDir) /Define HBndDir H BndDir('WXBNDDIR': 'DWBNDDIR': 'QC2LE') /ENDIF * Copyright /INCLUDE QCPYLESRC,HCopyRight * Activation Group /IF NOT DEFINED(HActGrp) /DEFINE HActGrp /IF Defined (*CRTBNDRPG) H DftActGrp(*No) ActGrp('QILE') /ENDIF /ENDIF /IF NOT DEFINED(HDebug) /DEFINE HDebug H Debug /ENDIF * Edit Numeric Fields /IF NOT DEFINED(HDecEdit) /DEFINE HDecEdit H DECEDIT('0,') /ENDIF * Edit Date/Time Values /IF NOT DEFINED(HDateEdit) /DEFINE HDateEdit H DATEDIT(*DMY.) /ENDIF B EN UT ZERHA ND BUC H 18 * Instructions for Compile and Source Debugging /IF NOT DEFINED(HOption) /DEFINE HOption /If Defined (*V6R1M0) H Option(*NoDebugIO: *ShowCpy: *Ext: *SRCSTMT: *NoUnref) /Else H Option(*NoDebugIO: *ShowCpy: *Ext: *SRCSTMT) /EndIf /EndIf * Work with NULL Values /IF NOT DEFINED(HAlwNull) /Define HAlwNull H AlwNull(*UsrCtl) /ENDIF * Integer Fields defined within files/tables will not be converted into packed /IF NOT DEFINED(HExtBinInt) /Define HExtBinInt H ExtBinInt(*YES) /ENDIF * CCSID From/To convert UCS2 and for calling java methods /IF NOT DEFINED(HCCSID) /Define HCCSID H CCSID(*CHAR: *JOBRUN) /ENDIF * Interim results will never have less decimal positions as the final result * --> Reduces the risc of problems caused by rounding interim results /If Not Defined (HExprOpts) /Define HExprOpts H ExprOpts(*ResDecPos) /EndIf * RPG without multithreading /If Defined (*V6R1M0) /If Not Defined (HThread) /Define HThread H Thread(*SERIALIZE) /EndIf /EndIf Source Code 3: Copy-Strecke WX_HSPECS - H-Bestimmungen Bei Einbindung der Copy-Strecke WX_HSPECS können individuelle WOPiXX-Programme direkt mit Befehl CRTBNDRPG (Option 14 in PDM) umgewandelt werden, ohne dass die Default-Einstellungen (insbesondere Aktivierungsgruppe und Binderverzeichnisse) manuell angepasst werden müssen. Die Verwendung der Copy-Strecke WX_HSPECS ist weder zwingend erforderlich, noch müssen alle Optionen mit den angegebenen Ausprägungen verwendet werden. Die Aktivierungsgruppe muss jedoch auf *CALLER gesetzt werden und das Binderverzeichnis WXBNDDIR im Binderschritt verwendet werden. Alle Schlüssel-Worte in der Copy-Strecke WX_HSPECS sind durch Compiler-Direktiven bedingt und können deshalb beliebig deaktiviert und ersetzt werden. B EN UT ZERHA ND BUC H 19 2.4.3.1 Individuelle Anpassung der H-Bestimmungen Alle Schlüssel-Worte in der Copy-Strecke WX_HSPECS sind durch Compiler-Direktiven bedingt und können beliebig aktiviert oder deaktiviert werden. Im folgenden Beispiel wird die Option BNDDIR um das individuelle Binderverzeichnis MYBNDDIR erweitert. Anschließend wird die Copy-Strecke WX_HSPECS eingebunden. Durch das Setzen der Compiler-Direktive /Define HBNDDIR werden die in der Copy-Strecke WX_HSPECS angegebenen Binder-Verzeichnis-Einträge übergangen. /Define HBndDir H BndDir('WXBNDDIR': 'DWBNDDIR': 'QC2LE', 'MYBNDDIR') /INCLUDE WX_HSPECS Source Code 4: Deaktivieren / Ändern Aktivierungsgruppe in Copy-Strecke Die Verwendung der Copy-Strecke WX_HSPECS ist nicht zwingend erforderlich, d.h. der Anwender kann nicht nur einzelne Optionen ändern, sondern die kompletten H-Bestimmungen austauschen. 2.4.3.2 Individuelle H-Bestimmungen Wird die Copy-Strecke WX_HSPECS verwendet, können die individuellen WOPiXX-Programme direkt mit CRTBNDRPG (Auswahl 14 in PDM) kompiliert werden. Bei der Verwendung von individuellen H-Bestimmungen muss folgendes beachtet werden: Umwandlung mit CRTBNDRPG (RPG-Binderprogramm erstellen) o Da aus WOPiXX-Programmen ILE-Prozeduren aufgerufen werden, dürfen die Programme nicht in der Default-Aktivierungsgruppe ausgeführt werden. Aus diesem Grund muss die Option DFTACTGRP (Standardaktivierungsgruppe) in dem Compile-Befehl CRTBNDRPG auf *NO gestellt werden. o Individuelle WOPiXX-Programme müssen in der gleichen Aktivierungsgruppe wie das steuernde Dirweb-Programm laufen. Deshalb muss die Option ACTGRP (Aktivierungsgruppe) im Compile-Befehl mit *CALLER angegeben werden. o Die Service-Programme, in denen die WOPiXX-Funktionen hinterlegt sind, sind in Binderverzeichnis WXBNDDIR hinterlegt. Die Service-Programme mit den Dirweb-Funktionen sind in Binderverzeichnis DWBNDDIR hinterlegt. Aus diesem Grund muss bei Kompilierung mit CRTBNDRPG zumindest das Binderverzeichnis WXBNDDIR in der Option BNDDIR (Binderverzeichnis) angegeben werden. Falls zusätzlich auch Directweb-Prozeduren in den individuellen CGI-Programmen verwendet werden sollen, muss auch das Binderverzeichnis DWBNDDIR in der Option BNDDIR angegeben werden. B EN UT ZERHA ND BUC H 20 Anstatt den Compile-Befehl anzupassen, können die notwendigen Informationen auch in den HBestimmungen hinterlegt werden. Die Kompilierung kann anschließend über CRTBNDRPG ohne Anpassung erfolgen. Bei Programmen, die embedded SQL beinhalten erfolgt die Kompilierung über den Befehl CRTSQLRPGI (SQL ILE RPG-Objekt erstellen). Dieser Befehl hat keine Optionen um die Aktivierungsgruppe oder Binderverzeichnisse vorzugeben. Deshalb müssen bei Programmen mit embedded SQL die benötigten Informationen in den H-Bestimmungen hinterlegt werden. H-Bestimmungen o Das Schlüssel-Wort DFTACTGRP in den H-Bestimmungen überschreibt zur Compile-Zeit den Eintrag in Option DFTACTGRP im Compile-Befehl CRTBNDRPG. Werden H-Bestimmungen verwendet, sollte DFTACTGRP(*NO) angegeben werden. o Das Schlüssel-Wort ACTGRP in den H-Bestimmungen überschreibt zur Compile-Zeit den Eintrag in Option ACTGRP im Compile-Befehl CRTBNDRPG. Werden H-Bestimmungen verwendet sollte ACTGRP(*CALLER) angegeben werden. o Werden im Schlüssel-Wort BNDDIR in den H-Bestimmungen Binderverzeichnisse angegeben, wird die Option im BNDDIR im Compile-Command nicht überschrieben, sondern die in den HBestimmungen hinterlegten Binderverzeichnisse werden zusätzlich zu den im Compile-Befehl hinterlegten Binderverzeichnisse verwendet. Werden H-Bestimmungen verwendet sollte zumindest das Binderverzeichnis WXBNDDIR angegeben werden. Sofern auch Directweb-Prozeduren aufgerufen werden sollten, sollte zusätzlich das Binderverzeichnis DWBNDDIR angegeben werden. Die Binderverzeichnisse müssen im Schlüssel-Wort BNDDIR in Hochkommata und in Großbuchstaben und durch Kommata getrennt angegeben werden. 2.4.4 WX_HCOPYR Copyright In der Copy-Strecke WX_HCOPYR in Datei QCPYLESRC in Bibliothek WOPIX ist das Copyright hinterlegt. Diese Copy-Strecke ist in der Copy-Strecke WX_HSPECS integriert. In der ausgelieferten Copy-Strecke sind aktuell die Toolmaker-Daten hinterlegt. Für die eigenen Programme können die Daten vom Programmierer überschieben werden. Dabei sollte jedoch berücksichtigt werden, dass bei einem Upgrade die Copy-Strecke ausgetauscht wird und damit die individuell geänderten Daten verloren gehen. /IF NOT DEFINED(HCopyRight) /DEFINE HCopyRight H COPYRIGHT('(C) Toolmaker Advanced Efficiency (www.toolmaker.de)') /ENDIF Source Code 5: Copy-Strecke WX_HCOPYR B EN UT ZERHA ND BUC H 21 Anstatt die Daten in der Copy-Strecke zu ändern, kann das Copyright über eine Compiler-Direktive deaktiviert und durch eigene Angaben in den jeweiligen Programmen ersetzt werden. Im folgenden Beispiel werden die Copyright-Informationen im individuellen WOPiXX-Programm deaktiviert und durch die eigenen Daten ersetzt. /Define HCopyRight H CopyRight('MyCompany, Wald-und-Wiesenweg 17, 12345 MeineStadt') Source Code 6: Austausch von Copyright Informationen 2.4.5 Copy-Strecke WX_FLDREF Datenstrukturen Referenz-Felder und In der Copy-Strecke WX_FLDREF in Datei QCPYLESRC in Bibliothek WOPIX bzw. in der integrierten Copy-Strecke D_FLDREF in Datei QCPYLESRC in Bibliothek DIRWEB sind alle Referenz-Felder und Referenz-Datenstrukturen, die zur Definition von Variablen und Parameter-Feldern in den WOPiXXProzeduren verwendet wurden hinterlegt. Die Referenz-Felder und Datenstrukturen sind bis einschließlich Release V5R4 mit dem Schlüsselwort BASED definiert, ab Release 6.1 mit Schlüssel-Wort TEMPLATE, d.h. die Felder- und Datenstrukturen dürfen/können nur zur Referenzierung verwendet werden und dürfen nicht direkt angesprochen werden. Die folgenden Referenz-Datenstrukturen sind in der Copy-Strecke D_FLDREF und damit auch in der Copy-Strecke WX_FLDREF integriert. FLDREF Qualifizierte Externe Datenstruktur auf Feld-Referenz-Datei DWFLDREF FLDREFLA Qualifizierte Referenz-Datenstruktur für lange alphanumerische Variablen (RPGDatentyp A) FLDREFMA Qualifizierte Referenz-Datenstruktur für (mittlere) alphanumerische Variablen (RPGDatentyp A) FLDREFLU Qualifizierte Referenz-Datenstruktur für lange Unicode-Variablen (RPG-Datentyp C) FLDREFMU Qualifizierte Referenz-Datenstruktur für (mittlere) Unicode-Variablen (RPG-Datentyp C) Die übrigen Referenz-Datenstrukturen, in Copy-Strecke D_FLDREF sind zur Definition von Variablen für individuelle WOPiXX-Programme nicht relevant. 2.4.5.1 Copy-Strecken zur Referenzierung von Variablen Die Copy-Strecken, die zur Definition von Parameter-Feldern verwendet werden, sind jeweils direkt in den Copy-Strecken für die Prototypen integriert. Da die Prototypen in die individuellen WOPiXXProgramme eingebunden werden müssen, werden die Referenz-Felder und Datenstrukturen ebenfalls eingebunden. Eine separate Einbindung der Copy-Strecken mit den Referenz-Informationen ist somit in den individuellen WOPiXX-Programmen nicht erforderlich. B EN UT ZERHA ND BUC H 22 Da alle Referenz-Datenstrukturen durch Compiler-Direktiven bedingt sind, treten bei mehrfacher Einbindung der gleichen Copy-Strecke bzw. bei mehrfacher Definition der gleichen Datenstruktur keine Probleme auf. Die erste Definition wird verwendet, die folgenden Definitionen werden ignoriert. Bei WOPiXX-Programmen mit embedded SQL muss ggf. die Copy-Strecke D_FLDREF angegeben werden, da der SQL Precompiler verschachtelte Copy-Strecken abhängig vom Release u.U. nicht auflösen kann. 2.4.5.2 Referenzierung und Prototypen Alle in den Prototypen hinterlegten Parameter-Felder wurden basierend auf den Feldern in der FeldReferenz-Datei oder anderen in den Copy-Strecken WX_FLDREF und D_FLDREF definiert. Variablen oder Datenstruktur-Unterfelder, über die Daten mit den WOPiXX-Funktionen ausgetauscht werden, können genau wie die Parameter-Felder in den Prototypen definiert werden. Anmerkung: Um Probleme mit unterschiedlichen Definitionen zu vermeiden, und um Änderungen (z.B. Feldlänge oder Anzahl Elemente einer Feldgruppe) ohne Anpassungen zu ermöglichen, wird empfohlen alle individuellen Variablen, über die Informationen mit den WOPiXX-Funktionen ausgetauscht werden, über die Referenzen zu definieren. 2.4.5.3 Referenz-Datenstruktur FLDREF Die Feld-Referenz-Datei (DWFLDREF) wird in der Copy-Strecke WX_FLDREF (bzw. in der Copy-Strecke D_FLDREF) als externe qualifizierte Datenstruktur definiert. Durch die Angabe des Schlüssel-Wortes BASED (bzw. TEMPLATE) kann die Datenstruktur bzw. können die Datenstruktur-Unterfelder nur zur Referenzierung verwendet, jedoch nicht direkt angesprochen werden. /IF NOT DEFINED(FldRef) /DEFINE FldRef D FldRef E DS D /EndIf EXTNAME(DWFLDREF) Qualified based(DummyPtr) Source Code 7: Referenz-Datenstruktur FLDREF für Feld-Referenz-Datei DWFLDREF Im folgenden Beispiel werden eine stand-alone Variable und Datenstruktur-Unterfelder basierend auf in der Feld-Referenz-Datei hinterlegten Feldern definiert. D LocMsgText S Like(FldRef.MsgText) D DSObjQual D Obj D Lib DS Qualified Like(FldRef.Obj) Like(FldRef.Lib) inz('*LIBL') /Free LocMsgText = 'Dies ist eine Nachricht'; B EN UT ZERHA ND BUC H 23 DSObjQual.Obj = 'MYFILE'; /End-Free Source Code 8: Definition von Variablen und Datenstruktur-Unterfelder über Feld-Referenz-Datei) 2.4.5.4 Referenz-Datenstrukturen für lange Text-Felder Da physische (Feld-Referenz-)Dateien nur bis zu einer maximalen Satz-Länge von 32740 Byte definiert werden können, wurden für längere Text-Felder separate Referenz-Datenstrukturen angelegt. Die folgenden Referenz-Datenstrukturen wurden definiert: Referenz-Datenstruktur FLDREFLA Lange alphanumerische Referenz-Text-Felder In der Referenz-Datenstruktur wurden alphanumerische Referenz-Text-Felder mit fixer und variabler Länge hinterlegt. Die Feldlänge wurde auf 16350 Bytes/Zeichen beschränkt, da bei Verarbeitung mit (embedded) SQL die maximale Länge eines Double-Byte-Strings auf 16383 Zeichen beschränkt ist und ein problemloser Austausch (ohne Abschneiden) zwischen Single- und Double-Byte-Texten erfolgen soll. /IF NOT DEFINED(FldRefLA) /DEFINE FldRefLA D FldRefLA DS D FixLen D VarLen Qualified based(DummyPtr) 16350A 16350A Varying /ENDIF Source Code 9: Referenz-Datenstruktur FldRefLA Im folgenden Beispiel wird ein Text-Feld basierend auf dem Datenstruktur-Unterfeld VARLEN in der Datenstruktur FLDREFLA definiert D MyText S Like(FldRefLA.VarLen) /Free MyText = 'Dies ist eine Nachricht'; /End-Free Source Code 10: Definition und Verwendung von langen alphanumerischen Texten Referenz-Datenstruktur FLDREFMA mittlere alphanumerische Referenz-Text-Felder In der Referenz-Datenstruktur wurden alphanumerische Referenz-Text-Felder mit fixer und variabler Länge hinterlegt. Die Feldlänge wurde auf 4096 Zeichen festgelegt, um eine Zwischenstufe zwischen den langen (Referenz-)Texten (16350 Zeichen) und den kurzen (Referenz-)Texten (256 Zeichen) zu schaffen. /IF NOT DEFINED(FldRefMA) B EN UT ZERHA ND BUC H 24 /DEFINE FldRefMA D FldRefMA DS D FixLen D VarLen Qualified based(DummyPtr) 4096A 4096A Varying /ENDIF Source Code 11: Referenz-Datenstruktur FLDREFMA Im folgenden Beispiel wird ein Text-Feld basierend auf dem Datenstruktur-Unterfeld VARLEN in der Datenstruktur FLDREFMA definiert D MyText S Like(FldRefMA.VarLen) /Free MyText = 'Dies ist eine Nachricht'; /End-Free Source Code 12: Definition und Verwendung von mittleren alphanumerischen Texten Referenz-Datenstruktur FLDREFLU lange Unicode Referenz-Text-Felder In der Datenstruktur FLDREFLU werden Unicode-Referenz-Textfelder mit fixer und variabler Länge hinterlegt. Die Länge der Datenstruktur-Unterfelder entspricht der Länge der Datenstruktur-Unterfelder in der Referenz-Datenstruktur FLDREFLA. /IF NOT DEFINED(FldRefLU) /DEFINE FldRefLU D FldRefLU DS D FixLen D VarLen Qualified based(DummyPtr) 16350C 16350C Varying /ENDIF Source Code 13: Referenz-Datenstruktur FLDREFLU Im folgenden Beispiel wird ein Text-Feld basierend auf dem Datenstruktur-Unterfeld VARLEN in der Datenstruktur FLDREFLU definiert und verwendet. D MyText S Like(FldRefLU.VarLen) /Free MyText = %UCS2('Dies ist eine Nachricht'); /End-Free Source Code 14: Definition und Verwendung von langen Unicode-Texten Referenz-Datenstruktur FLDREFMU mittlere Unicode Referenz-Text-Felder In der Datenstruktur FLDREFMU werden Unicode-Referenz-Textfelder mit fixer und variabler Länge hinterlegt. Die Länge der Datenstruktur-Unterfelder entspricht der Länge der Datenstruktur-Unterfelder in der Referenz-Datenstruktur FLDREFMA. /IF NOT DEFINED(FldRefMU) B EN UT ZERHA ND BUC H 25 /DEFINE FldRefMU D FldRefMU DS D FixLen D VarLen /ENDIF Qualified based(DummyPtr) 4096C 4096C Varying Source Code 15: Referenz-Datenstruktur FLDREFMU Im folgenden Beispiel wird ein Text-Feld basierend auf dem Datenstruktur-Unterfeld VARLEN in der Datenstruktur FLDREFMU definiert und verwendet. D MyText S Like(FldRefMU.VarLen) /Free MyText = %UCS2('Dies ist eine Nachricht'); /End-Free Source Code 16: Definition und Verwendung von mittleren Unicode-Texten Die Copy-Strecke WX_FLDREF ist in der Quellen-Datei QCPYLESRC in Bibliothek WOPIX hinterlegt. 2.4.6 WX_PROTO Prototypen Die Prototypen für die WOPiXX-Prozeduren sind in Teildateien mit dem gleichen Namen wie die Quelle, in der die Prozedur codiert wurde, in der Datei QPROLESRC in der Bibliothek WOPIX hinterlegt. Die Prototypen für Directweb-Prozeduren sind in Teildateien mit dem gleichen Namen wie die Quelle, in der die Prozedur codiert wurde, in der Datei QPROLESRC in der Bibliothek DIRWEB hinterlegt. In allen Teildateien, in denen Prototypen definiert werden, werden die Copy-Strecken mit den FeldReferenzen, die zur Definition der Parameter-Felder verwendet wurden, integriert. Damit ist eine zusätzliche Einbindung der Feld-Referenzen im WOPiXX-Programm nicht erforderlich. Alle Prototypen und Referenz-Datenstrukturen sind durch Compiler-Direktiven bedingt, so dass eine (versehentliche) Mehrfacheinbindung der gleichen Copy-Strecke bzw. Datenstruktur nicht zu Problemen führt. Um das Handling für WOPiXX-Programmierer zu vereinfachen, wurden alle Prototypen (incl. ReferenzDatenstrukturen) für die WOPiXX-Prozeduren in der Copy-Strecke WX_PROTO in der Dateien QPROLESRC in der Bibliothek WOPIX zusammengefasst. Durch Einbindung der Copy-Strecke WX_PROTO werden alle WOPiXX-Prototypen eingebunden, d.h. der Programmierer kann jede beliebige Prozedur aufrufen. Das folgende Beispiel zeigt die Einbindung der Copy-Strecken WX_PROTO und D_FLDREF. Die Einbindung von Copy-Strecke D_FLDREF mit Anweisung /COPY ist nur in Programmen mit embedded SQL erforderlich. Wenn das Programm embedded SQL enthält ist die Einbindung nur dann erforderlich, wenn Hostvariablen (in embedded SQL verwendete Variablen) basierend auf den zur Verfügung gestellten Feldreferenzen definiert und eingesetzt werden. B EN UT ZERHA ND BUC H 26 Im folgenden Beispiel werden die Copy-Strecken D_FldRef und WX_PROTO in den Source Code eingebunden. H**** H-Bestimmungen F**** F-Bestimmungen D* Folg. Copy-Strecke nur bei embedded SQL D/COPY QCPYLESRC,D_FLDREF D/INCLUDE QCPYLESRC,WX_PROTO Source Code 17: Einbindung der Copy-Strecken D_FLDREF und WX_PROTO 2.5 Default-HTML-Dokumente Für Work- und Change-Programme werden Default-HTML-Dokumente zur Verfügung gestellt. Wx_ChgDefault.html Wx_WrkDefault.html Default-Dokument für Change Tables (Einzel-Anzeige) Default-Dokument für Work Tables (List-Anzeige) Die Default-HTML-Dokumente werden beim Einrichten der Anwendung (7.1 Anwendung) in das Verzeichnis für HTML-Vorlagen übertragen. Zur Laufzeit wird der HTML und JavaScript-Code aufbereitet. Der aufbereitete HTML- und Javascript Code wird in die Default-Dokumente übertragen und an Stelle der Platzhalter ausgegeben. Die Default-Dokumente können durch individuelle HTML-Dokumente mit individuellem HTML und JavaScript-Code ersetzt werden. Die individuellen HTML-Dokumente müssen jedoch die gleichen Platzhalter wie die Default-Dokumente beinhalten. Die Platzhalter sind durch ein führendes und folgendes Prozent-Zeichen gekennzeichnet, z.B. %ERRTXT% B EN UT ZERHA ND BUC H 27 3. Erstellen von WOPiXX-Programmen Um WOPiXX-Programme erstellen zu können müssen die folgenden Voraussetzungen erfüllt sein. H-Bestimmungen Die Copy-Strecke WX_HSPECS kann in den H-Bestimmungen hinterlegt werden. Wird die Copy-Strecke nicht verwendet, muss sichergestellt werden, dass das WOPiXXProgramm mit Aktivierungsgruppe *CALLER erstellt wird und das Binderverzeichnis WXBNDDIR im Binderschritt verwendet wird. Copy-Strecke WX_PROTO Die Copy-Strecke WX_PROTO muss in den globalen D-Bestimmungen eingebunden werden. ************************************************************************ * H - H E A D E R S P E C I F I C A T I O N S ************************************************************************ * Copy-Strecke - Optional H/INCLUDE QCPYLESRC,WX_HSPECS *********************************************************************** * F - F I L E S P E C I F I C A T I O N S ************************************************************************ F**** Globale Datei-Definitionen für Native I/O ************************************************************************ * D – D E F I N I T I O N S P E C I F I C A T I O N S ************************************************************************ * PROTOTYPING *--------------------------* Folgende Copy-Strecke abh. vom Release für embedded SQL erforderlich D/COPY QCPYLESRC,D_FLDREF * Copy-Strecke - Erforderlich D/INCLUDE QPROLESRC,WX_PROTO * * PROCEDURE INTERFACE *--------------------------**** Keine Parameter für WOPiXX-Programme * GOBALE FELD-DEFINITONEN *--------------------------D**** Globale Variablen und Datenstruktur-Definitionen ************************************************************************ * M A I N P R O C E D U R E ************************************************************************ C**** Globale C-Bestimmungen – Hauptprogramm C**** inklusive Subroutines (sofern erforderlich) ************************************************************************ * I N T E R N A L P R O C E D U R E S ************************************************************************ **** Interne Prozeduren Source Code 18 : Copy-Strecken und Grob-Aufbau von WOPiXX-Programmen Bibliotheksliste Zur Kompilierung müssen die Bibliotheken WOPIX und DIRWEB in der Bibliotheksliste B EN UT ZERHA ND BUC H 28 vorhanden sein. Die Bibliothek WOPIX sollte vor der Bibliothek DIRWEB stehen und beide Bibliotheken sollten nach der Bibliothek QTEMP stehen. Umwandlung WOPiXX-Programme können direkt mit dem Befehl CRTBNDRPG (bzw. CRTSQLPGMI) umgewandelt werden, sofern nur ILE-Prozeduren von WOPiXX oder Directweb aufgerufen werden. Sofern aufgrund der individuellen Programmierung eine zweistufige Kompilierung erforderlich sein sollte (z.B. wenn mehrere Module gebunden werden sollen), so muss der Programmierer dafür sorgen, dass im Binderschritt (CRTPGM) die Aktivierungsgruppe *CALLER und das Binderverzeichnis WXBNDDIR angegeben werden. B EN UT ZERHA ND BUC H 29 4. WOPiXX-Prozeduren 4.1 WOPiXX-Prozeduren im Überblick Das komplette HTML-Dokument sowie der Datenaustausch zwischen RPG und HTML wird durch den Aufruf von RPGIV-Prozeduren gesteuert. 4.1.1 Prozeduren für Work-Tables Zur Erstellung und Verarbeitung von Work-Tables (List-Anzeigen) stehen die folgenden Prozeduren zur Verfügung: WorkTables Zuordnung Aktion Prozeduren Wx_GetParmChar() Wx_GetParmArrChar() Parameter Wx_GetParmUC() Wx_GetParmArrUC() Wx_GetDBKeyInt() Wx_GetDBKeyArrInt() Wx_GetDBKeyDec() Wx_GetDBKeyArrDec() Key Wx_GetDBKeyChar() Get Info Wx_GetDBKeyArrChar() Wx_GetDBKeyUC() Wx_GetDBKeyArrUC() Wx_GetReseqString() Wx_GetReseqArrInt() Listen Wx_GetReseqArrChar() Wx_GetEdtListXML() Wx_isModeEdtList Modus Wx_isModeReseq() Öffnen Wx_OpnHTMLWrk() Wx_HdrFile() Wx_HdrFld() Header Definition Wx_HdrFldUC2() Wx_HdrFileFld Wx_HdrFileFldUC2() Wx_GenFlt() Wx_FltFile() File/Fields Wx_FltFld() Wx_FltFileFld() Filter Definition Wx_BegEnhFlt() Wx_FltIf() ConditionWx_FltElse() Group Wx_FltEndIf() Wx_CtxMnuItm() Work Menü/ Wx_WrkBtn() Definition Table Button Wx_WrkBtnEdtList() Wx_WrkBtnReseq() Wx_WrkFile() Wx_WrkKeyRRN() Wx_WrkKeyFld() Definition Wx_WrkFld() Wx_WrkWhere() Wx_WrkDftOrder() Work SQL Wx_WrkSQLMan() Table Wx_NoRcdTxt() Wx_SetParmChar() Wx_SetParmArrChar() Ausgeben Wx_SetParmUC() Wx_SetParmArrUC() Wx_WrtWrkTbl() Tabelle 1: WOPiXX-Prozeduren für Work-Tables Bezeichnung Prozedur Einzelnen alphanumerischen Parameter-Wert empfangen Mehrere alphanumerische Parameter-Werte empfangen Einzelnen Unicode-Parameter-Wert empfangen Mehrere Unicode Parameter-Werte empfangen Einzelnen ganzzahlingen Schlüssel-Wert empfangen Mehrere ganzzahlige Schlüssel-Werte empfangen Einzelnen dezimalen Schlüssel-Wert empfangen Mehrere dezimale Schlüssel-Werte empfangen Einzelnen alphanumerischen Schlüssel-Wert empfangen Mehrere alphanumerische Schlüssel-Werte empfangen Einzelnen Unicode-Schlüssel-Wert empfangen Mehrere Unicode Schlüssel-Werte empfangen Empfangen Schlüssel-Werte in String mit Trennzeichen neuer Reihenfolge nach Felgruppe mit Integer-Werten Umsortierung/Resequenzierung Feldgrppe mit alpha Werten Empfangen XML-Dokument mit Änderungen aus List-Anzeige Empfangen Änderungen in List-Anzeigen (XML-Dokument) Empfangen Ergebnis bei Umsortierung List-Anzeige Öffnen HTML für Work Table Definieren Datei für Header Informationen Definieren alphanumer. Header-Feld Definieren Unicode Header-Feld Definieren Datei und alphanumerisches Header-Feld Definieren Datei und Unicode-Header-Feld Generischen Filter Hinzufügen Definieren Datei für Filter Filter Feld hinzufügen Definieren Filter Datei und Feld Erweiterter Filter Beginn Filter Condition Group Else/ElseIf Filter Condition Group Ende Filter Condition Group Menüpunkt manuell hinzufügen Button manuell hinzufügen Button Änderungen in editierbarer List-Anzeige sichern Button geänderte Reihenfoge in umsortierbarer List-Anzeige sichern Definieren Dateien für Work Table Definieren relative Satz-Nr. als eindeutigen Schlüssel für Work Table Definieren eindeutige Schlüssel-Felder für Work Table Definieren Spalte für Work Table Where Bedingungen für Work Default Sortierung in Work Definieren SQL Statement für WorkTable manuell Anzeige Anzahl Setzen alphanumerischen Parameter-Wert Setzen von mehreren alphanumerischen Parameter-Werten Setzen Unicode-Parameter-Wert Setzen von mehreren Unicode-Parameter-Werten WorkTable ausgeben B EN UT ZERHA ND BUC H 30 4.1.2 Prozeduren für Change Tables Zur Erstellung und Verarbeitung von Work-Tables (List-Anzeigen) stehen die folgenden Prozeduren zur Verfügung: Zuordnung Aktion Parameter Key GetInfo Modus ChangeTables Prozeduren Wx_GetParmChar() Wx_GetParmArrChar() Wx_GetParmUC() Wx_GetParmArrUC() Wx_GetDBKeyInt() Wx_GetDBKeyArrInt() Wx_GetDBKeyDec() Wx_GetDBKeyArrDec() Wx_GetDBKeyChar() Wx_GetDBKeyArrChar() Wx_GetDBKeyUC() Wx_GetDBKeyFldChar() Wx_GetDBKeyFldArrChar() Wx_GetDBKeyArrUC() WX_isModeDisplay() WX_isModeChange() WX_isModeAdd() WX_isModeCopy() WX_isModeDelete() WX_isModeRename() WX_isModeProperty() WX_isModeRefresh() WX_isModeSave() WX_isModeApply() WX_isModeUpdate() WX_isModeOutput() WX_isModeWrite() Wx_isMode() WX_CallPGM() Bezeichnung Prozedur Einzelnen alphanumerischen Parameter-Wert empfangen Mehrere alphanumerische Parameter-Werte empfangen Einzelnen Unicode-Parameter-Wert empfangen Mehrere Unicode Parameter-Werte empfangen Einzelnen ganzzahlingen Schlüssel-Wert empfangen Mehrere ganzzahlige Schlüssel-Werte empfangen Einzelnen dezimalen Schlüssel-Wert empfangen Mehrere dezimale Schlüssel-Werte empfangen Einzelnen alphanumerischen Schlüssel-Wert empfangen Mehrere alphanumerische Schlüssel-Werte empfangen Einzelnen Unicode-Schlüssel-Wert empfangen Zus,ges. Schlüssel: Feldgruppe mit Schlüssel-Werten (1 Satz) Zus,ges. Schlüssel: Array-DS mit Schlüssel-Werten (mehr.Sätze) Mehrere Unicode Schlüssel-Werte empfangen Prüfen Modus = Anzeigen Prüfen Modus = Ändern Prüfen Modus = Hinzufügen Prüfen Modus = Kopieren Prüfen Modus = Löschen Prüfen Modus = Rename Prüfen Modus = Eigenschaften = Anzeigen Prüfen Button Aktualisieren gedrückt / nicht verwendet in RPG Prüfen Button Sichern gedrückt Prüfen Button Übernehmen gedrückt Prüfen Update = Button Sichern oder Übernehmen gedrückt Prüfen Modus = Anzeigen oder Eigenschaften Prüfen Modus = Hinzufügen oder Kopieren Prüfen beliebigen Modus Beliebiges CGI-Programm direkt aufrufen B EN UT ZERHA ND BUC H 31 Zuordnung Aktion ChangeTables Prozeduren Öffnen Wx_OpnHTMLChg() Wx_HdrText() Wx_HdrFile() Wx_HdrFld() Definition Header Wx_HdrFldUC2() Wx_HdrFileFld() Wx_HdrFileFldUC2() Reiter Wx_ChgNavTab() Wx_ChgFile() Wx_ChgFld() Wx_ChgFileFld() Wx_ManChgFld() Wx_ManChgFldChar() Wx_ManChgFldVarChar() Wx_ManChgFldUC2() Wx_ManChgFldVarUC2() File/Fields Wx_ManChgFldPack() Wx_ManChgFldZone() Wx_ManChgFldInt() Definition Wx_ManChgFldFloat() Wx_ManChgFldDate() ChangeTables Wx_ManChgFldTime() Wx_ManChgFldTimestamp() Wx_ManChgFldRef() Wx_ChgHelp() Hilfe Wx_ChgNoHelp() Wx_HTMLTbl() Tabellen Wx_HTMLTblColHdg() Wx_ChgIf() ConditionWx_ChgElse() Group Wx_ChgEndIf() Buttons Wx_ChgBtn() Input Wx_GetChgInput() Wx_FldErr() Error Handling Wx_MultFldErr() Wx_isChgFldErr() Wx_SetParmChar() Wx_SetParmArrChar() Wx_SetParmUC() Ausgeben Wx_SetParmArrUC() Wx_RtnPrv() Wx_WrtChgTbl() Bezeichnung Prozedur Öffnen HTML für Change Table Beliebigen Text in Header ausgeben Definieren Datei für Header Informationen Definieren alphanumer. Header-Feld Definieren Unicode Header-Feld Definieren Datei und alphanumerisches Header-Feld Definieren Datei und Unicode-Header-Feld Definieren Reiter Datei vorgeben Felder aus Dateien definieren Datei und Feld zusammen definieren Definieren Workfield (nicht in Datei) - Alle Datentypen Definieren alphanumer. Workfield - fixe Länge (nicht in Datei) Definieren alphanumer. Workfield - variable Länge (nicht in Datei) Definieren Workfield in Unicode - fixe Länge (nicht in Datei) Definieren Workfield in Unicode - variable Länge (nicht in Datei) Definieren Workfield gepackt (nicht in Datei) Definieren Workfield gezont (nicht in Datei) Definieren Integer-Workfield (nicht in Datei) Definieren Fließkomma-Workfield (nicht in Datei) Definieren Datums-Workfield (nicht in Datei) Definieren Zeit-Workfield (nicht in Datei) Definieren Zeitmarken-Workfield (nicht in Datei) Definieren Workfield basierend auf einem Referenz-Feld Hinzufügen von Hilfe-Texten (Text oder Level2 Text aus Message-Id) Automatisches Ermitteln von Hilfe-Texten unterbinden Tabellen-Definition - Beschreibung, Anzahl Zeilen/Spalten Überschrift/Definition der Tabellen Spalten Beginn der Condition Group Else/ElseIf der Condition Group Ende der Condition Group Button manuell hinzufügen HTML auslesen Error Handling auf Feld Error Handling für mehrere Felder Prüfen Fehler aufgetreten Setzen alphanumerischen Parameter-Wert Setzen von mehreren alphanumerischen Parameter-Werten Setzen Unicode-Parameter-Wert Setzen von mehreren Unicode-Parameter-Werten Auf vorgelagertes Programm zurückgehen Change Table ausgeben Tabelle 2: WOPiXX-Prozeduren für Change Tables 4.2 Parameter in WOPiXX-Prozeduren Anzahl der Parameter: Die Anzahl der Parameter in den WOPiXX-Prozeduren wurde auf ein Minimum beschränkt Input/Output-Parameter: Bei den einzelnen Parametern handelt es sich fast ausschließlich um Input Only-Parameter, die mit Schlüssel-Wort CONST definiert wurden. Optionale Parameter: Parameter, deren Übergabe nicht unbedingt erforderlich ist, wurden am Ende der Parameter-Liste als optionale Parameter definiert. Nicht übergebene optionale Parameter werden zur Laufzeit durch Default-Werte ersetzt. B EN UT ZERHA ND BUC H 32 4.3 Aufbereitungsoptionen für WOPiXX Um die Anzahl der Parameter so gering wie möglich zu halten, werden Aufbereitungsoptionen in Form von Schlüssel-Worten in einem Text-String übergeben. Sind mehrere Aufbereitungsoptionen erforderlich (z.B. Muss-Feld und Datumsaufbereitung), werden die Schlüssel-Worte hintereinander durch *Blanks getrennt angegeben. Optionen sind nicht case sensitive, d.h. die folgenden Optionen führen zum gleichen Ergebnis: required, REQUIRED, Required, ReQUired 4.3.1 Steuerungsoptionen für HTML-Dokumente Beim Öffnen der HTML-Dokumente können diverse Schlüssel-Worte für die Anzeige und Aufbereitung des Dokuments festgelegt werden. Die Übergabe der Optionen erfolgt über Schlüssel-Worte beim Öffnen der HTML-Dokumente, d.h. beim Aufruf der Funktionen Wx_OpnHTMLWrk und WX_OpnHTMLChg 4.3.1.1 Steuerungsoptionen nur für Work-Tables Die folgenden Steuerungsoptionen gelten nur für Worktables NoList EmptyList 4.3.2 Wird das Schlüssel-Wort NoList übergeben, werden beim ersten Aufruf nur die Filter angezeigt. Diese Auswahl ist insbesondere dann sinnvoll, wenn große Dateien durchsucht werden sollen und vorab die Möglichkeit einer Vorauswahl bereitgestellt werden soll. Wird das Schlüssel-Wort EmptyList angegeben, werden die Filter und eine leere Liste angezeigt. Das SQL-Statement, das die Liste aufbaut wird ausgeführt. Bei großen Tabellen bzw. bei komplexen SQL-Statements sollte NoList der Angabe von EmptyList vorgezogen werden. Vergleichsoperatoren für Filter Felder Bei der Definition von Filter-Feldern können die folgenden Vergleichsoperatoren angegeben werden. Sofern kein Vergleichsoperator angegeben wurde, werden gleiche Werte (Operator =) selektiert. = <> > < Es werden nur gleiche Werte selektiert Entspricht: Es werden nur ungleiche Werte selektiert Entspricht: Wh Es werden alle Werte selektiert, die größer als der angegebene Wert sind Entspricht: Es werden alle Werte selektiert, die kleiner als der angegebene Wert sind Entspricht: B EN UT ZERHA ND BUC H 33 >= <= Between Es werden alle Werte selektiert, die größer oder gleich dem angegebenen Wert sind Entspricht: Es werden alle Werte selektiert, die kleiner oder gleich dem angegebenen Wert sind Entspricht: Es werden nur Werte selektiert, die zwischen dem unteren und oberen eingegebenen Wert liegen. WOPiXX generiert für die Von-/Bis-Werte automatisch 2 Eingabe-Felder. Entspricht: Not Between Es werden nur Werte selektiert, die außerhalb des angegebenen Bereichs liegen. Entspricht: In(Zahl) Not In Es wird eine Liste von Werten für das gleiche Feld selektiert. WOPiXX generiert eine Anzahl Eingabe-Felder, um eine Liste von Werten auswählen zu können. Die Anzahl der zu generierenden Felder wird im Vergleichsoperator angegeben. IN(3) Entspricht: Es werden alle Werte selektiert, die nicht den gelisteten Werten entspricht. Entspricht: Where Feld Not In( Die folgenden Vergleichsoperatoren können nur für alphanumerische oder Unicode Text-Spalten/Felder verwendet werden. Like Not Like LikeLeft Es werden nur Texte selektiert, in denen der angegebene Text enthalten ist. Entspricht: Es werden nur Texte selektiert, in denen der angegebene Text nicht enthalten ist Entspricht: Es werden nur Texte selektiert, die mit dem angegebenen Text beginnen Entspricht: Not LikeLeft Es werden nur Texte selektiert, die nicht mit dem angegebenen Text beginnen Entspricht LikeRight Es werden nur Texte selektiert, die mit dem angegebenen Text enden. Entspricht: Where Feld L Not LikeRight Es werden nur Texte selektiert, die nicht mit dem angegebenen Text enden. Entspricht: Ob die Suche case sensitive oder case insensitive erfolgen, kann durch Angabe des entsprechenden Schlüssel-Wortes in den Optionen gesteuert werden. Werden in dem zu suchenden Text die Sonderzeichen % (Prozent) und _ (Unterstrich) angegeben, so Text in dem 100 und beliebige Zeichen enthalten sind, sondern in dem 100% enthalten sind gesucht. B EN UT ZERHA ND BUC H 34 4.3.3 Aufbereitungsoptionen für Filter-Felder Für das gleiche Filterfeld können mehrere unterschiedliche Optionen angegeben werden. Die einzelnen Optionen werden durch Blanks getrennt in dem Parameter Option als Text übergeben. Die Schlüsselworte können in jeder beliebigen Groß/Kleinschreibung angegeben werden. Bei der Definition von Filter-Feldern können die folgenden Aufbereitungsoptionen angegeben werden. CTL(xxx) ExecSQL(Name) oder ExecSQL(Name, NoList) Vom Programmierer in Directweb hinterlegte SQL-Abfragen, über die die gewünschten Werte als Combobox oder in einem Fenster aufbereitet, angezeigt und ausgewählt werden können. Die Angabe des 2. Parameters NoList bewirkt, dass zunächst nur die Filter-Felder angezeigt werden, so dass eine Vorauswahl getroffen werden kann. EnhFlt Erweiterter Filter Das Feld kann durch Klicken auf die Pfeil auf/ab Buttons ein- und ausgeblendet werden. Anstatt das Schlüssel-Wort bei jedem erweiterten Filterfeld anzugeben kann auch die Funktion Wx_BegEnhFlt() Beginn erweiterter Filter vor dem ersten erweiterten FilterFeld aufgerufen werden. Center Left Right Spalten-Inhalt zentrieren Spalten-Inhalt linksbündig ausrichten Spalten-Inhalt rechtsbündig ausrichten Uppercase Eingabe wird in Großbuchstaben übersetzt Lowercase Eingabe wird in Kleinbuchstaben übersetzt NewLine Nächstes Feld in nächste Zeile (Default-Wert) NoNewLine Nächstes Filter-Feld in der gleichen Zeile Checkbox oder Logical 1 0 DateNum Vom Programmierer in Directweb hinterlegte Selektions-Kriterien Für Schalter (0/1) Häkchen (eingabefähiges Feld) Leeres (eingabefähiges) Feld Für numerisches Datum im Format JJJJMMTT Aufbereitung als Datum TimestampNum Für numerische Zeitmarken im Format JJJJMMTTHHMMSS Aufbereitung als Zeitmarke TimeNum Für numerische Zeit im Format HHMMSS Aufbereitung als Zeit HHMMNum Für numerische Zeit im Format HHMM Aufbereitung als Zeit Für Echte Datums- und Zeit-Felder müssen keine Aufbereitungsoptionen definiert wer- B EN UT ZERHA ND BUC H 35 den. Required Bei dem Filter-Feld handelt es sich um ein Muss-Feld NotRequired Bei dem Filter-Feld handelt es sich um ein Kann-Feld SelectList Combobox mit gültigen Werten Syntax SelectList oder SelectList() Bildet Combobox mit allen unterschiedlichen Feldwerten in dem definierten Feld in den definierten Dateien/Tabellen/Views. z.B. für Auswahl Stati / Auswahl Länder Syntax SelectList(MyFld) oder SelectList(Field=MyFld) Bildet Combobox mit allen unterschiedlichen Feldwerten in dem Feld MYFLD in den definierten Dateien/Tabellen/Views Syntax SelectList(File=MyFile, MyFld) oder SelectList(File=MyFile, Field=MyField) oder Bildet eine Combobox mit allen Unterschiedlichen Feldwerten in der angegebenen Datei/Tabelle/View mit dem angegebenen Feld. Die angegebene Datei/Tabelle/View, sowie das angegebene Feld müssen nicht zwangsläufig definiert sein. SQLList Combobox basierend auf einem SQL-Select-Statement Syntax SQLList(SQLStatement;) Wichtig: Das SQL-Select-Statement mit einem SemiColon (;) abgeschlossen werden. Bildet eine Combobox basierend auf dem Ergebnis, das das SQL-SELECT-Statement zurückliefert. Wird in dem SELECT-Statement nur eine einzige Spalte definiert, wird nur diese angezeigt und die entsprechenden Werte zurückgegeben: SQLList(Select Distinct PLZ from AdresseX;) Rückgabe PLZ Werden in dem SELECT-Statement mehrere Spalten ausgewählt, so werden die Spalten-Werte aus der 2. Spalte angezeigt. Bei Auswahl wird der Wert der 1. Spalte zurückgegeben. SQLList(Select Distinct PLZ, + PLZ concat ‘ ‘ concat ORT + From AdresseX;) B EN UT ZERHA ND BUC H 36 Anzeige: z.B. 86916 Kaufering Rückgabe: 86916 DependList Abhängige Combobox mit gültigen Werten Basierend auf dem eingegebenen Wert in einem anderen Feld werden nur die abhängigen Auswahlkriterien angezeigt. Das Feld von dem die Werte in der Combobox abhängen, muss vor dem abhängigen Feld definiert werden. Beispiel: Abh. vom Land enthält die Combobox nur die Orte, die in dem entsprechenden Land liegen. Syntax DependList(MyFld) Bildet die Werte in der Combobox abhängig von dem erfassten Wert in MyFld. Syntax DependList(File=MyFile, MyFld, KeyA=KeyB) Bildet die Combobox aus der Tabelle MyFile und der Spalte MyFld (in Tabelle MyFile). Die Tabelle MyFile wird über den Schlüssel KeyB mit dem Feld KeyA (das zuvor definiert wurde) mit der definierten Tabelle, in der KeyA hinterlegt ist verknüpft. Sofern mehrere Schlüssel-Felder erforderlich sind, müssen diese anschließend durch ein logisches AND getrennt angegeben werden. KeyA1=KeyB1 and KeyA2=KeyB2 etc.) Beispiel: Das Land (Spalte ELAND) wird erfasst. Die Orte (Spalte XORT) die ausgewählt werden dürfen sind in Datei ADRESSEX hinterlegt. DependList(File=AdresseX, XORT, ELAND=XLand) ValuesList ListNumRange Bildet eine Combobox mit allen numerischen Werten in dem angegebenen Bereich Syntax ListNumRange(100, 150) Bildet eine Combobox mit allen ganzzahligen Werten zwischen 100 und 150 Syntax ListNumRange(100, 150, 10) Bildet eine Combobox mit den Werten 100, 110, 120, 130, 140, 150, ListMonth Bildet eine Combobox aus den vorgegebenen Werten: Syntax ValuesList(Offen, Bestätigt, Erledigt) ValuesList(2, 4, 8, 16, 32) Bildet eine Combobox mit den Werten 1-12 für den Monat Syntax ListMonth B EN UT ZERHA ND BUC H 37 ListMonthName Combobox mit sprachenabhängigen Monatsnamen, sortiert nach dem numerischem Monat (Januar=1, Dezember=12). Rückgabe-Wert sprachenabhängiger Monatsname Syntax ListMonthName ListMonthNameNum Combobox mit sprachenabhängigen Monatsnamen, sortiert nach dem numerischen Monat (Januar=1, Dezember=12) Rückgabe-Wert numerischer Monat (Januar=1 / Dezember=12) Syntax ListMonthNameNum ListDay Bildet eine Combobox mit den Werten 1-31 für den Tag im Monat Aktuell keine abhängige Combobox ListDayName Combobox mit sprachenabhängigen Wochentagsnamen, sortiert nach dem numerischem Wochentag (Montag=1, Sonntag=7). Rückgabe-Wert sprachenabhängiger Wochentagsname Syntax ListDayName ListDayNameNum Combobox mit sprachenabhängigen Wochentagssnamen, sortiert nach dem numerischen Wochentag (Montag=1, Sonntag =7) Rückgabe-Wert numerischer Wochentag (Montag=1 / Sonntag=7) Syntax ListDayNameNum ListHour Bildet eine Combobox mit den Werten 0-24 für die Stunden ListMinSec Bildet eine Combobox mit den Werten 0-59 für Minuten und Sekunden AutoComplete DependAuto AutoComplete Combobox Syntax: AutoComplete oder Autocomplete() Bildet eine AutoComplete Combobox basierend auf den aktuellen Werten in dem definierten Feld aus den definierten Tabellen. Syntax: Autocomplete(File=MyFile, MyFld) Bildet eine AutoComplete Combobox basierend auf den Werten in der Spalte MyFld aus der Tabelle MyFile. Abhängige Autocomplete Combobox Syntax DependAuto(MyFld) Bildet die Werte in der AutoComplete Combobox abhängig von dem erfassten Wert in Spalte MyFld. Syntax AutoDepend(File=MyFile, MyFld, KeyA=KeyB) Bildet die AutoComplete Combobox aus der Tabelle MyFile und der Spalte MyFld (in Tabelle MyFile). Die Tabelle MyFile wird über den Schlüssel KeyB mit dem B EN UT ZERHA ND BUC H 38 Feld KeyA (das zuvor definiert wurde) mit der definierten Tabelle, in der KeyA hinterlegt ist verknüpft. Sofern mehrere Schlüssel-Felder erforderlich sind, müssen diese anschließend durch ein logisches AND getrennt angegeben werden. KeyA1=KeyB1 and KeyA2=KeyB2 etc.) Beispiel: Das Land (Spalte ELAND) wird erfasst. Die Orte (Spalte XORT) die ausgewählt werden dürfen sind in Datei ADRESSEX hinterlegt. AutoDepend(File=AdresseX, XORT, ELAND=XLand) 4.3.4 Aufbereitungsoptionen für Spalten Für eine Spalte können mehrere unterschiedliche Aufbereitungs-Optionen angegeben werden. Die einzelnen Optionen werden durch Blanks getrennt in dem Parameter Option als Text übergeben. Die Schlüsselworte können in jeder beliebigen Form der Groß/Kleinschreibung angegeben werden. Bei der Definition von Spalten in Work Tables können die folgenden Aufbereitungsoptionen angegeben werden. Center Left Right Spalten-Inhalt zentrieren Spalten-Inhalt linksbündig ausrichten Spalten-Inhalt rechtsbündig ausrichten Hidden Spalte wird nicht angezeigt Logical Für Schalter (0/1) 1 0 Anzeige als Häkchen Leere Spalte DateNum Für numerisches Datum im Format JJJJMMTT Aufbereitung als Datum TimestampNum Für numerische Zeitmarken im Format JJJJMMTTHHMMSS Aufbereitung als Zeitmarke TimeNum Für numerische Zeit im Format HHMMSS Aufbereitung als Zeit HHMMNum Für numerische Zeit im Format HHMM Aufbereitung als Zeit Für Echte Datums- und Zeit-Felder müssen keine Aufbereitungsoptionen definiert werden. CTL(xxx) Aufbereitung und Anzeige von Werten aus der Parameter-Control-Table (DWPRMCTL) Filter(xxx) Definition von Inline-Filter. Die folgenden Optionen (xxx) sind zulässig: B EN UT ZERHA ND BUC H 39 Image Text_Filter Select_Filter Combo_Filter Text_Search Numeric_Filter Handelt es sich bei dem Spalten-Inhalt um einen Link (IFS-Datei-Name), so wird die IFS-Datei (z.B. Bild oder Icon) an dieser Stelle angezeigt Sofern nur das Schlüssel-Wort Image angegeben wird, wird das Bild in Icon-Größe ausgegeben. Mit Schlüssel-Wort Image können jedoch auch Größen-Angaben in der Form Image(Breite, Höhe) z.B. Image(120, 100) übergeben werden. Die Höhe und Breite werden in Pixel angegeben Bei der MouseOver-Aktion wird das Bild entweder in die Origianlgröße (Schlüssel-Wort ohne Parameter) oder in die angegebene Gr´öße (Schlüssel-Wort mit Parameter) vergrößert. Abbildung 3: Schlüssel-Wort Image - Bilder in List-Anzeigen Exit() Externe Funktionen für die Aufbereitung NoSort Per Default können List-Anzeigen nach allen definierten Spalten sortiert werden. Sofern für einzelne Spalten eine Sortierung nicht zulässig ist, kann das Schlüssel-Wort NoSort angegeben werden. Output Wird nur in Verbindung mit editierbaren List-Anzeigen berücksichtigt Sofern bei editierbaren List-Anzeigen bei der Spalten-Definition das Schlüssel-Wort output angegeben wurde, wird die Spalte für die Eingabe gesperrt. 4.3.5 Aufbereitungsoptionen Kontext-Menü-Punkte Für Kontext-Menü-Punkte können die folgenden Aufbereitungsoptionen angegeben werden: Line Im Kontext-Menü wird vor dem Menü-Punkt eine Trennlinie eingefügt B EN UT ZERHA ND BUC H 40 Window / NoWindow Das Folge-Programm wird in einem Fenster-Format ausgegeben. Sofern das Folge-Programm nicht in einem Fenster ausgegeben werden soll, muss explizit das Schlüssel-Wort NoWindow angegeben werden. Wird NoWindow angegeben und das Folge-Programm eine Bildschirmausgabe erfordert, wird das Folge-Programm als Voll-Bild angezeigt. Die Angabe des Schlüssel-Wortes Window ist optional. Icn(xxxx.gif) Icon, das in Verbindung mit dem Kontext-Menü-Punkt angezeigt wird. Confirm Anzeige Bestätigungsfenster vor Aufruf des eigentlichen Verarbeitungsprogramms Confirm Default-Bestätigungstext Confirm(X) X = Message-Text oder Message-Id für Individuelle Nachrichten //Bestätigung mit Default-Message Wx_CtxMnuItm('TSCHGAD01': 'Bestätigung Default': 'Window line confirm'); //Bestätigung mit vorgegebenem Text Wx_CtxMnuItm('TSCHGADT2': 'Bestätigung Text': 'Window + confirm(BHA bitte Text bestätigen)'); //Bestätigung mit Text aus Message-File Wx_CtxMnuItm('TSCHGADT2': 'Bestätigung MsgId': 'Window icn(end.gif) + CONFIRM(DWX0031)'); Abbildung 4: Kontext-Menü-Punkte mit Bestätigungsfenster ParCond Bedingungen für Menü-Auswahl Bedingungen können wahlweise in einer der folgenden Schreibweisen angegeben werden. Groß/Kleinschreibung spielt keine Rolle: CL RPG/SQL JavaScript B EN UT ZERHA ND BUC H 41 Abbildung 5: Bedingte Kontext-Menü-Punkte ShortCut Anstatt der Kontext-Menü-Auswahl kann die Auswahl auch über ShortCut erfolgen. ShortCuts werden bei der Funktion WX_CtxMnuItm() bzw. bei den Prozeduren, über die die Standard-Auswahlen definiert werden können, über Schlüssel-Wort ShortCut registriert. Sofern für die Kontext-Menü-Auswahl ein ShortCut definiert wurde, wird dieser bei der Kontext-Menü-Auswahl angezeigt Syntax: ShortCut(xxx) ShortCut(Funktionstaste) ShortCut(F6) ShortCut(Alt+Funktionstaste) ShortCut(Alt+F6) ShortCut(Alt+Ziffer) ShortCut(Alt+2) ShortCut(Alt+Buchstabe) ShortCut(Alt+A) ShortCut(Ctrl+Funktionstaste) ShorCut(Ctrl+F8) ShortCut(Ctrl+Ziffer) ShortCut(Crtl+3) ShortCut(Ctrl+Buchstabe) ShortCut(Ctrl+B) B EN UT ZERHA ND BUC H 42 Abbildung 6: Kontext-Menü-Punkte mit ShortCuts 4.3.6 Aufbereitungsoptionen für Buttons Für Buttons in Worktables können die folgenden Aufbereitungsoptionen angegeben werden: Window Das Folge-Programm wird in einem Fenster-Format ausgegeben. Confirm Anzeige Bestätigungsfenster vor Aufruf des eigentlichen Verarbeitungsprogramms Confirm Default-Bestätigungstext Confirm(X) X = Message-Text oder Message-Id für Individuelle Nachrichten ShortCut Anstatt auf den Button zu Klicken, dann die Aktion auch über einen Shortcut aktiviert werden. ShortCuts werden bei der Funktion WX_WrkBtn() bwz. bei den Funktionen über die die Standard-Buttons definiert werden können mit Hilfe des Schlüssel-Wortes ShortCut registriert. Sofern für den Button ein ShortCut hinterlegt wurde, wird dieser im Button-Text angezeigt. Buttons, die über Shortcut aktiviert werden können, müssen nicht zwangsläufig angezeigt werden. Wenn Buttons über Shortcuts aktiviert und abgeblendet werden sollen, muss im Schlüssel-Wort ShortCut ein zweiter Parameter mit dem Wert hidden angegeben werden. B EN UT ZERHA ND BUC H 43 Syntax: ShortCut(xxx) oder ShortCut(xxx,hidden) ShortCut(Funktionstaste) ShortCut(F6) ShortCut(Alt+Funktionstaste) ShortCut(Alt+F6) ShortCut(Alt+Ziffer) ShortCut(Alt+2) ShortCut(Alt+Buchstabe) ShortCut(Alt+A) ShortCut(Ctrl+Funktionstaste) ShorCut(Ctrl+F8) ShortCut(Ctrl+Ziffer) ShortCut(Crtl+3) ShortCut(Ctrl+Buchstabe) ShortCut(Ctrl+B) 4.3.7 ShortCut(F6,hidden) Aufbereitungsoptionen für Detail-Anzeigen Für Felder in Detail-Anzeigen/Change Tables können für die Auswahl und Anzeige die gleichen Aufbereitungsoptionen wie für die Filter-Felder angegeben werden. Daneben gibt es noch weitere Optionen, die nur für Change Tables gelten Output NotRequired Kann-Feld (Default-Wert) Required Muss-Feld NewLine Nächstes Feld in nächste Zeile (Default-Wert) NoNewLine Nächstes Filter-Feld in der gleichen Zeile Checkbox Nur Ausgabe-Feld Im Anzeige-Modus wird die Option automatisch von WOPiXX gesetzt. Für Schalter (0/1) 1 oder Y 0 oder N Häkchen (eingabefähiges Feld) Leeres (eingabefähiges) Feld TextArea Für einen Text-Bereich Anzahl Zeilen und Spalten/Zeichen müssen als Parameter-Werte bei Schlüssel-Wort TextArea angegeben werden: TextArea(10, 80) = Text-Bereich 10 Zeilen hoch und 80 Zeichen breit EditText Für editierbaren Textbereich Anzahl Zeilen und Spalten/Zeichen müssen als Parameter-Werte bei Schlüssel-Wort EditText angegeben werden. EditText(10, 80) = editierbarer Textbereich 10 Zeilen hoch und 80 Zeichen breit B EN UT ZERHA ND BUC H 44 Wx_ChgFld('TXSHORT': %Addr(TXSHORT): 'Kurz-Text': 'Required TextArea(3, 50)'); Wx_ChgFld('TXLONG': %Addr(TXLONG): 'Langer Text': 'EditText(15, 30)'); Abbildung 7: Text-Bereiche Img(IFSDatei, Breite, Höhe, Benutzer) Zur Anzeige von Bildern muss ist die Definition eines reinen Ausgabe-Feldes (ohne Inhalt) erforderlich. Bei dem Schlüssel-Wort können bis zu 4 Parameter, mindestens jedoch der erste angegeben werden. Die einzelnen Parameter werden durch Kommata von einander getrennt Parameter1: IFSDatei Pfad und Name des Bildes Parameter2: Breite Numerischer Wert Parameter3: Höhe Numerischer Wert Parameter4: Benutzer isWWW Text in einem Ausgabe-Feld wird als Link interpretiert. Bei Klick auf den Text wird der Link aktiviert. Neben diesen speziellen Schlüssel-Worten können bei der Definition von Ein-/Ausgabe-Feldern auch alle Schlüssel-Worte, die auch für Filter-Felder zulässig sind, verwendet werden. 4.3.8 Aufbereitungsoptionen für Header Für Header-Felder können die folgenden Aufbereitungsoptionen angegeben werden. 4.4 NewLine Nächstes Feld in nächste Zeile (Default-Wert) Standard-Bearbeitungs-Modi Wird in Work-Programmen kein Kontext-Menü-Punkt und keine Buttons definiert, wird automatisch ein Kontext-Menü und ein Button mit den folgenden Standard-Optionen oder Modi hinzugefügt. B EN UT ZERHA ND BUC H 45 Die folgenden Standard Modi gesetzt werden: *ADD Button Erfassen (eines neuen Datensatzes) *CHANGE Kontext-Menü Ändern (des Datensatzes) *COPY Kontext-Menü Kopieren (des Datensatzes) *DELETE Kontext-Menü Löschen (des Datensatzes) *PROPERTY Kontext-Menü Anzeigen (des Datensatzes) Die Standard-Optionen werden an das Folge-Programm übergeben und können über WOPiXXProzeduren geprüft und ermittelt werden. In den Folge-Programmen können die Standard-Modi, sowie alle anderen Modi, die in Kontext-Menüs oder über Buttons gesetzt werden mit WOPiXX-Prozeduren geprüft und ermittelt werden. In Change-Programmen werden automatisch Buttons mit den folgenden Standard-Optionen hinzugefügt: *SAVE Sichern *APPLY Übernehmen *REFRESH Aktualisieren Diese Standard-Modi können ebenfalls über WOPiXX-Funktionen geprüft und ermittelt werden. Die Prüfung sollte jedoch erst nach Aufruf der WOPiXX-Funktion Wx_GetChgInput() (ähnlich OpCode EXTFMT) erfolgen. 4.5 Bedingtes Anzeigen von Ein-/Ausgabe-Feldern Für Filter-Felder und Ein-/Ausgabe-Felder in Change Tables können Bedingungen vordefiniert werden, unter denen die Felder angezeigt oder ausgeblendet werden. Zur Definition der Bedingungen werden mehrere Möglichkeiten zur Verfügung gestellt: Optionaler Parameter in WOPiXX-Prozeduren Alle Prozeduren, durch die Filter- oder Ein-/Ausgabe-Felder definiert werden können, haben einen optionalen Parameter, in dem die Bedingung unter der das Feld angezeigt werden soll, hinterlegt werden kann. Condition Group Die Condition Group besteht aus 3 Prozeduren: o Wx_FltIf() für Filter-Felder und Wx_ChgIf() für Ein-/Ausgabe-Felder stellen den Beginn der Condition Group dar. Über diese Prozeduren werden die Bedingungen festgelegt, unter denen die im Anschluss definierten Filter- oder Ein-/Ausgabe-Felder angezeigt werden sollen. B EN UT ZERHA ND BUC H 46 o Über die Prozeduren Wx_FltElse() für Filter-Felder und Wx_ChgElse() für Ein-/Ausgabe-Felder können die Else-Bedingungen definiert werden. Der Aufruf der Else-Prozeduren ist nicht zwingend erforderlich. Werden diese Else-Prozeduren ohne Parameter/Bedingung aufgerufen, werden alle im Anschluss definierten Filter- oder Ein-/Ausgabe-Felder nur dann angezeigt, wenn die in der IfAnweisung definierten Bedingungen nicht zutreffen. Bei diesen Else-Prozeduren kann ebenfalls eine Bedingung hinterlegt werden und somit eine ElseIF-Anweisung generiert werden. o Wx_FltEndIf() für Filter-Felder und Wx_ChgEndIf() für Ein-/Ausgabe-Felder beenden die Condition Group. Der Aufruf der EndIf-Prozeduren ist zwingend erforderlich, um die Condition-Group zu beenden. Zu jedem Aufruf einer WOPiXX-IF-Funktion muss eine entsprechende WOPiXX-EndIf aufgerufen werden. Stimmt die Anzahl der IF- und ENDIF-Aufrufe nicht überein, tritt zur Laufzeit ein Fehler auf. Condition Groups können verschachtelt werden, d.h. eine If-Anweisung innerhalb einer If- oder Else-Anweisung ist zulässig. Die Verschachtelung, sowie die Anzahl der IF- und ENDIFAnweisungen werden zur Laufzeit geprüft. Bedingungen Die Bedingungen können wahlweise in RPG, CL oder JavaScript-Schreibweise angegeben werden. Der angegebene Code wird in JavaScript konvertiert und zur Laufzeit ausgeführt. Nur Datei-Felder, die bereits in zuvor als Filter-Felder definiert wurden dürfen in den Bedingungen verwendet werden. Vergleichsoperatoren, wie =, >, <> etc. (RPG-Schreibweise) können ebenso angegeben werden, wie *EQ, *GT, *NE etc. (CL-Schreibweise) oder ==, >, != (JavaScript-Schreibweise) Logische Operatoren wie AND, OR, NOT (RPG) bzw. *AND, *OR, *NOT (CL) bzw. &&, ||, ! (JavaScript) können verwendet werden. Klammersetzung ist erlaubt Beispiel für bedingte Filter-Felder Wx_FltFld('BestNr': 'FLD0025': 'LikeLeft': 'uppercase'); Wx_FltIf('Firma = 10'); Wx_FltFld('LiefBed': 'FLD0029': '=': 'uppercase'); Wx_FltIf('LiefBed *EQ ''AW'''); //1. If //2. If B EN UT ZERHA ND BUC H 47 Wx_FltFld('KundeNr': 'KundeNr': '=': 'uppercase'); Wx_FltEndIf(); Wx_FltElse('Firma = 15'); Wx_FltFld('AuftrArt': 'FLD0027': '=': 'uppercase'); //2. EndIf //1. ElseIf Wx_FltIf('%Subst(AuftrArt: 1: 1) = ''I'''); //2. If Wx_FltFld('Status': 'FLD0026': '=': 'ValuesList(''ERF'',''OPN'',''TEL'',''END'')': ''); Wx_FltElse('AuftrArt = ''EX'' *or AuftrArt = ''EA'' //2. ElseIf Wx_FltFld('LiefTerm': 'LieferTermin'); Wx_FltEndIf(); //2. EndIf Wx_FltEndIf(); //1. EndIf Source Code 19: Bedingte Filter-Felder 1. Firma 2. Bestell-Nr. 1. Firma 10 2. Bestell-Nr. 3. Lieferbedingung 1. 2. 3. 4. Abbildung 8: Ergebnis Bedingte Filter-Felder für Firma 10 Firma 10 Bestell-Nr. Lieferbedingung AW Kunden-Nr. B EN UT ZERHA ND BUC H 48 1. Firma 2. Bestell-Nr. 1. 2. 3. 4. Firma 15 Bestell-Nr. Auftragsart IN Status 1. 2. 3. 4. Firma 15 Bestell-Nr. Auftragsart EX Liefer-Termin 1. Firma 15 2. Bestell-Nr. 3. Auftragsart Abbildung 9: Ergebnis Bedingte Filter-Felder für Firma 15 ; 4.6 Bedienerhilfe Für Ein-/Ausgabe-Felder können in Change-Tables Hilfe-Texte hinterlegt werden. Die Hilfe-Texte können wahlweise direkt angegeben oder über eine Message-Id aus einer Message-File ermittelt werden. Wird eine Message-Id angegeben, so wird für die Bedienerhilfe der Level 2 MessageText verwendet. Wird für ein Feld weder eine Message-Id noch ein Message-Text angegeben, so wird der Level 2Message-Text aus der Message-Id der Feld-Beschreibung (sofern diese angegeben wurde) ermittelt und als Hilfe-Text angezeigt. Hilfe-Texte können bei allen Funktionen über mit WOPiXX Felder definiert werden (z.B. Wx_ChgFld()) über einen optionalen Parameter angegeben werden. Der Hilfe-Text kann entweder direkt als Text oder in Form einer Message-Id übergeben werden. Anstatt die Hilfe-Texte mit den Definitions-Funktionen anzugeben, können die Hilfe-Texte auch mit Hilfe der Funktion Wx_ChgHelp() gesetzt werden. B EN UT ZERHA ND BUC H 49 Sofern das automatische Ermitteln der Bedienerhilfe für einzelne oder alle Felder unterbunden werden soll, kann die Funktion Wx_ChgNoHelp() aufgerufen werden. 4.7 Reihenfolge der Prozedur-Aufrufe Prüfen Verarbeitungs-Modi Für Change Tables, um die im vorgelagerten Programm (z.B. Work Table) ausgelösten Aktionen (Kontext-Menü-Auswahl) zu ermitteln. In Work Tables kann über Kontext-Menü-Auswahlen der Aufruf von Folge-Programmen gesteuert werden. Wurde für einen Kontext-Menü-Punkt ein Programm angegeben wird dieses direkt aufgerufen. Wurde nur eine eindeutige Kennung übergeben, kann diese im Folge-Programm über den Modus (bzw. über entsprechende WOPiXX-Funktionen) geprüft und entsprechende Aktionen (z.B. Aufruf eines weiteren CGI-Programms) eingeleitet werden. Ermitteln von Schlüssel-Werten Für Folge-Programme (Work- und Change-Programme), die aus List-Anzeigen/Work Tables aufgerufen werden. Der eindeutige Schlüssel (oder die relative Satz-Nr.) wird bei Kontext-Menü-Auswahl bei WorkProgrammen an das Folge-Programm übergeben. Diese Informationen sind erforderlich um z.B. den zu ändernden oder zu löschenden Datensatz einzulesen. Der Aufruf ist nur erforderlich, wenn diese eindeutigen Schlüssel-Werte übergeben und im FolgeProgramm verarbeitet werden. Ermitteln von Parameter-Werten In Work- und Change Tables können bis zu 5 Parameter-Werte an das Folge-Programm übergeben werden. Der Aufruf ist nur erforderlich, wenn die Parameter-Werte im Folge-Programm benötigt und verarbeitet werden. Öffnen/Zuordnen des HTML-Dokuments Für Change und Work-Programme werden verschiedene Prozeduren vorgesehen. Basierend auf dem Prozedur-Aufruf werden die entsprechenden folgenden Schritte gesteuert. Definition von Header Informationen Header-Informationen sind allgemein gültige Ausgabe-Informationen (z.B. Auftrags-Nr., Liefertermin bei Auftrags-Positionen). Header-Informationen können sowohl für Work- als auch Change Tables angegeben werden. Definition der verwendeten physischen Dateien, SQL Tabellen oder Views. Sofern Header Informationen erforderlich sind, müssen die für die Header-Informationen erforderlichen Dateien/SQL Tabellen/Views vor den Header-Informationen definiert werden. Sowohl bei Work- als auch bei Change Tables können mehrere Tabellen definiert werden. Während bei den Change Tables die Dateien/Tabellen/Views einzeln definiert werden können, muss bei B EN UT ZERHA ND BUC H 50 Worktables die Verknüpfung zwischen den einzelnen Dateien/Tabellen/Views angegeben werden. Um Probleme bei der Verknüpfung zu vermeiden wird empfohlen SQL Views zu definieren in denen die physischen Dateien/Tabellen bereits miteinander verknüpft wurden in die ggf. WhereBedingungen integriert wurden (ähnlich Select/Omit-Anweisungen in DDS) um die Anzahl der Datensätze vorab zu selektieren. Definition der Filter-Felder (nur bei Work Tables) Filter-Felder werden vor der eigentlichen List-Anzeige ausgegeben und ermöglichen eine selektive Auswahl der Daten. Die Filter-Felder müssen in den zuvor definierten Dateien/Tabellen/Views enthalten sein. Zur Selektion der Daten werden unterschiedliche Vergleichsoperatoren bereitgestellt. Die Filter-Felder werden in der Reihenfolge in der sie definiert sind ausgegeben. Die Definition von Filter-Feldern ist in Work Tables nicht zwingend erforderlich. Definition der anzuzeigenden Spalten (bei Work Tables). In Worktables wird zunächst die Spalte mit dem eindeutigen Schlüssel (für die Detail-Anzeige) definiert. Sofern sich der eindeutige Schlüssel aus mehreren Spalten/Feldern zusammensetzt oder sofern die Tabelle/Datei keinen eindeutigen Schlüssel hat, kann die Relative Satz-Nr. verwendet werden. Die anzuzeigenden Spalten müssen in den zuvor definierten Dateien/Tabellen/Views hinterlegt sein. Der Programmierer kann diverse Aufbereitungsoptionen für die einzelnen Spalten definieren. Die Spalten werden in der Reihenfolge in der sie definiert sind ausgegeben. Mit Hilfe von Javascript-Funktionen können zur Laufzeit die Spalten am Bildschirm anders angeordnet werden. Definition der anzuzeigenden/bearbeitenden Felder (in Change Tables) Die Felder, die in den Change Tables angezeigt bzw. bearbeitet werden können aus den zuvor definierten Dateien/Tabellen/Views kommen. Es ist jedoch auch möglich Arbeits(ohne Datei-Bezug) zu definieren und zu verwalten. Die Felder werden in der Reihenfolge in der sie definiert sind ausgegeben. Definition der Kontext-Menüs bei Work Tables Für Work Tables können Kontext-Menüs definiert werden, d.h. es werden Programme oder Aktionen hinterlegt, die beim Klicken auf die entsprechende Auswahl ausgeführt werden. Der WOPiXX-Programmierer braucht lediglich das Kontext-Menü zu definieren, die Steuerung erfolgt durch Javascript-Funktionen, die zur Laufzeit ausgeführt werden. Kontext-Menü-Auswahlen beziehen sich i.d.R. auf die ausgewählte(n) Zeile(n)/Datensatz. Für allgemeine Aktionen, können Buttons definiert werden. B EN UT ZERHA ND BUC H 51 Definition von Buttons bei Work Tables und Change Tables Für Work- und Change Tables können Buttons definiert werden, d.h. es werden Programme oder Aktionen vorgegeben, die beim Klicken auf den Button ausgeführt werden. Setzen von Parameter-Werten für das Folge-Programm In Work- und Change Tables können bis zu 5 Parameter-Werte an das Folge-Programm übergeben werden. Die Parameter-Werte sollten versorgt und übergeben werden, unmittelbar bevor das HTMLDokument ausgegeben werden. Ausgabe des HTML-Dokuments bei Work Tables und Change Tables Nachdem alle Felder definiert wurden, wird das Dokument ausgegeben. Für Work-Programme endet die Verarbeitung mit der Ausgabe des HTML-Dokuments. Für Change Tables endet das Programm (aufgrund der Stateless-Programmierung) ebenfalls an dieser Stelle. WOPiXX steuert jedoch den Ablauf so, dass beim nächsten Zyklus das Programm an dieser Stelle fortgeführt wird. Eingabe-Prüfung und ggf. Ausgabe von Fehlermeldungen bei Change Tables Die erfassten Daten werden an das WOPiXX-Programm zurückgegeben. Der WOPiXX-Programmierer kann die üblichen Prüfungen codieren und ausführen. Im Fehlerfall wird eine WOPiXX-Funktion aufgerufen, die die Fehlermeldung ausgibt. Sofern keine Fehler festgestellt wurden. Kann der WOPiXX-Programmierer seine üblichen DateiVerarbeitungen kodieren und ausführen. Das Change Programm endet an dieser Stelle. Die Steuerung des Rücksprungs erfolgt automatisch durch WOPiXX. Rücksprung auf das vorgelagerte Programm Nach erfolgreicher Verarbeitung eines Change Tables, d.h. nach dem der zu bearbeitende Datensatz ordnungsgemäß fortgeschrieben wurde, muss auf das vorgelagerte Programm zurückgesprungen werden. Bedingte Anzeigen Bedingte abhängige Anzeigen können über entsprechende Prozedur-Aufrufe, die JavaScript-Code erzeugen gesteuert werden. Der Aufruf der IF-Prozeduren muss 4.7vor (IF) und nach (ENDIF) dem Aufruf der unter bestimmten Bedingungen anzuzeigenden Felder erfolgen. Tabellen in Change Tables Innerhalb von Change Tables können die Ein-/Ausgabe-Felder in Tabellen hinterlegt werden. Die Tabellen-Definition bzw. der Aufruf der entsprechenden WOPiXX-Prozeduren erfolgt unmittelbar vor dem ersten (Ein/Ausgabe-)Feld innerhalb der Tabelle. B EN UT ZERHA ND BUC H 52 4.8 Physische Dateien, SQL Tabellen oder Views Die physischen Dateien, SQL Tabellen oder SQL Views, in denen die zu verarbeitenden Daten hinterlegt sind müssen durch den Aufruf von WOPiXX-Funktionen definiert werden. Die Definition der Dateien/Tabellen/Views muss erfolgen bevor das erste Feld (Filter-Feld oder Spalte in Worktables oder Ein- oder Ausgabe-Feld in Change Tables) definiert wird. Für Header-, Filter, Work Tables und Change Tables erfolgt die Definition der physischen Dateien/Tabellen/Views über unterschiedliche Funktionen. Bei der Definition muss die vorgeschriebene Verarbeitungsreihenfolge eingehalten werden, d.h. werden Filter definiert, muss die Funktion für FilterDateien/Tabellen/Views aufgerufen werden. Werden in einem WOPiXX-Programm unterschiedliche Darstellungsarten verwendet, z.B. Filter und ListAnzeige/Worktables, so müssen die Dateien/Tabellen/Views nur einmalig, für die Filter definiert werden. Für die List-Anzeige werden die registrierten Filter-Dateien/Tabellen/Views herangezogen. Anmerkung; 4.8.1 Physische Dateien/Tabellen/Views müssen innerhalb eines WOPiXXProgramms nur einmalig, bevor das erste (Header-/Filter- oder Work-)Feld definiert wird angegeben werden. DDS beschriebene logische Dateien DDS beschriebene logische Dateien können angegeben und verarbeitet werden. Aus Performance-Gründen ist die Verwendung von DDS beschriebenen logischen Dateien jedoch nicht zu empfehlen. Directweb und WOPiXX verwenden ausschließlich SQL. Der Query-Optimizer muss jede Abfrage, in der DDS beschriebene logische Dateien verwendet werden neu schreiben, basierend auf den zugrunde liegenden physischen Dateien/Tabellen. Die Analyse der DDS beschriebenen logischen Dateien, sowie das anschließende Rewriting kann nur durch die alte/klassische Query Engine (CQE) erfolgen. Alle SQL-Statements in denen DDS beschriebene logische Dateien angegeben werden, müssen an die CQE zurückgegeben werden, was zwischen 10 und 15% Performance kosten kann. Die Vorteile der modularen und wesentlich flexibleren neuen Query Engine (SQE = SQL Query Engine) können nicht genutzt werden. Anmerkung: 4.8.2 Anstatt DDS beschriebene logische Dateien anzugeben, sollten entweder die zugrunde liegenden physischen Dateien/Tabellen oder (neu erstellte) SQL Views verwendet werden. Dateien direkt verknüpfen oder SQL Views? Mit WOPiXX können mehrere Dateien/Tabellen/Views in dem gleichen List-Anzeige (Work Table) oder B EN UT ZERHA ND BUC H 53 Detail-Verarbeitung (Change Table) definiert werden. In Detail-Verarbeitungen/Change-Tables können die Dateien/Tabellen/Views einzeln und unabhängig voneinander definiert werden. Für Listausgaben ist es jedoch erforderlich diese Dateien/Tabellen/Views miteinander zu verknüpfen. Die Art der Verknüpfung (z.B. Inner Join, Left/Right Outer Join, Exception Join, Full Join) sowie die Verknüpfung über Schlüssel-Felder muss vom Programmierer vorgegeben werden, da alle Abfragen und Verknüpfungen on the fly gebildet werden müssen. Anmerkung: Um den individuellen WOPiXX-Source Code so einfach wie möglich zu reduzieren, wird empfohlen SQL-Views anzulegen, in denen die gewünschten Dateien/Tabellen bereits miteinander verknüpft sind, und in denen ggf. sogar durch entsprechende Where-Bedingungen Daten von vornherein eliminiert werden. SQL Views sind ungeschlüsselte logische Dateien. Da SQL Views immer ungeschlüsselt sind, können beliebig viele SQL Views angelegt werden ohne Auswirkungen auf die Performance befürchten zu müssen. 4.8.3 Datei- und Feld-Namen Für alle Dateien, Tabellen und Views sowie für alle Felder und Spalten kann wahlweise der kurze (bis zu 10 Zeichen) System-Name oder der lange (bis 128 Zeichen) SQL Name angegeben werden. Die Schreibweise kann in jeder beliebigen Kombination aus Groß- und Klein-Buchstaben erfolgen. Die Datei/Tabellen/View-Namen, sowie die Spalten/Feld-Namen werden von WOPiXX in Groß-Buchstaben konvertiert. 4.9 Datenstrukturen und Ein-/Ausgabe-Felder Datenaustausch zwischen HTML- und dem individuellen WOPiXX-Programm findet vor allem in den Change Tables/Detail-Programmen statt. Der Datenaustausch erfolgt über die aufgerufenen WOPiXXProzeduren Der Programmierer ist für das Einlesen und Fortschreiben seiner Daten selbst verantwortlich, d.h. der Programmierer liest den Datensatz ein (native I/O oder embedded SQL) übergibt die Daten über WOPiXX-Funktionen an das Web-Programm erhält die erfassten/geänderten Daten über die WOPiXX-Funktionen zurück prüft diese erfassten Daten gibt ggf. eine Fehlermeldung über WOPiXX-Prozeduren aus schreibt den geprüften Datensatz fort B EN UT ZERHA ND BUC H 54 Um einen Datenaustausch von Daten mit jedem Datentypen in jeder zulässigen Länge zu ermöglichen, müssen Pointer auf die Daten an die WOPiXX-Prozeduren übergeben werden. WOPiXX ermitteln den Datentypen und die Länge der übergebenen Daten und konvertiert diese in ein alphanumerisches Web-Format. Die erfassten Daten werden von WOPiXX in das Ausgangsformat zurückübersetzt. Der RPG-Compiler konvertiert gezonte numerische Felder, die Dateien, die in den F-Bestimmungen definiert sind, sowie stand-alone gezont-numerische Variablen in gepackte numerische Felder. Werden gezonte numerische Felder jedoch in Datenstrukturen definiert, werden sie vom Compiler nicht konvertiert. Anmerkung: Um Probleme beim Datenaustausch zu vermeiden, müssen alle Felder oder Variablen, über die Daten mit WOPiXX ausgetauscht werden in Datenstrukturen hinterlegt werden. 4.10 Mehrsprachigkeit Beim Aufruf von WOPiXX-Prozeduren werden auch die anzuzeigenden Texte übergeben. Die Prozeduren sind so gesteuert, dass wahlweise eine Text oder eine Message-Id übergeben werden kann. Die Message-File, aus der der Text ermittelt werden soll, wird abhängig von den Angaben beim Einrichten der Anwendung (7.1 Anwendung) bestimmt. B EN UT ZERHA ND BUC H 55 4.11 Work-Programm Für Work-Programme stehen die folgenden WOPiXX-Prozeduren zur Verfügung WorkTables Zuordnung Aktion Prozeduren Wx_GetParmChar() Wx_GetParmArrChar() Parameter Wx_GetParmUC() Wx_GetParmArrUC() Wx_GetDBKeyInt() Wx_GetDBKeyArrInt() Get Info Wx_GetDBKeyDec() Wx_GetDBKeyArrDec() Key Wx_GetDBKeyChar() Wx_GetDBKeyArrChar() Wx_GetDBKeyUC() Wx_GetDBKeyArrUC() Öffnen Wx_OpnHTMLWrk() Wx_HdrFile() Wx_HdrFld() Header Definition Wx_HdrFldUC2() Wx_HdrFileFld Wx_HdrFileFldUC2() Wx_GenFlt() Wx_FltFile() File/Fields Wx_FltFld() Wx_FltFileFld() Filter Definition Wx_BegEnhFlt() Wx_FltIf() ConditionWx_FltElse() Group Wx_FltEndIf() Wx_CtxMnuItm() Wx_NoCtxMnuItm() Wx_CtxMnuItmChange() Wx_CtxMnuItmCopy() Work Wx_CtxMnuItmDelete() Table Menü Definition Wx_CtxMnuItmProperty() Wx_CtxMnuItmDefault() Wx_WrkBtn() Wx_NoWrkBtn() Wx_WrkBtnAdd() Wx_WrkBtnDefault() Wx_WrkFile() Wx_WrkKey() Definition Wx_WrkFld() Wx_WrkWhere() Wx_WrkDftOrder() SQL Wx_WrkSQLMan() Work Wx_NoRcdTxt() Table Wx_SetParmChar() Wx_SetParmArrChar() Ausgeben Wx_SetParmUC() Wx_SetParmArrUC() Wx_WrtWrkTbl() Bezeichnung Prozedur Einzelnen alphanumerischen Parameter-Wert empfangen Mehrere alphanumerische Parameter-Werte empfangen Einzelnen Unicode-Parameter-Wert empfangen Mehrere Unicode Parameter-Werte empfangen Einzelnen ganzzahlingen Schlüssel-Wert empfangen Mehrere ganzzahlige Schlüssel-Werte empfangen Einzelnen dezimalen Schlüssel-Wert empfangen Mehrere dezimale Schlüssel-Werte empfangen Einzelnen alphanumerischen Schlüssel-Wert empfangen Mehrere alphanumerische Schlüssel-Werte empfangen Einzelnen Unicode-Schlüssel-Wert empfangen Mehrere Unicode Schlüssel-Werte empfangen Öffnen HTML für Work Table Definieren Datei für Header Informationen Definieren alphanumer. Header-Feld Definieren Unicode Header-Feld Definieren Datei und alphanumerisches Header-Feld Definieren Datei und Unicode-Header-Feld Generischen Filter Hinzufügen Definieren Datei für Filter Filter Feld hinzufügen Definieren Filter Datei und Feld Erweiterter Filter Beginn Filter Condition Group Else/ElseIf Filter Condition Group Ende Filter Condition Group Menüpunkt manuell hinzufügen Kein Standard-Kontext-Menü einblenden Standard-Menü-Punkt Ändern/Change einbinden Standard-Menü-Punkt Kopieren/Copy einbinden Standard-Menü-Punkt Löschen/Delete einbinden Standard-Menü-Punkt Eigenschaften/Anzeigen/Property einbinden Alle Standard-Menü-Punkte einbinden Button manuell hinzufügen Kein Standard-Button einblenden Standard-Button Erfassen/Hinzufügen/Add einbinden Alle Standard-Buttons hinzufügen Definieren Dateien für Work Table Definieren Unique für Work Table Definieren Spalte für Work Table Where Bedingungen für Work Default Sortierung in Work Definieren SQL Statement für WorkTable manuell Anzeige Anzahl Setzen alphanumerischen Parameter-Wert Setzen von mehreren alphanumerischen Parameter-Werten Setzen Unicode-Parameter-Wert Setzen von mehreren Unicode-Parameter-Werten WorkTable ausgeben Tabelle 3 : WOPiXX-Prozeduren für Work-Programme Für ein Work-Programm sind nicht immer alle WOPiXX-Prozeduren erforderlich. Der Aufruf der WOPiXX-Prozeduren sollte jedoch (weitgehend) in der Reihenfolge, in der die Prozeduren aufgelistet sind erfolgen. Die blau eingefärbten Prozeduren können sowohl in Work- als auch in Change-Tables aufgerufen werden. Die übrigen Prozeduren können nur in Verbindung mit Work-Tables verwendet werden. B EN UT ZERHA ND BUC H 56 In einem Work-Programm müssen die folgenden Schritte abgedeckt sein: HTML-Dokument öffnen (Prozedur Wx_OpnHTMLWrk()) Dateien/Tabellen/Views definieren (Prozeduren Wx_FltFile() oder Wx_WrkFile()) Spalte mit eindeutigem Schlüssel definieren (Prozedur Wx_WrkKey()) Spalten für List-Anzeige definieren (Prozedur Wx_WrkFld()) HTML-Dokument an Browser schicken (Prozedur Wx_WrtWrkTbl()) 4.11.1 Template für Work-Programm Ein Template für ein Work-Programm mit Copy-Strecke und den erforderlichen Prozedur-Aufrufen in der erforderlichen Reihenfolge befindet sich in: Bibliothek Quellen-Datei Member WOPIX QCPYLESRC EXWRKTEMP Dieses Template kann kopiert und für die individuellen Work-Programme modifiziert werden. 4.11.2 Wx_OpnHTMLWrk() HTML Dokument öffnen Im ersten Schritt der WOPiXX-Programmierung muss festgelegt werden, ob eine List-Anzeige (WorkTable) oder Detail-Anzeige erfolgen soll. Die Unterscheidung erfolgt durch den Aufruf von unterschiedlichen Prozeduren für Work- oder Change Tables. Zum Erstellen einer Work Table wird zunächst die Prozedur WX_OpnHTMLWrk() (Open HTML Document for Work Tables) aufgerufen. In dieser Prozedur wird zunächst das Default-HTML-Template ermittelt und geöffnet. Anstatt des Default-HTML-Templates zu verwenden, kann auch ein individuelles HTML-Dokument verwendet werden. In diesem Fall muss jedoch dafür gesorgt werden, dass die Platz-Halter für Work- bzw. ChangeTables, Überschriften, Error-Messages etc., die von WOPiXX/Directweb ersetzt werden, in dem individuellen Dokument integriert sind. Der Titel, der zur Laufzeit angezeigt werden soll wird als Parameter übergeben und kann wahlweise als Text oder als Message-Id aus der bei dem Einrichten der Anwendung angegebenen Nachrichten-Datei übergeben werden. Das Folge-Programm (Detail-Anzeige oder eine weitere List-Anzeige) muss angegeben werden. Bei ListProgrammen ist das Folge-Programm i.d.R. das Programm in dem die Detail-Verarbeitung erfolgen soll. Die Programme, die bei Auswahl über das Kontext-Menü aufgerufen werden, werden bei der Definition der Menü-Punkte angegeben. Die Prozedur Wx_OpnHTMLWrk() darf pro Work-Programm nur einmalig aufgerufen werden. B EN UT ZERHA ND BUC H 57 Prototype ************************************************************************** P* Procedure name: Wx_OpnHTMLWrk P* Purpose: Open HTML Document for CGI Work Program P* Returns: P* Parameters: ParTitle => Message-Id Title or Text for Title P* Parameters: ParCGIPGM => Program to Call P* Parameters: ParHTMLDoc => HTML-Document P* --> Not Passed or *DEFAULT passed P* --> Default Document ************************************************************************** D Wx_OpnHTMLWrk... D PR OpDesc D ParTitle Like(FldRef.MsgText) Const D PInCGIPGM Like(FldRef.PGM) Const D PInHtmlDoc Like(FldRef.HTMLDOC) Const D Options(*NoPass) Source Code 20: Prototype - Procedure Wx_OpnHTMLWrk - HTML Dokument für Worktables öffnen Parameter ParTitle Message-Id oder Text für Titel PInCGIPGM Folge-Programm PInHTMLDoc HTML-Dokument Optionaler Parameter Muss nur angegeben werden, wenn ein anderes als das Default HTML-Dokument verwendet werden soll Beispiele für den Aufruf Wx_OpnHTMLWrk('Adress-Stamm': 'EXCHGAD01'); Wx_OpnHTMLWrk('TOP0017': 'EXCHGUMS': 'MyWrkUmsatz.html'); Source Code 21: Prozedur Wx_OpnHTMLWrk - HTML Dokument für Worktables öffnen 4.11.3 Prozeduren zur Definition von Filter-Feldern Filter-Felder können nur in Verbindung mit Work Tables definiert werden. 4.11.3.1 WX_GENFLT() Generischer Filter Mit der Funktion WX_GENFLT wird der generische Filter definiert. Für den generischen Filter können bis zu 10 Spalten angegeben werden, die entweder case sensitive oder case insensitive nach der eingegebenen Zeichen-Kombination durchsucht werden. Pro Work Table kann maximal ein generischer Filter definiert werden. B EN UT ZERHA ND BUC H 58 ■ Generischer Filter Abbildung 10: Generischer Filter Prototype ? ************************************************************************ P* Procedure name: Wx_GenFlt P* Purpose: Add generic Filter P* --> Up to 10 Fields/Columns within the same File/Table P* Returns: P* Parameters: ParFile => File/Table P* Parameters: ParField1 => Field/Column Name (in specified File) P* Parameters: ParOptions => Options (Table Options!) P* Parameters: ParField2 => Field/Column Name (in specified File) P* Parameters: ParField3 => Field/Column Name (in specified File) P* Parameters: ParField4 => Field/Column Name (in specified File) P* Parameters: ParField5 => Field/Column Name (in specified File) P* Parameters: ParField6 => Field/Column Name (in specified File) P* Parameters: ParField7 => Field/Column Name (in specified File) P* Parameters: ParField8 => Field/Column Name (in specified File) P* Parameters: ParField9 => Field/Column Name (in specified File) P* Parameters: ParField10 => Field/Column Name (in specified File) ? ************************************************************************ P Wx_GenFlt... P B Export ? ? * Procedure Interface ? *---------------------------* D Wx_GenFlt... D PI OPDesc D ParFile Like(FldRef.NameSQL) Const D ParField1 Like(FldRef.NameSQL) Const D ParOptions Like(FldRefCGI.Options) Const D Options(*NoPass) D ParField2 Like(FldRef.NameSQL) Const D Options(*NoPass) D ParField3 Like(FldRef.NameSQL) Const D Options(*NoPass) D ParField4 Like(FldRef.NameSQL) Const D Options(*NoPass) D ParField5 Like(FldRef.NameSQL) Const D Options(*NoPass) D ParField6 Like(FldRef.NameSQL) Const D Options(*NoPass) D ParField7 Like(FldRef.NameSQL) Const D Options(*NoPass) D ParField8 Like(FldRef.NameSQL) Const D Options(*NoPass) B EN UT ZERHA ND BUC H 59 D D D D ParField9 Like(FldRef.NameSQL) Options(*NoPass) Like(FldRef.NameSQL) Options(*NoPass) ParField10 Const Const Source Code 22: Prototype - Prozedur Wx_GenFlt - Definiere generischen Filter Parameter-Felder ParFile Physische Datei oder Tabelle oder View in der die Spalten/Felder für den generischen Filter hinterlegt sind Es können wahlweise die kurzen (max.10 stelligen) System-Namen oder die bis zu 128 Zeichen langen SQL Namen angegeben werden. Der Datei-Name kann in jeder beliebigen Groß/Klein-Schreibweise angegeben werden. ParField1 ParOptions Aufbereitungsoptionen Optionaler Parameter casesensitive ParField2 ParField3 Erste Spalte/Feld, die nach der eingegebenen Buchstabenkombination durchsucht werden soll. Es kann wahlweise der kurze System- oder der lange SQL-Name angegeben werden. Der Spalten/Feld-Name kann in jeder beliebigen Groß/Klein-Schreibweise angegeben werden. Für den generischen Filter muss mindestens eine Spalte/Feld angegeben werden. Casesensitive Suche Default Suche ist case insensitive Spalte/Feld, die gescannt werden soll Optionaler Parameter ParField10 Analog ParField2 Beispiel für den Aufruf Wx_GenFlt('ADRESSEX': 'NAME1F'); Wx_GenFlt('AdresseX': 'Name1F': 'casesensitive': 'Strasse': 'Ort'); Source Code 23: Aufruf Prozedur Wx_GenFlt() - Generischen Filter definieren 4.11.3.2 Wx_FltFile() Datei für Filter definieren Sofern kein generischer Filter erforderlich ist, jedoch weitere Filter-Felder angelegt werden sollen, müssen zunächst die Dateien/Tabellen/Views, in denen zu selektierenden Informationen hinterlegt wurden definiert werden. Wurde ein generischer Filter angelegt, so wurde bereits die erste Datei/Tabelle/View angelegt. Der Aufruf der Funktion Wx_FltFile ist nur erforderlich, wenn weitere Filter aus anderen Dateien/Tabellen/Views definiert werden sollen. B EN UT ZERHA ND BUC H 60 Über die Funktion Wx_FltFile können bis zu 10 Dateien/Tabellen/Views definiert werden. Da diese Dateien/Tabellen/Views auch zum Aufbau des Select-Statements, das die Listanzeige bildet verwendet wird, müssen die Abhängigkeiten (Join-Informationen) zwischen den Dateien/Tabellen/Views definiert werden. Die Join-Anweisungen müssen in gültiger SQL Notation angegeben werden. Anmerkung: Anstatt die Verknüpfungen in der Funktion Wx_FltFile anzugeben, wird empfohlen SQL Views zu erstellen, die die alle Spalten, sowie die Verknüpfungen enthalten. Prototype *************************************************************************** P* Procedure name: Wx_FltFile P* Purpose: Define Files used for Filter P* --> Up to 10 Files can be specified P* --> If more than 1 File is specified: Join Conditions are P* Returns: P* Parameters: ParFile1 => File/Table 1 P* Parameters: ParFile2 => File/Table 2 (Optional) P* Parameters: ParJoin2 => Join Previous Tables and Table 2 (Optional) P* Parameters: ParFile3 => File/Table 3 (Optional) P* Parameters: ParJoin3 => Join Previous Tables and Table 3 (Optional) P* Parameters: ParFile4 => File/Table 4 (Optional) P* Parameters: ParJoin4 => Join Previous Tables and Table 4 (Optional) P* Parameters: ParFile5 => File/Table 5 (Optional) P* Parameters: ParJoin5 => Join Previous Tables and Table 5 (Optional) P* Parameters: ParFile6 => File/Table 6 (Optional) P* Parameters: ParJoin6 => Join Previous Tables and Table 6 (Optional) P* Parameters: ParFile7 => File/Table 7 (Optional) P* Parameters: ParJoin7 => Join Previous Tables and Table 7 (Optional) P* Parameters: ParFile8 => File/Table 8 (Optional) P* Parameters: ParJoin8 => Join Previous Tables and Table 8 (Optional) P* Parameters: ParFile9 => File/Table 9 (Optional) P* Parameters: ParJoin9 => Join Previous Tables and Table 9 (Optional) P* Parameters: ParFile10 => File/Table 10 (Optional) P* Parameters: ParJoin10 => Join Previous Tables and Table 10 (Optional) *************************************************************************** D Wx_FltFile PR OPDesc D ParFile1 Like(FldRef.NameSQL) Const D ParFile2 Like(FldRef.NameSQL) Const D Options(*NoPass) D ParJoin2 Like(FldRef.TextVar) Const D Options(*NoPass) D ParFile3 Like(FldRef.NameSQL) Const D Options(*NoPass) D ParJoin3 Like(FldRef.TextVar) Const D Options(*NoPass) D ParFile4 Like(FldRef.NameSQL) Const D Options(*NoPass) D ParJoin4 Like(FldRef.TextVar) Const D Options(*NoPass) D ParFile5 Like(FldRef.NameSQL) Const D Options(*NoPass) D ParJoin5 Like(FldRef.TextVar) Const D Options(*NoPass) D ParFile6 Like(FldRef.NameSQL) Const D Options(*NoPass) D ParJoin6 Like(FldRef.TextVar) Const D Options(*NoPass) D ParFile7 Like(FldRef.NameSQL) Const D Options(*NoPass) B EN UT ZERHA ND BUC H 61 D D D D D D D D D D D D D D ParJoin7 Like(FldRef.TextVar) Options(*NoPass) Like(FldRef.NameSQL) Options(*NoPass) Like(FldRef.TextVar) Options(*NoPass) Like(FldRef.NameSQL) Options(*NoPass) Like(FldRef.TextVar) Options(*NoPass) Like(FldRef.NameSQL) Options(*NoPass) Like(FldRef.TextVar) Options(*NoPass) ParFile8 ParJoin8 ParFile9 ParJoin9 ParFile10 ParJoin10 Const Const Const Const Const Const Const Source Code 24: Prototype - Prozedur Wx_FltFile - Definiere Filter-Datei Parameter ParFile1 ParFile2 ParJoin2 Die Parameter ParFile3 ParFile10 sind optional und werden analog ParFile2 verwendet. Die Parameter ParJoin3 ParJoin10 sind optional werden analog ParJoin2 verwendet. Physische Datei/Tabelle/View Kann als kurzer System-Name (Max.10 Zeichen) oder langer SQL Name (Max. 128 Zeichen) angegeben werden. Physische Datei/Tabelle/View Optionaler Parameter Kurzer System- oder langer SQL Name Verknüpfung zwischen Datei/Tabelle/View 1 und 2 Optionaler Parameter muss angegeben werden, wenn ParFile2 angegeben wurde (auch dann wenn ein Cross Join gewünscht wird). Beispiel: on Key1File1 = Key1File2 + and Key2File1 = Key2File2 Beispiel für den Aufruf Wx_FltFile('AuftrKopfX'); Wx_FltFile('AuftrKopfX': 'AuftrPosX': 'Join AuftrPosX on AuftrKopfX.BestNr = AuftrPosX.BestNr': 'KundSt': 'Left Outer Join KundSt on KundeNr = KndNr'); Source Code 25: Beispiel Aufruf Prozedur Wx_FltFile() 4.11.3.3 Wx_FltFld() Filter-Dateien definieren Filter-Feld definieren Filter-Felder können definiert werden, nach dem die Dateien/Tabellen/Views, die für die Listanzeige benötigt werden, definiert wurden. B EN UT ZERHA ND BUC H 62 ■ Filter Felder Abbildung 11: Filter-Felder Für die einzelnen Filter-Felder können unterschiedliche Vergleichsoperatoren angegeben werden. Wird kein Vergleichsoperator angegeben, so wird der Unterlassungswert = (gleich) verwendet. Bei der Definition der Filter-Felder können diverse Aufbereitungsoptionen angegeben werden. Ebenso ist es möglich Unterlassungswerte anzugeben. Über einen weiteren optionalen Parameter können Bedingungen definiert werden unter denen das Feld angezeigt oder ausgeblendet werden kann. Prototype *************************************************************************** P* Procedure name: Wx_FltFld P* Purpose: Define Fields used for Filter P* Returns: P* Parameters: ParField => Field P* Parameters: ParMsg => Message-Id or Text P* (=, <>, >=, <=, <, >, Like, Not Like, P* Not LikeLeft, LikeRight, Not LikeRight P* Not LikeLeft, LikeRight, Not LikeRight P* Not Between, Between, Not In, In P* Parameters: ParOptions => Options P* Parameters: ParValue => Default Values P* Parameters: ParCond => Single field conditions P* Parameters: ParHelp => Help (Text or Message-Id P* --> Help = Level 2 Message Text) ? *************************************************************************** D Wx_FltFld... D PR OPDesc D ParField Like(FldRef.NameSQL) Const D ParMsg Like(FldRef.MsgData) Const D ParCompare Like(FldRef.Text15V) Const D Options(*NoPass) D ParOptions Like(FldRefCGI.Options) Const D Options(*NoPass) D ParValues Like(FldRefCGI.DftValue) Const D Options(*NoPass) D ParCond Like(FldRefCGI.Cond) Const D Options(*NoPass) B EN UT ZERHA ND BUC H 63 D D ParHelp Like(FldRefCGI.Help) Options(*NoPass: *Trim) Const Source Code 26: Prototype - Prozedur Wx_FltFld - Definieren Filter-Felder Parameter ParField ParMsg ParCompare Vergleichsoperator Optionaler Parameter Default-Wert ist = ParOptions Aufbereitungsoptionen Optionaler Parameter Vergl. 4.3.3 Aufbereitungsoptionen für Filter-Felder ParValues Default-Werte Optionaler Parameter Bei Vergleichsoperator (Not) Between und (Not) In können mehrere alphanumerische Default-Werte durch Kommata getrennt übergeben werden. ParCond Bedingungen unter denen das Filter-Feld angezeigt werden soll. Wird in JavaScript konvertiert und zur Laufzeit ausgeführt Optionaler Parameter ParHelp Hilfe-Text Ein Hilfe-Text oder eine Message-Id mit Hilfe-Text kann übergeben werden. Sofern eine Message-Id übergeben wird, wird davon ausgegangen, dass der Hilfe-Text als Level 2 Text hinterlegt wurde. Sofern bei der Message-Id, die für die Anzeige angegeben wurde ein Level 2-Text in der Message-File hinterlegt ist, wird dieser automatisch als Hilfe-Text übernommen. Feld/Spalten-Name des Filter-Feldes Das Filter-Feld (der angegebene Feld-Name) muss in den zuvor definierten Tabellen vorhanden sein. Wahlweise kann der kurze System-Name oder der lange SQL Name angegeben werden. Beschreibung, die links neben dem Filter-Feld angezeigt wird In dem Parameter kann entweder die Beschreibung direkt oder eine Message-Id angegeben werden. Bei Verwendung einer Message-Id muss die zugehörige Message-File in Directweb für die Anwendung hinterlegt sein. Beispiel für den Aufruf Wx_GenFlt('ADRESSEX': Wx_FltFld('Ort': Wx_FltFld('Land': Wx_FltFld('KundeNr': 'NAME1F': '': 'NAME2F'); 'FLD0005': 'LikeLeft'); 'FLD0006': '=': 'enhflt CTL(Country)'); 'FLD0001': '>=': 'enhflt'); Source Code 27 : Aufruf Prozedur Wx_FltFld() - Definieren Filter-Felder B EN UT ZERHA ND BUC H 64 Abbildung 12 : Definierte Filter-Felder - Ergebnis aus Source Code 27 4.11.3.4 Wx_FltFileFld() Filterfile und 1.Feld definieren Sofern kein generischer Filter verwendet wird und auch nur auf eine einzige physische Datei/Tabelle/View zugegriffen wird, kann die Datei/Tabelle/View über die Funktion Wx_FltFileFld() direkt zusammen mit dem 1. Filter-Feld definiert werden. Bei dieser Funktion wird die Datei/Tabelle/View als 1. Parameter übergeben. Die folgenden Parameter entsprechen den Parametern (Anzahl, Reihenfolge und Schlüssel-Wort CONST), die für Prozedur Wx_FltFld() übergeben werden können. Prototype *************************************************************************** P* Procedure name: Wx_FltFileFld P* Purpose: Define Fields used for Filter P* Returns: P* Parameters: ParFile => File P* Parameters: ParField => Field P* Parameters: ParMsg => Message-Id or Text P* (=, <>, >=, <=, <, >, Like, Not Like, P* Not LikeLeft, LikeRight, Not LikeRight P* Not LikeLeft, LikeRight, Not LikeRight P* Not Between, Between, Not In, In P* Parameters: ParOptions => Options P* Parameters: ParValue => Default Values P* Parameters: ParCond => Single Field Conditions P* Parameters: ParHelp => Help (Text or Message-Id P* --> Help = Level 2 Message Text *************************************************************************** D Wx_FltFileFld... D PR OPDesc D ParFile Like(FldRef.NameSQL) Const D ParField Like(FldRef.NameSQL) Const D ParMsg Like(FldRef.MsgData) Const B EN UT ZERHA ND BUC H 65 D D D D D D D D D D ParCompare ParOptions ParValues ParCond ParHelp Like(FldRef.Text15V) Options(*NoPass) Like(FldRefCGI.Options) Options(*NoPass) Like(FldRefCGI.DftValue) Options(*NoPass) Like(FldRefCGI.Cond) Options(*NoPass) Like(FldRefCGI.Help) Options(*NoPass: *Trim) Const Const Const Const Const Source Code 28: Prototype - Prozedur Wx_FltFileFld() - Definiere Filter-Datei und 1.Feld Parameter ParFile ParField Feld/Spalten-Name des Filter-Feldes Das Filter-Feld (der angegebene Feld-Name) muss in den zuvor definierten Tabellen vorhanden sein. Wahlweise kann der kurze System-Name oder der lange SQL Name angegeben werden. Analog Parameter ParField in Funktion Wx_FltFld() ParMsg Beschreibung, die links neben dem Filter-Feld angezeigt wird In dem Parameter kann entweder die Beschreibung direkt oder eine Message-Id angegeben werden. Bei Verwendung einer Message-Id muss die zugehörige Message-File in Directweb für die Anwendung hinterlegt sein. Analog Parameter ParMsg in Funktion Wx_FltFld() ParCompare Vergleichsoperator Optionaler Parameter Default-Wert ist = ParOptions Aufbereitungsoptionen Optionaler Parameter Vergl. 4.3.3 Aufbereitungsoptionen für Filter-Felder Analog Parameter ParOptions in Funktion Wx_FltFld() ParValues Default-Werte Optionaler Parameter Bei Vergleichsoperator (Not) Between und (Not) In können mehrere alphanumerische Default-Werte durch Kommata getrennt übergeben werden. Analog Parameter ParValues in Funktion Wx_FltFld() ParCond Bedingungen unter denen das Filter-Feld angezeigt werden soll. Wird in JavaScript konvertiert und zur Laufzeit ausgeführt Optionaler Parameter Physische Datei/Tabelle/View Kann als kurzer System-Name (Max.10 Zeichen) oder langer SQL Name (Max. 128 Zeichen) angegeben werden. Analog Parameter ParFile1 in Funktion Wx_FltFile() B EN UT ZERHA ND BUC H 66 Analog Parameter ParCond in Funktion Wx_FltFld() ParHelp Hilfe-Text Ein Hilfe-Text oder eine Message-Id mit Hilfe-Text kann übergeben werden. Sofern eine Message-Id übergeben wird, wird davon ausgegangen, dass der Hilfe-Text als Level 2 Text hinterlegt wurde. Sofern bei der Message-Id, die für die Anzeige angegeben wurde ein Level 2-Text in der Message-File hinterlegt ist, wird dieser automatisch als Hilfe-Text übernommen. Beispiel für den Aufruf Wx_FltFileFld('TXDATEV05': 'WDUSER': 'TXD0011': '=': 'NotRequired ExecSQL(UserPrf)'); //Filter Mitarbeiter Source Code 29: Aufruf Prozedur Wx_FltFileFld() - Definieren Filter-File und 1. Feld 4.11.3.5 Wx_BegEnhFlt() Beginn erweiterter Filter Durch die Angabe der Option EnhFlt bei der Filter-Feld-Definition können Filter-Felder, die im erweiterten Filter angezeigt werden definiert werden. Sofern mehrere Filter-Felder als erweiterte Filter-Felder definiert werden müssen, kann anstatt bei jedem Feld die Option EnhFlt anzugeben die Funktion Wx_BegEnhFlt() aufgerufen werden. Alle Filter-Felder, die nach Aufruf dieser Prozedur definiert werden, werden als erweiterte Filter-Felder definiert und ausgegeben. ■ Filter eingeblendet ■ Filter ausgeblendet Abbildung 13 : Erweiterte Filter Prototype ************************************************************************** P* Procedure name: Wx_BegEnhFlt P* Purpose: Begin enhanced filter B EN UT ZERHA ND BUC H 67 P* Returns: P* Parameters: ************************************************************************** D Wx_BegEnhFlt... D PR OPDesc Source Code 30: Prototype Prozedur Wx_BegEnhFlt() Beginn erweiterter Filter Parameter Die Prozedur Wx_BegEnhFlt() hat weder einen Rückgabe-Wert noch Parameter. Beispiel für den Aufruf Wx_BegEnhFlt(); Wx_FltFld('WDDATE': 'Datum'); Wx_FltFld('WDTIME': 'Zeit'); ... weitere Felder für den erweiterten Filter Source Code 31: Aufruf Prozedur - Wx_BegEnhFlt() - Beginn erweiterter Filter 4.11.4 Bedingte Filter-Felder Condition Group WOPiXX stellt mehrere Funktionen zur Verfügung, mit deren Hilfe JavaScript-Code erzeugt wird, der zur Laufzeit dafür sorgt, dass Filter-Felder nur unter bestimmten Bedingungen angezeigt werden. Die Bedingungen unter denen die Filter-Felder angezeigt werden können auch bei den Funktionen Wx_FltFileFld() und Wx_FltFld() über einen optionalen Parameter angegeben werden. Um zu vermeiden, dass die gleichen Bedingungen mehrfach angegeben werden müssen, wurden Prozeduren erstellt, über die die Bedingung einmalig festgelegt wird. Alle im Anschluss definierten FilterFelder werden nur unter den in der Prozedur Wx_FltIf() angegebenen Bedingungen angezeigt. Für Filter-Felder werden die folgenden zur Condition Group gehörenden Prozeduren zur Verfügung gestellt: Wx_FltIf() Wx_FltElse() Wx_FltEndIf() If-Anweisung = Beginn der Condition Group (vergl. 4.11.4.1 Wx_FltIf() Beginn der Condition Group) Else-Anweisung (vergl. 4.11.4.2 Wx_FltElse Else-Anweisung) EndIf-Anweisung = Ende der Condition Group (vergl. 4.11.4.3 Wx_FltEndIf() Ende Condition Group) Condition Groups können verschachtelt werden. Die Verschachtelung der Condition Groups sowie die Anzahl der Aufrufe der Wx_FltIf() und Wx_FltEndIf() werden zur Laufzeit geprüft. Im Fehlerfall wird eine Fehlermeldung ausgegeben. Die Bedingung muss sich auf zuvor mit WOPiXX definierte Filter-Felder beziehen. B EN UT ZERHA ND BUC H 68 Die Bedingungen können sowohl in RPG und CL als auch in Java-Script-Schreibweise angegeben werden. (vergl. Vergl. 4.5 Bedingtes Anzeigen von Ein-/Ausgabe-Feldern) 4.11.4.1 Wx_FltIf() Beginn der Condition Group Mit Hilfe der Prozedur Wx_FltIf() wird die erste Bedingung definiert. Die Bedingung wird in Java-ScriptCode übersetzt und steuert zur Laufzeit die Anzeige der Ein-/Ausgabe-Felder. Alle Felder und Variablen, die nach dem Aufruf der Prozedur Wx_FltIf() definiert werden, werden unter den gleichen Bedingungen angezeigt. Wird die Prozedur Wx_FltIf() erneut, mit einer weiteren Bedingung aufgerufen, werden alle im Anschluss definierten Filter-Felder nur dann angezeigt, wenn beide Bedingungen erfüllt sind. Prototype ************************************************************************* P* Procedure name: Wx_FltIf P* Purpose: Begin IF-Condition - Filter P* Returns: P* Parameters: ParCond => Condition ************************************************************************* D Wx_FltIf... D PR OpDesc D ParCond Like(FldRefCGI.Cond) Const Source Code 32: Prototype - Prozedur Wx_FltIf - Festlegen von Bedingungen Parameter: ParCond Bedingungen (Vergl. 4.5 Bedingtes Anzeigen von Ein-/Ausgabe-Feldern ) 4.11.4.2 Wx_FltElse Else-Anweisung Über die Prozedur Wx_FltElse() kann eine ELSE-Anweisung definiert werden. Alle Ein-/Ausgabe-Felder, die nach Ausführung der Prozedur Wx_FltElse() über WOPiXX-Funktionen definiert werden, werden zur Laufzeit unter den inversen Bedingungen der zuvor definierten IF-Anweisung angezeigt. Durch die Angabe von weiteren Bedingungen können Else-If-Bedingungen definiert werden. Innerhalb der Else-Anweisungen können weitere Condition Groups definiert werden. Prototype ************************************************************************* P* Procedure name: Wx_FltElse P* Purpose: Begin Else(IF)-Condition - Filter B EN UT ZERHA ND BUC H 69 P* Returns: P* Parameters: ParCond => Condition ************************************************************************* D Wx_FltElse... D PR OpDesc D ParCond Like(FldRefCGI.Cond) Const D Options(*NoPass) Source Code 33: Prototype - Prozedur Wx_FltElse - Else-Bedingungen Parameter ParCond Bedingungen (Vergl. 4.5 Bedingtes Anzeigen von Ein-/Ausgabe-Feldern) Optionaler Parameter Durch Angabe von Bedingungen in der Else-Funktion wird eine ElseIf-Funktionalität erreicht. 4.11.4.3 Wx_FltEndIf() Ende Condition Group Der Aufruf der Wx_FltEndIf() Prozedur beendet die Condition Group. Jede If-Anweisung muss beendet werden. Stimmen die Anzahl der Wx_FltIf() und Wx_FltEndIf()Prozedur-Aufrufe nicht überein, tritt zur Laufzeit ein Fehler auf. Durch den Aufruf der Prozedur Wx_FltEndIf() wird die äußerste Condition Group beendet. Zu jedem Wx_FltIf()-Prozedur-Aufruf, muss auch ein Wx_FltEndIf()-Prozedur-Aufruf ausgeführt werden. Stimmt die Anzahl der Wx_FltIf()-Aufrufe mit der Anzahl der Wx_FltEndIf()-Aufrufe nicht überein, tritt zur Laufzeit ein Fehler auf. Alle Filter-Felder, die mit WOPiXX-Funktionen nach der Ausführung der Prozedur Wx_FltEndIf() definiert werden, werden ohne Berücksichtigung der Bedingungen aus der beendeten Condition Group angezeigt. Prototype ************************************************************************* P* Procedure name: Wx_FltEndIf P* Purpose: End IF-Condition - Filter P* Returns: P* Parameters: ************************************************************************* D Wx_FltEndIf... D PR OpDesc Source Code 34: Prototype - Prozedur Wx_FltEndIf - Ende der If-Anweisung Parameter Für die Prozedur Wx_FltEndIf sind keine Parameter erforderlich B EN UT ZERHA ND BUC H 70 4.11.4.4 Condition Group - Beispiel für den Aufruf Wx_FltIf('Firma = 10'); Wx_FltFld('AuftrArt': 'FLD0027': '=': 'SelectList'); Wx_FltIf('LiefBed = "AW"'); Wx_FltFld('LiefBed': 'FLD0029': '=': 'SelectList'); Wx_FltElse('LiefBed = "FH"'); Wx_FltFld('Status': 'FLD0026': '=': 'SelectList'); Wx_FltEndIf(); Wx_FltElse('Firma = 15'); Wx_FltFld('KundeNr': 'FLD0001': '=': 'SelectList'); Wx_FltIf('KundeNr < "20000"'); Wx_FltFld('BestNr': 'FLD0025': 'LikeLeft'); Wx_FltEndIf(); Wx_FltEndIf(); Source Code 35: Aufruf der Prozeduren Wx_FltIf(), Wx_FltElse(), Wx_FltEndIf() - Bedingte Filter 4.11.5 Inline-Filter Neben den regulären Filter-Feldern können in Worktables zusätzlich Inline-Filter definiert werden. Die Inline-Filter werden über das Schlüssel-Wort Filter(Option), das bei der Spalten-Definition angegeben wird, gesteuert. Wird ein Inline-Filter definiert kann eine der folgenden Optionen angegeben werden: Text_Search In der entsprechenden Spalte wird dynamisch (abhängig von der Eingabe) die ein Datensätze ausgewählt bzw. reduziert Select_Filter Es wird eine Select-Liste mit den vorhandenen Ausprägungen bereitgestellt Combo_Filter Es wird eine Combobox mit den vorhandenen Ausprägungen bereitgestellt. Abhängig von der Eingabe werden die Auswahlmöglichkeiten in der Combobox reduziert. Text_Search Abhängig von der Eingabe wird innerhalb der Spalte auf das erste Vorkommen positioniert. Numeric_Filter B EN UT ZERHA ND BUC H 71 ■ Text_filter ■ Select_filter Abbildung 14: Inline Filter - Text_Filter / Select_Filter Achtung: Sofern Inline-Filter verwendet werden, wird per Default das übliche Paging (Einlesen von Blöcken von jeweils 100 Datensätzen) ausgeschaltet, und alle Datensätze eingelesen. Bei großen Datenmengen (mehrere 100.000 Datensätze) kann die Performance sehr darunter leiden. In diesen Fällen sollten besser reguläre FilterFelder definiert werden. Das folgende Beispiel zeigt den Source Code zur Definition der Inline-Filterfelder im vorherigen Beispiel: Wx_WrkFld('DCAPP': Wx_WrkFld('DCNAM': Wx_WrkFld('DCKEY': Wx_WrkFld('DCTXT': 'DWB0552': 'Filter(Text_Filter)'); 'WXA0002': 'Filter(Select_Filter)'); 'DWB0590':'filter(Combo_Filter)'); 'DWB0019': 'Filter(Text_Search)'); //Anwendung //Kennung //Schlüssel //Beschreibung Source Code 36: Beispiel für Inline Filter Für Filter-Felder können individuelle Bedienerhilfe-Texte definiert werden. Die Bedienerhilfe kann zum einen über einen optionalen Parameter in allen Definitions-Funktionen für Change-Tables (z.B. Wx_FltFld() oder Wx_FltFileFld()) angegeben werden. B EN UT ZERHA ND BUC H 72 Alternativ kann die Bedienerhilfe explizit durch den Aufruf Funktion WX_FltHelp() gesetzt oder überschrieben werden. Dabei kann wahlweise direkt ein Hilfe-Text oder eine Message-Id übergeben werden. Wird eine Message-Id übergeben wird der Level 2-Message-Text dieser Message-Id ermittelt und als Hilfe-Text angezeigt. Wurde weder ein Message-Text noch eine Message-Id angegeben, so wird, sofern eine Feldbeschreibung als Message-Id angegeben wurde der Level 2 Message-Text ermittelt und als Bedienerhilfe ausgegeben. Dieser Prozess erfolgt automatisch, ohne Angabe eines Schlüssel-Wortes. Soll diese Automatik unterbunden werden, bzw. kein Hilfe-Text erwünscht sein, so kann in dem optionalen Parameter für die Bedienerhilfe der Sonderwert *NONE übergegeben werden. Das Hinzufügen der Bedienerhilfe kann ebenfalls durch den Aufruf der Funktion Wx_FltNoHelp() entweder für ein einzelnes Feld oder alle Felder unterbunden werden. Sofern ein Hilfe-Text zu einem (Eingabe)-Feld vorhanden ist, wird ein Fragezeichen-Icon angezeigt. Bei der Mouse Over-Aktion wird der hinterlegte Hilfe-Text angezeigt. = Hilfetexte vorhanden ■ Hilfetext für Kunden-Nr Abbildung 15: Bedienerhilfe bei Filter-Feldern 4.11.5.1 WX_FltHelp Bedienerhilfe zu Filter hinzufügen Mit Hilfe der Funktion Wx_FltHelp können in Work-Programmen Hilfe-Texte zu Filter-Feldern zugewiesen werden. Prototyp *************************************************************************** P* Procedure name: Wx_FltHelp P* Purpose: Add individual help to a filter field P* If a Message-Id is passed the 2nd Level Message Text will P* will be used as help text B EN UT ZERHA ND BUC H 73 P* If a Message Text is passed this text will be used P* Returns: P* Parameters: ParField => Field P* Parameters: ParMsg => Help text or message id P* Parameters: ParMsgTxt => Variable Message Text (Optional if a m *************************************************************************** D Wx_FltHelp... D PR OpDesc D ParField Like(FldRef.NameSQL) Const D Options(*Trim) D ParMsg Like(FldRefCGI.Help) Const D ParMsgTxt Like(FldRef.MsgText) Const D Options(*NoPass: *Trim) Source Code 37: Prototype - Procedure Wx_FltHelp Parameter ParField Bedienerhilfe für Filter hinzufügen Eindeutige Kennung des Filter-Feldes ParMsg ParMsgTxt Variable Message-Texte Sofern eine Message-Id übergeben wurde, können zusätzlich Variable Message-Texte (die die Platzhalter in dem Message-Text ersetzen angegeben werden) Bedienerhilfe-Text oder Message-Id der Bedienerhilfe Bedienerhilfe wird aus Level 2 Message-Text der Message-Id ermittelt Beispiele für den Aufruf Wx_FltHelp('Land': 'Internationales Länder-Kennzeichen'); Wx_FltHelp('KundeNr': 'MSG1234'); Wx_FltHelp('ARTNR': 'MSG7111': MyFld1 + ' ' + MyFld2); Source Code 38: Aufruf Prozedur Wx_FltHelp() 4.11.5.2 Wx_FltNoHelp Bedienerhilfe für Filter hinzufügen Bedienerhilfe für Filter unterbinden Mit der Funktion Wx_FltNoHelp() kann die automatische Ermittlung der Bedienerhilfe für einzelne FilterFelder oder alle Filter-Felder unterbunden werden. Prototyp *************************************************************************** P* Procedure name: Wx_FltNoHelp P* Purpose: Prevents from adding automatically help texts to filter P* Returns: P* Parameters: ParField => Field (Optional) P* Not Passed or Special Value *ALL --> P No help text for all fields *************************************************************************** D Wx_FltNoHelp... D PR OpDesc D ParField Like(FldRef.NameSQL) Const B EN UT ZERHA ND BUC H 74 D Options(*NoPass: *Trim) Source Code 39: Prototype Procedure Wx_ChgNoHelp - Automatische Ermittlung der Bedienerhilfe unterbinden Parameter ParField Eindeutige Kennung des Filter-Feldes (Optional) Nicht übergeben oder Sonderwert *NONE Bedienerhilfe wird für alle Felder unterbunden Beispiele für den Aufruf Wx_FltNoHelp('ARTNR'); Wx_FltNoHelp(); Source Code 40: Aufruf Procedure Wx_FltNoHelp - Automatische Ermittlung der Bedienerhilfe für Filter unterbinden 4.11.6 Prozeduren für Kontext-Menü und Buttons Sofern für Worktables kein Kontext-Menü und keine Buttons definiert werden, wird automatisch ein Default-Kontext-Menü und ein Default-Button (Erfassen) generiert. Das Default-Kontext-Menü enthält die folgenden Menü-Punkte: Ändern Kopieren Löschen Eigenschaften (= Anzeigen) Die Verarbeitung der Standard-Kontext-Menü-Punkte bzw. des Standard-Buttons erfolgt in dem FolgeProgramm, das beim Öffnen des HTML-Dokuments über Funktion Wx_OpnHTMLWrk() festgelegt wurde. Bei individuellen Kontext-Menü-Punkten oder individuellen Buttons kann das auszuführende Programm direkt angegeben werden. Zur Laufzeit wird geprüft, ob es sich bei der eindeutigen Kennung um ein Programm in der aktuellen Bibliotheksliste handelt. Ist das Programm in der Bibliotheksliste vorhanden, wird es direkt aufgerufen. Konnte kein Programm gefunden werden, wird das gleiche Programm aufgerufen, das auch für die Standard-Menü-Punkte aufgerufen wird. Die eindeutige Kennung muss in diesem Programm geprüft werden, um entsprechende Aktionen ausführen zu können. Soll kein Kontext-Menü generiert werden, muss entweder die Prozedur Wx_NoCtxMnuItm() oder die Prozedur Wx_CtxMnuItm() explizit mit dem Parameter-Sonderwert *NONE aufgerufen werden. Soll der Standard-Button nicht generiert werden, so muss entweder die Prozedur Wx_NoWrkBtn() oder die Prozedur Wx_WrkBtn() mit dem Parameter-Sonderwert *NONE explizit aufgerufen werden. B EN UT ZERHA ND BUC H 75 Werden nicht alle Default-Menü-Punkte gewünscht, so muss entweder die Prozedur für die gewünschte Aktion (z.B. Wx_CtxMnuItmChange() oder Wx_CtxMnuItmDelete()) oder die Prozedur Wx_CtxMnuItm() jeweils mit der gewünschten Aktion (z.B. *CHANGE) im ersten Parameter aufgerufen werden. Sofern die Standard-Kontext-Menü-Punkte sowie individuelle Kontext-Menü-Punkte erwünscht sind, müssen die Prozeduren für die gewünschten Standard-Kontext-Menü-Punkte aufgerufen werden. Wenn alle Standard-Kontext-Menü-Punkte integriert werden sollen, genügt der Aufruf der Prozedur Wx_CtxMnuItmDefault() oder der Aufruf der Prozedur Wx_CtxMnuItm() mit dem Sonderwert *DEFAULT oder *DFT im ersten Parameter. Die Funktion Wx_WrkBtn() muss für jeden individuellen Button aufgerufen werden. Sofern der Standard-Button für Hinzufügen eingefügt werden soll, kann entweder dir Prozedur Wx_WrkBtnAdd() oder die Funktion Wx_WrkBtnAdd() mit dem Sonderwert *ADD als erster Parameter aufgerufen werden. 4.11.6.1 Wx_NoCtxMnuItm() Ohne Standard-Kontext-Menü Die Standard-Kontext-Menü-Auswahlen (Ändern, Hinzufügen, Löschen, Anzeigen/Properties) werden automatisch generiert. Sofern diese Standard-Kontext-Menü-Auswahlen nicht eingebunden werden sollen, kann dies durch den Aufruf der Prozedur Wx_NoCtxMnuItm() unterbunden werden. Prototype *************************************************************************** P* Procedure name: Wx_NoCtxMnuItm P* Purpose: Define no context menu items (--> not even default items) P* Returns: *************************************************************************** D Wx_NoCtxMnuItm... D PR 3U 0 OpDesc Source Code 41: Prototype - Funktion Wx_NoCtxMnuItm() Parameter Rückgabe-Wert Nr. der Worktables ( aktuell immer 1) Kann von WOPiXX-Programmen ignoriert werden Beispiele für den Aufruf Wx_NoCtxMnuItm(); Source Code 42: Aufruf Funktion Wx_NoCtxMnuItm() Standard-Menü nicht einbinden B EN UT ZERHA ND BUC H 76 4.11.6.2 Wx_CtxMnuItmChange() Menü-Punkt Ändern Sofern individuelle Kontext-Menü-Punkte eingebunden werden, wird das Standard-Kontext-Menü nicht eingebunden. In diesem Fall müssen die benötigten Standard-Menü-Punkte durch Aufruf der entsprechenden Prozedur oder der Prozedur Wx_CtxMnuItm() mit dem Sonderwert des gewünschten Standard-KontextMenü-Punktes im ersten Parameter aufgerufen werden. Durch den Aufruf der Prozedur Wx_CtxMnuItmChange() wird der Standard-Kontext-Menü-Punkt Änderung/Change eingebunden. Prototype *************************************************************************** P* Procedure name: Wx_CtxMnuItmChange P* Purpose: Define Context Menu Item Change P* Returns: P* Parameters: ParOptions => Options P* Parameters: ParTblOptions => Options P* Parameters: ParMnuObj => Menu Object P* Parameters: ParMnuId => Menu Id *************************************************************************** D Wx_CtxMnuItmChange... D PR 3U 0 OpDesc D ParOptions Like(FldRefCGI.Options) Const D Options(*NoPass) D ParTblOptions Like(FldRefCGI.Options) Const D Options(*NoPass) D ParMnuObj Like(FldRef.MnuObj) Const D Options(*NoPass) D ParMnuId Like(FldRef.MnuObj) Const D Options(*NoPass) Source Code 43: Prototype - Funktion Wx_CtxMnuItmChange() Standard--Menü-Punkt Änderung einbinden Parameter Rückgabe-Wert Nr. der Worktables ( aktuell immer 1) Kann von WOPiXX-Programmen ignoriert werden ParOptions Optionen (vergl. 4.3.5 Aufbereitungsoptionen Kontext-Menü-Punkte424) Optionaler Parameter Beispiele für den Aufruf Wx_CtxMnuItmChange(); Wx_CtxMnuItmChange(line); Source Code 44: Aufruf Funktion Wx_CtxMnuItmChange() Standard-Menü-Punkt Änderung einbinden B EN UT ZERHA ND BUC H 77 4.11.6.3 Wx_CtxMnuItmCopy() Menü-Punkt Kopieren Sofern individuelle Kontext-Menü-Punkte eingebunden werden, wird das Standard-Kontext-Menü nicht eingebunden. In diesem Fall müssen die benötigten Standard-Menü-Punkte durch Aufruf der entsprechenden Prozedur oder der Prozedur Wx_CtxMnuItm() mit dem Sonderwert des gewünschten Standard-KontextMenü-Punktes im ersten Parameter aufgerufen werden. Durch den Aufruf der Prozedur Wx_CtxMnuItmCopy() wird der Standard-Kontext-Menü-Punkt Kopieren eingebunden. Prototype *************************************************************************** P* Procedure name: Wx_CtxMnuItmCopy P* Purpose: Define Context Menu Item Copy P* Returns: P* Parameters: ParOptions => Options P* Parameters: ParTblOptions => Options P* Parameters: ParMnuObj => Menu Object P* Parameters: ParMnuId => Menu Id *************************************************************************** D Wx_CtxMnuItmCopy... D PR 3U 0 OpDesc D ParOptions Like(FldRefCGI.Options) Const D Options(*NoPass) D ParTblOptions Like(FldRefCGI.Options) Const D Options(*NoPass) D ParMnuObj Like(FldRef.MnuObj) Const D Options(*NoPass) D ParMnuId Like(FldRef.MnuObj) Const D Options(*NoPass) Source Code 45: Prototype - Funktion Wx_CtxMnuItmCopy() Standard-Menü-Punkt Kopieren einbinden Parameter Rückgabe-Wert Nr. der Worktables ( aktuell immer 1) Kann von WOPiXX-Programmen ignoriert werden ParOptions Optionen (vergl. 4.3.5 Aufbereitungsoptionen Kontext-Menü-Punkte424) Optionaler Parameter Beispiele für den Aufruf Wx_CtxMnuItmCopy(); Wx_CtxMnuItmCopy(line); Source Code 46: Aufruf Funktion Wx_CtxMnuItmCopy() Standard-Menü-Punkt Kopieren einbinden B EN UT ZERHA ND BUC H 78 4.11.6.4 Wx_CtxMnuItmDelete() Menü-Punkt Löschen Sofern individuelle Kontext-Menü-Punkte eingebunden werden, wird das Standard-Kontext-Menü nicht eingebunden. In diesem Fall müssen die benötigten Standard-Menü-Punkte durch Aufruf der entsprechenden Prozedur oder der Prozedur Wx_CtxMnuItm() mit dem Sonderwert des gewünschten Standard-KontextMenü-Punktes im ersten Parameter aufgerufen werden. Durch den Aufruf der Prozedur Wx_CtxMnuItmDelete() wird der Standard-Kontext-Menü-Punkt Löschen eingebunden. Prototype *************************************************************************** P* Procedure name: Wx_CtxMnuItmDelete P* Purpose: Define Context Menu Item Delete P* Returns: P* Parameters: ParOptions => Options P* Parameters: ParTblOptions => Options P* Parameters: ParMnuObj => Menu Object P* Parameters: ParMnuId => Menu Id *************************************************************************** D Wx_CtxMnuItmDelete... D PR 3U 0 OpDesc D ParOptions Like(FldRefCGI.Options) Const D Options(*NoPass) D ParTblOptions Like(FldRefCGI.Options) Const D Options(*NoPass) D ParMnuObj Like(FldRef.MnuObj) Const D Options(*NoPass) D ParMnuId Like(FldRef.MnuObj) Const D Options(*NoPass) Source Code 47: Prototype - Funktion Wx_CtxMnuItmDelete() Standard-Menü-Punkt Löschen einbinden Parameter Rückgabe-Wert Nr. der Worktables ( aktuell immer 1) Kann von WOPiXX-Programmen ignoriert werden ParOptions Optionen (vergl. 4.3.5 Aufbereitungsoptionen Kontext-Menü-Punkte424) Optionaler Parameter Beispiele für den Aufruf Wx_CtxMnuItmDelete(); Wx_CtxMnuItmCDeleteline); Source Code 48: Aufruf Funktion Wx_CtxMnuItmDelete() Standard-Menü-Punkt Löschen einbinden B EN UT ZERHA ND BUC H 79 4.11.6.5 Wx_CtxMnuItmProperty() gen/Eigenschaften Menü-Punkt Anzei- Sofern individuelle Kontext-Menü-Punkte eingebunden werden, wird das Standard-Kontext-Menü nicht eingebunden. In diesem Fall müssen die benötigten Standard-Menü-Punkte durch Aufruf der entsprechenden Prozedur oder der Prozedur Wx_CtxMnuItm() mit dem Sonderwert des gewünschten Standard-KontextMenü-Punktes im ersten Parameter aufgerufen werden. Durch den Aufruf der Prozedur Wx_CtxMnuItmProperty() wird der Standard-Kontext-Menü-Punkt Anzeigen/Eigenschaften eingebunden. Prototype *************************************************************************** P* Procedure name: Wx_CtxMnuItmProperty P* Purpose: Define Context Menu Item Property P* Returns: P* Parameters: ParOptions => Options P* Parameters: ParTblOptions => Options P* Parameters: ParMnuObj => Menu Object P* Parameters: ParMnuId => Menu Id *************************************************************************** D Wx_CtxMnuItmProperty... D PR 3U 0 OpDesc D ParOptions Like(FldRefCGI.Options) Const D Options(*NoPass) D ParTblOptions Like(FldRefCGI.Options) Const D Options(*NoPass) D ParMnuObj Like(FldRef.MnuObj) Const D Options(*NoPass) D ParMnuId Like(FldRef.MnuObj) Const D Options(*NoPass) Source Code 49: Prototype - Funktion Wx_CtxMnuItmProperty() Standard-Menü-Punkt Eigenschaften Parameter Rückgabe-Wert Nr. der Worktables ( aktuell immer 1) Kann von WOPiXX-Programmen ignoriert werden ParOptions Optionen (vergl. 4.3.5 Aufbereitungsoptionen Kontext-Menü-Punkte424) Optionaler Parameter Beispiele für den Aufruf Wx_CtxMnuItmProperty(); Wx_CtxMnuItmProperty(line); Source Code 50: Aufruf Funktion Wx_CtxMnuItmProperty() Standard-Menü-Punkt Eigenschaften einbinden B EN UT ZERHA ND BUC H 80 4.11.6.6 Wx_CtxMnuItmDefault() Standard-Kontext-Menü Sofern individuelle Kontext-Menü-Punkte eingebunden werden, wird das Standard-Kontext-Menü nicht eingebunden. In diesem Fall müssen die benötigten Standard-Menü-Punkte durch Aufruf der entsprechenden Prozedur oder der Prozedur Wx_CtxMnuItm() mit dem Sonderwert des gewünschten Standard-KontextMenü-Punktes im ersten Parameter aufgerufen werden. Sollen alle Standard-Kontext-Menü-Punkte eingebunden werden, können durch den einmaligen Aufruf der Funktion Wx_CtxMnuItmDefault alle Standard-Kontext-Menü-Punkte eingebunden werden. Prototype *************************************************************************** P* Procedure name: Wx_CtxMnuItmDefault P* Purpose: Define Context Menu Item Default P* Returns: P* Parameters: ParOptions => Options P* Parameters: ParTblOptions => Options P* Parameters: ParMnuObj => Menu Object P* Parameters: ParMnuId => Menu Id *************************************************************************** D Wx_CtxMnuItmDefault... D PR 3U 0 OpDesc D ParOptions Like(FldRefCGI.Options) Const D Options(*NoPass) D ParTblOptions Like(FldRefCGI.Options) Const D Options(*NoPass) D ParMnuObj Like(FldRef.MnuObj) Const D Options(*NoPass) D ParMnuId Like(FldRef.MnuObj) Const D Options(*NoPass) Source Code 51: Prototype - Funktion Wx_CtxMnuItmDefault() Alle Standard-Menü-Punkte einbinden Parameter Rückgabe-Wert Nr. der Worktables ( aktuell immer 1) Kann von WOPiXX-Programmen ignoriert werden ParOptions Optionen (vergl. 4.3.5 Aufbereitungsoptionen Kontext-Menü-Punkte424) Optionaler Parameter Sofern Optionen angegeben wurden, werden diese für alle Standard-Kontext-MenüPunkte übernommen. Beispiele für den Aufruf Wx_CtxMnuItmDefault(); Wx_CtxMnuItmDefault(line); Source Code 52: Aufruf Funktion Wx_CtxMnuItmDefault() Alle Standard-Menü-Punkte einbinden B EN UT ZERHA ND BUC H 81 4.11.6.7 Wx_CtxMnuItm() Kontextmenüpunkt definieren Für die Bearbeitung von einzelnen Zeilen in den Worktables können über die Funktion Wx_CtxMnuItm() Kontext-Menü-Punkte definiert werden. Zur Definition der Standard-Menü-Punkte wird die Prozedur Wx_CtxMnuItm() jeweils nur mit einem Parameter aufgerufen, in die gewünschte Option (*CHANGE, *COPY, *DELETE oder *PROPERTY) angegeben wird. Bei der Definition eines individuellen Kontext-Menü-Punktes wird im ersten Parameter eine eindeutige Kennung übergeben. Bei dieser eindeutigen Kennung kann es sich auch um einen Programm-Namen handeln. Wurde ein Programm angegeben, wird dieses zur Laufzeit direkt aufgerufen. Anderenfalls wird das Programm, das in der Prozedur Wx_OpnHTMLWrk() hinterlegt wurde aufgerufen. Bei einem individuellen Kontext-Menü-Punkt muss der Text, der in dem Kontext-Menü erscheinen soll angegeben werden. Der Text kann entweder direkt angegeben oder als Message-Id hinterlegt werden. Die Funktion Wx_CtxMnuItm() muss für jeden (individuellen) Kontext-Menü-Punkt aufgerufen werden. Die Kontext-Menü-Punkte werden in der gleichen Reihenfolge angeordnet, in der die Kontext-MenüPunkte (durch Aufruf der Funktion Wx_CtxMnuItm()) definiert wurden. Prototype *************************************************************************** P* Procedure name: Wx_CtxMnuItm P* Purpose: Define Fields used for Work Table P* Returns: P* Parameters: ParMnuItm => Menu Item --> Several Default *ITEMs P* (such as *CHANGE) allowed P* Default Options: *ADD, *CHANGE, *COPY, P* *DELETE, *PROPERTY P* *DFT/*DEFAULT = all previously listed P* Parameters: ParMsg => Message-Id or Item Text P* Parameters: ParOptions => Options P* Parameters: ParTblOptions => Options P* Parameters: ParMnuObj => Menu Object P* Parameters: ParMnuId => Menu Id *************************************************************************** D Wx_CtxMnuItm... D PR 3U 0 OpDesc D ParMnuItm Like(FldRef.MnuItm) Const D ParMsg Like(FldRef.MsgData) Const D Options(*NoPass) D ParOptions Like(FldRefCGI.Options) Const D Options(*NoPass) D ParTblOptions Like(FldRefCGI.Options) Const D Options(*NoPass) D ParMnuObj Like(FldRef.MnuObj) Const D Options(*NoPass) D ParMnuId Like(FldRef.MnuObj) Const D Options(*NoPass) Source Code 53: Prototype - Funktion Wx_CtxMnuItm B EN UT ZERHA ND BUC H 82 Parameter Rückgabe-Wert Nr. der Worktables ( aktuell immer 1) Kann von WOPiXX-Programmen ignoriert werden ParMnuItm Eindeutige Kontext-Menü-Kennung Standard-Kontext-Menü-Punkte: *CHANGE Kontext-Menü-Punkt Änderung *COPY Kontext-Menü-Punkt Kopieren *DELETE Kontext-Menü-Punkt Delete *PROPERTY Kontext-Menü-Punkt Eigenschaften/Anzeigen *DEFAULT/*DFT Alle Standard-Kontext-Menü-Punkte *NONE Keine Standard-Kontext-Menü-Punkte einbinden Sonstige Kontext-Menü-Punkte: Programm-Name Sofern es sich zur Laufzeit um ein Programm in der Bibliotheksliste handelt, wird dieses Programm aufgerufen Eindeutige Kennung Sofern zur Laufzeit kein Programm mit der eindeutigen Kennung vorhanden ist, wird das Programm das in Prozedur Wx_OpnHTMLWrk() vorgegeben wurde aufgerufen. Die eindeutige Kennung kann in dem aufgerufenen Programm über Funktion Wx_isMode geprüft werden. ParMsg Text für Kontext-Menü-Punkt Optionaler Parameter Nur erforderlich bei individuellen Kontext-Menü-Punkten Wahlweise kann ein Text oder eine Message-Id (aus der der Anwendung zugeordneten Message-File) angegeben werden. ParOptions Optionen (vergl. 4.3.5 Aufbereitungsoptionen Kontext-Menü-Punkte424) Optionaler Parameter Beispiele für den Aufruf Wx_CtxMnuItm('*CHANGE'); Wx_CtxMnuItm('*PROPERTY'); Wx_CtxMnuItm('KXCHGKOEM': 'KXD0086': 'Window line'); Wx_CtxMnuItm('KXCHGKOTX': 'KXD0016': 'Window'); Wx_CtxMnuItm('KXWRKKOPR': 'KXD0031': 'Window line'); Wx_CtxMnuItm('KXWRKKOTN': 'KXD0026': 'Window'); Wx_CtxMnuItm('KXWRKKOSP': 'KXD0032': 'Window'); Wx_CtxMnuItm('FAKTALL' : 'Faktura erstellen': 'Window line'); Wx_CtxMnuItm('KXWRKMAIL2': 'Gesendete e-mails': 'Window line'); Wx_CtxMnuItm('KXKNGRCSV': 'KXD0094': 'Window line'); Wx_CtxMnuItm('KXANWCSV' : 'KXD0114': 'Window'); Source Code 54: Aufruf Funktion Wx_CtxMnuItm() - Definieren Kontext-Menü-Punkt Das Ergebnis dieser Kontext-Menü-Definition wird im folgenden Screenshot gezeigt. B EN UT ZERHA ND BUC H 83 Abbildung 16: Erstellen Kontext-Menü durch Aufruf der Funktion Wx_CtxMnuItm() 4.11.6.8 Wx_NoWrkBtn() Ohne Standard-Buttons Der Standard-Button Hinzufügen wird automatisch generiert. Sofern dieser Standard-Button nicht eingebunden werden soll, kann dies durch den Aufruf der Prozedur Wx_NoWrkBtn() unterbunden werden.. Prototype *************************************************************************** P* Procedure name: Wx_NoWrkBtn P* Purpose: Define no Buttons (--> not even default buttons) P* Returns: *************************************************************************** D Wx_NoWrkBtn... D PR 3U 0 OpDesc Source Code 55: Prototype - Funktion Wx_NoWrkBtn() B EN UT ZERHA ND BUC H 84 Parameter Rückgabe-Wert Nr. der Worktables ( aktuell immer 1) Kann von WOPiXX-Programmen ignoriert werden Beispiele für den Aufruf Wx_NoWrkBtn(); Source Code 56: Aufruf Funktion Wx_NoWrkBtn() Standard-Button nicht einbinden 4.11.6.9 Wx_WrkBtnAdd() Button Hinzufügen/Erfassen Sofern individuelle Buttons eingebunden werden, werden die Standard-Buttons nicht eingebunden. In diesem Fall müssen die benötigten Standard-Buttons durch Aufruf der entsprechenden Prozedur oder der Prozedur Wx_WrkBtn() mit dem Sonderwert des gewünschten Standard-Buttons im ersten Parameter aufgerufen werden. Durch den Aufruf der Prozedur Wx_WrkBtnAdd() wird der Standard-Button Hinzufügen/Erfassen eingebunden. Prototype *************************************************************************** P* Procedure name: Wx_WrkBtnAdd P* Purpose: Define Button Add P* Returns: P* Parameters: ParOptions => Options P* Parameters: ParMsg => Message Text or Message Id P* Parameters: ParTblOptions => Options P* Parameters: ParMnuObj => Menu Object P* Parameters: ParMnuId => Menu Id *************************************************************************** D Wx_WrkBtnAdd... D PR 3U 0 OpDesc D ParOptions Like(FldRefCGI.Options) Const D Options(*NoPass) D ParMsg Like(FldRef.MsgText) Const D Options(*NoPass: *Trim) D ParTblOptions Like(FldRefCGI.Options) Const D Options(*NoPass) D ParMnuObj Like(FldRef.MnuObj) Const D Options(*NoPass) D ParMnuId Like(FldRef.MnuObj) Const D Options(*NoPass) Source Code 57: Prototype - Funktion Wx_WrkBtnAdd() Button Hinzufügen/Erfassen Parameter Rückgabe-Wert Nr. der Worktables ( aktuell immer 1) Kann von WOPiXX-Programmen ignoriert werden ParOptions Optionen (vergl. 4.3.5 Aufbereitungsoptionen Kontext-Menü-Punkte424) B EN UT ZERHA ND BUC H 85 ParMsg Optionaler Parameter Button-Text oder Message-Id für vom Default abweichenden Button-Text Optionaler Parameter Beispiele für den Aufruf Wx_WrkBtnAdd(); Wx_WrkBtnAdd(line); Wx_WrkBtnAdd('': 'Neuer Auftrag'); Wx_WrkBtnAdd('': 'MSG4711'); Source Code 58: Aufruf Funktion Wx_WrkBtnAdd() 4.11.6.10 Standard-Button Erfassen/Hinzufügen einbinden Wx_WrkBtnDefault() Standard-Buttons Sofern individuelle Buttons eingebunden werden, werden keine Standard-Buttons eingebunden. In diesem Fall müssen die benötigten Standard-Buttons durch Aufruf der entsprechenden Prozedur oder der Prozedur Wx_WrkBtn() mit dem Sonderwert des gewünschten Standard-Buttons im ersten Parameter aufgerufen werden. Sollen alle Standard-Buttons eingebunden werden, können durch den einmaligen Aufruf der Funktion Wx_WrkBtnDefault alle Standard-Buttons eingebunden werden. Prototype *************************************************************************** P* Procedure name: Wx_WrkBtnDefault P* Purpose: Define Button Default P* Returns: P* Parameters: ParOptions => Options P* Parameters: ParTblOptions => Options P* Parameters: ParMnuObj => Menu Object P* Parameters: ParMnuId => Menu Id *************************************************************************** D Wx_WrkBtnDefault... D PR 3U 0 OpDesc D ParOptions Like(FldRefCGI.Options) Const D Options(*NoPass) D ParTblOptions Like(FldRefCGI.Options) Const D Options(*NoPass) D ParMnuObj Like(FldRef.MnuObj) Const D Options(*NoPass) D ParMnuId Like(FldRef.MnuObj) Const D Options(*NoPass) Source Code 59: Prototype - Funktion Wx_WrkBtnDefault() Alle Standard-Buttons einbinden Parameter Rückgabe-Wert Nr. der Worktables ( aktuell immer 1) Kann von WOPiXX-Programmen ignoriert werden B EN UT ZERHA ND BUC H 86 ParOptions Optionen (vergl. 4.3.5 Aufbereitungsoptionen Kontext-Menü-Punkte424) Optionaler Parameter Sofern Optionen angegeben werden, werden die Optionen für alle Standard-Buttons übernommen. Beispiele für den Aufruf Wx_WrkBtnDefault(); Wx_WrkBtnDefault(line); Source Code 60: Aufruf Funktion Wx_WrkBtnDefault() 4.11.6.11 Alle Standard-Buttons einbinden Wx_WrkBtn() Button definieren Über die Funktion Wx_WrkBtn() können Buttons definiert werden, durch die Folge-Programme aktiviert werden können. Wird die Funktion Wx_WrkBtn() nicht aufgerufen wird automatisch der Button Erfassen für das Hinzufügen von neuen Datensätzen generiert. Soll dieser Button nicht generiert werden, muss die Funktion Wx_WrkBtn() mit dem Sonderwert *NONE im ersten Parameter aufgerufen werden. Für individuelle Buttons wird im ersten Parameter eine eindeutige Kennung übergeben. Bei dieser eindeutigen Kennung kann es sich auch um einen Programm-Namen handeln. Wurde ein Programm angegeben, wird dieses zur Laufzeit direkt aufgerufen. Anderenfalls wird das Programm, das in der Prozedur Wx_OpnHTMLWrk() hinterlegt wurde aufgerufen. Weiterhin muss bei individuellen Buttons der Text (wahlweise auch als Message-Id) angegeben werden. Die Funktion Wx_WrkBtn() muss für jeden (individuellen) Button aufgerufen werden. Die Buttons werden in der gleichen Reihenfolge angeordnet, in der die Buttons definiert wurden (durch Aufruf der Funktion Wx_WrkBtn()) definiert wurden. Prototype *************************************************************************** P* Procedure name: Wx_WrkBtn P* Purpose: Define Fields used for Work Table P* Returns: P* Parameters: ParButton => Button --> Several Default *ITEMs P* (such as *ADD P* Default Options: *ADD P* *DFT/*DEFAULT --> all previously listed P* Parameters: ParMsg => Message-Id or Item Text P* Parameters: ParOptions => Options P* Parameters: ParTblOptions => Options P* Parameters: ParMnuObj => Menu Object P* Parameters: ParMnuId => Menu Id *************************************************************************** B EN UT ZERHA ND BUC H 87 D Wx_WrkBtn... D D ParButton D ParMsg D D ParOptions D D ParTblOptions D D ParMnuObj D D ParMnuId D PR 3U 0 OpDesc Like(FldRef.MnuItm) Const Like(FldRef.MsgData) Const Options(*NoPass) Like(FldRefCGI.Options) Const Options(*NoPass) Like(FldRefCGI.Options) Const Options(*NoPass) Like(FldRef.MnuObj) Const Options(*NoPass) Like(FldRef.MnuObj) Const Options(*NoPass) Source Code 61: Prototype - Prozedur Wx_WrkBtn() - Definieren Button für Work Table Parameter Rückgabe-Wert Nr. der Worktables ( aktuell immer 1) Kann von WOPiXX-Programmen ignoriert werden ParButton Eindeutige Kennung Standard-Buttons: *ADD *DEFAULT/*DFT *NONE Sonstige Buttons: Programm-Name Eindeutige Kennung Button Erfassen/Hinzufügen Alle Standard-Buttons Kein Standard-Button einbinden Sofern es sich zur Laufzeit um ein Programm in der Bibliotheksliste handelt, wird dieses Programm aufgerufen Sofern zur Laufzeit kein Programm mit der eindeutigen Kennung vorhanden ist, wird das Programm das in Prozedur Wx_OpnHTMLWrk() vorgegeben wurde aufgerufen. Die eindeutige Kennung kann in dem aufgerufenen Programm über Funktion Wx_isMode geprüft werden. ParMsg Text für Button Optionaler Parameter Nur erforderlich bei individuellen Buttons Wahlweise kann ein Text oder eine Message-Id (aus der der Anwendung zugeordneten Message-File) angegeben werden . ParOptions Optionen Optionaler Parameter Beispiel für den Aufruf Wx_WrkBtn('SELFIL' : Wx_WrkBtn('ACTALL' : Wx_WrkBtn('ENDALL' : Wx_WrkBtn('DtaQ' : WX_WrkBtn('DeregFil': 'WEB0058': 'Window'); 'WEB0087': 'Window'); 'Trigger beenden': 'Window'); 'WEB0059': 'Window'); 'WEB0060': 'Window'); B EN UT ZERHA ND BUC H 88 Source Code 62: Aufruf Prozedur Wx_WrkBtn() - Button definieren Dieses Beispiel definiert die Buttons in dem folgenden Screenshot. Abbildung 17: Definition von Buttons in Work-Programmen 4.11.6.12 Wx_WrkBtnReseq- Resequenzierung Die Reihenfolge der Datensätze innerhalb von List-Anzeigen kann mittels Drag und Drop geändert werden. Voraussetzung ist, dass ein Resequenzierungs-Button mit Hilfe der Funktion Wx_WrkBtnReseq() definiert wurde. Prototype *************************************************************************** P* Procedure name: Wx_WrkBtnReseq P* Purpose: Define Button for Resequencing P* Returns: P* Parameters: ParOptions => Options P* Parameters: ParMsg => Message Text or Message Id P* Parameters: ParTblOptions => Options P* Parameters: ParMnuObj => Menu Object P* Parameters: ParMnuId => Menu Id *************************************************************************** D Wx_WrkBtnReseq... D PR 3U 0 OpDesc D ParOptions Like(FldRefCGI.Options) Const D Options(*NoPass: *Trim) D ParMsg Like(FldRef.MsgText) Const D Options(*NoPass: *Trim) D ParTblOptions Like(FldRefCGI.Options) Const D Options(*NoPass) D ParMnuObj Like(FldRef.MnuObj) Const D Options(*NoPass) D ParMnuId Like(FldRef.MnuObj) Const D Options(*NoPass) Source Code 63: Prototype - Prozedur Wx_WrkBtnReseq() - Definieren Button für Resequenzierung B EN UT ZERHA ND BUC H 89 Parameter Rückgabe-Wert Nr. der Worktables ( aktuell immer 1) Kann von WOPiXX-Programmen ignoriert werden ParOptions Optionen Optionaler Parameter Vergl. 4.3.6 Aufbereitungsoptionen für Buttons ParMsg Message-Id oder Text für vom Default abweichenden Button-Text Optionaler Parameter Wahlweise kann ein Text oder eine Message-Id (aus der der Anwendung zugeordneten Message-File) angegeben werden Beispiel für den Aufruf Wx_WrkBtnReseq(); Wx_WrkBtnReseq('confirm(Wollen Sie die Änderungen wirklich speichern) '); Wx_WrkBtnReseq('': 'BTN4111'); Source Code 64: Aufruf Prozedur Wx_WrkBtnReseq() Button für Resequenzierung definieren 4.11.6.13 Wx_WrkBtnEdtList Editierbare Worktables Es ist möglich Datensätze innerhalb von Worktables direkt zu ändern. Voraussetzung ist, dass ein entsprechender Wx_WrkBtnEdtList() definiert wurde. Änderungs-Button mit Hilfe der Funktion Prototype *************************************************************************** P* Procedure name: Wx_WrkBtnEdtList P* Purpose: Define Button for Editable Lists P* Returns: P* Parameters: ParOptions => Options P* Parameters: ParMsg => Message Text or Message Id P* Parameters: ParTblOptions => Options P* Parameters: ParMnuObj => Menu Object P* Parameters: ParMnuId => Menu Id *************************************************************************** D Wx_WrkBtnEdtList... D PR 3U 0 OpDesc D ParOptions Like(FldRefCGI.Options) Const D Options(*NoPass: *Trim) D ParMsg Like(FldRef.MsgText) Const D Options(*NoPass: *Trim) D ParTblOptions Like(FldRefCGI.Options) Const D Options(*NoPass) D ParMnuObj Like(FldRef.MnuObj) Const D Options(*NoPass) D ParMnuId Like(FldRef.MnuObj) Const D Options(*NoPass) Source Code 65: Prototype - Prozedur Wx_WrkBtnReseq() - Definieren Button für Resequenzierung B EN UT ZERHA ND BUC H 90 Parameter Rückgabe-Wert Nr. der Worktables ( aktuell immer 1) Kann von WOPiXX-Programmen ignoriert werden ParOptions Optionen Optionaler Parameter Vergl. 4.3.6 Aufbereitungsoptionen für Buttons ParMsg Message-Id oder Text für vom Default abweichenden Button-Text Optionaler Parameter Wahlweise kann ein Text oder eine Message-Id (aus der der Anwendung zugeordneten Message-File) angegeben werden Beispiel für den Aufruf Wx_WrkBtnEdtList(); Wx_WrkBtnEdtList('confirm(Wollen Sie die Änderungen wirklich speichern) '); Wx_WrkBtnEdtList('': 'BTN2222'); Source Code 66: Aufruf Prozedur Wx_WrkBtnEdtList() Button für editierbare Worktables definieren 4.11.7 Prozeduren zur Erstellung der Work Tables Work Tables sind List-Anzeigen, die auf einem SQL-Select-Statement beruhen. Das SQL-Statement wird per Default automatisch - basierend auf den definierten Dateien/Tabellen/Views (Prozedur-Aufrufe Wx_GenFlt(), Wx_FltFile(), Wx_FltFileFld(), Wx_WrkFile()) und Felder/Spalten (Prozedur-Aufrufe Wx_WrkKey(), Wx_WrkFld()) - generiert. Es ist jedoch auch möglich das SQL-Select-Statement direkt vorzugeben (Prozedur-Aufruf Wx_WrkSQLMan()). Zu dem SQL-Statement (unabhängig davon ob automatisch generiert oder direkt vorgegeben) können zusätzliche Where-Bedingungen (Prozedur-Aufruf Wx_WrkWhere()) hinzugefügt werden. Ebenso ist es möglich eine Default-Sortierung (Prozedur-Aufruf Wx_DftOrder()) vorzugeben. Zusätzlich zu der List-Anzeige ist es möglich Kontext-Menüs (Prozedur-Aufruf Wx_CtxMnuItm) und Buttons (Prozedur-Aufruf Wx_WrkBtn) zum Aufruf von Folge-Programmen festzulegen 4.11.7.1 Wx_WrkFile() Datei für Work Table definieren Sofern in dem List-Programm keine Filter-Felder benötigt werden, müssen die verwendeten Dateien/Tabellen/Views über die Funktion Wx_WrkFile() definiert werden. Sofern die Dateien/Tabellen/Views bereits für die Filter-Felder definiert wurden, ist eine neuerliche Definition der Tabellen nicht mehr erforderlich. B EN UT ZERHA ND BUC H 91 Über die Funktion Wx_WrkFile können bis zu 10 Dateien/Tabellen/Views definiert werden. Da diese Dateien/Tabellen/Views zum Aufbau des Select-Statements, das die Listanzeige bildet verwendet wird, müssen die Abhängigkeiten (Join-Informationen) zwischen den Dateien/Tabellen/Views definiert werden. Die Join-Anweisungen müssen in gültiger SQL Notation angegeben werden. Anmerkung: Anstatt die Verknüpfungen in der Funktion Wx_FltFile anzugeben, wird empfohlen SQL Views zu erstellen, die die alle Spalten, sowie die Verknüpfungen enthalten. Prototype ************************************************************************** P* Procedure name: Wx_WrkFile P* Purpose: Define Files used for Work Tables P* --> Up to 10 Files can be specified P* --> If more than 1 File is specified: Join Conditions ar P* Returns: P* Parameters: ParFile1 => File/Table 1 P* Parameters: ParFile2 => File/Table 2 (Optional) P* Parameters: ParJoin2 => Join Previous Tables and Table 2 (Optional) P* Parameters: ParFile3 => File/Table 3 (Optional) P* Parameters: ParJoin3 => Join Previous Tables and Table 3 (Optional) P* Parameters: ParFile4 => File/Table 4 (Optional) P* Parameters: ParJoin4 => Join Previous Tables and Table 4 (Optional) P* Parameters: ParFile5 => File/Table 5 (Optional) P* Parameters: ParJoin5 => Join Previous Tables and Table 5 (Optional) P* Parameters: ParFile6 => File/Table 6 (Optional) P* Parameters: ParJoin6 => Join Previous Tables and Table 6 (Optional) P* Parameters: ParFile7 => File/Table 7 (Optional) P* Parameters: ParJoin7 => Join Previous Tables and Table 7 (Optional) P* Parameters: ParFile8 => File/Table 8 (Optional) P* Parameters: ParJoin8 => Join Previous Tables and Table 8 (Optional) P* Parameters: ParFile9 => File/Table 9 (Optional) P* Parameters: ParJoin9 => Join Previous Tables and Table 9 (Optional) P* Parameters: ParFile10 => File/Table 10 (Optional) P* Parameters: ParJoin10 => Join Previous Tables and Table 10 (Optional) ************************************************************************** D Wx_WrkFile... D PR OPDesc D ParFile1 Like(FldRef.NameSQL) Const D ParFile2 Like(FldRef.NameSQL) Const D Options(*NoPass) D ParJoin2 Like(FldRef.TextVar) Const D Options(*NoPass) D ParFile3 Like(FldRef.NameSQL) Const D Options(*NoPass) D ParJoin3 Like(FldRef.TextVar) Const D Options(*NoPass) D ParFile4 Like(FldRef.NameSQL) Const D Options(*NoPass) D ParJoin4 Like(FldRef.TextVar) Const D Options(*NoPass) D ParFile5 Like(FldRef.NameSQL) Const D Options(*NoPass) D ParJoin5 Like(FldRef.TextVar) Const D Options(*NoPass) D ParFile6 Like(FldRef.NameSQL) Const D Options(*NoPass) D ParJoin6 Like(FldRef.TextVar) Const D Options(*NoPass) D ParFile7 Like(FldRef.NameSQL) Const B EN UT ZERHA ND BUC H 92 D D D D D D D D D D D D D D D ParJoin7 ParFile8 ParJoin8 ParFile9 ParJoin9 ParFile10 ParJoin10 Options(*NoPass) Like(FldRef.TextVar) Options(*NoPass) Like(FldRef.NameSQL) Options(*NoPass) Like(FldRef.TextVar) Options(*NoPass) Like(FldRef.NameSQL) Options(*NoPass) Like(FldRef.TextVar) Options(*NoPass) Like(FldRef.NameSQL) Options(*NoPass) Like(FldRef.TextVar) Options(*NoPass) Const Const Const Const Const Const Const Source Code 67: Prototype - Procedure Wx_WrkFile() - Definieren Dateien für Work Tables Parameter ParFile1 Analog zu Prozedur Wx_FltFile() Datei für Filter definieren Physische Datei/Tabelle/View Kann als kurzer System-Name (Max.10 Zeichen) oder langer SQL Name (Max. 128 Zeichen) angegeben werden. ParFile2 ParJoin2 Physische Datei/Tabelle/View Optionaler Parameter Kurzer System- oder langer SQL Name Verknüpfung zwischen Datei/Tabelle/View 1 und 2 Optionaler Parameter muss angegeben werden, wenn ParFile2 angegeben wurde (auch dann wenn ein Cross Join gewünscht wird). Beispiel: + on Key1File1 = Key1File2 + and Key2File1 = Key2File2 Die Parameter ParFile3 ParFile10 sind optional und werden analog ParFile2 verwendet. Die Parameter ParJoin3 ParJoin10 sind optional werden analog ParJoin2 verwendet. Beispiel für den Aufruf Wx_WrkFile('AuftrKopfX'); Wx_WrkFile('AuftrKopfX': 'AuftrPosX': 'Join AuftrPosX on AuftrKopfX.BestNr = AuftrPosX.BestNr': 'KundSt': 'Left Outer Join KundSt on KundeNr = KndNr'); Wx_WrkFile('DWEMLADR': 'KXKOEMV05': 'Join KXKOEMV05 on EMEMAIL = EASEML': 'KXMAILV02': ' Left Outer Join KXMAILV02 on EAMID and EATYP 'WITITV01': ' Left outer Join WITITV01 on KGMAND and KGTINR Source Code 68: Beispiel Aufruf Prozedur Wx_WrkFile() = ESEAMID + = ESRCVTYP': = VLMAND + = VLTINR'); Dateien für Work Tables definieren: B EN UT ZERHA ND BUC H 93 4.11.7.2 Prozeduren zur Definition von Schlüsseln Es werden 2 Möglichkeiten zur Definition von Schlüssel-Begriffen, die an das Folge-Programm übergeben werden vorgesehen. Relative Satz-Nr.: Sofern der Zugriff über die relative Satz-Nr. erfolgt, wird der eindeutige Schlüssel über die Funktion Wx_WrkKeyRRN definiert. Schlüssel-Felder/Spalten: Bei Zugriff über Schlüssel-Felder, werden diese über die Funktion Wx_WrkKeyFld() definiert. Die Schlüssel innerhalb der Work-File vor allen anderen Spalten definiert werden, d.h. unmittelbar nach der Definition der Dateien/Tabellen/Views bzw. dem Öffnen der Work-Table Anmerkung: Die Funktion Wx_WrkKeyRRN darf pro Worktable nur ein einziges Mal aufgerufen werden. Es kann pro Worktable entweder nur eine relative Satz-Nr. oder ein oder mehrere Schlüssel-Felder angegeben werden. 4.11.7.2.1 Wx_WrkKeyRRN() Schüssel = Relative Satz-Nr. Über die Funktion Wx_WrkKeyRRN() wird der eindeutige Schlüssel für den Zugriff in dem FolgeProgramm als relative Satz-Nr. der Datei definiert und ermittelt. Über diese Funktion wird der eindeutige Schlüssel, der zum Zugriff auf den Datensatz in der DetailAnzeige/Change Table erforderlich hinterlegt. Die Prozedur Wx_WrkRRN() darf nur einmalig pro Work Table aufgerufen werden. Anmerkung: Schlüssel müssen innerhalb der Work Table vor allen anderen Spalten definiert werden. Prototype ********************************************************************************* P* Procedure name: Wx_WrkKeyRRN P* Purpose: Save Key Information for Work Files - Key is relative record no P* for table/file P* Returns: P* Parameters: ParKey => Table P* Parameters: ParOptions => Options (Optional) ********************************************************************************** D Wx_WrkKeyRRN... D PR OpDesc D ParKey Like(FldRef.NamesQL) Const D ParOptions Like(FldRefCGI.Options) Const D Options(*NoPass) B EN UT ZERHA ND BUC H 94 Source Code 69: Prototype - Prozedur Wx_WrkKeyRRN() - Definieren relative Satz-Nr. als Schlüssel Parameter ParKey ParOption Datei/Tabelle für Zugriff über relative Satz-Nr. Wahlweise kann der kurze System-Name oder der lange SQL-Name für die Datei/Tabelle/View angegeben werden. Optionen Optionaler Parameter z.Z. sind noch keine Schlüssel-Worte festgelegt. Beispiel für den Aufruf Wx_WrkFile('AuftrKopfX'); Wx_WrkKeyRRN('AuftrKopfX'); Source Code 70: Aufruf Prozedur Wx_WrkKeyRRN 4.11.7.2.2 Wx_WrkKeyFld() Definieren relative Satz-Nr. als Schlüssel Definieren Schlüssel-Felder Über die Funktion Wx_WrkKeyFld() können Schlüssel-Felder für den eindeutigen Zugriff im nächsten Programm definiert werden. Über die Funktion können gleichzeitig bis zu 10 Schlüssel-Felder definiert werden. Wird die Funktion mehrfach aufgerufen, so werden die Schlüssel-Felder am Ende der bereits definierten Schlüssel-Felder hinzugefügt. Insgesamt können bis zu 100 Schlüssel-Felder definiert werden. Die Schlüssel-Felder müssen alle in der gleichen Datei/Tabelle/View definiert sein. Anmerkung: Schlüssel müssen innerhalb der Work Table vor allen anderen Spalten definiert werden. Prototype ******************************************************************************* P* Procedure name: Wx_WrkKeyFld P* Purpose: Save Key Information for Work Files - Key is a compound key P* consisting of 1 to 10 key fields P* Key fields must be located within the same table/file P* Returns: P* Parameters: ParKey01 => Name Key field 01 P* Parameters: ParOptions => Options (Optional) P* Parameters: ParKey02 => Name Key field 02 (Optional) P* Parameters: ParKey03 => Name Key field 03 (Optional) P* Parameters: ParKey04 => Name Key field 04 (Optional) P* Parameters: ParKey05 => Name Key field 05 (Optional) P* Parameters: ParKey06 => Name Key field 06 (Optional) P* Parameters: ParKey07 => Name Key field 07 (Optional) P* Parameters: ParKey08 => Name Key field 08 (Optional) B EN UT ZERHA ND BUC H 95 P* Parameters: ParKey09 => Name Key field 09 (Optional) P* Parameters: ParKey10 => Name Key field 10 (Optional) ******************************************************************************** D Wx_WrkKeyFld... D PR OpDesc D ParKey01 Like(FldRef.NamesQL) Const D ParOptions Like(FldRefCGI.Options) Const D Options(*NoPass) D ParKey02 Like(FldRef.NamesQL) Const D Options(*NoPass) D ParKey03 Like(FldRef.NamesQL) Const D Options(*NoPass) D ParKey04 Like(FldRef.NamesQL) Const D Options(*NoPass) D ParKey05 Like(FldRef.NamesQL) Const D Options(*NoPass) D ParKey06 Like(FldRef.NamesQL) Const D Options(*NoPass) D ParKey07 Like(FldRef.NamesQL) Const D Options(*NoPass) D ParKey08 Like(FldRef.NamesQL) Const D Options(*NoPass) D ParKey09 Like(FldRef.NamesQL) Const D Options(*NoPass) D ParKey10 Like(FldRef.NamesQL) Const D Options(*NoPass) Source Code 71: Prototype - Prozedur Wx_WrkKeyFld() - Definieren Schlüssel-Felder Parameter ParKey01 ParOption Optionen Optionaler Parameter z.Z. sind noch keine Schlüssel-Worte festgelegt. ParKey02 ParKey02: Weitere Schlüssel-Felder Wahlweise kann der kurze System-Name oder der lange SQL-Name für die Spalten angegeben werden. Name des ersten Schlüssel-Feldes Wahlweise kann der kurze System-Name oder der lange SQL-Name für die Spalte angegeben werden. Beispiel für den Aufruf Wx_WrkKeyFld('FLDName1'); Wx_WrkKeyFld('FLDName2': ''); Wx_WrkKeyFld('FLDName3': '': 'FldName4': 'FLDName5': 'FldName6'); Source Code 72: Aufruf Prozedur Wx_WrkKeyFld() Definieren Schlüssel-Felder 4.11.7.3 Wx_WrkFld() Feld/Spalte definieren Alle Spalten, mit Ausnahme der ersten Spalte, d.h. der Spalte mit dem eindeutigen Schlüssel (oder der relativen Satz-Nr.) müssen über diese Prozedur definiert werden. B EN UT ZERHA ND BUC H 96 Die Definition ist auch dann erforderlich, wenn das SQL-Statement direkt vorgegeben wurde. Prototype *********************************************************************** P* Procedure name: Wx_WrkFld P* Purpose: Define Fields used for Work Table P* Returns: P* Parameters: ParField => Field P* Parameters: ParMsg => Message-Id or Text P* Parameters: ParOptions => Options *********************************************************************** D Wx_WrkFld... D PR OPDesc D ParField Like(FldRef.NameSQL) Const D ParMsg Like(FldRef.MsgData) Const D ParOptions Like(FldRefCGI.Options) Const D Options(*NoPass) Source Code 73: Prototype Prozedur Wx_WrkFld() Definieren Spalten in Work Table Parameter ParField ParMsg Spalten-Überschrift Die Spalten-Überschrift kann wahlweise als Text oder als Message-Id (für Mehrsprachigkeit) angegeben werden. Wird eine Message-Id übergeben so muss diese in der für die Anwendung definierten Message-File vorhanden sein. ParOption Aufbereitungsoptionen (vergl. 4.3.4 Aufbereitungsoptionen für Spalten) Optionaler Parameter Feld/Spalten-Name Das Feld/Spalte muss in einer zuvor definierten Datei/Tabelle/View vorhanden sein. Es kann wahlweise der kurze System- oder der lange SQL-Name angegeben werden. Der Feldname kann in jeder beliebigen Groß/Klein-Schreibweise angegeben werden. Beispiele für den Aufruf Wx_WrkKey('ADRESSEX': *On); Wx_WrkFld('KundeNr': 'FLD0001'); Wx_WrkFld('Name1F': 'FLD0002'); Wx_WrkFld('Name2F': 'Telefon'); Wx_WrkFld('Strasse': 'FLD0003'); Wx_WrkFld('Land': 'Land': ' center CTL(Country)'); Source Code 74: Aufruf Prozedur Wx_WrkFld - Definieren Spalte in Work Table Das Ergebnis dieser Spalten-Definition über Prozedur Wx_WrkFld() wird im folgenden Screenshot gezeigt B EN UT ZERHA ND BUC H 97 Abbildung 18: Worktable - Spalten-Definition - Ergebnis aus Source Code 40 Anmerkung: Die Aufbereitung in Spalte Telefon wird nicht über ein Schlüssel-Wort in der Option gesteuert, sondern wird automatisch durch das zugrundeliegende Framework gesteuert. 4.11.7.4 Wx_WrkWhere() Where-Bedingungen Allen SQL-Abfragen, die automatisch, basierend auf den vorgegebenen Dateien/Tabellen/Views generiert werden, können WHERE-Bedingungen, die die Anzahl der auszugebenden Datensätze/Zeilen reduzieren, hinzugefügt werden. Die Syntax der hinzuzufügenden WHERE-Bedingungen muss der gültigen SQL-Syntax entsprechen und kann alles beinhalten, was in SQL Where-Bedingungen zulässig ist, z.B. logische Operatoren, Klammern, Prädikate, skalare Funktionen. Die Felder/Spalten, die in den WHERE-Bedingungen angegeben werden, müssen in den vordefinierten Dateien/Tabellen/Views vorhanden sein. Die Felder/Spalten müssen jedoch nicht zwingend als Spalten für die Worktables definiert werden. Innerhalb des gleichen Work-Programms kann die Prozedur Wx_WrkWhere mehrfach, mit unterschiedlichen Bedingungen angegeben werden. Die Where-Bedingungen werden von WOPiXX zu einer einzigen WHERE-Bedingung zusammengefasst. Der Programmierer muss jedoch dafür sorgen, die WhereBedingungen korrekt verknüpft werden können, z.B. die folgenden WHERE-Bedingungen müssen mit einem logischen Operator (AND oder OR) beginnen. Prototype ************************************************************************** P* Procedure name: Wx_WrkWhere P* Purpose: Define Where clause for Work Tables P* Returns: P* Parameters: ParString => Where Condition for the SQL Statement ************************************************************************** D Wx_WrkWhere... D PR OpDesc B EN UT ZERHA ND BUC H 98 D ParString Like(FldRefLA.VarLen) Const Source Code 75 : Prototype - Prozedur - Wx_WrkWhere - Where-Bedingungen hinzufügen Parameter ParWhere Komplett aufbereitete Where-Bedingung in SQL Syntax Beispiele für den Aufruf Wx_WrkWhere(' LiefMge < BestMge + and LiefTerm <= Current_Date – 3 Days'); Wx_WrkWhere('and AuftrArt = ''EX''); Source Code 76: Aufruf Prozedur Wx_WrkWhere - Where-Bedingungen hinzufügen 4.11.7.5 Wx_WrkDftOrder() Default-Sortierung (Order By) Sofern eine bestimmte Anfangssortierung der Daten erforderlich ist, kann diese mit Hilfe der Prozedur Wx_DftOrder() vorgegeben werden. Über die Funktion Wx_DftOrder() können bis zu 10 Sortier-Spalten/Felder nach denen in auf- oder absteigender Reihenfolge sortiert werden soll, vorgegeben werden. Die Sortierreihenfolge, sofern erwünscht kann im Parameter-Feld durch ein Blank von dem Spalten/Feld-Namen getrennt angegeben werden. Sofern keine Sortierreihenfolge angegeben wird, wird aufsteigend sortiert. Die Sortierreihenfolge kann entweder als ASC (aufsteigend) oder DESC (absteigend) angegeben werden. Sortier-Spalten/Felder können in jeder beliebigen Kombination aus Groß- und Kleinschreibung angegeben werden. Die Funktion Wx_DftOrder() kann pro Work Table nur einmalig angegeben werden. Prototype ************************************************************************* P* Procedure name: Wx_WrkDftOrder P* Purpose: Save Order By clause for Work Files P* Returns: P* Parameters: ParCol01 => Field/Column to Sort P* Parameters: --> Desc or Asc can be added to the Column Name P* Parameters: separated by a Blank P* Parameters: ParCol02 => Field/Column to Sort (Optional) P* Parameters: ParCol03 => Field/Column to Sort (Optional) P* Parameters: ParCol04 => Field/Column to Sort (Optional) P* Parameters: ParCol05 => Field/Column to Sort (Optional) P* Parameters: ParCol06 => Field/Column to Sort (Optional) P* Parameters: ParCol07 => Field/Column to Sort (Optional) P* Parameters: ParCol08 => Field/Column to Sort (Optional) P* Parameters: ParCol09 => Field/Column to Sort (Optional) P* Parameters: ParCol10 => Field/Column to Sort (Optional) ************************************************************************* D Wx_WrkDftOrder... D PR OpDesc D ParCol01 Like(FldRef.NameSQL) Const D ParCol02 Like(FldRef.NameSQL) Const D Options(*NoPass) B EN UT ZERHA ND BUC H 99 D D D D D D D D D D D D D D D D ParCol03 Like(FldRef.NameSQL) Options(*NoPass) Like(FldRef.NameSQL) Options(*NoPass) Like(FldRef.NameSQL) Options(*NoPass) Like(FldRef.NameSQL) Options(*NoPass) Like(FldRef.NameSQL) Options(*NoPass) Like(FldRef.NameSQL) Options(*NoPass) Like(FldRef.NameSQL) Options(*NoPass) Like(FldRef.NameSQL) Options(*NoPass) ParCol04 ParCol05 ParCol06 ParCol07 ParCol08 ParCol09 ParCol10 Const Const Const Const Const Const Const Const Source Code 77: Prototype - Procedure - Wx_WrkDftOrder - Default Sortierung Parameter ParCol1 ParCol2 Sortier-Spalte/Feld Durch die zusätzliche Angabe von ASC oder DESC kann festgelegt werden, ob die Sortierung auf- oder absteigend erfolgen soll. ParCol10 Sortier-Spalte/Feld Optionale Parameter Sortierreihenfolge kann analog ParCol1 angegeben werden. Beispiel für den Aufruf Wx_WrkDftOrder('Land': 'PLZ': 'KundeNr'); Wx_WrkDftOrder('KundeNr ASC', 'Umsatz Desc'); Source Code 78: Aufruf Prozedur Wx_WrkDftOrder - Default Sortierung 4.11.7.6 Wx_WrkSQLMan() SQL Select-Statement Per Default wird das SQL-Select-Statement für die List-Ausgabe basierend auf den definierten Dateien/Tabellen/Views, den definierten Filter-Feldern und den für die List-Anzeige vorgegebenen Spalten dynamisch aufbereitet. Es ist jedoch auch möglich das SQL-Select-Statement direkt durch Aufruf der Prozedur Wx_WrkSQLMan() im Programm vorzugeben. Wurde diese Prozedur aufgerufen, wird das vorgegebene Select-Statement verwendet, d.h. es erfolgt keine Aufbereitung basierend auf den definierten Dateien/Tabellen/Views. Das SQL-Select-Statement kann alles beinhalten, was in einem SELECT-Statement zulässig ist, inklusive Group-By und Having-Anweisungen, Full-Selects (Union, Except, Intersect), verschachtelten SubSelects, Common-Table-Expressions (CTE), User Defined Functions (UDF) und User Defined TableFunctions (UDTF). B EN UT ZERHA ND BUC H 100 Auch wenn das SQL-Select-Statement über Prozedur Wx_WrkSQLMan() vorgegeben wird, müssen die verwendeten Dateien/Tabellen/Views definiert werden, d.h. es muss eine der folgenden Prozeduren Wx_GenFlt(), Wx_FltFile(), Wx_FltFileFld() oder Wx_WrkFile() aufgerufen werden. Ebenso müssen die auszugebenen Spalten über die Prozeduren Wx_WrkKey() und Wx_WrkFld() definiert werden. Die Definition der Spalten wird benötigt, Überschriften und Aufbereitungsoptionen vorzugeben. Die Definition der Dateien/Tabellen/Views ist erforderlich um die Datentypen für die einzelnen Spalten ermitteln und basierend auf den Datentypen automatisch Aufbereitungsoptionen (z.B. bei Datums-Feldern) hinzuzufügen.. Wird das SQL-Select-Statement direkt vorgegeben, muss darauf geachtet werden, dass die erste Spalte entweder das eindeutige Schlüssel-Feld oder die relative Satz-Nr. aus einer der definierten und verknüpften Dateien/Tabellen/Views enthalten muss. Die folgenden Felder/Spalten müssen in der Reihenfolge den Spalten, die über die Prozedur Wx_WrkFld() definiert wurden entsprechen. Die Funktion Wx_WrkSQLMan() darf innerhalb einer Work-Table nur einmal aufgerufen werden. Prototype ************************************************************************** P* Procedure name: Wx_WrkSQLMan P* Purpose: Save SQL Command for Work Files P* Returns: P* Parameters: ParString => SQL Command ************************************************************************** D Wx_WrkSQLMan... D PR OpDesc D ParString Like(FldRefLA.VarLen) Const Source Code 79: Prototype Parameter ParString Wx_WrkSQLMan() SQL Select-Statement vorgeben Vollständiges SQL Select-Statement Beispiele für den Aufruf Wx_WrkSQLMan('Select AKID, BestNr, k.KundeNr, KundeName + From AuftrKopfX k join AdresseX a + on k.KundeNr = a.KundeNr + Where LiefTerm = Current_Date'); Wx_WrkSQLMan('Select RRN(a), a.* From AuftrKopfx a'); Source Code 80: Aufruf Prozedur Wx_WrkSQLMan() - SQL Select-Statement vorgeben 4.11.8 Prozeduren zur Ausgabe von Worktables Nachdem alle Informationen für die Work Table definiert wurden, muss der HTML-Code generiert und das Ergebnis an den Browser geschickt werden. Vor der Ausgabe der Work-Tables können noch Parameter-Werte (z.Z. maximal 5) die im FolgeProgramm gesetzt werden können, angegeben werden. B EN UT ZERHA ND BUC H 101 Das Setzen der Parameter-Werte ist für Work- und Change-Tables identisch und wird deshalb separat in Kapitel 4.13 Ermitteln und Setzen von Parameter-Werten abgehandelt. 4.11.8.1 Wx_NoRcdTxt() - Anzahl Datensätze ausblenden Per Default wird bei Work Tables die Gesamt-Anzahl der Datensätze ermittelt und angezeigt. Durch Aufruf der Prozedur Wx_NoRcdTxt() kann die Anzeige ausgeblendet werden. Anmerkung: z.Z. gibt es keinen Performance-Unterschied, ob die Anzahl der Datensätze angezeigt werden oder nicht. Um die Anzahl der Datensätze zu ermitteln, muss die komplette SQL-Abfrage ausgeführt werden. Es ist jedoch geplant, dass, sofern die Anzahl der Datensätze ausgeblendet wird, immer nur die nächsten (z.Z.) 100 Daten-Sätze eingelesen. Wx_NoRcdTxt() aufgerufen Abbildung 19: Ergebnis Aufruf Wx_NoRcdTxt() - Anzahl Datensätze ausblenden Prototype ******************************************************************************* P* Procedure name: Wx_NoRcdTxt P* Purpose: Set No Record Text P* Returns: P* Parameters: ******************************************************************************** D Wx_NoRcdTxt... B EN UT ZERHA ND BUC H 102 D PR OpDesc Source Code 81: Prototype - Prozedur Wx_NoRcdTxt/( ) - Anzahl Datensätzen ausblenden Parameter Weder Parameter noch Rückgabe-Wert Beispiel für den Aufruf Wx_NoRcdTxt(); Source Code 82: Aufruf Prozedur Wx_NoRcdTxt() - Anzahl Datensätze ausblenden 4.11.8.2 Wx_RcdTxt Beliebiger Satz-Text Per Default wird bei Work Tables die Gesamt-Anzahl der Datensätze ermittelt und angezeigt. Wahlweise kann eine Message-Id oder ein fixer Text übergeben werden. ■ Beliebiger Satz-Text Abbildung 20: Funktion Wx_RcdTxt: Beliebiger Satz-Text Prototype *************************************************************************** P* Procedure name: Wx_RcdTxt P* Purpose: Set Text for (Aggregated returned records) P* Returns: P* Parameters: ParMsgTxt => Message Text or Message-Id *************************************************************************** D Wx_RcdTxt... D PR OpDesc D ParMsgTxt Like(FldRef.MsgData) Const Source Code 83: Prototype - Prozedur Wx_RcdTxt - Satz-Text vorgeben Parameter ParMsgTxt Message-Id oder Message-Text als Ersatz für den Standard-Text B EN UT ZERHA ND BUC H 103 Beispiel für den Aufruf Wx_RcdTxt('MNU0014'); Wx_RcdTxt('Aufträge'); Source Code 84: Aufruf Prozedur Wx_RcdTxt() Beliebiger Satz-Text 4.11.8.3 Wx_WrtWrkTbl() Worktable ausgeben Nachdem alle Informationen für die Work Table definiert wurden, muss durch Aufruf der Prozedur Wx_WrtWrkTbl() der HTML-Code generiert und das Ergebnis an den Browser geschickt werden. Beim Aufruf der Funktion kann ein Fehler-Text, der im Folge-Programm ausgegeben wird und bis zu 5 Parameter-Werte, die ebenfalls vom Folge-Programm verwendet werden können übergeben werden. Die Prozedur Wx_WrtWrkTbl() kann pro Worktable nur einmalig aufgerufen werden. Mit Aufruf der Prozedur Wx_WrtWrkTbl() wird das Work-Programm automatisch beendet. Prototype ************************************************************************* P* Procedure name: Wx_WrtWrkTbl P* Purpose: Write Work Table P* Returns: P* Parameters: ParErrMsg => Error Message-Id or Text (optional) P* Parameters: ParParm1 => Parameter Value 1 (optional) P* Parameters: ParParm2 => Parameter Value 2 (optional) P* Parameters: ParParm3 => Parameter Value 3 (optional) P* Parameters: ParParm4 => Parameter Value 4 (optional) P* Parameters: ParParm5 => Parameter Value 5 (optional) P* Parameters: ParHandle => Handle (optional) ************************************************************************* D Wx_WrtWrkTbl... D PR OpDesc D PErrMsg Like(FldRef.MsgData) Const D Options(*NoPass) D ParParm1 Like(FldRef.TextVar) Const D Options(*NoPass) D ParParm2 Like(FldRef.TextVar) Const D Options(*NoPass) D ParParm3 Like(FldRef.TextVar) Const D Options(*NoPass) D ParParm4 Like(FldRef.TextVar) Const D Options(*NoPass) D ParParm5 Like(FldRef.TextVar) Const D Options(*NoPass) D PInHandle 3U 0 Options(*NoPass) Const Source Code 85: Prototype - Wx_WrtWrkTbl() - Work Table ausgeben Parameter ParErrMsg Fehler-Text oder Message-Id Optionaler-Parameter Der Fehler-Text kann entweder direkt oder als Message-Id angegeben werden. B EN UT ZERHA ND BUC H 104 ParParm1 ParParm5 Parameter-Wert Optionale Parameter Es können bis zu 5 alphanumerische Parameter-Werte übergeben werden. Diese Parameter-Werte können in dem Folge-Programm verwendet werden. Anstatt die gewünschten Parameter-Werte über die Funktion Wx_WrtWrkTbl() zu setzen, ist es auch möglich die Werte über durch Aufruf einer der Funktionen Wx_SetParmXXXX zu setzen (vergl. 4.13 Ermitteln und Setzen von Parameter-Werten). Beispiel für den Aufruf Wx_WrtWrkTbl(); Wx_WrtWrkTbl(PGMSDS.MsgTxt); Wx_WrtWrkTbl('': GblJahr: GblArtikelNr); Source Code 86: Aufruf Prozedur Wx_WrtWrkTbl() - Work Table ausgeben 4.12 Ermitteln von Schlüssel-Werten In Worktables wird bei Auswahl über Kontext-Menü entweder der eindeutige Schlüssel oder die relative Satz-Nr. des/der zu bearbeitenden Datensätze für das Folge-Programm bereitgestellt. Die eindeutigen Schlüssel-Werte können mit den folgenden WOPiXX-Funktionen ermittelt werden: Wx_GetDBKeyInt Ermitteln eines einzelnen ganzzahligen Schlüssel-Wertes Wx_GetDBKeyArrInt Ermitteln einer Gruppe von ganzzahligen Schlüssel-Werten Wx_GetDBKeyDec Wx_GetDBKeyArrDec Ermitteln eines einzelnen numerischen Schlüssel-Wertes Ermitteln einer Gruppe von numerischen Schlüssel-Werten Wx_GetDBKeyChar Wx_GetDBKeyArrChar Ermitteln eines einzelnen alphanumerischen Schlüssel-Wertes Ermitteln einer Gruppe von alphanumerischen Schlüssel-Werten Wx_GetDBKeyUC Wx_GetDBKeyArrUC Ermitteln eines einzelnen Unicode-Schlüssel-Wertes Ermitteln einer Gruppe von Unicode-Schlüssel-Werten Bei allen Funktionen, bei denen eine Gruppe von Schlüssel-Werten zurückgegeben wird, erfolgt die Ausgabe in einer Feldgruppe (mit dem entsprechenden Datentypen). Die Ermittlung der Schlüssel-Werte über eine Array-Funktion ist bei Mehrfach-Auswahl erforderlich, z.B. wenn mehrere Datensätze gelöscht werden sollen. B EN UT ZERHA ND BUC H 105 4.12.1 Wx_GetDBKeyInt() Ganzzahliger Schlüssel-Wert Mit der Funktion Wx_GetDBKeyInt() kann ein einzelner ganzzahliger Schlüssel-Wert, der im vorgelagerten Programm übergeben wurde ermittelt werden. Der Aufruf ist z.B. erforderlich, wenn ein Datensatz im Änderungsmodus bearbeitet oder angezeigt werden sollt. Basierend auf den zurückgelieferten Informationen (Relative-Satz-Nr. oder eindeutige Id) kann der Datensatz z.B. mit dem RPG OpCode CHAIN eingelesen werden. Prototype *************************************************************************** P* Procedure name: Wx_GetDBKeyInt P* Purpose: Get Single Integer File/Table Key from Session Information P* = Either Relative Record No or Identity Value P* = No Decimal Positions will be returned P* Returns: Integer File/Table Key P* Parameters: *************************************************************************** D Wx_GetDBKeyInt... D PR 20I 0 OpDesc Source Code 87: Funktion Wx_GetDBKeyInt() - Ermitteln ganzzahligen Schlüssel-Wert Parameter Rückgabe-Wert Relative Satz-Nr. oder eindeutige Id als ganzzahliger Wert Keine Parameter erforderlich! Beispiel für den Aufruf D MyDBKey S 20I 0 *----------------------------------------------------------------------------/Free MyDBKey = Wx_GetDBKeyInt(); /End-Free Source Code 88: Funktion Wx_GetDBKeyInt() - Ermitteln ganzzahligen Schlüssel-Wert 4.12.2 Wx_GetDBKeyArrInt() Schlüssel-Werte Gruppe von ganzzahligen Mit der Funktion Wx_GetDBKeyArrInt() kann eine Gruppe von ganzzahligen Schlüssel-Werten ermittelt werden. Der Aufruf ist erforderlich, wenn bei Mehrfach-Auswahl alle ausgewählten Datensätze verarbeitet werden müssen. Die ganzzahligen Schlüssel-Werte werden in einer Feldgruppe mit aktuell 100 Elementen (Referenz-Wert RefElemCGI) ausgegeben. B EN UT ZERHA ND BUC H 106 Prototype *************************************************************************** P* Procedure name: Wx_GetDBKeyArrInt P* Purpose: Get Array of Single Integer File/Table Keys from Session P* = Either Relative Record Numbers or Identity Values P* = No Decimal Positions will be returned P* Returns: Integer File/Table Keys P* Parameters: *************************************************************************** D Wx_GetDBKeyArrInt... D PR 20I 0 Dim(RefElemCGI) OpDesc D POutNbrRows 10U 0 Options(*NoPass) Source Code 89: Funktion Wx_GetDBKeyArrInt() Ermitteln Gruppe von ganzzahligen Schlüssel-Werten Parameter Rückgabe-Wert: Feldgruppe mit 100 Elementen für ganzzahlige Schlüssel-Werte Relative Satz-Nr. oder eindeutige Id als ganzzahliger Wert POutNbrRows Anzahl der ausgewählten Zeilen Optionaler Parameter Beispiel für den Aufruf D ArrDBKey S 10I 0 Dim(RefElemCGI) D NbrRows S 10U 0 D Index S 10U 0 *----------------------------------------------------------------------------/Free //1. Ermitteln ausgewählte Zeilen - Anzahl Zeilen wird nicht ausgegeben ArrDBKey = Wx_GetDBKeyArrInt(); //2. Ermitteln ausgewählte Zeilen – Anzahl Zeilen wird zurückgegeben ArrDBKey = Wx_GetDBKeyArrInt(NbrRows); If NbrRows > *Zeros; For Index = 1 to NbrRows; Chain ArrDBKey(Index)MyFileF; If %Found(MyFileP); // Verarbeitung EndIf; EndFor; EndIf; /End-Free Source Code 90: Funktion Wx_GetDBKeyInt() - Ermitteln Gruppe von ganzzahligen Schlüssel-Werten 4.12.3 Wx_GetDBKeyDec() Numerischer Schlüssel-Wert Mit der Funktion Wx_GetDBKeyInt() kann ein einzelner numerischer (gepackt oder gezont numerisch) Schlüssel-Wert, der im vorgelagerten Programm übergeben wurde ermittelt werden. Der Aufruf ist z.B. erforderlich, wenn ein Datensatz im Änderungsmodus bearbeitet oder angezeigt werden sollt. Basierend auf den zurückgelieferten Informationen (Relative-Satz-Nr. oder eindeutige Id) kann der Datensatz z.B. mit dem RPG OpCode CHAIN eingelesen werden. B EN UT ZERHA ND BUC H 107 Prototype ***************************************************************************** P* Procedure name: Wx_GetDBKeyDec P* Purpose: Get Single Decimal File/Table Key from Session Information P* = Either Relative Record No or Identity Value P* Returns: Decimal File/Table Key P* Parameters: ***************************************************************************** D Wx_GetDBKeyDec... D PR Like(FldRef.DftDec) OpDesc Source Code 91: Funktion Wx_GetDBKeyDec() - Ermitteln numerischen Schlüssel-Wert Parameter Rückgabe-Wert Relative Satz-Nr. oder eindeutige Id als Dezimal-Wert Bei ungültigen numerischen Werten wird -1 zurückgegeben Keine Parameter erforderlich! Beispiel für den Aufruf D MyDBKey S 11P 2 *----------------------------------------------------------------------------/Free MyDBKey = Wx_GetDBKeyDec(); /End-Free Source Code 92: Funktion Wx_GetDBKeyDec() - Ermitteln numerischen Schlüssel-Wert 4.12.4 Wx_GetDBKeyArrDec() Schlüssel-Werten Gruppe von dezimalen Mit der Funktion Wx_GetDBKeyArrDec() kann eine Gruppe von dezimalen Schlüssel-Werten ermittelt werden. Der Aufruf ist erforderlich, wenn bei Mehrfach-Auswahl alle ausgewählten Datensätze verarbeitet werden müssen. Die dezimalen Schlüssel-Werte werden in einer Feldgruppe mit aktuell 100 Elementen (Referenz-Wert RefElemCGI) ausgegeben. Prototype *************************************************************************** P* Procedure name: Wx_GetDBKeyArrDec P* Purpose: Get Array of Single Decimal File/Table Keys from Session P* = Either Relative Record Numbers or Identity Values P* Returns: Decimal File/Table Keys P* Parameters: *************************************************************************** D Wx_GetDBKeyArrDec... D PR Like(FldRef.DftDec) OpDesc D Dim(RefElemCGI) B EN UT ZERHA ND BUC H 108 D POutNbrRows Source Code 93: Funktion Wx_GetDBKeyArrDec() 10U 0 Options(*NoPass) Ermitteln Gruppe von dezimalen Schlüssel-Werten Parameter Rückgabe-Wert: Feldgruppe mit 100 Elementen für dezimale Schlüssel-Werte Relative Satz-Nr. oder eindeutige Id als Dezimal-Wert Bei ungültigen numerischen Werten wird 1 zurückgegeben. POutNbrRows: Anzahl der ausgewählten Zeilen Optionaler Parameter Beispiel für den Aufruf D ArrDBKey S 15P 5 Dim(RefElemCGI) D NbrRows S 10U 0 D Index S 10U 0 *----------------------------------------------------------------------------/Free //1. Ermitteln dezimale Schlüssel-Werte – Anzahl Zeilen nicht ausgegeben ArrDBKey = Wx_GetDBKeyArrDec(); //2. Ermitteln dezimale Schlüssel-Wert – Anzahl der Zeilen wird ausgegeben ArrDBKey = Wx_GetDBKeyArrDec(NbrRows); If NbrRows > *Zeros; For Index = 1 to NbrRows; Chain ArrDBKey(Index) MyFileF; If %Found(MyFileP) //Verarbeitung EndIf; EndFor; EndIf; /End-Free Source Code 94: Funktion Wx_GetDBKeyDec() - Ermitteln Gruppe von dezimalen Schlüssel-Werten 4.12.5 Wx_GetDBKeyChar() Alphanum. Schlüssel-Wert Mit der Funktion Wx_GetDBKeyChar() kann ein einzelner alphanumerischer Schlüssel-Wert, der im vorgelagerten Programm übergeben wurde ermittelt werden. Der Aufruf ist z.B. erforderlich, wenn ein Datensatz im Änderungsmodus bearbeitet oder angezeigt werden sollt. Basierend auf den zurückgelieferten Informationen (Relative-Satz-Nr. oder eindeutige Id) kann der Datensatz z.B. mit dem RPG OpCode CHAIN eingelesen werden. Prototype *************************************************************************** P* Procedure name: Wx_GetDBKeyChar P* Purpose: Get Single Character File/Table Key from Session Information P* Returns: Character File/Table Key P* Parameters: *************************************************************************** D Wx_GetDBKeyChar... D PR Like(FldRef.TextVar) OpDesc B EN UT ZERHA ND BUC H 109 Source Code 95: Funktion Wx_GetDBKeyChar() - Ermitteln alphanumerischen Schlüssel-Wert Parameter Rückgabe-Wert Relative Satz-Nr. oder eindeutige Id als alphanumerischer Wert Keine Parameter erforderlich! Beispiel für den Aufruf D MyDBKey S Like(FldRef.TextVar) *----------------------------------------------------------------------------/Free MyDBKey = Wx_GetDBKeyChar(); /End-Free Source Code 96: Funktion Wx_GetDBKeyChar() - Ermitteln alphanumerischen Schlüssel-Wert 4.12.6 Wx_GetDBKeyArrChar() Schlüssel-Werten Gruppe von alphanumerischen Mit der Funktion Wx_GetDBKeyArrChar() kann eine Gruppe von alphanumerischen Schlüssel-Werten ermittelt werden. Der Aufruf ist erforderlich, wenn bei Mehrfach-Auswahl alle ausgewählten Datensätze verarbeitet werden müssen. Die alphanumerischen Schlüssel-Werte werden in einer Feldgruppe mit aktuell 100 Elementen (Referenz-Wert RefElemCGI) ausgegeben. Prototype ************************************************************************** P* Procedure name: Wx_GetDBKeyArrChar P* Purpose: Get Array of Single Byte Character File/Table Keys from P* Returns: Character File/Table Keys P* Parameters: ************************************************************************** D Wx_GetDBKeyArrChar... D PR Like(FldRef.TextVar) OpDesc D Dim(RefElemCGI) D POutNbrRows 10U 0 Options(*NoPass) Source Code 97: Funktion Wx_GetDBKeyArrChar() Ermitteln Gruppe von alphanumerischen Schlüssel-Werten Parameter Rückgabe-Wert: Feldgruppe mit 100 Elementen für alphanumerische Schlüssel-Werte Relative Satz-Nr. oder eindeutige Id als alphanumerischer Wert POutNbrRows: Anzahl ausgewählte Zeilen Optionaler Parameter B EN UT ZERHA ND BUC H 110 Beispiel für den Aufruf D ArrDBKey S Like(FldRef.TextVar) Dim(RefElemCGI) D NbrRows S 10U 0 D Index S 10U 0 *----------------------------------------------------------------------------/Free //1. Ermitteln alphanumerische Schlüssel-Werte – Anzahl Zeilen nicht ermittelt ArrDBKey = Wx_GetDBKeyArrChar(); //2. Ermitteln alphanumerische Schlüssel-Werte – Anzahl Zeilen wird ermittelt ArrDBKey = Wx_GetDBKeyArrChar(NbrRows); If NbrRows > *Zeros; For Index = 1 to NbrRows; Chain ArrDBKey(Index) MyFileF; If %Found(MyFileP); //Verarbeitung EndIf; EndFor; EndIf; /End-Free Source Code 98: Funktion Wx_GetDBKeyArrChar() - Ermitteln Gruppe von alphanumerischen Schlüssel-Werten 4.12.7 Wx_GetDBKeyUC() Unicode-Schlüssel-Wert Mit der Funktion Wx_GetDBKeyChar() kann ein einzelner Unicode Schlüssel-Wert, der im vorgelagerten Programm übergeben wurde ermittelt werden. Der Aufruf ist z.B. erforderlich, wenn ein Datensatz im Änderungsmodus bearbeitet oder angezeigt werden sollt. Basierend auf den zurückgelieferten Informationen (Relative-Satz-Nr. oder eindeutige Id) kann der Datensatz z.B. mit dem RPG OpCode CHAIN eingelesen werden. Prototype *************************************************************************** P* Procedure name: Wx_GetDBKeyUC P* Purpose: Get Double Byte File/Table Key from Session Information P* Returns: Unicode File/Table Key P* Parameters: *************************************************************************** D Wx_GetDBKeyUC... D PR Like(FldRef.UCVar) OpDesc Source Code 99: Funktion Wx_GetDBKeyUC() - Ermitteln Unicode-Schlüssel-Wert Parameter Rückgabe-Wert Relative Satz-Nr. oder eindeutige Id als Unicode-Wert Keine Parameter erforderlich! Beispiel für den Aufruf D MyDBKey S Like(FldRef.UCVar) *----------------------------------------------------------------------------/Free B EN UT ZERHA ND BUC H 111 MyDBKey = Wx_GetDBKeyChar(); /End-Free Source Code 100: Funktion Wx_GetDBKeyUC() - Ermitteln Unicode-Schlüssel-Wert 4.12.8 Wx_GetDBKeyArrUC() Schlüssel-Werten Gruppe von Unicode- Mit der Funktion Wx_GetDBKeyArrUC() kann eine Gruppe von Unicode-Schlüssel-Werten ermittelt werden. Der Aufruf ist erforderlich, wenn bei Mehrfach-Auswahl alle ausgewählten Datensätze verarbeitet werden müssen. Die Unicode-Schlüssel-Werte werden in einer Feldgruppe mit aktuell 100 Elementen (Referenz-Wert RefElemCGI) ausgegeben. Prototype *************************************************************************** P* Procedure name: Wx_GetDBKeyArrUC P* Purpose: Get Array of Double Byte Unicode File/Table Keys from Session P* Returns: Unicode File/Table Keys P* Parameters: *************************************************************************** D Wx_GetDBKeyArrUC... D PR Like(FldRef.UCVar) Dim(RefElemCGI) D POutNbrRows 10U 0 Options(*NoPass) Source Code 101: Funktion Wx_GetDBKeyArrUC() Ermitteln Gruppe von Unicode Schlüssel-Werten Parameter Rückgabe-Wert: Feldgruppe mit 100 Elementen für Unicode-Schlüssel-Werte Relative Satz-Nr. oder eindeutige Id als Unicode-Wert POutNbrRows: Anzahl der ausgewählten Zeilen Optionaler Parameter Beispiel für den Aufruf D ArrDBKey S Like(FldRef.UCVar) Dim(RefElemCGI) D NbrRows S 10U 0 D Index S 10U 0 *----------------------------------------------------------------------------/Free //1. Ermitteln Unicode Schlüssel-Wert – Anzahl Zeilen nicht ausgegeben ArrDBKey = Wx_GetDBKeyArrUC(); //2. Ermitteln Unicode Schlüssel-Wert – Anzahl Zeilen wird ausgegeben ArrDBKey = Wx_GetDBKeyArrUC(); IF NbrRows > *Zeros; For Index = 1 to NbrRows; B EN UT ZERHA ND BUC H 112 Chain ArrDBKey(Index)MyFileF; If %Found(MyFileF) //Verarbeitung EndIf; EndFor; EndIf; /End-Free Source Code 102: Funktion Wx_GetDBKeyUC() - Ermitteln Gruppe von Unicode-Schlüssel-Werten 4.12.9 Wx_GetDBKeyFldChar() Zusammengesetzte Schlüssel Mit der Funktion Wx_GetDBKeyFld() können zusammengesetzte Schlüssel empfangen werden. Die einzelnen Schlüssel-Werte werden als alphanumerische Feldgruppen-Elemente ausgegeben. Die Konvertierung in den für einen Zugriff über Chain erforderlichen Datentypen muss im Change-Programm (z.B. über MOVE oder entsprechende Built-In-Funktionen) erfolgen. Die Feldgruppen-Elemente werden in der gleichen Reihenfolge ausgegeben, in der die SchlüsselSpalten in dem vorgelagerten Work-Programm (über Funktion Wx_WrkCompKey) angegeben wurden. Der Aufruf ist z.B. erforderlich, wenn ein Datensatz im Änderungsmodus bearbeitet oder angezeigt werden sollt. Basierend auf den zurückgelieferten Informationen (1-n Schlüssel-Werte) kann der Datensatz z.B. mit dem RPG OpCode CHAIN eingelesen werden. Prototype *************************************************************************** P* Procedure name: Wx_GetDBKeyFldChar P* Purpose: Get Single Character File/Table Key from Session Information P* Returns: Character File/Table Key P* Key Fields are returned as character array elements P* Parameters: POutNbrKeys => Number of Elements (= Keys) --> Optional *************************************************************************** D Wx_GetDBKeyFldChar... D PR Like(FldRef.TextVar) OpDesc D Dim(RefElemCGI) D POutNbrKeys 10U 0 Options(*NoPass) Source Code 103: Funktion Wx_GetDBKeyFldChar() Ermitteln zusammengesetzten Schlüssel (Werte) Parameter Rückgabe-Wert Feldgruppe mit bis zu 100 alphanumerischen Elementen/Schlüssel-Werten. POutNbrKeys Anzahl Schlüssel-Felder Optionaler Parameter Beispiel für den Aufruf B EN UT ZERHA ND BUC H 113 D MyKeyArr S Like(FldRef.TextVar) D Dim(RefElemCGI) D NbrKeys S 10U 0 *----------------------------------------------------------------------------/Free //1. Ermitteln zusammenges. Schlüssel – Anz- Schlüssel-Felder nicht ausgegeben MyKeyArr = Wx_GetDBKeyFldChar(); //2. Ermitteln zusammengesetzten Schlüssel – Anzahl Schl.-Felder ausgegeben MyKeyArr = Wx_GetDBKeyFldChar(NbrKeys); Chain (MyKeyArr(1): %Dec(MyKeyArr(2): 11: 2): Date(MyKeyArr(3)) MyFileF; If %Found(MyFileP) //Verarbeitung EndIf; /End-Free Source Code 104: Funktion Wx_GetComDBKeyChar() - Ermitteln zusammengesetzte Schlüssel (Werte) 4.12.10 Wx_GetDBKeyFldArrChar() zusammengesetzten Schlüsseln Gruppe von Mit der Funktion Wx_GetDBKeyFldArrChar() kann eine Gruppe von zusammengesetzten Schlüsseln ermittelt werden. Der Aufruf ist erforderlich, wenn bei Mehrfach-Auswahl alle ausgewählten Datensätze mit einem zusammengesetzten Schlüssel verarbeitet werden müssen. Die einzelnen zusammengesetzten Schlüssel-Werte werden als alphanumerische Feldgruppen-Elemente ausgegeben. Aktuell kann ein zusammengesetzter Schlüssel aus bis zu 100 Schlüssel-Feldern/Werten bestehen. Die Konvertierung in den für einen Zugriff über Chain erforderlichen Datentypen muss im Change-Programm (z.B. über MOVE oder entsprechende Built-In-Funktionen) erfolgen. Die einzelnen Feldgruppen werden wiederum als Datenstruktur-Unterfelder einer Array-Datenstruktur (gleicher Aufbau wie Mehrfach-Datenstruktur) ausgegeben. Aktuell kann die Array-Datenstruktur 100 verschiedene Dimensionen/Elemente haben, d.h. sie kann 100 Feldgruppen mit zusammengesetzten Schlüsseln aufnehmen. Prototype *************************************************************************** P* Procedure name: Wx_GetDBKeyFldArrChar P* Purpose: Get Array of Single Byte Character compound File/Table Key P* Returns: Character File/Table Keys P* Rows/Records are returned as dimension of the Array Data P* Character Key Fields are returned as subfield array element P* Parameters: POutNbrRows => Number of Elements (= Rows) --> Optional P* Parameters: POutNbrKeys => Number of Elements (= Keys) --> Optional *************************************************************************** D Wx_GetDBKeyFldArrChar... D PR LikeDS(RefArrDSWXCompKeys) OpDesc D Dim(RefElemCGI) B EN UT ZERHA ND BUC H 114 D D POutNbrRows POutNbrKeys Source Code 105: Funktion Wx_GetDBKeyArrUC() 10U 0 Options(*NoPass) 10U 0 Options(*NoPass) Ermitteln Gruppe von zusammengesetzten Schlüssel-Werten Parameter Rückgabe-Wert: Array-Datenstruktur mit 100 Elementen In den einzelnen Elementen ist eine Feldgruppe für die alphanumerischen SchlüsselWerte mit ebenfalls 100 Elementen definiert. Die Konvertierung der Schlüssel-Werte in die erwarteten Datentypen muss im Programm erfolgen. POutNbrRows: Anzahl der ausgewählten Zeilen Optionaler Parameter POutNbrKeys: Anzahl der zusammengesetzten Schlüssel-Felder Optionaler Parameter Beispiel für den Aufruf D ArrDSDBKey S LikeDS(RefArrDSWXCompKeys) D Dim(RefElemCGI) D NbrRows S 10U 0 D NbrKeys S 10U 0 D Index S 10U 0 *----------------------------------------------------------------------------/Free //1. Ermitteln Array Datenstruktur der ausgewählten Sätze // Weder Anzahl Zeilen noch Anzahl Keys ausgegeben ArrDSDBKey = Wx_GetDCompBKeyArrChar(); //2. Ermitteln Array Datenstruktur der ausgewählten Sätze // Anzahl Zeilen ausgegeben ArrDSDBKey = Wx_GetDCompBKeyArrChar(NbrRows); //3. Ermitteln Array Datenstruktur der ausgewählten Sätze // Anzahl Zeilen und Anzahl Schlüssel-Werte ausgegeben ArrDSDBKey = Wx_GetDCompBKeyArrChar(NbrRows: NbrKeys); For Index = 1 to NbrRows; Chain (ArrDSDBKey(Index).ArrKeys(1): %Dec(ArrDSDBKey(Index).ArrKeys2: 15: 3): %Date(ArrDSDBKey(Index).ArrDate: *YMD)) MyFileF; If %Found(MyFileP) //Verarbeitung EndIf; EndFor; /End-Free Source Code 106: Funktion Wx_GetDBKeyUC() - Ermitteln Gruppe von Unicode-Schlüssel-Werten 4.13 Ermitteln und Setzen von Parameter-Werten CGI-Programme werden vom Browser aufgerufen und haben keine Parameter(-Liste). Mit WOPiXX können jedoch bis zu 5 alphanumerische allgemeine (Parameter-)Werte gesetzt und an das FolgeProgramm übergeben werden. B EN UT ZERHA ND BUC H 115 Das Setzen und Ermitteln der Parameter-Werte erfolgt über entsprechende Prozedur-Aufrufe. Die Parameter-Werte können entweder einzeln oder blockweise (mit Hilfe einer Feldgruppe gesetzt bzw. ermittelt werden. Das Setzen der Parameter-Werte sollte am Besten unmittelbar vor der Ausgabe des HTML-Dokuments erfolgen. Anstatt die SET-Funktionen vor Ausgabe des HTML-Dokuments aufzurufen, können, sofern erforderlich die Parameter-Werte auch direkt beim Aufruf der Prozeduren Wx_WrtChgTbl() übergeben werden. Bei Verwendung der SET-Funktionen können die einzelnen Parameter (bzw. deren Werte) gezielt gesetzt werden, z.B. nur der 3. Parameter. Soll bei Aufruf der Funktionen Wx_WrtWrkTbl() oder Wx_WrtChgTbl() nur der 3. Parameter gesetzt werden, müssen Parameter-Wert 1 und 2 leer übergeben werden. Das Ermitteln der eingehenden Parameter sollte am Besten unmittelbar nach Aufruf des (Folge)Programms erfolgen. Der Nachteil bei Verwendung der allgemeinen Parameter ist, dass die Parameter 1-5 von unterschieldichen Programmen unterscheidlich belegt werden können. Erfolgt z.B. der Aufruf eines Programms aus Programm x wird in Parm1 der Mandant übergeben. Erfolgt der Aufruf aus Programm y wird im Parm 1 die Bestell-Nr. übergeben. Aus diesem Grund gibt es eine weitere Möglichkeit der Parameterübergabe in Form von benannten Parametern. Der Paramter erhält einen Namen und wird einmalig für die Session gespeichert, d.h. auf diese speziellen Parameter kann aus allen Programmen, die unter der gleichen Session-Nr. laufen zugegriffen werden. Durch entsprechende Namenskonventionen kann sichergestellt werden, dass die gewünschten Parameter-Werte auch in den aufgerufenen Programmen korrekt empfangen und auch gesetzt werden können. Das Setzen und Ermitteln der benannten Parameter-(Werte) erfolgt durch den Aufruf von WOPiXXProzeduren. 4.13.1 Allgemeine Parameter Prozeduren zum Setzen der Parameter-Werte Wx_SetParmChar Setzen einzelnen alphanumerischen Parameter-Wert Wx_SetParmArrChar Setzen von mehreren alphanumerischen Parameter-Werten Wx_SetParmUC Setzen von einzelnen Unicode-Parameter-Werten Wx_SetParmArrUC Setzen von mehreren Unicode-Parameter-Werten Prozeduren zum Empfangen der Parameter-Werte Wx_GetParmChar Einzelnen alphanumerischen Parameter-Wert empfangen Wx_GetParmArrChar Mehrere alphanumerischen Parameter-Werte empfangen B EN UT ZERHA ND BUC H 116 Wx_GetParmUC Einzelnen Unicode-Parameter-Wert empfangen Wx_GetParmArrUC Mehrere Unicode-Parameter-Werte empfangen 4.13.1.1 Wx_SetParmChar() Setzen Parameter Einzelne alphanumerische Parameter-Werte können über die Prozedur Wx_SetParmChar() gesetzt werden. Die numerische Position des Parameters sowie der alphanumerische Parameter-Wert müssen übergeben werden. Prototype *************************************************************************** P* Procedure name: Wx_SetParmChar P* Purpose: Store a Character Parameter P* = Parameter No between 1 and 5 allowed P* Returns: P* Parameters: ParNO => Parameter-No P* Parameters: ParValue => Character Parameter Value *************************************************************************** D Wx_SetParmChar... D PR OpDesc D ParNo 3U 0 Const D ParValue Like(FldRefcGI.DftVAlue) Const Source Code 107 : Prototype - Prozedur Wx_SetParmChar() - Alphanumerischen Parameter-Wert setzen Parameter ParNo ParValue Parameter-Position z.Z. 1 5 zulässig Alphanumerischer Parameter-Wert Numerische Werte oder Datums- und Zeit-Werte müssen mit Hilfe der Built-InFunktion %CHAR() in alphanumerische Werte konvertiert werden. Unicode-Werte werden ab Release 7.1 automatisch konvertiert. Vor Release 7.1 müssen Unicode-Werte ebenfalls mit Hilfe der Built-in-Funktion %CHAR() konvertiert werden. Beispiel für den Aufruf Wx_SetParmChar(1: ArtikelBez); Wx_SetParmChar(3: %Char(Umsatz * MWST)); Source Code 108: Aufruf Prozedur Wx_SetParmChar() - Alphanumerischen Parameter-Wert setzen 4.13.1.2 Wx_SetParmArrChar() Setzen mehrere Parameter Mehrere alphanumerische Parameter-Werte können mit Hilfe einer Feldgruppe mit RefElemParm (aktuell 5) Elementen über die Prozedur Wx_SetParmArrChar() gesetzt werden. In der Feldgruppe müssen lediglich die Parameter-Werte angegeben werden. Die Position entspricht dem Feldgruppen-Index. B EN UT ZERHA ND BUC H 117 Prototype *************************************************************************** P* Procedure name: Wx_SetParmArrChar P* Purpose: Store all Character Parameter (Passed as Character Array) P* Returns: P* Parameters: ParArrValue = Array with all Parameter Values *************************************************************************** D Wx_SetParmArrChar... D PR OpDesc D ParArrValue Like(FldRefCGI.DftValue) Const D Dim(RefElemParm) Source Code 109 : Prototype - Prozedur Wx_SetParmArrChar() - Alphanumerische Parameter-Werte setzen Parameter ParArrValue Feldgruppe mit RefElemParm (aktuell 5) Elementen Parameter-Werte werden als Element-Werte übergeben Numerische Werte oder Datums- und Zeit-Werte müssen mit Hilfe der Built-InFunktion %CHAR() in alphanumerische Werte konvertiert werden. Unicode-Werte werden ab Release 7.1 automatisch konvertiert. Vor Release 7.1 müssen Unicode-Werte ebenfalls mit Hilfe der Built-in-Funktion %CHAR() konvertiert werden. Beispiel für den Aufruf D MyArrParm S Like(FldRef.TextVar) D Dim(RefElemParm) *-------------------------------------------------------------------------------/Free MyArrParm(1) = ArtikelBez; MyArrParm(2) = %Char(Umsatz * MWST)); Wx_SetParmArrChar(MyArrParm)); /End-Free Source Code 110: Aufruf Prozedur Wx_SetParmArrChar() - Alphanumerische Parameter-Werte setzen 4.13.1.3 Wx_SetParmUC() Setzen Unicode-Parameter Einzelne Unicode-Parameter-Werte können über die Prozedur Wx_SetParmUC() gesetzt werden. Die numerische Position des Parameters, sowie der Unicode-Parameter-Wert müssen übergeben werden. Prototype *************************************************************************** P* Procedure name: Wx_SetParmUC P* Purpose: Store a Unicode Parameter P* = Parameter No between 1 and 5 allowed P* Returns: P* Parameters: ParNO => Parameter-No P* Parameters: ParValue => Unicode Parameter Value *************************************************************************** D Wx_SetParmUC... D PR OpDesc B EN UT ZERHA ND BUC H 118 D D ParNo ParValue 3U 0 Like(FldRefCGIUC.DftValue) Source Code 111 : Prototype - Prozedur Wx_SetParmUC() Parameter ParNo ParValue Const Const Unicode-Parameter-Wert setzen Parameter-Position z.Z. 1 5 zulässig Unicode-Parameter-Wert Numerische Werte oder Datums- und Zeit-Werte müssen mit Hilfe der Built-InFunktionen %CHAR() und %UCS2() in Unicode-Werte konvertiert werden. Alphanumerische Werte werden ab Release 7.1 automatisch konvertiert. Vor Release 7.1 müssen alphanumerische Werte mit Hilfe der Built-in-Funktion %UCS2() konvertiert werden. Beispiel für den Aufruf Wx_SetParmUC(1: ArtikelBez); Wx_SetParmUC(2: %UCS2(KundeName)); Wx_SetParmUC(3: %UCS2(%Char(Umsatz * MWST))); Source Code 112: Aufruf Prozedur Wx_SetParmUC() Unicode-Parameter-Wert setzen 4.13.1.4 Wx_SetParmArrUC() meter Setzen mehrere Unicode- Para- Mehrere Unicode-Parameter-Werte können mit Hilfe einer Feldgruppe mit RefElemParm (aktuell 5) Elementen über die Prozedur Wx_SetParmArrUC() gesetzt werden. In der Feldgruppe müssen lediglich die Parameter-Werte angegeben werden. Die Position entspricht dem Feldgruppen-Index. Prototype *************************************************************************** P* Procedure name: Wx_SetParmArrUC P* Purpose: Store all Unicode Parameter (Passed as Unicode Array) P* Returns: P* Parameters: ParArrValue = Array with all Parameter Values *************************************************************************** D Wx_SetParmArrUC... D PR OpDesc D ParArrValue Like(FldRefCGIUC.DftValue) Const D Dim(RefElemParm) Source Code 113 : Prototype - Prozedur Wx_SetParmArrUC() Unicode-Parameter-Werte setzen Parameter ParArrValue Feldgruppe mit RefElemParm (aktuell 5) Elementen Parameter-Werte werden als Element-Werte übergeben Numerische Werte oder Datums- und Zeit-Werte müssen mit Hilfe der Built-InFunktionen %UCS2() und %CHAR() in Unicode-Werte konvertiert werden. B EN UT ZERHA ND BUC H 119 Alphanumerische Werte werden ab Release 7.1 automatisch konvertiert. Vor Release 7.1 müssen alphanumerische Werte mit Hilfe der Built-in-Funktion %UCS2() konvertiert werden. Beispiel für den Aufruf D MyArrParm S Like(FldRef.UCVar) D Dim(RefElemParm) *-------------------------------------------------------------------------------/Free MyArrParm(1) = ArtikelBez; MyArrParm(2) = %UCS2(KundeName); MyArrParm(2) = %UCS2(%Char(Umsatz * MWST))); Wx_SetParmArrUC(MyArrParm)); /End-Free Source Code 114: Aufruf Prozedur Wx_SetParmUC() Unicode-Parameter-Werte setzen 4.13.1.5 Wx_GetParmChar() Ermitteln Parameter-Wert Einzelne alphanumerische Parameter-Werte können über die Prozedur Wx_GetParmChar() ermittelt werden. Die numerische Position des Parameters muss übergeben werden. Der alphanumerische ParameterWert wird als Rückgabe-Wert ausgegeben Prototype *************************************************************************** P* Procedure name: Wx_GetParmChar P* Purpose: Get Character Value for a specified Parameter P* = Parameter No between 1 and 5 allowed P* Returns: Character Value for the specified parameter P* Parameters: *************************************************************************** D Wx_GetParmChar... D PR Like(FldRef.TextVar) OpDesc D ParNo 3U 0 Const Source Code 115 : Prototype - Prozedur Wx_GetParmChar() - Alphanumerischen Parameter-Wert ermitteln Parameter Rückgabe-Wert Alphanumerischer Parameter-Wert ParNo Parameter-Position z.Z. 1 5 zulässig Beispiel für den Aufruf MyCharVar = Wx_GetParmChar(1); MyNextVar = Wx_GetParmChar(2); Source Code 116: Aufruf Prozedur Wx_GetParmChar() - Alphanumerischen Parameter-Wert ermitteln B EN UT ZERHA ND BUC H 120 4.13.1.6 Wx_GetParmArrChar() rische Parameter Ermitteln mehrere alphanume- Mehrere alphanumerische Parameter-Werte können mit Hilfe einer Feldgruppe mit RefElemParm (aktuell 5) Elementen über die Prozedur Wx_GetParmArrChar() gesetzt werden. In der Feldgruppe müssen lediglich die Parameter-Werte angegeben werden. Die Position entspricht dem Feldgruppen-Index. Prototype *************************************************************************** P* Procedure name: Wx_GetParmArrChar P* Purpose: Get Character Array for all parameter Values P* = Currently 5 Parameters are allowed P* Returns: Array Parameter Character Values P* Parameters: *************************************************************************** D Wx_GetParmArrChar... D PR Like(FldRef.TextVar) OpDesc D Dim(RefElemParm) Source Code 117 : Prototype - Prozedur Wx_GetParmArrChar() - Alphanumerische Parameter-Werte ermitteln Parameter Rückgabe-Wert Feldgruppe mit RefElemParm (aktuell 5) Elementen Beispiel für den Aufruf D MyArrParm S Like(FldRef.TextVar) D Dim(RefElemParm) *-------------------------------------------------------------------------------/Free MyArrParm = Wx_GetParmArrChar(); /End-Free Source Code 118: Aufruf Prozedur Wx_GetParmArrChar() - Alphanumerische Parameter-Werte ermitteln 4.13.1.7 Wx_GetParmUC() Ermitteln Unicode-Para-meter-Wert Einzelne Unicode-Parameter-Werte können über die Prozedur Wx_GetParmUC() ermittelt werden. Die numerische Position des Parameters muss übergeben werden. Der Unicode-Parameter-Wert wird als Rückgabe-Wert ausgegeben Prototype *************************************************************************** P* Procedure name: Wx_GetParmUC P* Purpose: Get Unicode Value for a specified Parameter P* = Parameter No between 1 and 5 allowed P* Returns: Unicode Value for the specified parameter P* Parameters: B EN UT ZERHA ND BUC H 121 *************************************************************************** D Wx_GetParmUC... D PR Like(FldRef.UCVar) OpDesc D ParNo 3U 0 Const Source Code 119 : Prototype - Prozedur Wx_GetParmUC() Unicode-Parameter-Wert ermitteln Parameter Rückgabe-Wert Unicode-Parameter-Wert ParNo Parameter-Position z.Z. 1 5 zulässig Beispiel für den Aufruf MyCharVar = Wx_GetParmUC(1); MyNextVar = Wx_GetParmUC(2); Source Code 120: Aufruf Prozedur Wx_GetParmUC() Unicode-Parameter-Wert ermitteln 4.13.1.8 Wx_GetParmArrUC() Parameter-Werte Ermitteln mehrere Unicode- Mehrere Unicode-Parameter-Werte können mit Hilfe einer Feldgruppe mit RefElemParm (aktuell 5) Elementen über die Prozedur Wx_GetParmArrUC() gesetzt werden. In der Feldgruppe müssen lediglich die Parameter-Werte angegeben werden. Die Position entspricht dem Feldgruppen-Index. Prototype *************************************************************************** P* Procedure name: Wx_GetParmArrUC P* Purpose: Get Unicode Array for all parameter Values P* = Currently 5 Parameters are allowed P* Returns: Array Parameter Unicode Values P* Parameters: *************************************************************************** D Wx_GetParmArrUC... D PR Like(FldRef.UCVar) OpDesc D Dim(RefElemParm) Source Code 121 : Prototype - Prozedur Wx_GetParmArrUC() Unicode-Parameter-Werte ermitteln Parameter Rückgabe-Wert Unicode-Feldgruppe mit RefElemParm (aktuell 5) Elementen Beispiel für den Aufruf D MyArrParm S Like(FldRef.TextVar) D Dim(RefElemParm) *-------------------------------------------------------------------------------/Free B EN UT ZERHA ND BUC H 122 MyArrParm = Wx_GetParmArrUC(); /End-Free Source Code 122: Aufruf Prozedur Wx_GetParmArrUC() Unicode-Parameter-Werte ermitteln 4.13.2 Benannte Parameter Bei benannten Parametern muss der Parameter-Name sowie der Parmeter-Wert im gewünschten Format übergeben werden. Der Parameter-Name kann in jeder beliebigen Groß/Klein-Schreibweise übergeben werden. Intern wird der Name in Großbuchstaben konvertiert. Sofern beim Setzen des Parameter-Wertes für die Session bereits ein Parameter mit dem gleichen Namen gesetzt ist, wird der Paramter-Wert überschrieben. Sofern beim empfangen des Parameter kein Parameter mit dem gewünschten Namen gefunden wurde, erfolgt kein Abbruch. Stattdessen wird der Default-Wert für den entsprechenden Datentypen ausgegeben. Prozeduren zum Setzen der benannten Parameter-Werte Wx_SetNamedParm Setzen eines benannten alphanumerischen Parameters Wx_SetNamedParmUC Setzen eines benannten Unicode Parameters Wx_SetNamedParmDec Setzen eines benannten numerischen Parameters mit Dezimal-Positionen Wx_SetNamedParmInt Setzen eines benannten ganzzahligen Parmeters Wx_SetNamedParmDate Setzen eines benannten Datums-Parameters Wx_SetNamedParmTime Setzen eines benannten Zeit-Parmeters Wx_SetNamedParmTimestamp Setzen eines benannten Zeitmarken-Parameters Prozeduren zum Empfangen der benannten Parameter-Werte Wx_GetNamedParmUC Unicode-Wert eines benannten Parameters empfangen Wx_GetNamedParm Alphanumerischen Wert eines benannten Parameters empfangen Wx_GetNamedParmDec Numerischen Wert mit Dezimal-Positionen empfangen Wx_GetNamedParmInt Ganzzahligen numerischen Wert eines benannten Parameters empfangen Wx_GetNamedParmDate Datumswert eines benannten Parameters empfangen Wx_GetNamedParmTime Zeitwert eines benannten Parameters empfangen Wx_GetNamedParmTimestamp Zeitmarken-Wert eines benannten Paramters empfangen 4.13.2.1 Wx_SetNamedParm() rameter Setzen alphanumerischen Pa- Benannte alphanumerische Parameter-Werte können über die Prozedur Wx_SetNamedParm() gesetzt werden. Der Name sowie der zu sichernde Wert des benannten Parameters müssen übergeben werden. Der Name kann in beliebiger Groß/Kleinschreibung übergeben werden B EN UT ZERHA ND BUC H 123 Prototype ********************************************************************************** ************ // Procedure name: Wx_SetNamedParm // Purpose: Save Named Parameters - Parameter value in single byte chars // --> Parameters passed with *Blanks are NOT saved // Returns: // Parameter: ParParName => Parameter Name // Parameter: ParValue => Value ********************************************************************************** D Wx_SetNamedParm... D PR OpDesc D ParName Like(FldRef.UrlLbl) Const D Options(*Trim) D ParValue Like(FldRef.TextVar) Const Source Code 123 : Prototype - Prozedur Wx_SetNamedParmC() - Alphanumerischen Parameter-Wert setzen Parameter ParName ParValue Paramter Name Alphanumerischer Parameter-Wert Beispiel für den Aufruf Wx_SetNamedParm('My1ArtNr' : ArtNr); Wx_SetNamedParm('MyKndName': KundeName)); Source Code 124: Aufruf Prozedur Wx_SetNamedParm - Alphanumerischen Parameter-Wert setzen 4.13.2.2 Wx_SetNamedParmUC() Setzen Unicode-Parameter Benannte Unicode-Parameter-Werte können über die Prozedur Wx_SetNamedParmUC() gesetzt werden. Der Name sowie der zu sichernde Wert des benannten Parameters müssen übergeben werden. Der Name kann in beliebiger Groß/Kleinschreibung übergeben werden Prototype ********************************************************************************** // Procedure name: Wx_SetNamedParmUC // Purpose: Save Named Parameters - Value in Double Byte Char.Set Unicode // --> Parameters passed with *Blanks are NOT saved // Returns: // Parameter: ParParName => Parameter Name // Parameter: ParValue => Value ********************************************************************************** D Wx_SetNamedParmUC... D PR OpDesc D ParName Like(FldRef.UrlLbl) Const D Options(*Trim) D ParValue Like(FldRef.UCVar) Const Source Code 125 : Prototype - Prozedur Wx_SetNamedParmUC() Unicode-Parameter-Wert setzen B EN UT ZERHA ND BUC H 124 Parameter ParName ParValue Parameter-Name Unicode-Parameter-Wert Beispiel für den Aufruf Wx_SetNamedParmUC('MyKndName': Kndame); Wx_SetNamedParmUC('MyAddress': %Trim(Strasse) + ' ' + %Trim(HausNr)); Wx_SetNamedParmUC('MyACity': %UCS2(PLZ) + ' ' + %Trim(Ort))); Source Code 126: Aufruf Prozedur Wx_SetNamedParmUC() Unicode-Parameter-Wert setzen 4.13.2.3 Wx_SetNamedParmDec() Setzen numerischen Parameter mit Dezimal-Positionen Benannte numerische Parameter-Werte Wx_SetNamedParmDec() gesetzt werden. mit Dezimal-Positionen können über die Prozedur Der Name sowie der zu sichernde Wert des benannten Parameters müssen übergeben werden. Der Name kann in beliebiger Groß/Kleinschreibung übergeben werden Prototype ********************************************************************************** // Procedure name: Wx_SetNamedParmDec // Purpose: Save Named Parameters - Parameter as Packed/Zoned num. value // --> Parameters passed with *Zeros are saved with Zero Value // Returns: // Parameter: ParParName => Parameter Name // Parameter: ParValue => Value ********************************************************************************** D Wx_SetNamedParmDec... D PR OpDesc D ParName Like(FldRef.UrlLbl) Const D Options(*Trim) D ParValue Like(FldRef.DftDec) Const Source Code 127 : Prototype - Prozedur Wx_SetNamedParmUC() Parameter ParName ParValue Unicode-Parameter-Wert setzen Parameter-Name Numerischer Wert ohne oder mit bis zu 9 Dezima-Positionen Beispiel für den Aufruf Wx_SetNamedParmDec('MyPreis': Preis); Wx_SetNamedParmDec('MyTotal' : Menge * Preis); Wx_SetNamedParmDec('MyMWST' : Total * VAT); Source Code 128: Aufruf Prozedur Wx_SetNamedParmDec() numeriischenParameter-Wert mit Dezimal-Stellen setzen B EN UT ZERHA ND BUC H 125 4.13.2.4 Wx_SetNamedParmInt() schen Parameter Setzen ganzzahligen numeri- Benannte ganzzahlige numerische Parameter-Werte können über die Prozedur Wx_SetNamedParmInt() gesetzt werden. Der Name sowie der zu sichernde Wert des benannten Parameters müssen übergeben werden. Der Name kann in beliebiger Groß/Kleinschreibung übergeben werden Prototype ********************************************************************************** // Procedure name: Wx_SetNamedParmInt // Purpose: Save Named Parameters - Parameter as integer value // --> Parameters passed with *Zeros are saved with Zero Value // Returns: // Parameter: ParParName => Parameter Name // Parameter: ParValue => Value ********************************************************************************** D Wx_SetNamedParmInt... D PR OpDesc D ParName Like(FldRef.UrlLbl) Const D Options(*Trim) D ParValue 20I 0 Const Source Code 129 : Prototype - Prozedur Wx_SetNamedParmInt() Parameter ParName ParValue ganzzahligen Parameter-Wert setzen Parameter-Name Ganzzahliger numerischer Wert Beispiel für den Aufruf Wx_SetNamedParmInt('MyAnzAnw': AnzAnwesend); Wx_SetNamedParmInt('MyAnzTeilN' : AnzTeiln); Wx_SetNamedParmInt('MyAnzSonst' : AnzAnwesend - AnzTeiln); Source Code 130: Aufruf Prozedur Wx_SetNamedParmInt() Ganzzahligen Parameter-Wert setzen 4.13.2.5 Wx_SetNamedParmDate() Setzen Datums-Parameter Benannte Datums-Parameter-Werte können über die Prozedur Wx_SetNamedParmDate() gesetzt werden. Der Name sowie der zu sichernde Wert des benannten Parameters müssen übergeben werden. Der Name kann in beliebiger Groß/Kleinschreibung übergeben werden Prototype ********************************************************************************** B EN UT ZERHA ND BUC H 126 // Procedure name: Wx_SetNamedParmDate // Purpose: Save Named Parameters - Parameter value as Date value // --> Dates are saved in the *ISO Format (YYYY-MM-DD) // Returns: // Parameter: ParParName => Parameter Name // Parameter: ParValue => Value ********************************************************************************** D Wx_SetNamedParmDate... D PR OpDesc D ParName Like(FldRef.UrlLbl) Const D Options(*Trim) D ParValue D DatFmt(*ISO) Const Source Code 131 : Prototype - Prozedur Wx_SetNamedParmIDate() Parameter ParName ParValue Datums-Parameter-Wert setzen Parameter-Name Datums-Wert Beispiel für den Aufruf Wx_SetNamedParmDate('MyBestDat': Wx_SetNamedParmDate('MyMHD' : Wx_SetNamedParmDate('MyHVD' : AKBESTDAT); %Date() + %Days(30)); MHD - %(Days(5)); Source Code 132: Aufruf Prozedur Wx_SetNamedParmDate() Datums-Parameter-Wert setzen 4.13.2.6 Wx_SetNamedParmTime() Setzen Zeit-Parameter Benannte Zeit-Parameter-Werte können über die Prozedur Wx_SetNamedParmTime() gesetzt werden. Der Name sowie der zu sichernde Wert des benannten Parameters müssen übergeben werden. Der Name kann in beliebiger Groß/Kleinschreibung übergeben werden Prototype ********************************************************************************** // Procedure name: Wx_SetNamedParmTime // Purpose: Save Named Parameters - Parameter value as time value // --> Dates are saved in the *ISO Format (HH.MM.SS) // Returns: // Parameter: ParParName => Parameter Name // Parameter: ParValue => Value ********************************************************************************** D Wx_SetNamedParmTime... D PR OpDesc D ParName Like(FldRef.UrlLbl) Const D Options(*Trim) D ParValue T TimFmt(*ISO) Const Source Code 133 : Prototype - Prozedur Wx_SetNamedParmITime() Parameter ParName ParValue Parameter-Name Zeit-Wert Zeit-Parameter-Wert setzen B EN UT ZERHA ND BUC H 127 Beispiel für den Aufruf Wx_SetNamedParmTime('MyStrTim': Wx_SetNamedParmTime('MySchichtBeg': Wx_SetNamedParmTime('MyPause' : StartZeit); T’06.00.00’); SchichtBeg + %Hours(3)); Source Code 134: Aufruf Prozedur Wx_SetNamedParmTimestamp() Zeitmarken-Parameter-Wert setzen 4.13.2.7 Wx_SetNamedParmTimestamp() Parameter Setzen Zeitmarken- Benannte Zeitmarken-Parameter-Werte können über die Prozedur Wx_SetNamedParmTimestamp() gesetzt werden. Der Name sowie der zu sichernde Wert des benannten Parameters müssen übergeben werden. Der Name kann in beliebiger Groß/Kleinschreibung übergeben werden Prototype ********************************************************************************** // Procedure name: Wx_SetNamedParmTimestamp // Purpose: Save Named Parameters - Parameter value as timestamp value // Returns: // Parameter: ParParName => Parameter Name // Parameter: ParValue => Value ********************************************************************************** D Wx_SetNamedParmTimestamp... D PR OpDesc D ParName Like(FldRef.UrlLbl) Const D Options(*Trim) D ParValue Z Const Source Code 135 : Prototype - Prozedur Wx_SetNamedParmITimestamp() Parameter ParName ParValue Zeitmarken-Parameter-Wert setzen Parameter-Name Zeitmarken-Wert Beispiel für den Aufruf Wx_SetNamedParmInt('MyStart': Wx_SetNamedParmInt('MySchichtBeg': Wx_SetNamedParmInt('MyPause' : %Timestamp); %Date() + T’06.00.00’); SchichtBeg + %Hours(3)); Source Code 136: Aufruf Prozedur Wx_SetNamedParmZeit() Zeit-Parameter-Wert setzen B EN UT ZERHA ND BUC H 128 4.13.2.8 Wx_GetNamedParm() Ermitteln benannten alphanumerischen Parameter-Wert Einzelne alphanumerische Parameter-Werte für benannte Parameter können über die Prozedur Wx_GetNamedParm() ermittelt werden. Der Name des benannten Parameters muss übergeben werden. Der Name kann in beliebiger Groß/Kleinschreibung übergeben werden. Prototype ********************************************************************************** // Procedure name: Wx_GetNamedParm // Purpose: Retrieve the character value for the named parameter in SBCS // Not Found --> Return '' // Returns: Parameter value as Character value // Parameter: ParParName => Parameter Name ********************************************************************************** D Wx_GetNamedParm... D PR Like(FldRef.TextVar) OpDesc D ParName Like(FldRef.UrlLbl) Const D Options(*Trim) Source Code 137 : Prototype - Prozedur Wx_GetNamedParm() Alphanumerischen benannten Parameter-Wert ermitteln Parameter Rückgabe-Wert Alphanumerischer Parameter-Wert ParName Name unter dem der Parameter-Wert gespeichert wurde Beispiel für den Aufruf ParArtNr = Wx_GetNamedParm('My1ArtNr'); ParName = Wx_GetNamedParm('KundeName'); Source Code 138: Aufruf Prozedur Wx_GetNamedParm() - Alphanumerischen Parameter-Wert ermitteln 4.13.2.9 Wx_GetNamedParmUC() meter-Wert in Unicode Ermitteln benannten Para- Einzelne Parameter-Werte in Unicode für benannte Parameter können über die Prozedur Wx_GetNamedParmUC() ermittelt werden. Der Name des benannten Parameters muss übergeben werden. Der Name kann in beliebiger Groß/Kleinschreibung übergeben werden. Prototype ********************************************************************************** // Procedure name: Wx_GetNamedParmUC // Purpose: Retrieve the value for the named parameter in DBCS Unicode B EN UT ZERHA ND BUC H 129 // Not Found --> Return '' // Returns: Return Parameter value as unicode value // Parameter: ParParName => Parameter Name ********************************************************************************** D Wx_GetNamedParmUC... D PR Like(FldRef.UCVar) OpDesc D ParName Like(FldRef.UrlLbl) Const D Options(*Trim) Source Code 139 : Prototype - Prozedur Wx_GetNamedParmUC() Unicode-Wert für benannten Parameter-Wert ermitteln Parameter Rückgabe-Wert Parameter-Wert in DBCS (Double Byte Character Set) Unicode ParName Name unter dem der Parameter-Wert gespeichert wurde Beispiel für den Aufruf LocName LocStreet LocCity = Wx_GetNamedParmUC('MyKndName'); = Wx_GetNamedParmUC('MyAddress'); = Wx_GetNamedParmUC('MyCity'); Source Code 140: Aufruf Prozedur Wx_GetNamedParmUC() - Parameter-Wert in Unicode ermitteln 4.13.2.10 Wx_GetNamedParmDec() Ermitteln benannten numerischen Parameter-Wert mit Dezimal-Positionen Einzelne numerische Parameter-Werte mit Dezimal-Positionen für benannte Parameter können über die Prozedur Wx_GetNamedParmDec() ermittelt werden. Der Name des benannten Parameters muss übergeben werden. Der Name kann in beliebiger Groß/Kleinschreibung übergeben werden. Prototype ****************************************************************************** // Procedure name: Wx_GetNamedParmDec // Purpose: Retrieve the value for the named parameter as Packed Value // Not Found --> Return *Zeros // Returns: Return Parameter value as Packed Value // Parameter: ParParName => Parameter Name ****************************************************************************** D Wx_GetNamedParmDec... D PR Like(FldRef.DftDec) OpDesc D ParName Like(FldRef.UrlLbl) Const D Options(*Trim) Source Code 141 : Prototype - Prozedur Wx_GetNamedParmDec() benannten Parameter ermitteln numerischen Parameter-Wert mit Dezimal-Positionen für Parameter Rückgabe-Wert Numerischen Parameter-Wert mit Dezimal-Positionen ParName Name unter dem der Parameter-Wert gespeichert wurde B EN UT ZERHA ND BUC H 130 Beispiel für den Aufruf LocStkPreis LocGesamt LocMWST = Wx_GetNamedParmDec('MyPreis'); = Wx_GetNamedParmDec('MyTotal'); = Wx_GetNamedParmDec('MyMwst'); Source Code 142: Aufruf Prozedur Wx_GetNamedParmDec() teln numerischen benannten Parameter mit Dezmal-Positionen ermit- 4.13.2.11 Wx_GetNamedParmInt() ganzzahligen Parameter-Wert Ermitteln benannten Einzelne ganzzahlige Parameter-Werte für benannte Parameter können über die Prozedur Wx_GetNamedParmInt() ermittelt werden. Der Name des benannten Parameters muss übergeben werden. Der Name kann in beliebiger Groß/Kleinschreibung übergeben werden. Prototype ******************************************************************************* // Procedure name: Wx_GetNamedParmInt // Purpose: Retrieve the value for the named parameter as Integer Value // Not Found --> Return *Zeros // Returns: Return Parameter value as Integer // Parameter: ParParName => Parameter Name ******************************************************************************* D Wx_GetNamedParmInt... D PR 20I 0 OpDesc D ParName Like(FldRef.UrlLbl) Const D Options(*Trim) Source Code 143 : Prototype - Prozedur Wx_GetNamedParmInt() ganzzahligen benannten Parameter-Wert ermitteln Parameter Rückgabe-Wert Ganzzahliger Parameter-Wert ParName Name unter dem der Parameter-Wert gespeichert wurde Beispiel für den Aufruf LocAnwesend = Wx_GetNamedParmInt('MyAnzAnwesen'); LocTeilnehmer = Wx_GetNamedParmInt('MyAnzTeiln'); LocSonstiges = Wx_GetNamedParmInt('MySonst'); Source Code 144: Aufruf Prozedur Wx_GetNamedParmInt() ganzzahligen benannten Parameter-Wert ermitteln B EN UT ZERHA ND BUC H 131 4.13.2.12 Wx_GetNamedParmDate() Datums-Parameter-Wert Ermitteln benannten Einzelne Datums-Parameter-Werte für benannte Wx_GetNamedParmDate() ermittelt werden. können Parameter über die Prozedur Der Name des benannten Parameters muss übergeben werden. Der Name kann in beliebiger Groß/Kleinschreibung übergeben werden. Prototype **************************************************************************** // Procedure name: Wx_GetNamedParmDate // Purpose: Retrieve the value for the named parameter as Date Value // Not Found --> Return *LoVal = '0001-01-01' // Returns: Return Parameter value as Date // Parameter: ParParName => Parameter Name **************************************************************************** D Wx_GetNamedParmDate... D PR D DatFmt(*ISO) OpDesc D ParName Like(FldRef.UrlLbl) Const D Options(*Trim) Source Code 145 : Prototype - Prozedur Wx_GetNamedParmIDate() benannten Datums-Parameter-Wert ermitteln Parameter Rückgabe-Wert Datums-Parameter-Wert ParName Name unter dem der Parameter-Wert gespeichert wurde Beispiel für den Aufruf LocBestDatum LocMHD LocHVD = Wx_GetNamedParmDate('MyBestDat'); = Wx_GetNamedParmDate('MyMHD'); = Wx_GetNamedParmDate('MyHVD'); Source Code 146: Aufruf Prozedur Wx_GetNamedParmDate() benannten Datums-Parameter-Wert ermitteln 4.13.2.13 Wx_GetNamedParmTime() Zeit-Parameter-Wert Einzelne Zeit-Parameter-Werte für benannte Wx_GetNamedParmTime() ermittelt werden. Parameter Ermitteln benannten können über die Prozedur Der Name des benannten Parameters muss übergeben werden. Der Name kann in beliebiger Groß/Kleinschreibung übergeben werden. Prototype **************************************************************************** B EN UT ZERHA ND BUC H 132 // Procedure name: Wx_GetNamedParmTime // Purpose: Retrieve the value for the named parameter as Time Value // Not Found --> Return '00.00.00' // Returns: Return Parameter value as Time // Parameter: ParParName => Parameter Name **************************************************************************** D Wx_GetNamedParmTime... D PR T TimFmt(*ISO) OpDesc D ParName Like(FldRef.UrlLbl) Const D Options(*Trim) Source Code 147 : Prototype - Prozedur Wx_GetNamedParmITime() benannten Zeit-Parameter-Wert ermitteln Parameter Rückgabe-Wert Zeit-Parameter-Wert ParName Name unter dem der Parameter-Wert gespeichert wurde Beispiel für den Aufruf LocStartZeit = Wx_GetNamedParmTime('MyStrTim'); LocSchichtBeginn = Wx_GetNamedParmTime('MySchichtBeg'); LocBeginnPause = Wx_GetNamedParmTime('MyPause'); Source Code 148: Aufruf Prozedur Wx_GetNamedParmDate() benannten Zeit-Parameter-Wert ermitteln 4.13.2.14 Wx_GetNamedParmTimestamp() nannten Zeitmarken-Parameter-Wert Ermitteln be- Einzelne Zeitmarken-Parameter-Werte für Wx_GetNamedParmTime() ermittelt werden. über benannte Parameter können die Prozedur Der Name des benannten Parameters muss übergeben werden. Der Name kann in beliebiger Groß/Kleinschreibung übergeben werden. Prototype ********************************************************************************* // Procedure name: Wx_GetNamedParmTimestamp // Purpose: Retrieve the value for the named parameter as Timestamp Value // Not Found --> Return '00.00.00' // Returns: Return Parameter value as Timestamp // Parameter: ParParName => Parameter Name ********************************************************************************* D Wx_GetNamedParmTimestamp... D PR Z OpDesc D ParName Like(FldRef.UrlLbl) Const D Options(*Trim) Source Code 149 : Prototype - Prozedur Wx_GetNamedParmITime() Parameter Rückgabe-Wert Zeitmarken-Parameter-Wert benannten Zeitmarken-Parameter-Wert ermitteln B EN UT ZERHA ND BUC H 133 ParName Name unter dem der Parameter-Wert gespeichert wurde Beispiel für den Aufruf LocStartZeitmarke = Wx_GetNamedParmTimestamp('MyStart'); LocSchichtBeginn = Wx_GetNamedParmTimestamp('MySchichtBeg'); LocBeginnPause = Wx_GetNamedParmTimestamp('MyPause'); Source Code 150: Aufruf Prozedur Wx_GetNamedParmDate() benannten Zeitmarken-Parameter-Wert ermitteln 4.14 Ermitteln/Prüfen Modi Bearbeitungs-Modi werden z.B. in Kontext-Menüs oder Buttons festgelegt. Diese Modi werden an das Folge-Programm übergeben und können dort geprüft und ermittelt werden. Abhängig von dem übergebenen Modus können im Folge-Programm unterschiedliche Aktionen initiiert werden. Die Prüfung der Standard-Modi kann über die folgenden Funktionen erfolgen: Wx_isModeAdd() Prüfen Modus Hinzufügen Wx_isModeChange() Prüfen Modus Ändern Wx_isModeCopy () Prüfen Modus Kopieren Wx_isModeDelete() Prüfen Modus Löschen Wx_isModeProperty() Prüfen Modus Anzeigen Wx_isModeWrite Prüfen() Modus Kopieren oder Hinzufügen Beliebige Modi, die in der Kontext-Menü- und Button-Definition festgelegt werden, können über die folgende Funktion geprüft werden: Wx_isMode() Prüfen beliebigen Modus Werden in Work-Programmen die Sondertsprechenden Button an das Work-Programm zurückgegeben, d.h. das Work-Programm wird erneut aufgerufen. Um festzustellen, ob das Work-Programm zu ersten Mal aufgerufen wird, oder ob ein ausgegebenes Ergebnis verarbeitet werden kann, können spezielle Modi über die folgenden Funktionen geprüft werden: Wx_isModeReseq() Wx_isModeEdtList() Der Umsortieren Button wurde in einer Worktable angeklickt String oder Feldgruppe mit den Schlüssel-Werten in der neuen Reihenfolge kann empfangen werden. Der Änderung Sichern-Button wurde in einer editierbare Worktable angeklickt Ein XML-Dokument mit den Änderungen kann empfangen werden B EN UT ZERHA ND BUC H 134 In Change-Programmen nach Klick auf einen der definierten Buttons ebenfalls der Modus abgefragt werden. Die Prüfung sollte erst nach Ausführung der Funktion Wx_GetChgInp (ähnl. OpCode EXFMT) erfolgen. Zur Prüfung und Ermittlung der Standard-Modi können die folgenden Funktionen verwendet werden: Wx_isModeSave()Prüfen Modus Sichern Wx_isModeApply() Prüfen Modus Übernehmen Wx_isModeUpdate() Prüfen Modus Sicher oder Übernehmen Alle Prüf-Funktionen entweder den Wert *ON oder *OFF zurück, je nachdem, ob der aktuelle Modus dem zu prüfenden Modus entspricht. Die Funktionen können innerhalb des individuellen CGI-Programmes mehrfach aufgerufen werden. Der Modus wird von WOPiXX einmalig ermittelt und beim nächsten Aufruf zurückgegeben. Alle Prüf-Funktionen haben einen optionalen Parameter. Wird der Parameter mit dem Wert *ON übergeben, wird der Modus erneut ermittelt, unabhängig davon ob er bereits geprüft war oder nicht. 4.14.1 Wx_isModeAdd() Modus Hinzufügen Über die Funktion Wx_isModeAdd() kann geprüft werden, ob der aktuelle Modus Hinzufügen ist. Prototype *************************************************************************** P* Procedure name: Wx_isModeAdd P* Purpose: Check Current Mode --> Return True if Action is ADD P* Returns: True/*ON = Action is ADD / False/*Off any other Action P* Parameters: ParRtv => Retr. Mode in either way (even if already stored) *************************************************************************** D Wx_isModeAdd... D PR N OpDesc D ParRtv N Options(*NoPass) Const Source Code 151: Prototype - Funktion Wx_isModeAdd() - Prüfen Modus Hinzufügen Parameter Rückgabe-Wert *ON = Modus Hinzufügen *OFF = Anderer Modus ParRtv *ON = Modus erneut prüfen/ermitteln Optionaler Parameter Beispiele für den Aufruf /Free If Wx_isModeAdd() or Land = *Blanks; //Default-Wert für Land Setzen EndIf; B EN UT ZERHA ND BUC H 135 If Wx_isModeAdd(*ON) = *On; //Default-Werte setzen EndIf; If MyKey <> *Zeros and Not Wx_isModeAdd() //Einlesen Datensatz; EndIf; /End-Free Source Code 152: Aufruf - Funktion Wx_isModeAdd() - Prüfen Modus Hinzufügen 4.14.2 Wx_isModeChange() Modus Ändern Über die Funktion Wx_isModeChange() kann geprüft werden, ob der aktuelle Modus Ändern ist. Prototype *************************************************************************** P* Procedure name: Wx_isModeChange P* Purpose: Check Current Mode --> Return True if Action is CHANGE P* Returns: True/*ON = Action is CHANGE / False/*Off any other Action P* Parameters: ParRtv => Retr. Mode in either way (even if already stored) *************************************************************************** D Wx_isModeChange... D PR N OpDesc D ParRtv N Options(*NoPass) Const Source Code 153: Prototype - Funktion Wx_isModeChange() - Prüfen Modus Ändern Parameter Rückgabe-Wert *ON = Modus Hinzufügen *OFF = Anderer Modus ParRtv *ON = Modus erneut prüfen/ermitteln Optionaler Parameter Beispiele für den Aufruf /Free If Wx_isModeChange() and LiefTerm >= %Date(); //Änderungsmodus EndIf; If Wx_isModeChange(*ON) = *On; //Änderungsmodus EndIf; If MyKey = *Zeros or Not Wx_isModeChange() //Nicht Änderungsmodus EndIf; /End-Free Source Code 154: Aufruf - Funktion Wx_isModeChange() - Prüfen Modus Ändern B EN UT ZERHA ND BUC H 136 4.14.3 Wx_isModeCopy() Modus Kopieren Über die Funktion Wx_isModeCopy() kann geprüft werden, ob der aktuelle Modus Kopieren ist. Prototype *************************************************************************** P* Procedure name: Wx_isModeCopy P* Purpose: Check Current Mode --> Return True if Action is COPY P* Returns: True/*ON = Action is COPY / False/*Off any other Action P* Parameters: ParRtv => Retrieve Mode in either way (even if already s *************************************************************************** D Wx_isModeCopy... D PR N OpDesc D ParRtv N Options(*NoPass) Const Source Code 155: Prototype - Funktion Wx_isModeCopy() - Prüfen Modus Kopieren Parameter Rückgabe-Wert *ON = Modus Hinzufügen *OFF = Anderer Modus ParRtv *ON = Modus erneut prüfen/ermitteln Optionaler Parameter Beispiele für den Aufruf /Free If Wx_isModeCopy(); //Initialisieren EndIf; If Wx_isModeCopy(*ON) = *On; //Initialisieren EndIf; If MyKey = *Zeros or Not Wx_isModeCopy() //Einlesen Datensatz EndIf; /End-Free Source Code 156: Aufruf - Funktion Wx_isModeCopy() - Prüfen Modus Kopieren 4.14.4 Wx_isModeDelete() Modus Löschen Über die Funktion Wx_isModeDelete() kann geprüft werden, ob der aktuelle Modus Löschen ist. Prototype *************************************************************************** P* Procedure name: Wx_isModeDelete P* Purpose: Check Current Mode --> Return True if Action is DELETE P* Returns: True/*ON = Action is DELETE / False/*Off any other Action P* Parameters: ParRtv => Retrieve Mode in either way (even if already s *************************************************************************** D Wx_isModeDelete... B EN UT ZERHA ND BUC H 137 D D PR ParRtv N N Options(*NoPass) OpDesc Const Source Code 157: Prototype - Funktion Wx_isModeDelete() - Prüfen Modus Löschen Parameter Rückgabe-Wert *ON = Modus Hinzufügen *OFF = Anderer Modus ParRtv *ON = Modus erneut prüfen/ermitteln Optionaler Parameter Beispiele für den Aufruf /Free If Wx_isModeDelete(); ArrKeyVal = Wx_GetDBKeyArrInt(); For Index = 1 To %Elem(ArrKeyVal); If ArrKeyVal(Index) > *Zeros; Delete(E) ArrKeyVal(Index) AdresseF1; EndIf; EndFor; Wx_RtnPrv(); EndIf; /End-Free Source Code 158: Aufruf - Funktion Wx_isModeDelete() - Prüfen Modus Löschen 4.14.5 Wx_isModeProperty() Modus Anzeigen Über die Funktion Wx_isModeProperty() kann geprüft werden, ob der aktuelle Modus Anzeigen ist. Prototype *************************************************************************** P* Procedure name: WX_IsModeProperty P* Purpose: Check Current Mode --> Return True if Action is PROPERTY P* Returns: True/*ON = Action is PROPERTY / False/*Off any other Action P* Parameters: ParRtv => Retrieve Mode in either way (even if already stored *************************************************************************** D WX_IsModeProperty... D PR N OpDesc D ParRtv N Options(*NoPass) Const Source Code 159: Prototype - Funktion Wx_isModeProperty() - Prüfen Modus Anzeigen Parameter Rückgabe-Wert *ON = Modus Hinzufügen *OFF = Anderer Modus ParRtv *ON = Modus erneut prüfen/ermitteln Optionaler Parameter Beispiele für den Aufruf /Free B EN UT ZERHA ND BUC H 138 If Wx_isModeProperty(); //Anzeigen EndIf; If Wx_isModeProperty(*ON) = *On; //Anzeigen EndIf; If Not Wx_isModeProperty() //Nicht Anzeigen EndIf; /End-Free Source Code 160: Aufruf - Funktion Wx_isModeProperty() - Prüfen Modus Anzeigen 4.14.6 Wx_isModeWrite() Modus Hinzufügen oder Kopieren Über die Funktion Wx_isModeWrite() kann geprüft werden, ob der aktuelle Modus entweder Kopieren oder Hinzufügen ist. Dieser Modus kann geprüft werden, um festzustellen, ob ein neuer Datensatz geschrieben oder ein vorhandener Datensatz gesetzt werden kann. Prototype *************************************************************************** P* Procedure name: Wx_isModeWrite P* Purpose: Check Current Mode --> Return True if Action is either COPY or P* Write P* Returns: True/*ON = For Additional Input Checking / False/*Off P* Parameters: ParRtv => Retr. Mode in either way (even if already stored) *************************************************************************** D Wx_isModeWrite... D PR N OpDesc D ParRtv N Options(*NoPass) Const Source Code 161: Prototype - Funktion Wx_isModeWrite() - Prüfen Modus Hinzufügen oder Kopieren Parameter Rückgabe-Wert *ON = Modus Hinzufügen oder Kopieren *OFF = Anderer Modus ParRtv *ON = Modus erneut prüfen/ermitteln Optionaler Parameter Beispiele für den Aufruf /Free If Wx_isModeWrite(); //Initialisieren EndIf; If Wx_isModeWrite(*ON) = *On; //Initialisieren EndIf; B EN UT ZERHA ND BUC H 139 If Not Wx_isModeWrite() //Weder Kopieren noch Hinzufügen EndIf; /End-Free Source Code 162: Aufruf - Funktion Wx_isModeWrite() - Prüfen Modus Hinzufügen oder Kopieren 4.14.7 Wx_isModeSave() Modus Sichern Über die Funktion Wx_isModeSave() kann geprüft werden, ob der aktuelle Modus Sichern ist. Der Modus sollte erst nach Ausführung der Funktion Wx_GetChgInput() (ähnl. OpCode EXFMT) geprüft werden. Prototype *************************************************************************** P* Procedure name: Wx_isModeSave P* Purpose: Check Current Mode --> Return True if Action is SAVE P* Returns: True/*ON = Action is Save / False/*Off any other Action P* Parameters: ParRtv => Retr. Mode in either way (even if already stored) *************************************************************************** D Wx_isModeSave... D PR N OpDesc D ParRtv N Options(*NoPass) Const Source Code 163: Prototype - Funktion Wx_isModeSave() - Prüfen Modus Sichern Parameter Rückgabe-Wert *ON = Modus Hinzufügen *OFF = Anderer Modus ParRtv *ON = Modus erneut prüfen/ermitteln Optionaler Parameter Beispiele für den Aufruf /Free If Wx_isModeSave(); //Fortschreiben Datensatz EndIf; If Wx_isModeSave(*ON) = *On; //Fortschreiben Datensatz EndIf; If Not Wx_isModeSave() //Nicht Modus Sichern EndIf; /End-Free Source Code 164: Aufruf - Funktion Wx_isModeSave() - Prüfen Modus Sichern B EN UT ZERHA ND BUC H 140 4.14.8 Wx_isModeApply() Modus Übernehmen Über die Funktion Wx_isModeApply() kann geprüft werden, ob der aktuelle Modus Übernehmen ist. Der Modus sollte erst nach Ausführung der Funktion Wx_GetChgInput() (ähnl. OpCode EXFMT) geprüft werden. Prototype *************************************************************************** P* Procedure name: Wx_isModeApply P* Purpose: Check Current Mode --> Return True if Action is APPLY P* Returns: True/*ON = Action is APPLY / False/*Off any other Action P* Parameters: ParRtv => Retr.Mode in either way (even if already stored) *************************************************************************** D Wx_isModeApply... D PR N OpDesc D ParRtv N Options(*NoPass) Const Source Code 165: Prototype - Funktion Wx_isModeApply() - Prüfen Modus Übernehmen Parameter Rückgabe-Wert *ON = Modus Hinzufügen *OFF = Anderer Modus ParRtv *ON = Modus erneut prüfen/ermitteln Optionaler Parameter Beispiele für den Aufruf /Free If Wx_isModeApply(); //Fortschreiben Datensatz EndIf; If Wx_isModeApply(*ON) = *On; //Fortschreiben Datensatz EndIf; If Not Wx_isModeApply() //Nicht Modus Übernehmen EndIf; /End-Free Source Code 166: Aufruf - Funktion Wx_isModeApply() - Prüfen Modus Übernehmen 4.14.9 Wx_isModeUpdate() Modus Sichern oder Übernehmen Über die Funktion Wx_isModeUpdate() kann geprüft werden, ob der aktuelle Modus Sichern oder Übernehmen ist. Der Modus sollte erst nach Ausführung der Funktion Wx_GetChgInput() (ähnl. OpCode EXFMT) geprüft werden. B EN UT ZERHA ND BUC H 141 Prototype *************************************************************************** P* Procedure name: Wx_isModeUpdate P* Purpose: Check Current Mode --> Return True if Action is either APPLY P* or SAVE P* Returns: True/*ON = Record must be written or updates / False/*Off P* Parameters: ParRtv => Retrieve Mode in either way (even if already stored *************************************************************************** D Wx_isModeUpdate... D PR N OpDesc D ParRtv N Options(*NoPass) Const Source Code 167: Prototype - Funktion Wx_isModeUpdate() - Prüfen Modus Sichern oder Übernehmen Parameter Rückgabe-Wert *ON = Modus Hinzufügen *OFF = Anderer Modus ParRtv *ON = Modus erneut prüfen/ermitteln Optionaler Parameter Beispiele für den Aufruf /Free If Wx_isModeUpdate(); //Fortschreiben Datensatz EndIf; If Wx_isModeUpdate(*ON) = *On; //Fortschreiben Datensatz EndIf; If Not Wx_isModeUpdate() //Weder Modus Sichern noch Modus übernehmen EndIf; /End-Free Source Code 168: Aufruf - Funktion Wx_isModeApply() - Prüfen Modus Übernehmen 4.14.10 Wx_isModeOutput() Eigenschaften Modus Anzeigen oder Über die Funktion Wx_isModeOutput() kann geprüft werden, ob der aktuelle Modus Anzeigen oder Eigenschaften ist. Der Modus sollte erst nach Ausführung der Funktion Wx_GetChgInput() (ähnl. OpCode EXFMT) geprüft werden. Prototype *************************************************************************** P* Procedure name: Wx_isModeOutput P* Purpose: Check Current Mode --> Return True if Action is either DISPLAY P* or PROPERTY P* Returns: True/*ON = Fields must be set to output / False/*Off P* Parameters: ParRtv => Retr. Mode in either way (even if already stored) B EN UT ZERHA ND BUC H 142 *************************************************************************** D Wx_isModeOutput... D PR N OpDesc D ParRtv N Options(*NoPass) Const Source Code 169: Prototype - Funktion Wx_isModeOutput() - Prüfen Modus Anzeigen oder Eigenschaften Parameter Rückgabe-Wert *ON = Modus Anzeigen oder Eigenschaften *OFF = Anderer Modus ParRtv *ON = Modus erneut prüfen/ermitteln Optionaler Parameter Beispiele für den Aufruf /Free If Not Wx_isModeOutput(); //Datensatz fortschreiben EndIf; If Wx_isModeOutput(*ON) = *Off; //Datensatz fortschreiben EndIf; If Wx_isModeOutput() //Modus Anzeigen oder Eigenschaften EndIf; /End-Free Source Code 170: Aufruf - Funktion Wx_isModeApply() - Prüfen Modus Übernehmen 4.14.11 Wx_isMode() Prüfen beliebigen Modus Über die Funktion Wx_isMode() kann geprüft werden, ob der aktuelle Modus dem vorgegebenen Modus entspricht. Der Modus kann in jeder beliebigen Kombination aus Groß- und Kleinbuchstaben übergeben werden. Prototype *************************************************************************** P* Procedure name: Wx_isMode P* Purpose: Check Mode, if the current mode is equal to the passed mode P* Returns: True/*ON = Current Mode = Passed Mode / False/*Off P* Parameters: ParRtv => Retrieve Mode in either way (even if already stored) *************************************************************************** D Wx_isMode... D PR N OpDesc D ParMode Like(FldRef.ModeChar) Const D ParRtv N Options(*NoPass) Const Source Code 171: Prototype - Funktion Wx_isMode() - Prüfen beliebigen Modus Parameter B EN UT ZERHA ND BUC H 143 Rückgabe-Wert *ON = Modus Hinzufügen *OFF = Anderer Modus ParMode Modus Case insensitive ParRtv *ON = Modus erneut prüfen/ermitteln Beispiele für den Aufruf /Free Select; When Wx_isMode('SALESITM'); Wx_CallPGM('EXWRKUM03'); When Wx_isMode('SalesCustItm': *ON); Wx_CallPGM('EXWRKUM04': Wx_GetDBKeyChar()); EndSL; /End-Free Source Code 172: Aufruf - Funktion Wx_isMode() - Prüfen beliebigen Modus 4.14.12 Wx_isModeReseq() Resequenzierung Über die Funktion Wx_isModeReseq(), kann geprüft werden, ob in einer Listanzeige in der die Umsortierung der Datensätze erlaubt ist, der entsprechende Button (Default = Umsortierung) angeklickt wurde. Sofern die Funktion Wx_isModeReseq() *ON zurückbringt, können die Schlüssel-Werte in der neuen Reihenfolge wahlweise in einem String mit Trennzeichen, einer Feldgruppe mit ganzzahligen Elemente oder einer Feldgruppe mit alphanumerischen Elementen ausgegeben werden. Basierend auf den ausgegebenen Werten kann der Programmierer seine Datensätze basierend auf der neuen Sortierung fortschreiben. Prototype *************************************************************************** P* Procedure name: Wx_isModeReseq P* Purpose: Check Special Mode for Resequencing P* Returns: True/*ON = Data for Resequencing/ False/*Off no Data Available P* Parameters: ParReload = Retrieve URL values even if already populated) *************************************************************************** D Wx_isModeReseq... D PR N OpDesc D ParReload N Options(*NoPass) Const Source Code 173: Prototype - Funktion Wx_isModeReseq() - Prüfen Resequenzierung-Button geklickt Parameter Rückgabe-Wert *ON = Modus Resequenzierung (Button geklickt) *OFF = Anderer Modus *ON = Ergebnis aus Umsortierung liegt vor Beispiele für den Aufruf /Free B EN UT ZERHA ND BUC H 144 If Wx_isModeReseq(); //Ergebnis aus Resequenzierung Monitor; GblArrInt = Wx_GetReseqArrInt(); On-Error; GblString = Wx_GetReseqString(); EndMon; //Empfangen Schlüssel in Feldgruppe //Empfangen Schlüssel als String //Datensätze in neuer Reihenfolge fortscheiben; EndIf; //Quell-Code für Worktable /End-Free Source Code 174: Aufruf - Funktion Wx_isModeReseq() - Prüfen Resequenzierung-Button geklickt 4.14.13 Wx_isModeEdtList() Editierbare Worktable Über die Funktion Wx_isModeEdtList(), kann geprüft werden, ob in einer editierbaren Listanzeige, der entsprechende Button (Default = Änderungen speichern) angeklickt wurde. Sofern die Funktion Wx_isModeEdtList() *ON zurückbringt, können geänderten Daten in Form eines XML-Dokuments empfangen werden. Basierend auf den im XML-Dokument ausgegebenen Änderungen kann der Programmierer die Änderungen fortschreiben. Prototype ************************************************************************** P* Procedure name: Wx_isModeEdtList P* Purpose: Check Special Mode for editable Worktables P* Returns: True/*ON = Data for editable Worktables / False/*Off P* Parameters: ParReload = Retrieve URL values even if already retrieved *------------------------------------------------------------------------* Attention: Currently restricted to 16350 characters ************************************************************************** D Wx_isModeEdtList... D PR N OpDesc D ParReload N Options(*NoPass) Const /EndIf Source Code 175: Prototype - Funktion Wx_isModeEdtList() - Prüfen Button Sichern Änderung in Worktable geklickt Parameter Rückgabe-Wert *ON = Modus Sichern Änderung in Worktable (Button geklickt) *OFF = Anderer Modus *ON = XML-Dokument mit geänderten Daten liegt vor Beispiele für den Aufruf /Free If Wx_isModeEdtList(); GblXMLDocument = Wx_GetEdtListXML(); //Work Table geändert //XML-Dokument empfangen B EN UT ZERHA ND BUC H 145 XML-Into Rows %XML(GblXMLDocument: //Einlesen XML-Dokument 'allowmissing=yes allowextra=yes case=any');//in DS //Fortschreiben der Datensätze EndIf; //Quell-Code für Worktable /End-Free Source Code 176: Aufruf - Funktion Wx_isModeEdtList() - Prüfen Button Sichern Änderung in Worktable geklickt 4.15 Umsortierung von Datensätzen in einer List-Anzeige Die Reihenfolge der Datensätze innerhalb von List-Anzeigen kann mittels Drag und Drop geändert werden. Voraussetzung ist, dass ein Resequenzierung-Button mit Hilfe der Funktion Wx_WrkBtnReseq() definiert wurde. Beim ersten Aufruf wird der Button ausgegraut angezeigt. Sobald sich die Reihenfolge der Datensätze geändert wird, kann der Button angeklickt werden. Beim Klick auf den Button werden die Schlüssel-Werte in der neuen Reihenfolge ausgegeben. Dabei ist zu beachten, dass immer die Schlüssel-Werte ALLER Datensätzen in der List-Anzeige ausgegeben werden. Sofern die Liste nicht mehr als 256 Datensätze beinhaltet, können die Schlüssel-Werte im Verarbeitungsprogramm mit Hilfe der folgenden WOPiXX-Funktionen direkt in eine alphanumerische oder numerische Feldgruppe (mit 256 Elementen) ausgegeben werden. Wx_GetReseqArrInt() Wx_GetReseqArrChar() Wx_GetReseqArrUC() Ausgabe der Schlüssel-Werte in eine Feldgruppe mit 256 Elementen und ganzzahligem Datentypen (20U 0) Ausgabe der Schlüssel-Werte in eine Feldgruppe mit 256 Elementen und alphanumerischem Datentypen mit variabler Länge (256A varying) Ausgabe der Schlüssel-Werte in eine Feldgruppe mit 256 Elementen und Unicode Datentypen mit variabler Länge (256C varying) Sollten in der List-Anzeige mehr als 256 Datensätze enthalten sein, können die Schlüssel-Werte als alphanumerischer String ausgegeben werden. Innerhalb des Strings sind die Schlüssel-Werte durch Hash-Zeichen (#) voneinander getrennt. Der Programmierer muss dann die Schlüssel-Werte selber aus dem String ermitteln. Auch hierbei gibt es Restriktionen: Aktuell kann der String nur maximal 16350 Zeichen lang sein. Der String mit den umsortierten Schlüssel-Werten kann über die folgenden Funktionen ermittelt werden: Wx_GetReseqString() Alphanumerischer String mit den entsprechenden Schlüssel-Werte Wx_GetReseqStringUC() Unicode String mit den entsprechenden Schlüssel-Werten Anmerkung: Wird eine Resequenzierung erlaubt, werden ALLE Datensätze in die Listanzeige eingelesen. Das übliche Paging, bei dem jeweils Blöcke von 100 B EN UT ZERHA ND BUC H 146 Datensätzen eingelesen und ausgegeben werden ist an dieser Stelle abgeklemmt. Es werden immer alle Schlüssel-Werte in der neuen Reihenfolge ausgegeben. Sollen die Schlüssel in Feldgruppen ausgegeben werden, darf die List-Anzeige nicht mehr als 256 Zeilen beinhalten. Werden die Schlüssel-Werte in einem String empfangen, kann dieser String maximal 16.350 Zeichen fassen. Im Gegensatz zu den üblichen Buttons wird die Steuerung nicht an das vordefiniert Change-Programm übergeben, sondern kommt in das gleiche Programm zurück. In dem Workprogramm muss mit Hilfe der Funktion Wx_isModeReseq() festgestellt werden, ob Schlüssel-Werte in der neuen Reihenfolge vorhanden sind, die empfangen werden können. Nach der Verarbeitung der Schlüssel-Werte darf das Programm nicht verlassen werden, sondern muss erneut für die Anzeige durchlaufen werden. 4.15.1 Wx_GetReseqArrInt() neuer Reihenfolge Numerische Schlüssel-Werte in Sofern Daten aus einer Resequenzierungsoperation ( Prüfung über Funktion Wx_isModeReseq()) zurückgegeben wurden, können mit Hilfe der Funktion Wx_GetReseqArrInt() bis zu 256 (aktuelle Begrenzung) numerische Schlüssel-Werte in eine Feldgruppe ausgegeben werden. Enthält die Liste mehr als 256 Datensätze, bricht die Funktion ab. Der Fehler kann über eine MonitorGroup abgefangen werden. Prototype *************************************************************************** P* Procedure name: Wx_GetReseqArrInt P* Purpose: Get Array Integer Key Values in an array ordered in the P* modified sequence P* = Will only work for Relative Record No or Integer Key Values P* = No Decimal Positions will be returned P* Returns: Array Big Integer Key Values P* Parameters: POutElem => Number of Elements (Optional) P* Parameters: ParReload => True=Reload URL (Optional) P* (independent if already filled or not) P* Parameters: ParRmvDft => Remove Default Values from Return String P* Not Passed or True --> Remove Default Value //------------------------------------------------------------------------P* Attention: A maximum of RefElemParms (Currently 256) key values *********************************************************************** D Wx_GetReseqArrInt... D PR 20U 0 Dim(RefElemParms) OpDesc D POutElem 10U 0 Options(*NoPass) D ParReload N Options(*NoPass) Const D ParRmvDft N Options(*NoPass) Const Source Code 177: Prototype - Funktion Wx_GetReseqArrInt() Numerische Schlüssel-Werte in neuer Reihenfolge B EN UT ZERHA ND BUC H 147 Parameter Rückgabe-Wert Ganzzahlige Feldgruppe (20U 0) mit 256 Elementen Für numerische Schlüssel-Werte in der neuen Reihenfolge POutElem Optionaler Ausgabe-Parameter Anzahl der gefüllten Elemente in der Feldgruppe Beispiele für den Aufruf D GblArrInt D GblNbrElem D GblIndex /Free S S S 10I 0 Dim(RefElemParms) 10U 0 10I 0 If Wx_isModeReseq(); Monitor; GblArrInt = Wx_GetReseqArrInt(GblNbrElem); If GblNbrElem > *Zeros; For GblIndex = 1 to GblNbrElem; EndFor; EndIf; On-Error; GblString = Wx_GetReseqString(); EndMon; EndIf; /End-Free Source Code 178: Aufruf - Funktion Wx_GetReseqArrInt() Numerische Schlüssel-Werte in neuer Reihenfolge 4.15.2 Wx_GetReseqArrChar() alphanumerische SchlüsselWerte in neuer Reihenfolge Sofern Daten aus einer Resequenzierungsoperation ( Prüfung über Funktion Wx_isModeReseq()) zurückgegeben wurden, können mit Hilfe der Funktion Wx_GetReseqArrChar() bis zu 256 (aktuelle Begrenzung) alphanumerische Schlüssel-Werte in eine Feldgruppe ausgegeben werden. Enthält die Liste mehr als 256 Datensätze, bricht die Funktion ab. Der Fehler kann über eine MonitorGroup abgefangen werden. Bei zusammengesetzten Schlüsseln, wird je ein String mit allen Schlüssel-Werten für den entsprechenden Datensatz in ein Feldgruppen-Element ausgegeben. Die einzelnen Schlüssel-Werte sind durch das Sonderzeichen Pipe (|) voneinander getrennt. Mit Hilfe der Funktion Wx_SplitStringArr() (4.20.1 Wx_SplitStringArr() String in Feldgruppe splitten)oder einer eigenen Funktion kann der zusammengesetzte Schlüssel-Wert in eine Feldgruppe aufgesplittet werden. Prototype *************************************************************************** P* Procedure name: Wx_GetReseqArrChar B EN UT ZERHA ND BUC H 148 P* Purpose: Get Array Character Key Values in an array ordered in the P* modified sequence P* Returns: Array Character Key Values P* Parameters: POutElem => Number of Elements (Optional) P* Parameters: ParReload => True=Reload URL (Optional) P* (independent if already filled or not) P* Parameters: ParRmvDft => Remove Default Values from Return String P* Not Passed or True --> Remove Default Values //------------------------------------------------------------------------P* Attention: A maximum of RefElemParms (Currently 256) key values *************************************************************************** D Wx_GetReseqArrChar... D PR Like(FldRef.TextVar) OpDesc D Dim(RefElemParms) D POutElem 10U 0 Options(*NoPass) D ParReload N Options(*NoPass) Const D ParRmvDft N Options(*NoPass) Const Source Code 179: Prototype - Funktion Wx_GetReseqArrChar() alphanumerische Schlüssel-Werte in neuer Reihenfolge Parameter Rückgabe-Wert Alphanumerische Feldgruppe (256A varying) mit 256 Elementen Für alphanumerische Schlüssel-Werte in der neuen Reihenfolge POutElem Optionaler Ausgabe-Parameter Anzahl der gefüllten Elemente in der Feldgruppe Beispiele für den Aufruf D GblString S 16350A Varying D GblArrChar S 256A Varying Dim(RefElemParms) D GblNbrElem S 10U 0 D GblIndex S 3U 0 *-------------------------------------------------------------------------------/Free If Wx_isModeReseq(); Monitor; GblArrChar = Wx_GetReseqArrChar(GblNbrElem); If GblNbrElem > *Zeros; For GblIndex = 1 to GblNbrElem; EndFor; EndIf; On-Error; GblString = Wx_GetReseqString(); EndMon; EndIf; /End-Free Source Code 180: Aufruf Funktion Wx_GetReseqArrChar() alphanumerische Schlüssel-Werte in neuer Reihenfolge B EN UT ZERHA ND BUC H 149 4.15.3 Wx_GetReseqArrUC() neuer Reihenfolge Unicode-Schlüssel-Werte in Sofern Daten aus einer Resequenzierungsoperation ( Prüfung über Funktion Wx_isModeReseq()) zurückgegeben wurden, können mit Hilfe der Funktion Wx_GetReseqArrUC() bis zu 256 (aktuelle Begrenzung) Double-Byte-Unicode-Schlüssel-Werte (RPG-Datentyp C) in eine Feldgruppe ausgegeben werden. Enthält die Liste mehr als 256 Datensätze, bricht die Funktion ab. Der Fehler kann über eine MonitorGroup abgefangen werden. Bei zusammengesetzten Schlüsseln, wird je ein String mit allen Schlüssel-Werten für den entsprechenden Datensatz in ein Feldgruppen-Element ausgegeben. Die einzelnen Schlüssel-Werte sind durch das Sonderzeichen Pipe (|) voneinander getrennt. Mit Hilfe der Funktion Wx_SplitStringArrUC2() (4.20.2 Wx_SplitStringArrUC2() Unicode-Test in Feldgruppe splitten )oder einer eigenen Funktion kann der zusammengesetzte Schlüssel-Wert aufgesplittet werden. Prototype *************************************************************************** P* Procedure name: Wx_GetReseqArrUC P* Purpose: Get Array Unicode Key Values in an array ordered in the m P* Returns: Array Unicode Key Values P* Parameters: POutElem => Number of Elements (Optional) P* Parameters: ParReload => True=Reload URL (Optional) P* (independent if already filled or not) P* Parameters: ParRmvDft => Remove Default Values from Return String P* Not Passed or True --> Remove Default Value //------------------------------------------------------------------------P* Attention: A maximum of RefElemParms (Currently 256) key values can *************************************************************************** D Wx_GetReseqArrUC... D PR Like(FldRef.UCVAR) OpDesc D Dim(RefElemParms) D POutElem 10U 0 Options(*NoPass) D ParReload N Options(*NoPass) Const D ParRmvDft N Options(*NoPass) Const Source Code 181: Prototype - Funktion Wx_GetReseqArrUC2r() Unicode-Schlüssel-Werte in neuer Reihenfolge Parameter Rückgabe-Wert Double-Byte-Unicode-Feldgruppe (256C varying) mit 256 Elementen Für Double-Byte-Unicode-Schlüssel-Werte in der neuen Reihenfolge POutElem Optionaler Ausgabe-Parameter Anzahl der gefüllten Elemente in der Feldgruppe Beispiele für den Aufruf D D D D GblString GblArrUC2 GblNbrElem GblIndex S S S S Like(FldRefLU.VarLen) Like(FldRef.UCVar) Dim(RefElemParms) 10U 0 3U 0 B EN UT ZERHA ND BUC H 150 *-------------------------------------------------------------------------------/Free If Wx_isModeReseq(); Monitor; GblArrUC2 = Wx_GetReseqArrUC2(GblNbrElem); If GblNbrElem > *Zeros; For GblIndex = 1 to GblNbrElem; EndFor; EndIf; On-Error; GblString = Wx_GetReseqStringUC2(); EndMon; EndIf; /End-Free Source Code 182: Aufruf Funktion Wx_GetReseqArrUC() Unicode-Schlüssel-Werte in neuer Reihenfolge 4.15.4 Wx_GetReseqString() neuer Reihenfolge AlphaString mit Schlüsseln in Sofern Daten aus einer Resequenzierungsoperation ( Prüfung über Funktion Wx_isModeReseq()) zurückgegeben wurden, können mit Hilfe der Funktion Wx_GetReseqString() alle Schlüssel-Werte, die durch ein Hash-Zeichen (#) getrennt wurden, in einem einzigen String ausgegeben werden. Dies ist erforderlich, sofern die zu sortierende Liste mehr als 256 Zeilen enthält und damit nicht mehr über eine der Funktionen Wx_GetReseqArrInt(), Wx_GetReseqArrChar oder Wx_GetReseqArrUC() direkt in eine Feldgruppe ausgegeben werden kann. Der Ausgabe-String kann aktuell nur maximal 16350 Zeichen beinhalten. Werden mehr Informationen ausgegeben, so werden diese abgeschnitten. Der Programmierer muss die Schlüssel-Information basierend auf dem Trennzeichen (#) aufsplitten und verarbeiten. Prototype *************************************************************************** P* Procedure name: Wx_GetReseqString P* Purpose: Get All Occurences for resequencing in a single string P* = Keys are separated by a # P* = Programmer has to split the values by himself P* Returns: Character String P* Parameters: *************************************************************************** D Wx_GetReseqString... D PR Like(FldRefLA.VarLen) OpDesc Source Code 183: Prototype - Funktion Wx_GetReseqString() String mit Schlüssel-Werten in neuer Reihenfolge B EN UT ZERHA ND BUC H 151 Parameter Rückgabe-Wert alphanumerischer String mit allen, durch Hash-Zeichen (#) getrennte SchlüsselWerten in der neuen Reihenfolge Beispiele für den Aufruf D GblString S Like(FldRefLA.VarLen) *------------------------------------------------------------------------------/Free If Wx_isModeReseq(); GblString = Wx_GetReseqString(); EndIf; /End-Free Source Code 184: Aufruf Funktion Wx_GetReseqString() String mit Schlüssel-Werten in neuer Reihenfolge 4.15.5 Wx_GetReseqStringUC() in neuer Reihenfolge Unicode-String mit Schlüsseln Sofern Daten aus einer Resequenzierungsoperation ( Prüfung über Funktion Wx_isModeReseq()) zurückgegeben wurden, können mit Hilfe der Funktion Wx_GetReseqStringUC() alle Schlüssel-Werte, die durch ein Hash-Zeichen (#) getrennt wurden in einem einzigen Double-Byte-Unicode-String (RPGDatentyp C) ausgegeben werden. Dies ist erforderlich, sofern die zu sortierende Liste mehr als 256 Zeilen enthält und damit nicht mehr über eine der Funktionen Wx_GetReseqArrInt(), Wx_GetReseqArrChar oder Wx_GetReseqArrUC() direkt in eine Feldgruppe ausgegeben werden kann. Der Ausgabe-String kann aktuell nur maximal 16350 (Unicode) Zeichen beinhalten. Werden mehr Informationen ausgegeben, so werden diese abgeschnitten. Der Programmierer muss die Schlüssel-Information basierend auf dem Trennzeichen (#) aufsplitten und verarbeiten. Prototype *************************************************************************** P* Procedure name: Wx_GetReseqStringUC P* Purpose: Get All Occurences for resequencing in a single unicode s P* = Keys are separated by a # P* = Programmer has to split the values by himself P* Returns: Unicode String P* Parameters: *************************************************************************** D Wx_GetReseqStringUC... D PR Like(FldRefLU.VarLen) OpDesc Source Code 185: Prototype - Funktion Wx_GetReseqStringUC() Unicode-String mit Schlüssel-Werten in neuer Reihenfolge B EN UT ZERHA ND BUC H 152 Parameter Rückgabe-Wert Double-Byte-Unicode-String mit allen, durch Hash-Zeichen (#) getrennte Schlüssel-Werten in der neuen Reihenfolge Beispiele für den Aufruf D GblString S Like(FldRefLU.VarLen) *-----------------------------------------------------------------------------/Free If Wx_isModeReseq(); GblString = Wx_GetReseqStringUC(); EndIf; /End-Free Source Code 186: Aufruf Funktion Wx_GetReseqStringUC() Unicode-String mit Schlüssel-Werten in neuer Reihenfolge 4.16 Editierbare List-Anzeigen Um Listanzeigen/Work-Tables editieren zu können, muss ein spezieller Änderungsbutton mit Hilfe der Funktion Wx_WrkBtnEdtList() definiert werden. Wurde dieser Button definiert können die Inhalte der Worktable geändert/überschrieben werden. Bei Klick auf den Button wird ein XML-Dokument, in dem alle Spalten-Werte für die geänderten Zeilen ausgegeben werden. Das XML-Dokument kann maximal 16350 Zeichen fassen. Das XML-Dokument kann mit der folgenden Funktion in eine Variable ausgegeben werden. Wx_GetEdtListXML() Ausgabe des XML-Dokuments mit den geänderten Werten In eine alphanumerische Variable Einzelne Spalten können durch Angabe des Schlüssel-Wortes Output bei Aufruf der Prozedur Wx_WrtFld)( zur Änderung gesperrt werden. Die editierbaren und gesperrten Spalten werden farblich unterschiedlich dargestellt. B EN UT ZERHA ND BUC H 153 ■ Editierbare Spalten ■ Aktuelle Zeile ■ Nicht editierbare Spalten ■ Aktuell zu ändernder Spalten-Wert 4.16.1 XML-Dokument für editierbare Worktables - Aufbau Das XML-Dokument in dem die geänderten Werte ausgegeben werden hat den folgenden Aufbau: Root-Element Zeilen-Element <rows> in Kleinbuchstaben <row> in Kleinbuchstaben Die Spalten-Elemente sind jeweils unterhalb des Zeilen-Elements angeordnet Spalten-Element für Schlüssel-Werte <ID> in Großbuchstaben Spalten-Elemente Die Element-Namen entsprechen den Feld-Namen, die in der Funktion Wx_WrkFld() angegeben wurden. Die Spalten-Element-Namen werden in Groß-Buchstaben ausgeben. <?xml version="1.0"?> <rows> <row> <ID>111</ID> <SPALTE1>Wert Spalte 1</SPALTE1> <SPALTE2>Wert Spalte 2</SPALTE2> ... weitere Spalten </row> <row> <ID>111</ID> <SPALTE1>Wert Spalte 1</SPALTE1> ... weitere Spalten </row> ... weitere Zeilen </rows> Source Code 187: Aufbau XML-Dokument für editierbare Listen Das folgende Schaubild zeigt ein XML-Dokument, das nach der Änderung in der Worktable ausgegeben wurde. Außerdem wird der RPG-Code mit dem die Spalten in der Worktable definiert wurden angezeigt. B EN UT ZERHA ND BUC H 154 ■ XML-Dokument ■ RPG Source Code //Definieren Schlüssel-Felder Wx_WrkKeyRRN('XXPRMCTL'); //Definieren Spalten Wx_WrkFld('DCAPP' : 'DWB0552'); Wx_WrkFld('DCNAM' : 'WXA0002'); Wx_WrkFld('DCKEY' : 'DWB0590'); Wx_WrkFld('DCTXT' : 'DWB0019'); Wx_WrkFld('NEWSEQ': 'Sort'); ■ Element-Namen (in Groß-Buchstaben) entsprechen dem in Funktion Wx_WrkFld() definierten Namen Abbildung 21: XML-Dokument für editierbare Worktables 4.16.2 Wx_GetEdtListXML() Empfangen alphanumerisches XML-Dokument mit geänderten Werten Sofern Daten aus Änderungen aus editierbaren Worktables ( Prüfung über Funktion Wx_isModeEdtList()) zurückgegeben wurden, kann mit Hilfe der Funktion Wx_GetEdtListXML() ein XMLDokument, das alle Änderungen enthält in eine alphanumerische Variable ausgegeben werden. Das XML-Dokument kann aktuell nur maximal 16350 Zeichen beinhalten. Werden mehr Informationen ausgegeben, so werden diese abgeschnitten und das XML-Dokument ist unvollständig. Der Programmierer muss das empfangene XML-Dokument z.B. mit den RPG-OpCodes XML-INTO oder XML-SAX in eine Datenstruktur ausgeben und anschließend die Daten verarbeiten. Prototype *************************************************************************** P* Procedure name: Wx_GetEdtListXML P* Purpose: Get All changed information as well formed XML document P* = Unique Key is returned as attribute id in the row element P* = column names as defined when creating the worktable are P* for the modified values P* Returns: Well formed XML document with the modified data P* Parameters: *-------------------------------------------------------------------------* Attention: Currently restricted to 16350 characters *************************************************************************** D Wx_GetEdtListXML... D PR Like(FldRefLA.VarLen) OpDesc Source Code 188: Prototype - Funktion Wx_GetEdtListXML() Empfangen XML-Dokument mit geänderten Werten B EN UT ZERHA ND BUC H 155 Parameter Rückgabe-Wert Text-String mit XML-Dokument Beispiele für den Aufruf D GblXMLDoc D RefDSRow D Id D DCAPP D DCNAM D NEWSEQ D DCTXT D DCKEY S Like(FldRefLA.VarLen) DS Qualified Based(DummyPtr) 10I 0 10A 10A 5P 0 30A 20A D Rows DS Qualified Inz D Row LikeDS(RefDSRow) Dim(100) -----------------------------------------------------------------------------/Free If Wx_isModeEdtList(); GblXMLDoc = Wx_GetEdtListXML(); XML-INTO Rows %XML(GblXMLDoc: 'allowmissing=yes allowextra=yes + case=any'); EndIf; /End-Free Source Code 189: Aufruf Funktion Wx_GetEdtListXML() 4.16.3 RPG-Code Empfangen XML-Dokument mit geänderten Werten Empfangen/Verarbeiten XML-Dokument Das folgende Schaubild zeigt das XML-Dokument, die RPG-Datenstrukturen und die Verarbeitung des XML-Dokuments mit dem RPG OpCode XML-INTO. Die Id, sowie die Spalten/Elemente müssen zunächst in einer Referenz-Datenstruktur hinterlegt werden. Die Spalten/Element und Datenstruktur-Unterfeld-Namen müssen identisch sein. Da Spalten/Element-Namen und Datenstruktur- bzw. Datenstruktur-Unterfeld-Namen für die Verarbeitung des XML-Dokuments identisch sein müssen, muss die empfangende Datenstruktur rows heißen. Diese Datenstruktur benötigt ein für jede Zeile ein Datenstruktur-Unterfeld mit dem Namen row und dem Aufbau Referenz-Datenstruktur. Die Definition des Unterfeldes row erfolgt mit Hilfe des Schlüssel-Wortes LIKEDS und maximale Anzahl der empfangenden Datensätze wird über das Schlüssel-Wort DIM festgelegt. Da die Element-Namen z.T. in Groß-Buchstaben und z.T. in keinen Buchstaben ausgegeben werden, muss die Option case=any in der Funktion %XML angegeben werden. Da außerdem nicht immer die maximale Anzahl an Datensätzen empfangen wird und die Datenstruktur außerdem noch andere Datenstruktur-Unterfelder enthalten könnte, müssen die Optionen allowmissing=yes und allowextra=yes angegeben werden. B EN UT ZERHA ND BUC H 156 D RefDSRow D D Id D DCAPP D DCNAM D NEWSEQ D DCTXT D DCKEY DS D Rows D Row D DS D XMLString S Qualified Based(DummyPtr) 10I 0 10A 10A 5P 0 30A 20A Qualified Inz LikeDS(RefDSRow) Dim(100) 16350A Varying XMLString = Wx_GetEdtListXML(); XML-INTO Rows %XML(XMLString: 'allowmissing=yes + allowextra=yes + case=any'); Abbildung 22: Empfangen/Verarbeiten XML-Dokument nach Änderung in editierbaren Worktables 4.17 Direkter Aufruf von CGI-Programmen CGI-Programme können nicht über die RPG-OpCodes CALL oder CALLP aufgerufen werden. Um den Aufruf von CGI-Programmen aus anderen CGI-Programmen zu erleichtern wurden Prozeduren eingeführt, die den OpCodes nachempfunden wurden. Der direkte Aufruf von CGI-Programmen ist z.B. in Change-Programmen erforderlich, sofern der Modus eine eindeutige Kennung ist, jedoch keinem Programm-Namen entspricht. Ebenso könnte sein, dass unter einer bestimmten Bedingung (Auftrags-Kopf wurde zwar ausgewählt, jedoch zwischenzeitlich vom Kollegen gelöscht) ein anderes CGI-Programm (z.B. Erfassung AuftragsDaten) ausgeführt werden soll. Der direkte Aufruf von CGI-Programmen erfolgt über Prozedur Wx_CallPGM(). Achtung: 4.17.1 Da aus einem CGI-Programm ein anderes CGI-Programm aufgerufen wird, und ein CGI-Programm nach der Ausgabe an den Browser beendet wird, wird auch das rufende Programm beendet. Wx_CallPGM() Direkter Aufruf CGI-Programm Die Prozedur Wx_CallPGM() generiert die URL, die für den Aufruf erforderlich ist und initiiert den Aufruf. B EN UT ZERHA ND BUC H 157 An die Prozedur Wx_CallPGM wird der Name des aufzurufenden Programms übergeben. Weiterhin können bis zu 5 Parameter-Werte übergeben werden. Prototype *************************************************************************** P* Procedure name: Wx_CallPGM P* Purpose: Call Next CGI Program with Single Parameters P* Returns: URL P* Parameters: ParPGM => Program P* Parameters: ParParm1 => Parameter 1 (Optional) P* Parameters: ParParm2 => Parameter 2 (Optional) P* Parameters: ParParm3 => Parameter 3 (Optional) P* Parameters: ParParm4 => Parameter 4 (Optional) P* Parameters: ParParm5 => Parameter 5 (Optional) *************************************************************************** D Wx_CallPGM... D PR OpDesc D ParPGM Like(FldRef.PGM) Const D ParParm1 Like(FldRef.TextVAR) Const D Options(*NoPass) D ParParm2 Like(FldRef.TextVAR) Const D Options(*NoPass) D ParParm3 Like(FldRef.TextVAR) Const D Options(*NoPass) D ParParm4 Like(FldRef.TextVAR) Const D Options(*NoPass) D ParParm5 Like(FldRef.TextVAR) Const D Options(*NoPass) D ParMode Like(FldRef.ModeChar) Const D Options(*NoPass) Source Code 190: Prototype Prozedur Wx_CallPGM - Direkter Aufruf CGI Programm Parameter ParPGM Name des aufzurufenden Programms Bibliothek kann nicht angegeben werden. ParParam1 - ParParam5 Alphanumerischer Parameter-Wert Optionaler Parameter Es können bis zu 5 alphanumerische Parameter-Werte übergeben werden. Diese Parameter-Werte können in dem Folge-Programm verwendet werden. Anstatt die gewünschten Parameter-Werte über die Funktion Wx_CallPGM() zu setzen, ist es auch möglich die Werte über durch Aufruf einer der Funktionen Wx_SetParmXXXX zu setzen (vergl. 4.13 Ermitteln und Setzen von Parameter-Werten) Beispiele für den Aufruf If GblKGID = *Zeros; Wx_CallPGM('KXWRKNGR'); ElseIf Wx_isMode('TEILN'); Wx_CallPGM('KXWRKKOTN': %Char(GblKGID)); ElseIf Wx_isMode('UMSATZ'); Wx_CallPGM('KXUMSATZ': %Char(GblJAHR), GblDs.KundeNr, Wx_GetParmChar(3)); EndIf; B EN UT ZERHA ND BUC H 158 Source Code 191: Aufruf Prozedur - Wx_CallPGM - Direkter Aufruf CGI Programm B EN UT ZERHA ND BUC H 159 4.18 Change Programm Für Change Programme stehen die folgenden WOPiXX-Prozeduren zur Verfügung: Zuordnung Aktion ChangeTables Prozeduren Wx_GetParmChar() Wx_GetParmArrChar() Parameter Wx_GetParmUC() Wx_GetParmArrUC() Wx_GetDBKeyInt() Wx_GetDBKeyArrInt() Wx_GetDBKeyDec() Wx_GetDBKeyArrDec() Key Wx_GetDBKeyChar() Wx_GetDBKeyArrChar() Wx_GetDBKeyUC() Wx_GetDBKeyArrUC() WX_isModeDisplay() GetInfo WX_isModeChange() WX_isModeAdd() WX_isModeCopy() WX_isModeDelete() WX_isModeRename() WX_isModeProperty() Modus WX_isModeRefresh() WX_isModeSave() WX_isModeApply() WX_isModeUpdate() WX_isModeOutput() WX_isModeWrite() Wx_isMode() WX_CallPGM() Öffnen Wx_OpnHTMLChg() Wx_HdrText() Wx_HdrFile() Definition Header Wx_HdrFld() Wx_HdrFileFld() Reiter Wx_ChgNavTab() Wx_ChgFile() Wx_ChgFld() Wx_ChgFileFld() Wx_ManChgFld() Wx_ManChgFldChar() Wx_ManChgFldVarChar() Wx_ManChgFldUC2() Wx_ManChgFldVarUC2() File/Fields Wx_ManChgFldPack() Definition Wx_ManChgFldZone() Wx_ManChgFldInt() ChangeTables Wx_ManChgFldFloat() Wx_ManChgFldDate() Wx_ManChgFldTime() Wx_ManChgFldTimestamp() Wx_ManChgFldRef() Wx_ChgIf() ConditionWx_ChgElse() Group Wx_ChgEndIf() Input Wx_GetChgInput() Wx_FldErr() Error Handling Wx_MultFldErr() Wx_isChgFldErr() Wx_SetParmChar() Wx_SetParmArrChar() Wx_SetParmUC() Ausgeben Wx_SetParmArrUC() Wx_RtnPrv() Wx_WrtChgTbl() Tabelle 4: WOPiXX-Prozeduren für Change-Programme Bezeichnung Prozedur Einzelnen alphanumerischen Parameter-Wert empfangen Mehrere alphanumerische Parameter-Werte empfangen Einzelnen Unicode-Parameter-Wert empfangen Mehrere Unicode Parameter-Werte empfangen Einzelnen ganzzahlingen Schlüssel-Wert empfangen Mehrere ganzzahlige Schlüssel-Werte empfangen Einzelnen dezimalen Schlüssel-Wert empfangen Mehrere dezimale Schlüssel-Werte empfangen Einzelnen alphanumerischen Schlüssel-Wert empfangen Mehrere alphanumerische Schlüssel-Werte empfangen Einzelnen Unicode-Schlüssel-Wert empfangen Mehrere Unicode Schlüssel-Werte empfangen Prüfen Modus = Anzeigen Prüfen Modus = Ändern Prüfen Modus = Hinzufügen Prüfen Modus = Kopieren Prüfen Modus = Löschen Prüfen Modus = Rename Prüfen Modus = Eigenschaften = Anzeigen Prüfen Button Aktualisieren gedrückt / Nicht verwendet in RPG Prüfen Button Sichern gedrückt Prüfen Button Übernehmen gedrückt Prüfen Update = Button Sichern oder Übernehmen gedrückt Prüfen Modus = Anzeigen oder Property Prüfen Modus = Hinzufügen oder Kopieren Prüfen beliebigen Modus Beliebiges CGI-Programm direkt aufrufen Öffnen HTML für Change Table Beliebigen Text in Header ausgeben Definieren Datei für Header Informationen Definieren alphanumer. Header-Feld Definieren Datei und alphanumerisches Header-Feld Definieren Reiter Datei vorgeben Felder aus Dateien definieren Datei und Feld zusammen definieren Definieren Workfield (nicht in Datei) - Alle Datentypen Definieren alphanumer. Workfield - fixe Länge (nicht in Datei) Definieren alphanumer. Workfield - variable Länge (nicht in Datei) Definieren Workfield in Unicode - fixe Länge (nicht in Datei) Definieren Workfield in Unicode - variable Länge (nicht in Datei) Definieren Workfield gepackt (nicht in Datei) Definieren Workfield gezont (nicht in Datei) Definieren Integer-Workfield (nicht in Datei) Definieren Fließkomma-Workfield (nicht in Datei) Definieren Datums-Workfield (nicht in Datei) Definieren Zeit-Workfield (nicht in Datei) Definieren Zeitmarken-Workfield (nicht in Datei) Definieren Workfield basierend auf einem Referenz-Feld Beginn der Condition Group Else/ElseIf der Condition Group Ende der Condition Group HTML auslesen Error Handling auf Feld Error Handling für mehrere Felder Prüfen Fehler aufgetreten Setzen alphanumerischen Parameter-Wert Setzen von mehreren alphanumerischen Parameter-Werten Setzen Unicode-Parameter-Wert Setzen von mehreren Unicode-Parameter-Werten Auf vorgelagertes Programm zurückgehen Change Table ausgeben B EN UT ZERHA ND BUC H 160 Für ein Change-Programm sind nicht immer alle WOPiXX-Prozeduren erforderlich. Der Aufruf der WOPiXX-Prozeduren sollte jedoch (weitgehend) in der Reihenfolge, in der die Prozeduren aufgelistet sind erfolgen. Die blau eingefärbten Prozeduren können sowohl in Work- als auch in Change-Tables aufgerufen werden. Die übrigen Prozeduren können nur in Verbindung mit Change-Tables verwendet werden. In einem Change-Programm müssen die folgenden Schritte abgedeckt sein Sofern erforderlich Schlüssel-Werte aus vorgelagertem Work-Programm empfangen Prozeduren Wx_GetDBKeyXX Sofern erforderlich Parameter aus vorgelagertem Programm empfangen Prozeduren Wx_GetParmXX Sofern erforderlich Modus prüfen Prozeduren Wx_isModeXX Sofern erforderlich abhängig vom Modus CGI-Programm aufrufen Prozedur Wx_CallPGM() und individuelle Programmierung HTML-Dokument öffnen Prozedur Wx_OpnHTMLChg() Verwendete Dateien/Tabellen/Views definieren Prozedur Wx_ChgFile() Datensätze einlesen individuelle Programmierung Ein-/Ausgabe Felder definieren Prozedur Wx_ChgFld() HTML-Dokument ausgeben und erfasste Daten empfangen Prozedur Wx_GetChgInput() Sofern erforderlich individuelle Eingabe-Prüfung und Ausgabe von Fehler-Meldungen Prozeduren Wx_FldErr() oder Wx_MultFldErr() Datensatz fortschreiben individuelle Programmierung HTML-Dokument ausgeben bzw. auf vorheriges Programm zurückspringen Prozedur Wx_WrtChgTbl() 4.18.1 Template für Change-Programm Ein Template für ein Change-Programm mit Copy-Strecken und den erforderlichen Prozedur-Aufrufen in der erforderlichen Reihenfolge befindet sich in: Bibliothek WOPIX B EN UT ZERHA ND BUC H 161 Quellen-Datei QCPYLESRC Member EXCHGTEMP Dieses Template kann kopiert und für die individuellen Change-Programme modifiziert werden. 4.18.2 Wx_OpnHTMLChg() HTML Dokument öffnen Für die Dialog-Ausgabe muss zunächst festgelegt werden, ob eine List-Anzeige (Work-Table) oder Detail-Anzeige (Change Table) erstellt werden soll. Die Unterscheidung erfolgt durch den Aufruf von unterschiedlichen Prozeduren für Work- oder Change-Tables. Zum Erstellen einer Change-Table wird zunächst die Prozedur WX_OpnHTMLChg() (Open HTML Document for Change Tables) aufgerufen. In dieser Prozedur wird zunächst das Default-HTML-Template ermittelt und geöffnet. Anstatt des Default-HTML-Templates zu verwenden, kann auch ein Individuelles HTML-Dokument verwendet werden. In diesem Fall muss jedoch dafür gesorgt werden, dass die Platz-Halter für Work- bzw. ChangeTables, Überschriften, Error-Messages etc., die von WOPiXX/Directweb ersetzt werden, in dem individuellen Dokument integriert sind. Der Titel, der zur Laufzeit angezeigt werden soll wird als Parameter übergeben und kann wahlweise als Text oder als Message-Id aus der bei dem Einrichten der Anwendung angegebenen Nachrichten-Datei übergeben werden. Das Folge-Programm (Detail-Anzeige oder eine weitere List-Anzeige) kann angegeben werden. Wird kein Folge-Programm angegeben, so wird davon ausgegangen, dass das gleiche Programm erneut aufgerufen werden soll. Dies ist bei Ein/Ausgabe-Programmen i.d.R. erforderlich, da das Programm beim Senden des HTML-Dokuments an den Browser beendet wird und zum Empfangen der erfassten Daten erneut aufgerufen wird. (Wird in der WOPiXX-Prozedur DW_GetChgInput() gesteuert). Die Prozedur Wx_OpnHTMLChg() darf pro Change-Programm nur einmalig aufgerufen werden. Prototype *************************************************************************** P* Procedure name: Wx_OpnHTMLChg P* Purpose: Open HTML Document for CGI Change Program P* Returns: P* Parameters: ParMsg => Message-Id Header or Header-Text P* Parameters: ParCGIPGM => Program to Call P* Parameters: ParHTMLDoc => HTML-Document P* --> Not Passed or *DEFAULT passed --> Default P* Parameters: ParOpnOpt => Additional Open Options *************************************************************************** D Wx_OpnHTMLChg... D PR OpDesc D ParMsg Like(FldRef.MsgText) Const D PInCGIPGM Like(FldRef.PGM) Const D Options(*NoPass) D PInHtmlDoc Like(FldRef.HTMLDOC) Const D Options(*NoPass) D PInOpnOpt Like(FldRefCGI.Options) Const D Options(*NoPass) B EN UT ZERHA ND BUC H 162 Source Code 192: Prototype - Prozedur Wx_OpnHTMLChg() - HTML-Dokument für Change Tables öffnen Parameter ParTitle Message-Id oder Text für Titel PInCGIPGM Folge-Programm Optionaler-Parameter Wird kein CGI-Programm übergeben, wird das aktuelle Programm erneut aufgerufen. PInHTMLDoc HTML-Dokument Optionaler Parameter Muss nur angegeben werden, wenn ein anderes als das Default HTML-Dokument verwendet werden soll Beispiele für den Aufruf Wx_OpnHTMLChg('Artikel-Stamm'); Wx_OpnHTMLChg('Adress-Stamm': 'EXCHGAD01'); Wx_OpnHTMLChg('TOP0017': '': 'MyChgUmsatz.html'); Source Code 193: Prozedur Wx_OpnHTMLWrk - HTML Dokument für Worktables öffnen 4.18.3 Wx_ChgNavTab() Reiter definieren Die einzelnen Ein-/Ausgabe-Felder in Change Tables können unter Navigation Tabs/Reitern gruppiert und zusammengefasst werden. Über die Funktion Wx_ChgNavTab() wird ein Reiter definiert. Alle Ein-/Ausgabe-Felder, die im Anschluss an diesen Reiter definiert werden, werden unter diesem Reiter angeordnet. Wird ein weiterer Reiter definiert, werden die im Anschluss definierten Ein/Ausgabe-Felder unter diesem neuen Reiter angeordnet. Anmerkung: In einer Change Table können nur maximal 100 Ein-/Ausgabe-Felder definiert werden (unabhängig davon, unter wie vielen Reitern die Ein/Ausgabe-Felder angeordnet werden. Prototype *************************************************************************** P* Procedure name: Wx_ChgNavTab P* Purpose: Define Navigation Tabs for Change Table P* Returns: P* Parameters: ParNavTab => Navigation Tab P* Parameters: ParMsg => Message-Id or Text P* Parameters: ParOptions => Options B EN UT ZERHA ND BUC H 163 *************************************************************************** D Wx_ChgNavTab... D PR OPDesc D ParNavTab Like(FldRefCGI.Options) Const D ParDescr Like(FldRef.MsgData) Const D ParOptions Like(FldRefCGI.Options) Const D Options(*NoPass) Source Code 194: Prototype - Procedure Wx_ChgNavTab() - Reiter definieren Parameter ParNavTab Eindeutiger (interner) Name für den Navigation Tab/Reiter ParDescr ParOptions Aufbereitungsoptionen für Navigation Tab/Reiter Optionaler Parameter Beschreibung/Text, der im Navigation Tab/Reiter angezeigt wird. Die Beschreibung kann entweder direkt oder als Message-Id angegeben werden. Bei Verwendung einer Message-Id muss die zugehörige Message-File in Directweb für die Anwendung hinterlegt sein. Beispiele für den Aufruf Wx_ChgNavTab('Allgemein': 'KXD0037'); //Definition der Ein-/Ausgabe-Felder für Navigation Tab Allgemein Wx_ChgNavTab('Ausgabe': 'Ausgabe'); //Definition aller Ein-/Ausgabe-Felder für Navigation Tab Ausgabe Wx_ChgNavTab('Suche': 'KXD0047'); //Definition aller Ein-/Ausgabe-Felder für Navigation Tab Suche Source Code 195: Aufruf Prozedur - Wx_ChgNavTab - Navigation Tabs/Reiter definieren B EN UT ZERHA ND BUC H 164 ■ Ein-/Ausgabe-Felder für Navigation Tab: Allgemein ■ Ein-/Ausgabe-Felder für Navigation Tab: Suche ■ Ein-/Ausgabe-Felder für Navigation Tab: Ausgabe Abbildung 23: Navigation Tabs/Reiter - Ergebnis aus Source Code 167 4.18.4 Wx_ChgBtn Buttons definieren In Change-Programmen können zusätzliche Buttons definiert werden, zum Aufruf von weiteren WebProgrammen. Beim Klicken auf den entsprechenden Button wird das gewünschte Folge-Programm aktiviert. Weiterhin besteht die Möglichkeit für alle Buttons eine Bestätigung anzufordern und auch für StandardButtons kann der Button-Text beliebig verändert werden. Buttons in Change-Programmen werden über die Funktion Wx_ChgBtn() definiert. Prototype *************************************************************************** P* Procedure name: Wx_ChgBtn P* Purpose: Define Buttons used in Change Tables P* Returns: P* Parameters: ParButton => => Button --> Several Default *ITEMs (s P* Default Options: change, cancel, refresh P* save, copy, apply P* *DFT/*DEFAULT --> all of the listed above B EN UT ZERHA ND BUC H 165 P* Parameters: ParMsg => Message-Id or Button Text P* Parameters: ParOptions => Options P* Parameters: ParTblOptions => Options *************************************************************************** D Wx_ChgBtn... D PR OpDesc D ParButton Like(FldRef.MnuItm) Const D ParMsg Like(FldRef.MsgData) Const D Options(*NoPass) D ParOptions Like(FldRefCGI.Options) Const D Options(*NoPass) D ParTblOptions Like(FldRef.TextVar) Const D Options(*NoPass) ‚ Source Code 196: Prototype - Procedure Wx_ChgNavTab() - Reiter definieren Parameter ParButton ParMsg ParOptions Optionen für Buttons z.B. Confirm für Bestätigung. Name des Programms, das aufgerufen werden soll oder einer der Default-Werte (Change, Cancel, Refresh, Save, Copy, Apply mit oder ohne führenden *) oder *DFT oder *DEFAULT für alle Default Buttons. Button-Text Message-Id oder Message-Text Beispiele für den Aufruf Wx_ChgBtn('*Save': 'Bestätigen+Sichern': 'confirm'); Wx_ChgBtn('*CANCEL': 'MSG4711': 'confirm(Wollen Sie das wirklich?)'); Wx_ChgBtn('WXWRKLIBH': 'Bibliotheksliste'); Source Code 197: Aufruf Prozedur Wx_ChgBtn Definieren Buttons in Change Tables B EN UT ZERHA ND BUC H 166 Button Bestätigen + Sichern Save Button, beliebiger Text und Bestätigung Butten Verlassen Cancel Butten + beliebiger Text Button Bibliotheksliste Aufruf Programm WXLIBLHDR Abbildung 24: Wx_ChgBtn - Buttons in Change Tables definieren 4.18.5 Wx_ChgFile() Datei für Change Table definieren Um Ein-/Ausgabe-Felder, die in Dateien/Tabellen/Views hinterlegt sind, müssen zunächst die Dateien/Tabellen/Views über die Prozedur Wx_ChgFile() definiert werden. Über die Funktion Wx_ChgFile() können bis zu 10 Dateien/Tabellen/Views definiert werden. Im Gegensatz zu den Work Tables bei denen eine Verknüpfung zwischen den einzelnen Tabellen angegeben werden musste, können bei Change Tables die Dateien/Tabellen/Views unabhängig voneinander angegeben werden. Sofern nur eine einzige Datei/Tabelle/View benötigt wird, kann diese auch direkt zusammen mit dem ersten Feld über Funktion Wx_ChgFileFld() (vergl. 4.18.7 Wx_ChgFileFld() Datei und 1.Feld definieren) definiert werden. Prototype *************************************************************************** P* Procedure name: Wx_ChgFile P* Purpose: Define Files used for Change Tables P* --> Up to 10 Files can be specified P* Returns: P* Parameters: ParFile1 => File/Table 1 P* Parameters: ParFile2 => File/Table 2 (Optional) P* Parameters: ParFile3 => File/Table 3 (Optional) P* Parameters: ParFile4 => File/Table 4 (Optional) P* Parameters: ParFile5 => File/Table 5 (Optional) P* Parameters: ParFile6 => File/Table 6 (Optional) P* Parameters: ParFile7 => File/Table 7 (Optional) P* Parameters: ParFile8 => File/Table 8 (Optional) B EN UT ZERHA ND BUC H 167 P* Parameters: ParFile9 => File/Table 9 (Optional) P* Parameters: ParFile10 => File/Table 10 (Optional) *************************************************************************** D Wx_ChgFile... D PR OPDesc D ParFile1 Like(FldRef.NameSQL) Const D ParFile2 Like(FldRef.NameSQL) Const D Options(*NoPass) D ParFile3 Like(FldRef.NameSQL) Const D Options(*NoPass) D ParFile4 Like(FldRef.NameSQL) Const D Options(*NoPass) D ParFile5 Like(FldRef.NameSQL) Const D Options(*NoPass) D ParFile6 Like(FldRef.NameSQL) Const D Options(*NoPass) D ParFile7 Like(FldRef.NameSQL) Const D Options(*NoPass) D ParFile8 Like(FldRef.NameSQL) Const D Options(*NoPass) D ParFile9 Like(FldRef.NameSQL) Const D Options(*NoPass) D ParFile10 Like(FldRef.NameSQL) Const D Options(*NoPass) Source Code 198: Prototype - Prozedur Wx_ChgFile - Dateien für Change Table definieren Parameter ParFile1 ParFile2 Physische Datei/Tabelle/View Kann als kurzer System-Name (Max.10 Zeichen) oder langer SQL Name (Max. 128 Zeichen) angegeben werden. ParFile10 Physische Datei/Tabelle/View Optionaler Parameter Kurzer System- oder langer SQL Name Beispiel für den Aufruf Wx_ChgFile('AuftrKopfX'); Wx_ChgFile('AuftrKopfX': 'AuftrPosX': 'KundSt'); Source Code 199: Beispiel Aufruf Prozedur WX_ChgFile() 4.18.6 Wx_ChgFld() Dateien für Change Table definieren Felder in Change Tables definieren Ein-/Ausgabe-Felder, die in den zuvor definierten Tabellen hinterlegt sind, müssen mit der Prozedur Wx_ChgFld() für WOPiXX registriert werden. Damit die Daten zwischen WOPiXX und dem individuellen CGI-Programm ausgetauscht werden können, muss ein Pointer auf das gewünschte Feld, dessen Daten ausgetauscht werden sollen, an die WOPiXX-Prozedur übergeben werden. B EN UT ZERHA ND BUC H 168 WOPiXX ermittelt basierend auf der Feldbeschreibung den Datentypen und die Länge der übergebenen Daten, übersetzt die Daten in HTML-Schreibweise und bringt die eingegebenen Daten im Feld-Format zurück. Anmerkung: Alle Felder und Variablen, über die Informationen mit WOPiXX ausgetauscht werden, müssen als Datenstruktur-Unterfelder definiert werden! Felder in Datenstrukturen werden vom RPG-Compiler nicht konvertiert. Prototype *************************************************************************** P* Procedure name: Wx_ChgFld P* Purpose: Define Fields used for Change Table P* Returns: P* Parameters: ParField => Field P* Parameters: ParPtr => Pointer to the original Field P* Parameters: ParMsg => Message-Id or Text P* Parameters: ParOptions => Options P* Parameters: ParCond => Conditions P* Parameters: ParHelp => Help --> Special Value *NONE = No H *************************************************************************** D Wx_ChgFld... D PR OPDesc D ParField Like(FldRef.NameSQL) Const D ParPtr * Value D ParMsg Like(FldRef.MsgData) Const D Options(*NoPass) D ParOptions Like(FldRefCGI.Options) Const D Options(*NoPass) D ParCond Like(FldRefCGI.Cond) Const D Options(*NoPass) D ParHelp Like(FldRefCGI.Help) Const D Options(*NoPass: *Trim) Source Code 200: Prototype - Prozedur Wx_FltFld - Definieren Filter-Felder Parameter ParField Feld/Spalten-Name des Ein-/Ausgabe-Feldes Das Ein-/Ausgabe-Feld (der angegebene Feld-Name) muss in den zuvor definierten Tabellen vorhanden sein. Wahlweise kann der kurze System-Name oder der lange SQL Name angegeben werden. ParPtr Pointer auf das Ein-/Ausgabe-Feld Das Ein-/Ausgabe-Feld muss in einer der zuvor definierten Tabellen vorhanden sein und in einer Datenstruktur hinterlegt sein. Übergabe erfolgt in Verbindung mit der Built-In-Funktion %ADDR(). ParDescr Beschreibung, die links neben dem Filter-Feld angezeigt wird Optionaler Parameter Sofern keine Beschreibung angezeigt werden soll, wird der Parameter entweder nicht oder leer oder mit *Blanks gefüllt übergeben. Soll eine Beschreibung angezeigt werden, kann diese entweder direkt oder als Messa- B EN UT ZERHA ND BUC H 169 ge-Id angegeben werden. Bei Verwendung einer Message-Id muss die zugehörige Message-File in Directweb für die Anwendung hinterlegt sein. ParOptions Aufbereitungsoptionen Optionaler Parameter Vergl. 4.3.7 Aufbereitungsoptionen für Detail-Anzeigen ParCond Bedingungen unter denen das Ein-/Ausgabe-Feld angezeigt werden soll. Optionaler Parameter Werden in JavaScript konvertiert und zur Laufzeit ausgeführt ParHelp Bedienerhilfe Optionaler Parameter Kann wahlweise direkt als Text oder Message-Id angegeben werden. Als Hilfe-Text wird der Level 2 Message-Text verwendet. Sonderwert *NONE = automatische Ermittlung der Bediener-Hilfe unterbinden Beispiel für den Aufruf If GblKGId = *Zeros; Wx_ChgFld('KGTINR': %Addr(GblDSKGP.KGTINR): 'KXD0022': 'required ExecSQL(ITPWITITP)'); EndIf; Wx_ChgFld('KGINFOKZA': %Addr(GblDSKGP.KGINFOKZA): 'KXD0084': 'ExecSQL(ITPINFOKZ2) ' + LocDftOpt); Wx_ChgFld('KGINFOKZB': %Addr(GblDSKGP.KGINFOKZB): '': 'ExecSQL(ITPINFOKZ2) ' + LocDftOpt); //Event //Info-Kennz.1 //Info-Kennz.2 Wx_ChgFld('KGSTRDAT': %Addr(GblDSKGP.KGSTRDAT): 'KXD0035': //Startdatum LocDftOpt + ' NoNewLin Required'); Wx_ChgFld('KGSTRTIM': %Addr(GblDSKGP.KGSTRTIM): 'KXD0036': LocDftOpt);//Startzeit Wx_ChgFld('KGENDDAT': %Addr(GblDSKGP.KGENDDAT): 'KXD0039': //Endedatum LocDftOpt + ' NoNewLin Required'); Wx_ChgFld('KGENDTIM': %Addr(GblDSKGP.KGENDTIM): 'KXD0036': LocDftOpt);//Ende-Zeit Wx_ChgFld('KGHOTEL' Wx_ChgFld('KGHOTELSTR' Wx_ChgFld('KGHOTELORT' Wx_ChgFld('KGHOTELTEL' Wx_ChgFld('KGANFAHRT' : : : : : %Addr(GblDSKGP.KGHOTEL): 'KXD0041'); //Hotel %Addr(GblDSKGP.KGHOTELSTR); //Hotel – Strasse %Addr(GblDSKGP.KGHOTELORT); //Hotel - Ort %Addr(GblDSKGP.KGHOTELTEL); //Hotel - Telefon %Addr(GblDSKGP.KGANFAHRT): 'KXD0042'); //Hotel - Anfahrt Source Code 201 : Aufruf Prozedur Wx_ChgFld() Ein-/Ausgabe-Felder definieren B EN UT ZERHA ND BUC H 170 Abbildung 25 : Definierte Ein/Ausgabe-Felder - Ergebnis aus Source Code 173 4.18.7 Wx_ChgFileFld() Datei und 1.Feld definieren Sofern nur auf eine einzige physische Datei/Tabelle/View zugegriffen wird, kann die Datei/Tabelle/View über die Funktion WX_ChgFileFld() direkt zusammen mit dem ersten Ein-/Ausgabe-Feld definiert werden. Bei dieser Funktion wird die Datei/Tabelle/View als 1. Parameter übergeben. Die folgenden Parameter entsprechen den Parametern (Anzahl, Reihenfolge und Schlüssel-Wort CONST), die für Prozedur Wx_ChgFld() übergeben werden können. Prototype *************************************************************************** P* Procedure name: Wx_ChgFileFld P* Purpose: Define File and Field for Change Tables P* Returns: P* Parameters: ParFile => File P* Parameters: ParField => Field P* Parameters: ParPtr => Pointer to the original Field P* Parameters: ParMsg => Message-Id or Text P* Parameters: ParOptions => Options P* Parameters: ParCond => Conditions *************************************************************************** D Wx_ChgFileFld... D PR OPDesc D ParFile Like(FldRef.NameSQL) Const D ParField Like(FldRef.NameSQL) Const D ParPtr * Value D ParMsg Like(FldRef.MsgData) Const D ParOptions Like(FldRefCGI.Options) Const D Options(*NoPass) D ParCond Like(FldRefCGI.Cond) Const B EN UT ZERHA ND BUC H 171 D D D Options(*NoPass) Like(FldRefCGI.Help) Options(*NoPass: *Trim) ParHelp Const Source Code 202: Prototype - Prozedur Wx_FltFileFld() - Definiere Filter-Datei und 1.Feld Parameter ParFile Physische Datei/Tabelle/View Kann als kurzer System-Name (Max.10 Zeichen) oder langer SQL Name (Max. 128 Zeichen) angegeben werden. Analog Parameter ParFile1 in Funktion Wx_ChgFile() ParField Feld/Spalten-Name des Ein-/Ausgabe-Feldes Das Ein-/Ausgabe-Feld (der angegebene Feld-Name) muss in den zuvor definierten Tabellen vorhanden sein. Wahlweise kann der kurze System-Name oder der lange SQL Name angegeben werden. ParPtr Pointer auf das Ein-/Ausgabe-Feld Das Ein-/Ausgabe-Feld muss in einer der angegebenen Datei/Tabelle/View vorhanden und in einer Datenstruktur hinterlegt sein. Übergabe erfolgt in Verbindung mit der Built-In-Funktion %ADDR(). ParDescr Beschreibung, die links neben dem Ein-/Ausgabe-Feld angezeigt wird Optionaler Parameter Sofern keine Beschreibung angezeigt werden soll, wird der Parameter entweder nicht oder leer oder mit *Blanks gefüllt übergeben. Soll eine Beschreibung angezeigt werden, kann diese entweder direkt oder als Message-Id angegeben werden. Bei Verwendung einer Message-Id muss die zugehörige Message-File in Directweb für die Anwendung hinterlegt sein. ParOptions Aufbereitungsoptionen Optionaler Parameter Vergl. 4.3.7 Aufbereitungsoptionen für Detail-Anzeigen ParCond Bedingungen unter denen das Ein-/Ausgabe-Feld angezeigt werden soll. Optionaler Parameter Werden in JavaScript konvertiert und zur Laufzeit ausgeführt ParHelp Bedienerhilfe Optionaler Parameter Kann wahlweise direkt als Text oder Message-Id angegeben werden. Als Hilfe-Text wird der Level 2 Message-Text verwendet. Sonderwert *NONE = automatische Ermittlung der Bediener-Hilfe unterbinden Beispiele für den Aufruf B EN UT ZERHA ND BUC H 172 Wx_ChgFileFld('AdresseX': 'KundeNr': %Addr(DS.KundeNr): 'FLD0001': 'Range(000000, 999999) Right Required'); Wx_ChgFileFld('ArtikelBas': 'ArtikelNr': %Addr(ArtikelNr): 'FLD0008'); Source Code 203: Aufruf Prozedur Wx_FltFileFld() - Definieren Filter-File und 1. Feld 4.18.8 Definieren Arbeits-Felder/Variablen Für Change Tables ist es nicht erforderlich, dass alle Ein-/Ausgabe-Felder in den definierten Dateien/Tabellen/Views vorhanden sind. Für Change Tables können vielmehr auch Variablen, die in RPG entweder in den globalen oder lokalen D-Bestimmungen definiert wurden in WOPiXX registriert werden. Da der Datentyp und die Länge der Variablen nicht aus den definierten Tabellen ermittelt werden kann, ist es erforderlich, diese Informationen bei der Definition der Variablen in WOPiXX anzugeben. WOPiXX stellt mehrere Funktionen zur Registrierung von Arbeitsfeldern/Variablen in WOPiXX zur Verfügung: Wx_ManChgFld() Definieren Variable - Alle Datentypen Wx_ManChgFldChar() Definieren alphanumerische Variable mit fixer Länge Wx_ManChgFldVarChar() Definieren alphanumerische Variable mit variabler Länge Wx_ManChgFldUC2() Definieren Unicode-Variable mit fixer Länge Wx_ManChgFldVarUC2() Definieren Unicode-Variable mit variabler Länge Wx_ManChgFldPack() Definieren gepackte Variable Wx_ManChgFldZone() Definieren gezonte Variable Wx_ManChgFldInt() Definieren Integer-Variable Wx_ManChgFldFloat() Definieren Fließkomma-Variable Wx_ManChgFldDate() Definieren Datums-Variable Wx_ManChgFldTime() Definieren Zeit-Variable Wx_ManChgFldTimestamp() Definieren Zeitmarken-Variable Wx_ManChgFldRef() Definieren Variable basierend auf einem Referenz-Feld Anmerkung: Wie auch die Ein-/Ausgabe-Felder, die in Dateien/Tabellen/Views hinterlegt sind, müssen auch die Arbeits-Felder/Variablen als in RPG als Datenstruktur-Unterfelder definiert werden. Datums- und Zeitfelder sollten mit Datums- bzw. Zeit-Format *ISO definiert werden. B EN UT ZERHA ND BUC H 173 4.18.8.1 Wx_ManChgFld() typen Definieren Variable für jeden Daten- Mit der Prozedur Wx_ManChgFld() können Arbeitsfelder/Variablen mit jedem in RPG zulässigen Datentypen definiert werden. Prototype *************************************************************************** P* Procedure name: Wx_ManChgFld P* Purpose: Define Fields manually for Change Table P* Returns: P* Parameters: ParField => Field P* Parameters: ParPtr => Pointer to the original Field P* Parameters: ParMsg => Message-Id or Text P* Parameters: ParDataType => Data Type P* Parameters: ParLen => Length (Not Size!!!) P* Parameters: ParDecPos => Decimal Positions P* Parameters: ParOptions => Options P* Parameters: ParCond => Conditions P* Parameters: ParHelp => Help --> Special Value *NONE = No Help *************************************************************************** D Wx_ManChgFld... D PR OPDesc D ParField Like(FldRef.NameSQL) Const D ParPtr * Value D ParMsg Like(FldRef.MsgData) Const D ParDataType Like(FldRef.DataType) Const D ParLen 10I 0 Options(*NoPass) Const D ParDecPos 3I 0 Options(*NoPass) Const D ParDatFmt Like(FldRef.Text10V) Const D Options(*NoPass) D ParOptions Like(FldRefCGI.Options) Const D Options(*NoPass) D ParCond Like(FldRefCGI.Cond) Const D Options(*NoPass) D ParHelp Like(FldRefCGI.Help) Const D Options(*NoPass: *Trim) Source Code 204: Prozedur Wx_ManChgFld() - Definieren Variable für alle Datentypen Parameter ParField Eindeutige Kennung des Arbeitsfelds/Variable Die eindeutige Kennung muss nicht dem Namen der Variablen entsprechen, darf jedoch innerhalb der Change Table nur einmalig definiert werden. ParPtr Pointer auf das Arbeitsfeld/Variable Das Arbeitsfeld/Variable muss als Datenstruktur-Unterfeld definiert sein. ParDescr Beschreibung, die links neben dem Ein-/Ausgabe-Feld angezeigt wird Sofern keine Beschreibung angezeigt werden soll, wird der Parameter entweder leer oder mit *Blanks gefüllt übergeben. Soll eine Beschreibung angezeigt werden, kann diese entweder direkt oder als Message-Id angegeben werden. Bei Verwendung einer Message-Id muss die zugehörige Message-File in Directweb für B EN UT ZERHA ND BUC H 174 die Anwendung hinterlegt sein. ParDataType Datentyp in dem das Arbeitsfeld/Variable definiert wurde Der Datentyp kann entweder in DDS/RPG oder SQL-Schreibweise angegeben werden. Gültige Datentypen sind: Char / A alphanumerisch mit fixer Länge Single Byte Character Set (SBCS) VarChar / A + Option Varying alphanumerisch mit variabler Länge Single Byte Character Set (SBCS) Graphic / C Unicode mit fixer Länge Double Byte Character Set (DBCS) CCSID 13488 VarGraphic / C + Option Varying Unicode mit variabler Länge Double Byte Character Set (DBCS) CCSID 13488 Decimal / P gepackt numerisch Numeric / S gezont numerisch SmallInt /Integer / BigInt / I Ganzzahlig/Integer Float / Double / F Fließkomma Date / D Datum Time / T Zeit Timestamp / Z Zeitmarke ParLen ParDecPos Dezimal-Positionen Optionaler Parameter, nur für gepackte und gezonte numerische Arbeitsfelder/Variablen erforderlich. Länge des Arbeitsfeldes/Variable Optionaler Parameter, muss nur angegeben werden, sofern die Länge nicht allein durch den Datentypen definiert wurde. Ist die Länge erforderlich, muss die Anzahl der Zeichen (nicht Anzahl an Bytes) muss übergeben werden. Bei alphanumerischen und Unicode Feldern mit fixer Länge entspricht die Länge der definierten Länge. Bei alphanumerischen und Unicode Feldern mit variabler Länge entspricht die Länge der maximalen Länge. Bei gezonten und gepackten numerischen Feldern wird die Anzahl der Ziffern angegeben, d.h. Definition 11P 2 11 Sofern bei Integer- oder Fließkomma-Feldern der SQL-Datentyp übergeben wurde, ist die Längenangabe nicht erforderlich. Sofern bei Integer-Feldern der RPG Datentyp (I) angegeben wurde, muss die Länge so wie in RPG definiert angegeben werden, d.h. 5I 05. Sofern bei Fließkomma-Feldern der RPG Datentyp (F) verwendet wurde, muss die Länge so wie in RPG definiert angegeben werden, d.h. 8F 8. Für Datums-, Zeit- und Zeitmarken-Felder ist keine Längenangabe erforderlich. B EN UT ZERHA ND BUC H 175 ParDatFmt ParOptions Aufbereitungsoptionen Optionaler Parameter Vergl. 4.3.7 Aufbereitungsoptionen für Detail-Anzeigen ParCond Bedingungen unter denen das Ein-/Ausgabe-Feld angezeigt werden soll. Optionaler Parameter Werden in JavaScript konvertiert und zur Laufzeit ausgeführt ParHelp Bedienerhilfe Optionaler Parameter Kann wahlweise direkt als Text oder Message-Id angegeben werden. Als Hilfe-Text wird der Level 2 Message-Text verwendet. Sonderwert *NONE = automatische Ermittlung der Bediener-Hilfe unterbinden Datums- und Zeit-Formate Optionaler Parameter, nur für Datums- und Zeit-Arbeitsfelder/Variablen erforderlich. Die Angabe ist bei Datums- und Zeit-Feldern auch nur dann erforderlich, wenn diese Arbeitsfelder/Variablen in RPG nicht im *ISO-Format definiert wurden. Gültige Werte für die Datums- und Zeit-Formate sind: *ISO ISO-Datums-Format = JJJJ-MM-TT ISO-Zeit-Format = HH.MM.SS *EUR Europäisches Datum = TT.MM.JJJJ *USA Amerikanisches Datum = MM/TT/JJJJ Amerikansche Zeit = HH:MMam/PM *YMD Jahr/Monat/Tag Format = JJ-MM-TT *DMY Tag/Monat/Jahr Format = TT.MM.JJ *MDY Monat/Tag/Jahr Format = MM/TT/JJ *HMS Stunde/Minute/Sekunde = HH:MM:SS Beispiele für den Aufruf Wx_ManChgFld('LandBez': %Addr(GblLandBez): '': 'VARCHAR': %Size(GblLandBez) - 2: 0: '': 'DependList(File=LandBase, LaBez, LaLand=Land) '+ 'output '); Wx_ManChgFld('ERFDATE': %Addr(GblErfDate): Wx_ManChgFld('TOTAL': %Addr(GblTotal): 'Output'); 'Erfassungsdatum': 'Date'); 'Gesamt': 'P': 11: 2: '': Source Code 205: Aufruf Prozedur - Wx_ManChgFld() - Arbeitsfeld definieren 4.18.8.2 Wx_ManChgFldChar fixer Länge Def. alphanumerische Variable Mit Hilfe der Prozedur Wx_ManChgFldChar() können alphanumerische Arbeitsfelder/Variablen mit fixer Länge definiert werden. B EN UT ZERHA ND BUC H 176 Im Gegensatz zur Definition mit Prozedur Wx_ManChgFld() müssen nur die Informationen, die zur Erstellung von alphanumerischen Variablen mit fixer Länge erforderlich sind angegeben werden. Prototype *************************************************************************** P* Procedure name: Wx_ManChgFldChar P* Purpose: Define fixed Length Character Fields manually for Change Table P* Returns: P* Parameters: ParField => Field P* Parameters: ParPtr => Pointer to the original Field P* Parameters: ParMsg => Message-Id or Text P* Parameters: ParLen => Length P* Parameters: ParOptions => Options P* Parameters: ParCond => Conditions P* Parameters: ParHelp => Help --> Special Value *NONE = No Help *************************************************************************** D Wx_ManChgFldChar... D PR OPDesc D ParField Like(FldRef.NameSQL) Const D ParPtr * Value D ParMsg Like(FldRef.MsgData) Const D ParLen 10I 0 Const D ParOptions Like(FldRefCGI.Options) Const D Options(*NoPass) D ParCond Like(FldRefCGI.Cond) Const D Options(*NoPass) D ParHelp Like(FldRefCGI.Help) Const D Options(*NoPass: *Trim) Source Code 206: Prototype - Prozedur Wx_ManChgFldChar() - Definieren alphanumerische Variable mit fixer Länge Parameter ParField Eindeutige Kennung des Arbeitsfelds/Variable Die eindeutige Kennung muss nicht dem Namen der Variablen entsprechen, darf jedoch innerhalb der Change Table nur einmalig definiert werden. ParPtr Pointer auf das Arbeitsfeld/Variable Das Arbeitsfeld/Variable muss als Datenstruktur-Unterfeld definiert sein. ParDescr Beschreibung, die links neben dem Ein-/Ausgabe-Feld angezeigt wird Sofern keine Beschreibung angezeigt werden soll, wird der Parameter entweder leer oder mit *Blanks gefüllt übergeben. Soll eine Beschreibung angezeigt werden, kann diese entweder direkt oder als Message-Id angegeben werden. Bei Verwendung einer Message-Id muss die zugehörige Message-File in Directweb für die Anwendung hinterlegt sein. ParLen Länge des Arbeitsfeldes/Variable Die zu übergebende Länge entspricht der Längen-Definition der Variablen. Beispiel: Definition 256A Länge = 256 Die Länge kann direkt angegeben oder mit Hilfe der Built-In-Funktion %LEN() ermittelt werden. B EN UT ZERHA ND BUC H 177 ParOptions Aufbereitungsoptionen Optionaler Parameter Vergl. 4.3.7 Aufbereitungsoptionen für Detail-Anzeigen ParCond Bedingungen unter denen das Ein-/Ausgabe-Feld angezeigt werden soll. Optionaler Parameter Werden in JavaScript konvertiert und zur Laufzeit ausgeführt. ParHelp Bedienerhilfe Optionaler Parameter Kann wahlweise direkt als Text oder Message-Id angegeben werden. Als Hilfe-Text wird der Level 2 Message-Text verwendet. Sonderwert *NONE = automatische Ermittlung der Bediener-Hilfe unterbinden Beispiele für den Aufruf Wx_ManChgFldChar('KBDelete': %Addr(GblDS.KBDelete): 'Löschen': %Len(GblDS.KBDelete): 'CheckBox'); Wx_ManChgFldChar('KGINFOTEXA': %Addr(GblDS.KGINFOTEXA): '': %Len(GblDS.KGINFOTEXA): 'DependList(File=INFOFV05, ININTX, + ININCD=KGINFOKZA) output '); Wx_ManChgFldChar('SPNAME': %Addr(GblDS.SPNAME): '': %Len(GblDS.SPNAME)); Source Code 207: Aufruf - Prozedur Wx_ManChgFldChar() - Definieren alphanumerische Variable mit fixer Länge 4.18.8.3 Wx_ManChgFldVarChar ble variabler Länge Def. alphanumerische Varia- Mit Hilfe der Prozedur Wx_ManChgFldVarChar() können alphanumerische Arbeitsfelder/Variablen mit variabler Länge definiert werden. Im Gegensatz zur Definition mit Prozedur Wx_ManChgFld() müssen nur die Informationen, die zur Erstellung von alphanumerischen Variablen mit variabler Länge erforderlich sind angegeben werden. Prototype *************************************************************************** P* Procedure name: Wx_ManChgFldVarChar P* Purpose: Define fixed Length Character Fields manually for Change Table P* Returns: P* Parameters: ParField => Field P* Parameters: ParPtr => Pointer to the original Field P* Parameters: ParMsg => Message-Id or Text P* Parameters: ParLen => Length (= Maximum Length) P* Parameters: ParOptions => Options P* Parameters: ParCond => Conditions P* Parameters: ParHelp => Help --> Special Value *NONE = No Help *************************************************************************** D Wx_ManChgFldVarChar... B EN UT ZERHA ND BUC H 178 D D D D D D D D D D D PR ParField ParPtr ParMsg ParLen ParOptions ParCond ParHelp Like(FldRef.NameSQL) * Like(FldRef.MsgData) 10I 0 Like(FldRefCGI.Options) Options(*NoPass) Like(FldRefCGI.Cond) Options(*NoPass) Like(FldRefCGI.Help) Options(*NoPass: *Trim) OPDesc Const Value Const Const Const Const Const Source Code 208: Prototype - Prozedur Wx_ManChgFldVarChar() - Definieren alphanumerische Variable mit variabler Länge Parameter ParField Eindeutige Kennung des Arbeitsfelds/Variable Die eindeutige Kennung muss nicht dem Namen der Variablen entsprechen, darf jedoch innerhalb der Change Table nur einmalig definiert werden. ParPtr Pointer auf das Arbeitsfeld/Variable Das Arbeitsfeld/Variable muss als Datenstruktur-Unterfeld definiert sein. Der Pointer muss auf die Variable incl. der beiden führenden unsichtbaren Bytes in denen die Länge gespeichert ist zeigen und nicht auf die Daten) ParDescr Beschreibung, die links neben dem Ein-/Ausgabe-Feld angezeigt wird Sofern keine Beschreibung angezeigt werden soll, wird der Parameter entweder leer oder mit *Blanks gefüllt übergeben. Soll eine Beschreibung angezeigt werden, kann diese entweder direkt oder als Message-Id angegeben werden. Bei Verwendung einer Message-Id muss die zugehörige Message-File in Directweb für die Anwendung hinterlegt sein. ParLen Maximale Länge des Arbeitsfeldes/Variable Die zu übergebende Länge entspricht der maximalen Länge, die bei der Definition der Variablen angegeben wurde. Beispiel: Definition 256A varying Länge = 256 Ab Release 7.1 kann die maximale Länge mit Hilfe der Built-In-Funktion %LEN() ermittelt werden. %LEN(*Max: MyVar) Vor Release 7.1 kann die maximale Länge mit Hilfe der Built-In-Funktion %SIZE() abzüglich der führenden Bytes ermittelt werden: %SIZE(MyVar) 2 Die maximale Länge kann auch direkt im Parameter angegeben werden. ParOptions Aufbereitungsoptionen Optionaler Parameter Vergl. 4.3.7 Aufbereitungsoptionen für Detail-Anzeigen B EN UT ZERHA ND BUC H 179 ParCond Bedingungen unter denen das Ein-/Ausgabe-Feld angezeigt werden soll. Optionaler Parameter Werden in JavaScript konvertiert und zur Laufzeit ausgeführt. ParHelp Bedienerhilfe Optionaler Parameter Kann wahlweise direkt als Text oder Message-Id angegeben werden. Als Hilfe-Text wird der Level 2 Message-Text verwendet. Sonderwert *NONE = automatische Ermittlung der Bediener-Hilfe unterbinden Beispiele für den Aufruf Wx_ManChgFldVarChar('CSVFILE': %Addr(GblDS.CsvFile): 'KXD0093': %Size(GblDS.CsvFile) - 2: 'required'); Wx_ManChgFldVarChar('LINKHOTEL': %Addr(GblDS.LinkHotel): '': %Size(GblDS.LinkHotel) - 2: 'output iswww'); Wx_ManChgFldVarChar('GUTLAST': %Addr(GblDS.GutLast): 'Gutschrift/LastSchrift': %Size(GblDS.GutLast) - 2: 'ValuesList(' + %Trim(GblConstGut) + ', ' + %Trim(GblConstLast) + ') + required'); Source Code 209: Aufruf Prozedur Wx_ManChgFldVarChar() - Definieren alphanumerisches Feld mit variabler Länge 4.18.8.4 Wx_ManChgFldUC2 fixer Länge Definieren Unicode-Variable mit Mit Hilfe der Prozedur Wx_ManChgFldUC2() können Unicode-Arbeitsfelder/Variablen mit fixer Länge definiert werden. Im Gegensatz zur Definition mit Prozedur Wx_ManChgFld() müssen nur die Informationen, die zur Erstellung von Unicode-Variablen mit fixer Länge erforderlich sind angegeben werden. Prototype *************************************************************************** P* Procedure name: Wx_ManChgFldUC2 P* Purpose: Define fixed Length Unicode Fields manually for Change Table P* Returns: P* Parameters: ParField => Field P* Parameters: ParPtr => Pointer to the original Field P* Parameters: ParMsg => Message-Id or Text P* Parameters: ParLen => Length P* Parameters: ParOptions => Options P* Parameters: ParCond => Conditions P* Parameters: ParHelp => Help --> Special Value *NONE = No Help *************************************************************************** D Wx_ManChgFldUC2... D PR OPDesc D ParField Like(FldRef.NameSQL) Const D ParPtr * Value D ParMsg Like(FldRef.MsgData) Const D ParLen 10I 0 Const B EN UT ZERHA ND BUC H 180 D D D D D D ParOptions ParCond ParHelp Like(FldRefCGI.Options) Options(*NoPass) Like(FldRefCGI.Cond) Options(*NoPass) Like(FldRefCGI.Help) Options(*NoPass: *Trim) Const Const Const Source Code 210: Prototype - Prozedur Wx_ManChgFldUC2() - Definieren Unicode-Variable mit fixer Länge Parameter ParField Eindeutige Kennung des Arbeitsfelds/Variable Die eindeutige Kennung muss nicht dem Namen der Variablen entsprechen, darf jedoch innerhalb der Change Table nur einmalig definiert werden. ParPtr Pointer auf das Arbeitsfeld/Variable Das Arbeitsfeld/Variable muss als Datenstruktur-Unterfeld definiert sein. ParDescr Beschreibung, die links neben dem Ein-/Ausgabe-Feld angezeigt wird Sofern keine Beschreibung angezeigt werden soll, wird der Parameter entweder leer oder mit *Blanks gefüllt übergeben. Soll eine Beschreibung angezeigt werden, kann diese entweder direkt oder als Message-Id angegeben werden. Bei Verwendung einer Message-Id muss die zugehörige Message-File in Directweb für die Anwendung hinterlegt sein. ParLen Länge des Arbeitsfeldes/Variable Die zu übergebende Länge entspricht der Längen-Definition der Variablen. Beispiel: Definition 256C Länge = 256 Die Länge kann direkt angegeben oder mit Hilfe der Built-In-Funktion %LEN() ermittelt werden. ParOptions Aufbereitungsoptionen Optionaler Parameter Vergl. 4.3.7 Aufbereitungsoptionen für Detail-Anzeigen ParCond Bedingungen unter denen das Ein-/Ausgabe-Feld angezeigt werden soll. Optionaler Parameter Werden in JavaScript konvertiert und zur Laufzeit ausgeführt. ParHelp Bedienerhilfe Optionaler Parameter Kann wahlweise direkt als Text oder Message-Id angegeben werden. Als Hilfe-Text wird der Level 2 Message-Text verwendet. Sonderwert *NONE = automatische Ermittlung der Bediener-Hilfe unterbinden Beispiele für den Aufruf Wx_ManChgFldUC2('KundeName': %Addr(GblDS.KundeName): '': %Len(GblDS.LimdeMa,e): 'DependList(File=Kundst, KNDNAM, + B EN UT ZERHA ND BUC H 181 KNDNR=KundeNr) output '); Wx_ManChgFldUC2('SPNAME': %Addr(GblDS.SPNAME): '': %Len(GblDS.SPNAME)); Source Code 211: Aufruf - Prozedur Wx_ManChgFldUC2() - Definieren Unicode-Variable mit fixer Länge 4.18.8.5 Wx_ManChgFldVarUC2 mit variabler Länge Definieren Unicode-Variable Mit Hilfe der Prozedur Wx_ManChgFldVarUC() können Unicode-Arbeitsfelder/Variablen mit variabler Länge definiert werden. Im Gegensatz zur Definition mit Prozedur Wx_ManChgFld() müssen nur die Informationen, die zur Erstellung von Unicode-Variablen mit variabler Länge erforderlich sind angegeben werden. Prototype *************************************************************************** P* Procedure name: Wx_ManChgFldVarUC2 P* Purpose: Define fixed Length Unicode Fields manually for Change Table P* Returns: P* Parameters: ParField => Field P* Parameters: ParPtr => Pointer to the original Field P* Parameters: ParMsg => Message-Id or Text P* Parameters: ParLen => Length (= Maximum Length) P* Parameters: ParOptions => Options P* Parameters: ParCond => Conditions P* Parameters: ParHelp => Help --> Special Value *NONE = No Help *************************************************************************** D Wx_ManChgFldVarUC2... D PR OPDesc D ParField Like(FldRef.NameSQL) Const D ParPtr * Value D ParMsg Like(FldRef.MsgData) Const D ParLen 10I 0 Const D ParOptions Like(FldRefCGI.Options) Const D Options(*NoPass) D ParCond Like(FldRefCGI.Cond) Const D Options(*NoPass) D ParHelp Like(FldRefCGI.Help) Const D Options(*NoPass: *Trim) Source Code 212: Prototype - Prozedur Wx_ManChgFldVarChar() - Definieren Unicode-Variable mit variabler Länge Parameter ParField ParPtr Eindeutige Kennung des Arbeitsfelds/Variable Die eindeutige Kennung muss nicht dem Namen der Variablen entsprechen, darf jedoch innerhalb der Change Table nur einmalig definiert werden. Pointer auf das Arbeitsfeld/Variable Das Arbeitsfeld/Variable muss als Datenstruktur-Unterfeld definiert sein. Der Pointer muss auf die Variable incl. der (beiden) führenden unsichtbaren Bytes in denen die Länge gespeichert ist zeigen und nicht auf die Daten) B EN UT ZERHA ND BUC H 182 ParDescr Beschreibung, die links neben dem Ein-/Ausgabe-Feld angezeigt wird Sofern keine Beschreibung angezeigt werden soll, wird der Parameter entweder leer oder mit *Blanks gefüllt übergeben. Soll eine Beschreibung angezeigt werden, kann diese entweder direkt oder als Message-Id angegeben werden. Bei Verwendung einer Message-Id muss die zugehörige Message-File in Directweb für die Anwendung hinterlegt sein. ParLen Maximale Länge des Arbeitsfeldes/Variable Die zu übergebende Länge entspricht der maximalen Länge, die bei der Definition der Variablen angegeben wurde. Beispiel: Definition 256C varying Länge = 256 Ab Release 7.1 kann die maximale Länge mit Hilfe der Built-In-Funktion %LEN() ermittelt werden. %LEN(*Max: MyVar) Die maximale Länge kann auch direkt im Parameter angegeben werden. ParOptions Aufbereitungsoptionen Optionaler Parameter Vergl. 4.3.7 Aufbereitungsoptionen für Detail-Anzeigen ParCond Bedingungen unter denen das Ein-/Ausgabe-Feld angezeigt werden soll. Optionaler Parameter Werden in JavaScript konvertiert und zur Laufzeit ausgeführt. ParHelp Bedienerhilfe Optionaler Parameter Kann wahlweise direkt als Text oder Message-Id angegeben werden. Als Hilfe-Text wird der Level 2 Message-Text verwendet. Sonderwert *NONE = automatische Ermittlung der Bediener-Hilfe unterbinden Beispiele für den Aufruf Wx_ManChgFldVarUC2('LINKHOTEL': %Addr(GblDS.LinkHotel): '': %Size(GblDS.LinkHotel) - 2: 'output iswww'); Wx_ManChgFldVarUC2('GUTLAST': %Addr(GblDS.GutLast): 'Gutschrift/LastSchrift': %Size(GblDS.GutLast) - 2: 'ValuesList(' + %Trim(GblConstGut) + ', ' + %Trim(GblConstLast) + ') + required'); Source Code 213: Aufruf Prozedur Wx_ManChgFldVarUC2() - Definieren Unicode-Variable mit variabler Länge B EN UT ZERHA ND BUC H 183 4.18.8.6 Wx_ManChgFldPack() sche Variable Definieren gepackte numeri- Mit Hilfe der Prozedur Wx_ManChgFldPack() können gepackte numerische Arbeitsfelder/Variablen definiert werden. Im Gegensatz zur Definition mit Prozedur Wx_ManChgFld() müssen nur die Informationen, die zur Erstellung von gepackten numerischen Variablen erforderlich sind angegeben werden. Prototype ****************************************************************************** P* Procedure name: Wx_ManChgFldPack P* Purpose: Define packed numeric fields manually for Change Table P* Returns: P* Parameters: ParField => Field P* Parameters: ParPtr => Pointer to the original Field P* Parameters: ParMsg => Message-Id or Text P* Parameters: ParLen => Length (Not! Size) P* Parameters: ParDecPos => Decimal Positions P* Parameters: ParOptions => Options P* Parameters: ParCond => Conditions P* Parameters: ParHelp => Help --> Special Value *NONE = No Help ****************************************************************************** D Wx_ManChgFldPack... D PR OPDesc D ParField Like(FldRef.NameSQL) Const Fie D ParPtr * Value Poi D ParMsg Like(FldRef.MsgData) Const Mes D ParLen 10I 0 Const Len D ParDecPos 3U 0 Options(*NoPass) Const Dec D ParOptions Like(FldRefCGI.Options) Const D Options(*NoPass) D ParCond Like(FldRefCGI.Cond) Const Con D Options(*NoPass) D ParHelp Like(FldRefCGI.Help) Const Hel D Options(*NoPass: *Trim) Source Code 214: Prototype - Prozedur Wx_ManChgFldPack() - Definieren gepackte numerische Variable Parameter ParField Eindeutige Kennung des Arbeitsfelds/Variable Die eindeutige Kennung muss nicht dem Namen der Variablen entsprechen, darf jedoch innerhalb der Change Table nur einmalig definiert werden. ParPtr Pointer auf das Arbeitsfeld/Variable Das Arbeitsfeld/Variable muss als Datenstruktur-Unterfeld definiert sein. ParDescr Beschreibung, die links neben dem Ein-/Ausgabe-Feld angezeigt wird Sofern keine Beschreibung angezeigt werden soll, wird der Parameter entweder leer oder mit *Blanks gefüllt übergeben. Soll eine Beschreibung angezeigt werden, kann diese entweder direkt oder als Message-Id angegeben werden. Bei Verwendung einer Message-Id muss die zugehörige Message-File in Directweb für B EN UT ZERHA ND BUC H 184 die Anwendung hinterlegt sein. ParLen ParDecPos Dezimal-Positionen Optionaler Parameter Sofern der Parameter nicht angegeben wurde, werden 0 (*Zeros) Nachkommastellen angenommen. ParOptions Aufbereitungsoptionen Optionaler Parameter Vergl. 4.3.7 Aufbereitungsoptionen für Detail-Anzeigen ParCond Bedingungen unter denen das Ein-/Ausgabe-Feld angezeigt werden soll. Optionaler Parameter Werden in JavaScript konvertiert und zur Laufzeit ausgeführt ParHelp Bedienerhilfe Optionaler Parameter Kann wahlweise direkt als Text oder Message-Id angegeben werden. Als Hilfe-Text wird der Level 2 Message-Text verwendet. Sonderwert *NONE = automatische Ermittlung der Bediener-Hilfe unterbinden Länge des Arbeitsfeldes/Variable Bei gezonten und gepackten numerischen Variablen/Arbeitsfeldern wird die Anzahl der Ziffern angegeben, Beispiel: Definition 11P 2 11 Beispiele für den Aufruf Wx_ManChgFldPack('NUMDATE': %Addr(GblDS.NumDate): 'Datum': %Len(GblDS.NumDate): *Zeros: ' Output DateNum'); Wx_ManChgFldPack('TOTAL': %Addr(GblDS.Total): 'Gesamt in Euro': 11: 2); Source Code 215: Aufruf Prozedur Wx_ManChgFldPack() - Definieren gepackt numerische Variablen 4.18.8.7 Wx_ManChgFldZone() Variable Definieren gezonte numerische Mit Hilfe der Prozedur Wx_ManChgFldZone() können gezonte numerische Arbeitsfelder/Variablen definiert werden. Im Gegensatz zur Definition mit Prozedur Wx_ManChgFld() müssen nur die Informationen, die zur Erstellung von gezonten numerischen Variablen erforderlich sind angegeben werden. Prototype B EN UT ZERHA ND BUC H 185 *************************************************************************** P* Procedure name: Wx_ManChgFldZone P* Purpose: Define Zoned numeric fields manually for Change Table P* Returns: P* Parameters: ParField => Field P* Parameters: ParPtr => Pointer to the original Field P* Parameters: ParMsg => Message-Id or Text P* Parameters: ParLen => Length (Not! Size) P* Parameters: ParDecPos => Numeric Positions P* Parameters: ParOptions => Options P* Parameters: ParCond => Conditions P* Parameters: ParHelp => Help --> Special Value *NONE = No Help *************************************************************************** D Wx_ManChgFldZone... D PR OPDesc D ParField Like(FldRef.NameSQL) Const D ParPtr * Value D ParMsg Like(FldRef.MsgData) Const D ParLen 10I 0 Const D ParDecPos 3U 0 Options(*NoPass) Const D ParOptions Like(FldRefCGI.Options) Const D Options(*NoPass) D ParCond Like(FldRefCGI.Cond) Const D Options(*NoPass) D ParHelp Like(FldRefCGI.Help) Const D Options(*NoPass: *Trim) Source Code 216: Prototype - Prozedur Wx_ManChgFldZone() - Definieren gezonte numerische Variable Parameter ParField Eindeutige Kennung des Arbeitsfelds/Variable Die eindeutige Kennung muss nicht dem Namen der Variablen entsprechen, darf jedoch innerhalb der Change Table nur einmalig definiert werden. ParPtr Pointer auf das Arbeitsfeld/Variable Das Arbeitsfeld/Variable muss als Datenstruktur-Unterfeld definiert sein. ParDescr Beschreibung, die links neben dem Ein-/Ausgabe-Feld angezeigt wird Sofern keine Beschreibung angezeigt werden soll, wird der Parameter entweder leer oder mit *Blanks gefüllt übergeben. Soll eine Beschreibung angezeigt werden, kann diese entweder direkt oder als Message-Id angegeben werden. Bei Verwendung einer Message-Id muss die zugehörige Message-File in Directweb für die Anwendung hinterlegt sein. ParLen Länge des Arbeitsfeldes/Variable Bei gezonten und gepackten numerischen Variablen/Arbeitsfeldern wird die Anzahl der Ziffern angegeben, Beispiel: Definition 11S 2 11 ParDecPos Dezimal-Positionen Optionaler Parameter Sofern der Parameter nicht angegeben wurde, werden 0 (*Zeros) Nachkommastellen angenommen. B EN UT ZERHA ND BUC H 186 ParOptions Aufbereitungsoptionen Optionaler Parameter Vergl. 4.3.7 Aufbereitungsoptionen für Detail-Anzeigen ParCond Bedingungen unter denen das Ein-/Ausgabe-Feld angezeigt werden soll. Optionaler Parameter Werden in JavaScript konvertiert und zur Laufzeit ausgeführt ParHelp Bedienerhilfe Optionaler Parameter Kann wahlweise direkt als Text oder Message-Id angegeben werden. Als Hilfe-Text wird der Level 2 Message-Text verwendet. Sonderwert *NONE = automatische Ermittlung der Bediener-Hilfe unterbinden Beispiele für den Aufruf Wx_ManChgFldZone ('NUMDATE': %Addr(GblDS.NumDate): 'Datum': %Len(GblDS.NumDate): *Zeros: ' Output DateNum'); Wx_ManChgFldZone('TOTAL': %Addr(GblDS.Total): 'Gesamt in Euro': 11: 2); Source Code 217: Aufruf Prozedur Wx_ManChgFldZone() - Definieren gezont numerische Variablen 4.18.8.8 Wx_ManChgFldInt() Definieren ganzzahlige Variable Mit Hilfe der Prozedur Wx_ManChgFldInt() können ganzzahlige (Integer) Arbeitsfelder/Variablen definiert werden. Im Gegensatz zur Definition mit Prozedur Wx_ManChgFld() müssen nur die Informationen, die zur Erstellung von ganzzahligen (Integer) Variablen erforderlich sind angegeben werden. Prototype *************************************************************************** P* Procedure name: Wx_ManChgFldInt P* Purpose: Define Integer numeric fields manually for Change Table P* Returns: P* Parameters: ParField => Field P* Parameters: ParPtr => Pointer to the original Field P* Parameters: ParMsg => Message-Id or Text P* Parameters: ParLen => Length (Not! Size) P* Parameters: ParOptions => Options P* Parameters: ParCond => Conditions P* Parameters: ParHelp => Help --> Special Value *NONE = No Help *************************************************************************** D Wx_ManChgFldInt... D PR OPDesc D ParField Like(FldRef.NameSQL) Const D ParPtr * Value D ParMsg Like(FldRef.MsgData) Const D ParLen 10I 0 Const D ParOptions Like(FldRefCGI.Options) Const D Options(*NoPass) D ParCond Like(FldRefCGI.Cond) Const B EN UT ZERHA ND BUC H 187 D D D Options(*NoPass) Like(FldRefCGI.Help) Options(*NoPass: *Trim) ParHelp Const Source Code 218: Prototype - Prozedur Wx_ManChgFldInt() - Definieren ganzzahlige/Integer-Variable Parameter ParField Eindeutige Kennung des Arbeitsfelds/Variable Die eindeutige Kennung muss nicht dem Namen der Variablen entsprechen, darf jedoch innerhalb der Change Table nur einmalig definiert werden. ParPtr Pointer auf das Arbeitsfeld/Variable Das Arbeitsfeld/Variable muss als Datenstruktur-Unterfeld definiert sein. ParDescr Beschreibung, die links neben dem Ein-/Ausgabe-Feld angezeigt wird Sofern keine Beschreibung angezeigt werden soll, wird der Parameter entweder leer oder mit *Blanks gefüllt übergeben. Soll eine Beschreibung angezeigt werden, kann diese entweder direkt oder als Message-Id angegeben werden. Bei Verwendung einer Message-Id muss die zugehörige Message-File in Directweb für die Anwendung hinterlegt sein. ParLen Länge des Arbeitsfeldes/Variable Zur Definition von Integer-Variablen sind nur die folgenden Längenangaben zulässig: Small Integer Länge = 5 Integer Länge = 10 Big Integer Länge = 20 ParOptions Aufbereitungsoptionen Optionaler Parameter Vergl. 4.3.7 Aufbereitungsoptionen für Detail-Anzeigen ParCond Bedingungen unter denen das Ein-/Ausgabe-Feld angezeigt werden soll. Optionaler Parameter Werden in JavaScript konvertiert und zur Laufzeit ausgeführt ParHelp Bedienerhilfe Optionaler Parameter Kann wahlweise direkt als Text oder Message-Id angegeben werden. Als Hilfe-Text wird der Level 2 Message-Text verwendet. Sonderwert *NONE = automatische Ermittlung der Bediener-Hilfe unterbinden Beispiele für den Aufruf Wx_ManChgFldInt ('Counter': %Addr(GblDS.Counter): 'Zähler': %Len(GblDS.Counter): ' Output'); Wx_ManChgFldInt('Stueck': %Addr(GblDS.Stueck): 'Anzahl': 10); Source Code 219: Aufruf Prozedur Wx_ManChgFldInt() - Definieren ganzzahlige/Integer Variablen B EN UT ZERHA ND BUC H 188 4.18.8.9 Wx_ManChgFldFloat() Definieren Fließkomma-Variable Mit Hilfe der Prozedur Wx_ManChgFldFloat() können Fließkomma-Arbeitsfelder/Variablen definiert werden. Im Gegensatz zur Definition mit Prozedur Wx_ManChgFld() müssen nur die Informationen, die zur Erstellung von Fließkomma-Variablen erforderlich sind angegeben werden. Prototype *************************************************************************** P* Procedure name: Wx_ManChgFldFloat P* Purpose: Define Float numeric fields manually for Change Table P* Returns: P* Parameters: ParField => Field P* Parameters: ParPtr => Pointer to the original Field P* Parameters: ParMsg => Message-Id or Text P* Parameters: ParLen => Length (Not! Size) P* Parameters: ParOptions => Options P* Parameters: ParCond => Conditions P* Parameters: ParHelp => Help --> Special Value *NONE = No Help *************************************************************************** D Wx_ManChgFldFloat... D PR OPDesc D ParField Like(FldRef.NameSQL) Const D ParPtr * Value D ParMsg Like(FldRef.MsgData) Const D ParLen 10I 0 Const D ParOptions Like(FldRefCGI.Options) Const D Options(*NoPass) D ParCond Like(FldRefCGI.Cond) Const D Options(*NoPass) D ParHelp Like(FldRefCGI.Help) Const D Options(*NoPass: *Trim) Source Code 220: Prototype - Prozedur Wx_ManChgFldFloat() - Definieren Fließkomma-Variable Parameter ParField Eindeutige Kennung des Arbeitsfelds/Variable Die eindeutige Kennung muss nicht dem Namen der Variablen entsprechen, darf jedoch innerhalb der Change Table nur einmalig definiert werden. ParPtr Pointer auf das Arbeitsfeld/Variable Das Arbeitsfeld/Variable muss als Datenstruktur-Unterfeld definiert sein. ParDescr Beschreibung, die links neben dem Ein-/Ausgabe-Feld angezeigt wird Sofern keine Beschreibung angezeigt werden soll, wird der Parameter entweder leer oder mit *Blanks gefüllt übergeben. Soll eine Beschreibung angezeigt werden, kann diese entweder direkt oder als Message-Id angegeben werden. Bei Verwendung einer Message-Id muss die zugehörige Message-File in Directweb für die Anwendung hinterlegt sein. ParLen Länge des Arbeitsfeldes/Variable Zur Definition von Fließkomma-Variablen sind nur die folgenden Längenangaben zuläs- B EN UT ZERHA ND BUC H 189 sig: Float Double Länge = 4 Länge = 8 ParOptions Aufbereitungsoptionen Optionaler Parameter Vergl. 4.3.7 Aufbereitungsoptionen für Detail-Anzeigen ParCond Bedingungen unter denen das Ein-/Ausgabe-Feld angezeigt werden soll. Optionaler Parameter Werden in JavaScript konvertiert und zur Laufzeit ausgeführt ParHelp Bedienerhilfe Optionaler Parameter Kann wahlweise direkt als Text oder Message-Id angegeben werden. Als Hilfe-Text wird der Level 2 Message-Text verwendet. Beispiele für den Aufruf Sonderwert *NONE = automatische Ermittlung der Bediener-Hilfe unterbinden Beispiele für den Aufruf Wx_ManChgFldFloat('MyFloat': %Addr(GblDS.MyFloat): 'TXT0018': %Len(GblDS.MyFloat): ' Output'); Wx_ManChgFldFloat('MyFloat2': %Addr(GblDS.MyFloat2): 'Beschreibung': 8); Source Code 221: Aufruf Prozedur Wx_ManChgFldFloat() - Definieren Fließkomma-Variable 4.18.8.10 Wx_ManChgFldDate() Variable Definieren Datums- Mit Hilfe der Prozedur Wx_ManChgFldDate() können Datums-Arbeitsfelder/Variablen definiert werden. Im Gegensatz zur Definition mit Prozedur Wx_ManChgFld() müssen nur die Informationen, die zur Erstellung von Datums-Variablen erforderlich sind angegeben werden. Prototype *************************************************************************** P* Procedure name: Wx_ManChgFldDate P* Purpose: Define Date fields manually for Change Table P* Returns: P* Parameters: ParField => Field P* Parameters: ParPtr => Pointer to the original Field P* Parameters: ParMsg => Message-Id or Text P* Parameters: ParDatFmt => Date Format P* Parameters: ParOptions => Options P* Parameters: ParCond => Conditions P* Parameters: ParHelp => Help --> Special Value *NONE = No Help *************************************************************************** D Wx_ManChgFldDate... D PR OPDesc D ParField Like(FldRef.NameSQL) Const B EN UT ZERHA ND BUC H 190 D D D D D D D D D D D ParPtr ParMsg * PInDatFmt ParOptions ParCond ParHelp Like(FldRef.MsgData) Options(*NoPass) Like(FldRef.Text10V) Options(*NoPass) Like(FldRefCGI.Options) Options(*NoPass) Like(FldRefCGI.Cond) Options(*NoPass) Like(FldRefCGI.Help) Options(*NoPass: *Trim) Value Const Const Const Const Const Source Code 222: Prototype - Prozedur Wx_ManChgFldDate() - Definieren Datums-Variable Parameter ParField Eindeutige Kennung des Arbeitsfelds/Variable Die eindeutige Kennung muss nicht dem Namen der Variablen entsprechen, darf jedoch innerhalb der Change Table nur einmalig definiert werden. ParPtr Pointer auf das Arbeitsfeld/Variable Das Arbeitsfeld/Variable muss als Datenstruktur-Unterfeld definiert sein. ParDescr Beschreibung, die links neben dem Ein-/Ausgabe-Feld angezeigt wird Optionaler Parameter Sofern keine Beschreibung angezeigt werden soll, wird der Parameter entweder nicht, leer oder mit *Blanks gefüllt übergeben. Soll eine Beschreibung angezeigt werden, kann diese entweder direkt oder als Message-Id angegeben werden. Bei Verwendung einer Message-Id muss die zugehörige Message-File in Directweb für die Anwendung hinterlegt sein. ParDatFmt Datums-Format Optionaler Parameter Wird das Datumsformat nicht angegeben, so wird davon ausgegangen, dass das *ISO-Format verwendet wird. Die folgenden Datumsformate sind zulässig *ISO ISO-Datums-Format = JJJJ-MM-TT *EUR Europäisches Datum = TT.MM.JJJJ *USA Amerikanisches Datum = MM/TT/JJJJ *YMD Jahr/Monat/Tag Format = JJ-MM-TT *DMY Tag/Monat/Jahr Format = TT.MM.JJ *MDY Monat/Tag/Jahr Format = MM/TT/JJ ParOptions Aufbereitungsoptionen Optionaler Parameter Vergl. 4.3.7 Aufbereitungsoptionen für Detail-Anzeigen ParCond Bedingungen unter denen das Ein-/Ausgabe-Feld angezeigt werden soll. Optionaler Parameter Werden in JavaScript konvertiert und zur Laufzeit ausgeführt B EN UT ZERHA ND BUC H 191 ParHelp Bedienerhilfe Optionaler Parameter Kann wahlweise direkt als Text oder Message-Id angegeben werden. Als Hilfe-Text wird der Level 2 Message-Text verwendet. Sonderwert *NONE = automatische Ermittlung der Bediener-Hilfe unterbinden Beispiele für den Aufruf Wx_ManChgFldDate('FAKTURADAT': %Addr(GblDS.FakturaDat): 'KXD0065'); Wx_ManChgFldDate('StornoDat': %Addr(GblDS.StornoDat): 'Storno-Datum': '*EUR': ' Output '); Source Code 223: Aufruf Prozedur Wx_ManChgFldDate() - Definieren Datums-Variable 4.18.8.11 Wx_ManChgFldTime() Definieren Zeit-Variable Mit Hilfe der Prozedur Wx_ManChgFldTime() können Zeit-Arbeitsfelder/Variablen definiert werden. Im Gegensatz zur Definition mit Prozedur Wx_ManChgFld() müssen nur die Informationen, die zur Erstellung von Zeit-Variablen erforderlich sind angegeben werden. Prototype *************************************************************************** P* Procedure name: Wx_ManChgFldTime P* Purpose: Define Time fields manually for Change Table P* Returns: P* Parameters: ParField => Field P* Parameters: ParPtr => Pointer to the original Field P* Parameters: ParMsg => Message-Id or Text P* Parameters: ParOptions => Options P* Parameters: ParCond => Conditions P* Parameters: ParHelp => Help --> Special Value *NONE = No H *************************************************************************** D Wx_ManChgFldTime... D PR OPDesc D ParField Like(FldRef.NameSQL) Const D ParPtr * Value D ParMsg Like(FldRef.MsgData) Const D Options(*NoPass) D ParOptions Like(FldRefCGI.Options) Const D Options(*NoPass) D ParCond Like(FldRefCGI.Cond) Const D Options(*NoPass) D ParHelp Like(FldRefCGI.Help) Const D Options(*NoPass: *Trim) Source Code 224: Prototype - Prozedur Wx_ManChgFldTime() - Definieren Zeit-Variable Parameter ParField Eindeutige Kennung des Arbeitsfelds/Variable Die eindeutige Kennung muss nicht dem Namen der Variablen entsprechen, darf je- B EN UT ZERHA ND BUC H 192 doch innerhalb der Change Table nur einmalig definiert werden. ParPtr Pointer auf das Arbeitsfeld/Variable Das Arbeitsfeld/Variable muss als Datenstruktur-Unterfeld definiert sein. ParDescr Beschreibung, die links neben dem Ein-/Ausgabe-Feld angezeigt wird. Optionaler Parameter Sofern keine Beschreibung angezeigt werden soll, wird der Parameter entweder nicht, leer oder mit *Blanks gefüllt übergeben. Soll eine Beschreibung angezeigt werden, kann diese entweder direkt oder als Message-Id angegeben werden. Bei Verwendung einer Message-Id muss die zugehörige Message-File in Directweb für die Anwendung hinterlegt sein. ParOptions Aufbereitungsoptionen Optionaler Parameter Vergl. 4.3.7 Aufbereitungsoptionen für Detail-Anzeigen ParCond Bedingungen unter denen das Ein-/Ausgabe-Feld angezeigt werden soll. Optionaler Parameter Werden in JavaScript konvertiert und zur Laufzeit ausgeführt ParHelp Bedienerhilfe Optionaler Parameter Kann wahlweise direkt als Text oder Message-Id angegeben werden. Als Hilfe-Text wird der Level 2 Message-Text verwendet. Sonderwert *NONE = automatische Ermittlung der Bediener-Hilfe unterbinden Beispiele für den Aufruf Wx_ManChgFldTime('FAKTURATIM': %Addr(GblDS.FakturaTim): 'KXD0067'); Wx_ManChgFldTime('StornoTim': %Addr(GblDS.StornoTim): 'Storno-Zeit': ' Output '); Source Code 225: Aufruf Prozedur Wx_ManChgFldTime() - Definieren Zeit-Variable 4.18.8.12 Wx_ManChgFldTimestamp() Variable Definieren Zeit- Mit Hilfe der Prozedur Wx_ManChgFldTimestamp() können Zeitmarken-Arbeitsfelder/Variablen definiert werden. Im Gegensatz zur Definition mit Prozedur Wx_ManChgFld() müssen nur die Informationen, die zur Erstellung von Zeitmarken-Variablen erforderlich sind angegeben werden. Prototype B EN UT ZERHA ND BUC H 193 *************************************************************************** P* Procedure name: Wx_ManChgFldTimestamp P* Purpose: Define Timestamp fields manually for Change Table P* Returns: P* Parameters: ParField => Field P* Parameters: ParPtr => Pointer to the original Field P* Parameters: ParMsg => Message-Id or Text P* Parameters: ParOptions => Options P* Parameters: ParCond => Conditions P* Parameters: ParHelp => Help --> Special Value *NONE = No Help *************************************************************************** D Wx_ManChgFldTimestamp... D PR OPDesc D ParField Like(FldRef.NameSQL) Const D ParPtr * Value D ParMsg Like(FldRef.MsgData) Const D Options(*NoPass) D ParOptions Like(FldRefCGI.Options) Const D Options(*NoPass) D ParCond Like(FldRefCGI.Cond) Const D Options(*NoPass) D ParHelp Like(FldRefCGI.Help) Const D Options(*NoPass: *Trim) Source Code 226: Prototype - Prozedur Wx_ManChgFldTimestamp() - Definieren Zeitmarken-Variable Parameter ParField Eindeutige Kennung des Arbeitsfelds/Variable Die eindeutige Kennung muss nicht dem Namen der Variablen entsprechen, darf jedoch innerhalb der Change Table nur einmalig definiert werden. ParPtr Pointer auf das Arbeitsfeld/Variable Das Arbeitsfeld/Variable muss als Datenstruktur-Unterfeld definiert sein. ParDescr Beschreibung, die links neben dem Ein-/Ausgabe-Feld angezeigt wird. Optionaler Parameter Sofern keine Beschreibung angezeigt werden soll, wird der Parameter entweder nicht, leer oder mit *Blanks gefüllt übergeben. Soll eine Beschreibung angezeigt werden, kann diese entweder direkt oder als Message-Id angegeben werden. Bei Verwendung einer Message-Id muss die zugehörige Message-File in Directweb für die Anwendung hinterlegt sein. ParOptions Aufbereitungsoptionen Optionaler Parameter Vergl. 4.3.7 Aufbereitungsoptionen für Detail-Anzeigen ParCond Bedingungen unter denen das Ein-/Ausgabe-Feld angezeigt werden soll. Optionaler Parameter Werden in JavaScript konvertiert und zur Laufzeit ausgeführt ParHelp Bedienerhilfe Optionaler Parameter Kann wahlweise direkt als Text oder Message-Id angegeben werden. Als Hilfe-Text B EN UT ZERHA ND BUC H 194 wird der Level 2 Message-Text verwendet. Sonderwert *NONE = automatische Ermittlung der Bediener-Hilfe unterbinden Beispiele für den Aufruf Wx_ManChgFldTimestamp('FAKTURATSP': %Addr(GblDS.FakturaTSp): 'KXD0060'); Wx_ManChgFldTimestamp('StornoTSP': %Addr(GblDS.StornoTSP): 'Storno-Datum/Zeit': ' Output '); Source Code 227: Aufruf Prozedur Wx_ManChgFldTimestamp() - Definieren Zeitmarken-Variable 4.18.8.13 Wx_ManChgFldRef() rend auf Referenz-Feld Definieren Variable basie- Mit Hilfe der Prozedur Wx_ManChgFldRef() können Arbeitsfelder/Variablen basierend auf der Definition von anderen Feldern definiert werden. Prototype *************************************************************************** P* Procedure name: Wx_ManChgFldRef P* Purpose: Define Fields manually with field reference for Change Ta P* Returns: P* Parameters: ParField => Field P* Parameters: ParPtr => Pointer to the original Field P* Parameters: ParMsg => Message-Id or Text P* Parameters: ParOptions => Options P* Parameters: ParCond => Conditions P* Parameters: ParNavTab => Navigation Tabs P* Parameters: ParFile => File P* Parameters: ParLib => Library P* Parameters: ParHelp => Help --> Special Value *NONE = No H *************************************************************************** D Wx_ManChgFldRef... D PR OPDesc D ParField Like(FldRef.NameSQL) Const D ParPtr * Value D ParRefField Like(FldRef.NameSQL) Const D ParMsg Like(FldRef.MsgData) Const D Options(*NoPass) D ParOptions Like(FldRefCGI.Options) Const D Options(*NoPass) D ParCond Like(FldRefCGI.Cond) Const D Options(*NoPass) D ParNavTab Like(FldRef.Text15V) Const D Options(*NoPass) D ParFile Like(FldRef.NameSQL) Const D Options(*NoPass) D ParLib Like(FldRef.Lib) Const D Options(*NoPass) D ParHelp Like(FldRefCGI.Help) Const D Options(*NoPass: *Trim) Source Code 228: Prototype - Prozedur Wx_ManChgFldRef() - Definieren Variable über Referenz-Feld Parameter B EN UT ZERHA ND BUC H 195 ParField Eindeutige Kennung des Arbeitsfelds/Variable Die eindeutige Kennung muss nicht dem Namen der Variablen entsprechen, darf jedoch innerhalb der Change Table nur einmalig definiert werden. ParPtr Pointer auf das Arbeitsfeld/Variable Das Arbeitsfeld/Variable muss als Datenstruktur-Unterfeld definiert sein. ParRefField Referenz-Feld Das Referenz-Feld muss in einer der Dateien/Tabellen/Views, die über die Funktion Wx_ChgFile() definiert wurden hinterlegt sein. ParDescr ParOptions Aufbereitungsoptionen Optionaler Parameter Vergl. 4.3.7 Aufbereitungsoptionen für Detail-Anzeigen ParCond Bedingungen unter denen das Ein-/Ausgabe-Feld angezeigt werden soll. Optionaler Parameter Werden in JavaScript konvertiert und zur Laufzeit ausgeführt ParHelp Bedienerhilfe Optionaler Parameter Kann wahlweise direkt als Text oder Message-Id angegeben werden. Als Hilfe-Text wird der Level 2 Message-Text verwendet. Sonderwert *NONE = automatische Ermittlung der Bediener-Hilfe unterbinden Beschreibung, die links neben dem Ein-/Ausgabe-Feld angezeigt wird. Optionaler Parameter Sofern keine Beschreibung angezeigt werden soll, wird der Parameter entweder nicht, leer oder mit *Blanks gefüllt übergeben. Soll eine Beschreibung angezeigt werden, kann diese entweder direkt oder als Message-Id angegeben werden. Bei Verwendung einer Message-Id muss die zugehörige Message-File in Directweb für die Anwendung hinterlegt sein. Beispiele für den Aufruf Wx_ManChgFldTimestamp('FAKTURATSP': %Addr(GblDS.FakturaTSp): 'KXD0060'); Wx_ManChgFldTimestamp('StornoTSP': %Addr(GblDS.StornoTSP): 'Storno-Datum/Zeit': ' Output '); Source Code 229: Aufruf Prozedur Wx_ManChgFldRef() - Definieren Variable über Referenz-Feld 4.18.9 Bedienerhilfe Für Ein-/Ausgabe-Felder können individuelle Bedienerhilfe-Texte definiert werden. Default: Der Level 2 Message-Text der Feldüberschrift wird als Bedienerhilfe ausgegeben. B EN UT ZERHA ND BUC H 196 Die Bedienerhilfe kann zum einen über einen optionalen Parameter in allen Definitions-Funktionen für Change-Tables (z.B. Wx_ChgFld() oder Wx_ManChgFldChar()) angegeben werden. Alternativ kann die Bedienerhilfe die Funktion Wx_ChgHelp() für einzelne Felder eingebunden werden. Dabei kann wahlweise direkt ein Text oder eine Message-Id übergeben werden. Wird eine Message-Id übergeben wird per Default der Level 2-Message-Text dieser Message-Id ermittelt und als Hilfe-Text ausgegeben. Default: Wurde weder ein Message-Text noch eine Message-Id angegeben, so wird, sofern eine Feldbeschreibung als Message-Id angegeben wurde der Level 2 Message-Text als Bedienerhilfe ausgegeben. Dieser Prozess erfolgt automatisch, ohne Angabe eines Schlüssel-Wortes. Soll diese Automatik unterbunden werden, bzw. kein Hilfe-Text erwünscht sein, so kann in dem optionalen Parameter für die Bedienerhilfe der Sonderwert *NONE übergegeben werden. Das Hinzufügen der Bedienerhilfe kann ebenfalls durch den Aufruf der Funktion Wx_ChgNoHelp() entweder für ein einzelnes Feld oder alle Felder unterbunden werden. Sofern für ein Ein/Ausgabe-Feld eine Bedienerhilfe vorliegt, wird die Ausgabe des Fragezeichen-Icons gekennzeichnet. Bei der Mouse Over-Aktion wird der Hilfe-Text angezeigt. ■ = Bedienerhilfe vorhanden Abbildung 26: Bedienerhilfe in Change Programmen B EN UT ZERHA ND BUC H 197 4.18.9.1 Wx_ChgHelp Bedienerhilfe hinzufügen Mit Hilfe der Funktion Wx_ChgHelp können in Change-Programmen Hilfe-Texte zugewiesen werden. Prototyp *************************************************************************** P* Procedure name: Wx_ChgHelp P* Purpose: Add individual help to a change field P* If a Message-Id is passed the 2nd Level Message Text will P* be used as help text P* If a Message-Text is passed this text will be used as Hel P* Returns: P* Parameters: ParField => Field P* Parameters: ParMsg => Help text or message id P* Parameters: ParMsgTxt => Variable Message Texte P* (Optional if a message id is specified) *************************************************************************** D Wx_ChgHelp... D PR OpDesc D ParField Like(FldRef.NameSQL) Const D Options(*Trim) D ParMsg Like(FldRefCGI.Help) Const D ParMsgTxt Like(FldRef.MsgText) Const D Options(*NoPass: *Trim) Source Code 230: Prototype - Procedure Wx_ChgHelp - Bedienerhilfe hinzufügen Parameter ParField Eindeutige Kennung des Arbeitsfelds/Variable ParMsg ParMsgTxt Variable Message-Textes Sofern eine Message-Id übergeben wurde, können zusätzlich Variable Message-Texte (die die Platzhalter in dem Message-Text ersetzen angegeben werden) Bedienerhilfe oder Message-Id der Bedienerhilfe Bedienerhilfe wird aus Level 2 Message-Text der Message-Id ermittelt Beispiele für den Aufruf Wx_ChgHelp('ARTNR': 'ABC1234'); Wx_ChgHelp('ARTNR': 'ABC1234': MyFld1 + ' ' + MyFld2); Wx_ChgHelp('KUNDENR': 'Dies ist ein Hilfetext für die Kunden-Nr. '); Source Code 231: Aufruf Prozedur Wx_ChgHelp() - Bedienerhilfe hinzufügen 4.18.9.2 Wx_ChgNoHelp Bedienerhilfe unterbinden Mit der Funktion Wx_ChgNoHelp() kann die automatische Ermittlung der Bedienerhilfe für einzelne Felder oder alle Felder unterbunden werden. B EN UT ZERHA ND BUC H 198 Prototyp ************************************************************************* P* Procedure name: Wx_ChgNoHelp P* Purpose: Prevents from adding automatic help texts P* Returns: P* Parameters: ParField => Field (Optional) P* Not Passed or Special Value *ALL P* No Help Text for any field ************************************************************************* D Wx_ChgNoHelp... D PR OpDesc D ParField Like(FldRef.NameSQL) Const D Options(*NoPass: *Trim) Source Code 232: Prototype Procedure Wx_ChgNoHelp - Automatische Ermittlung der Bedienerhilfe unterbinden Parameter ParField Eindeutige Kennung des Arbeitsfelds/Variable (Optional) Nicht übergeben oder Sonderwert *NONE Bedienerhilfe wird für alle Felder unterbunden Beispiele für den Aufruf Wx_ChgNoHelp('ARTNR'); Wx_ChgNoHelp(); Source Code 233: Aufruf Procedure Wx_ChgNoHelp - Automatische Ermittlung der Bedienerhilfe unterbinden 4.18.10 Bedingte Ein-/Ausgabe-Felder Condition Group WOPiXX stellt mehrere Funktionen zur Verfügung, mit deren Hilfe JavaScript-Code erzeugt wird, der zur Laufzeit dafür sorgt, dass Ein-/Ausgabe-Felder nur unter bestimmten Bedingungen angezeigt werden. Die Bedingungen unter denen die Ein-/Ausgabe-Felder angezeigt werden können auch bei den Prozeduren Wx_ChgFileFld(), Wx_ChgFld() sowie allen Prozeduren durch die Arbeits-Felder/Variablen definiert werden können (z.B. Wx_ManChgFld()) über einen optionalen Parameter hinzugefügt werden. Um zu vermeiden, dass die gleichen Bedingungen mehrfach angegeben werden müssen, wurden Prozeduren erstellt, über die die Bedingung einmalig festgelegt wird. Alle im Folgenden definierten Ein/Ausgabe-Felder werden unter der gleichen Bedingung angezeigt. WOPiXX erlaubt verschachtelte Condition-Groups bzw. If-Anweisungen. Die folgenden Prozeduren werden zur Steuerung zur Verfügung gestellt: Wx_ChgIf() If-Anweisung = Beginn der Condition Group (vergl. 4.18.10.1 Wx_ChgIf() Beginn der Condition Group) Wx_ChgElse() Else-Bedingung (vergl. 4.18.10.2 Wx_ChgElse() Else-Anweisung) Wx_ChgEndIf()EndIf-Anweisung = Ende der Condition Group B EN UT ZERHA ND BUC H 199 (vergl. 4.18.10.3 Wx_ChgEndIf() Ende Condition Group) Condition Groups können verschachtelt werden. Die Verschachtelung, sowie die Anzahl der Wx_ChgIf()Prozedur-Aufrufe und die Anzahl der Wx_ChgEndIf()-Prozedur-Aufrufe werden zur Laufzeit geprüft. Im Fehlerfall wird eine Fehlermeldung ausgegeben. In den Bedingungen können nur Ein-/Ausgabe-Felder geprüft werden, die zuvor mit WOPiXX-Funktionen definiert wurden. Die Bedingungen können in RPG oder CL oder Java-Script-Schreibweise angegeben werden. (vergl. 4.5 Bedingtes Anzeigen von Ein-/Ausgabe-Feldern). 4.18.10.1 Wx_ChgIf() Beginn der Condition Group Mit Hilfe der Prozedur Wx_ChgIf() wird die erste Bedingung definiert. Die Bedingung wird in Java-ScriptCode übersetzt und steuert zur Laufzeit die Anzeige der Ein-/Ausgabe-Felder. Alle Felder und Variablen, die nach dem Aufruf der Prozedur Wx_ChgIf() definiert werden, werden unter den gleichen Bedingungen angezeigt. Wird die Prozedur Wx_ChgIf() erneut, mit einer weiteren Bedingung aufgerufen, werden alle im Anschluss definierten Felder und Variablen nur dann angezeigt, wenn beide Bedingungen erfüllt sind. Prototype *************************************************************************** P* Procedure name: Wx_ChgIf P* Purpose: Begin IF-Condition - Change P* Returns: P* Parameters: ParCond => Condition *************************************************************************** D Wx_ChgIf... D PR OpDesc D ParCond Like(FldRefCGI.Cond) Const Source Code 234: Prototype - Prozedur Wx_ChgIf - Festlegen von Bedingungen Parameter: ParCond Bedingungen (vergl. 4.5 Bedingtes Anzeigen von Ein-/Ausgabe-Feldern) 4.18.10.2 Wx_ChgElse() Else-Anweisung Über die Prozedur Wx_ChgElse() kann eine ELSE-Anweisung definiert werden. Alle Ein-/Ausgabe-Felder, die nach Ausführung der Prozedur Wx_ChgElse() über WOPiXX-Funktionen definiert werden, werden zur Laufzeit unter den inversen Bedingungen der zuvor definierten IFAnweisung angezeigt. B EN UT ZERHA ND BUC H 200 Durch die Angabe von weiteren Bedingungen können Else-If-Bedingungen definiert werden. Innerhalb der Else-Anweisungen können weitere Condition Groups definiert werden. Prototype *************************************************************************** P* Procedure name: Wx_ChgElse P* Purpose: Begin Else(IF)-Condition - Change P* Returns: P* Parameters: ParCond => Condition *************************************************************************** D Wx_ChgElse... D PR OpDesc D ParCond Like(FldRefCGI.Cond) Const D Options(*NoPass) Source Code 235: Prototype - Prozedur Wx_ChgElse - Else-Bedingungen Parameter ParCond 4.18.10.3 Bedingungen (vergl. 4.5 Bedingtes Anzeigen von Ein-/Ausgabe-Feldern) Optionaler Parameter Durch Angabe von Bedingungen in der Else-Funktion wird eine ElseIf-Funktionalität erreicht. Wx_ChgEndIf() Ende Condition Group Durch den Aufruf der Prozedur Wx_ChgEndIf() wird die äußerste Condition Group beendet. Zu jedem Wx_ChgIf()-Prozedur-Aufruf, muss auch ein Wx_ChgEndIf()-Prozedur-Aufruf ausgeführt werden. Stimmt die Anzahl der Wx_ChgIf()-Prozedur-Aufrufe mit der Anzahl der Wx_ChgEndIf()-ProzedurAufrufe nicht überein, tritt zur Laufzeit ein Fehler auf. Alle Ein-/Ausgabe-Felder, die mit WOPiXX-Funktionen nach der Ausführung der Prozedur Wx_ChgEndIf() definiert werden, werden ohne Berücksichtigung der Bedingungen aus der beendeten Condition Group angezeigt. Prototype *************************************************************************** P* Procedure name: Wx_ChgEndIf P* Purpose: End IF-Condition - Change P* Returns: P* Parameters: *************************************************************************** D Wx_ChgEndIf... D PR OpDesc Source Code 236: Prototype - Prozedur Wx_ChgEndIf - Ende der If-Anweisung Parameter Für die Prozedur Wx_ChgEndIf() sind keine Parameter erforderlich B EN UT ZERHA ND BUC H 201 4.18.10.4 Condition Group Beispiel Wx_ChgIf('STATUS = 01'); Wx_ChgFld('AKBESTMGE': 'Bestell-Menge'); //...weitere Ein-/Ausgabe-Felder für die gleiche Bedingung Wx_ChgElse('STATUS = 02'); Wx_ChgFld('AKLIEFMGE': 'Liefer-Menge'); //...weitere Ein/Ausgabe-Felder für die ElseIf-Bedingung Wx_ChgElse(); Wx_ChgFld('AKTEILMGE': 'Teillieferung'); //...weitere Ein-/Ausgabe-Felder für die Else-Bedingung Wx_ChgEndIf(); Source Code 237: Aufruf Prozeduren Wx_ChgIf(), Wx_ChgElse(), Wx_ChgEndIf() - Bedingte Ein-/Ausgabe-Felder 4.18.11 Definition von HTML-Tabellen Innerhalb von Change Tables können Ein-/Ausgabe-Felder in Tabellen angeordnet werden. Die Definition der Tabellen bzw. der Aufruf der entsprechenden WOPiXX-Funktionen erfolgt unmittelbar vor der Definition des ersten (Ein-/Ausgabe-)Feldes innerhalb der Tabelle. Zur Tabellen-Definition werden die folgenden Prozeduren zur Verfügung gestellt. Wx_HTMLTbl Definition der Tabelle Anzahl Zeilen/Spalten Wx_HTMLTblColHdg Definition der Spalten 4.18.11.1 Wx_HTMLTbl Definition Tabelle Über die Funktion Wx_HTMLTbl wird die HTML Tabelle definiert, d.h. es wird angegeben wie viele Zeilen und Spalten in dieser Tabelle hinterlegt sein sollen. Außer der Anzahl der Zeilen und Spalten sollen in Zukunft noch weitere Kriterien angegeben werden können. Die entsprechenden Parameter sind bereits als optionale Parameter vorhanden. Mit jedem Aufruf der Prozedur Wx_HTMLTbl wird eine neue Tabelle definiert. Prototype *************************************************************************** P* Procedure name: Wx_HTMLTbl P* Purpose: Define HTML Table within a Change table P* P* Returns: P* Parameters: ParTableName => Table Name P* Parameters: ParNbrCols => Number of Columns (currently 1-32 colums) P* Parameters: ParNbrRows => Number of Rows P* Parameters: ParMsg => Header Text P* Parameters: ParOptions => Options B EN UT ZERHA ND BUC H 202 ************************************************************************ D Wx_HTMLTbl... D PR OpDesc D ParTableName Like(FldRef.NameSQL) Const D Options(*Trim) D ParNbrCols 10I 0 Const D ParNbrRows 10I 0 Const D ParMsg Like(FldRef.MsgData) Const D Options(*NoPass: *Trim) D ParOptions Like(FldRefCGI.Options) Const D Options(*NoPass: *Trim) Source Code 238: Prototyp Prozedur Wx_HTMLTbl() Definition HTML Tabelle (Header) Die Prozedur erfordert 3 Parameter. Über zwei optionale Parameter können in Zukunft zusätzliche Informationen übergeben werden. ParTableName: Eindeutiger Tabellen-Namen Jede Tabelle erhält innerhalb der Change Table einen eindeutigen Namen über den sie intern verwaltet wird. Der Tabellen-Name ist frei wählbar. Groß/Kleinschreibung wird nicht berücksichtigt. ParNbrCols: Anzahl der Spalten innerhalb der Tabelle Innerhalb einer Tabelle können aktuell bis zu 32 Spalten definiert werden. Es ist in diesem Zusammenhang zu beachten, dass pro Change Table nur maximal 100 Ein/Ausgabe-Felder definiert werden können. ParNbrRows: Anzahl der Zeilen innerhalb der Tabelle ParMSG ParOptions: Tabellen-Optionen Optionaler Parameter Tabellen-Optionen können in Form von Schlüssel-Worten angegeben werden. Wird aktuell noch nicht unterstützt Message-Id oder Text für die Tabellen-Überschrift Optionaler-Parameter Wird aktuell noch nicht unterstützt. Beispiele für den Aufruf //Tabelle1 mit 3 Spalten und 5 Zeilen Wx_HTMLTbl('Tabelle1': 3: 5); //Definition der Spalten //Definition der Ein/Ausgabe-Felder innerhalb der Tabelle //Tabelle Auswahl mit 4 Spalten und 1 Zeile Wx_HTMLTbl('Auswahl': 4: 1); //Definition der Spalten //Definition der Ein/Ausgabe-Felder innerhalb der Tabelle Source Code 239: Aufruf Prozedur Wx_HTMLTbl Definieren HTML Tabelle B EN UT ZERHA ND BUC H 203 4.18.11.2 Wx_HTMLTblColHdg() Definition Spalten Über die Prozedur Wx_HTMLTblColHdg() können die einzelnen Spalten in der zuvor über Prozedur Wx_HTMLTbl() definierten Tabelle näher beschrieben werden. Aktuell wird nur die Tabellen-Überschrift unterstützt. Für die Zukunft werden noch weitere Optionen geplant, die in Form von Schlüssel-Worten übergeben werden. Die entsprechenden Parameter sind bereits vorgesehen. Durch den mehrfachen Aufruf der Funktion Wx_HTMLTbl wird jeweils die nächste (noch nicht definierte) Spalte definiert. Um eine bestimmte Spalte zu definieren kann auch die Spalten-Nr. direkt übergeben werden. Wird die Funktion Wx_HTMLTblColHdg() nicht nach der Funktion Wx_HTMLTbl() aufgerufen erhält die Tabelle keine Spalten-Überschriften. Prototyp ******************************************************************************* P* Procedure name: Wx_HTMLTblColHdg P* Purpose: Add Column (Heading) Defintions to an HTML Table P* within a Change table P* Column defintions are added to the most recently defined P* HTML table P* Returns: P* Parameters: ParMsg => Message Id or Message Text P* Parameters: ParColNo => Column No P* Passed: The column heading for specified P* column will be updated P* Not Passed: The next column P* (after the last defined) P* will be defined P* Parameters: ParOptions => Options ******************************************************************************** D Wx_HTMLTblColHdg... D PR OpDesc D ParMsg Like(FldRef.MsgData) Const D Options(*Trim) D ParColNo 10I 0 Options(*NoPass) Const D ParOptions Like(FldRefCGI.Options) Const D Options(*NoPass: *Trim) Source Code 240: Prototype - Prozedur Wx_HTMLTblColHdg - Definieren HTML Spalten Parameter Die Funktion erfordert einen Parameter. ParMsg Message-Id oder Text der als Spaltenüberschrift angezeigt werden soll ParColNo Spalten-Nr. Optional Wird die Spalten-Nr. nicht übergeben, wird die nächste (nach der zuletzt definierten) Spalte verwendet. B EN UT ZERHA ND BUC H 204 War die Spalte bereits definiert, wird zuvor gesetzte Überschrift ersetzt. ParOptions Optionen Optional In Zukunft können weitere Optionen in Form von Schlüssel-Worten angegeben werden. (aktuell noch nicht unterstützt). Beispiele für den Aufruf //Tabelle1 mit 3 Spalten und 5 Zeilen Wx_HTMLTbl('Tabelle1': 3: 5); Wx_HTMLTblColHdg('Spalten-Überschrift1'); Wx_HTMLTblColHdg('2.Spalte'); Wx_HTMLTblColHdg('MSG0123'); //Tabelle //Spalte 1 //Spalte 2 //Spalte 3 – mit Message Id //Definition der Ein/Ausgabe-Felder innerhalb der Tabelle //Tabelle Auswahl mit 4 Spalten und 1 Zeile Wx_HTMLTbl('Auswahl': 4: 1); Wx_HTMLTblColHdg('Spalten-Überschrift3': 3); Wx_HTMLTblColHdg('Zweite Spalte': 2); Wx_HTMLTblColHdg('Letzte Spalte'); //Spalte 3 //Spalte 2 //Spalte 4 //Definition der Ein/Ausgabe-Felder innerhalb der Tabelle //Tabelle AdrTab mit 3 Spalten und 3 Zeilen //Vorgabe von unterschiedlichen Spalten-Breiten Wx_HTMLTbl('AdrTab' :3 :3); Wx_HTMLTblColHdg('Strasse': 1: 'width="450"'); Wx_HTMLTblColHdg('PLZ': 2: 'width="100"'); Wx_HTMLTblColHdg('Ort': 3: 'width="450"'); Source Code 241: Aufruf Prozedur Wx_HTMLTblColHdg() - Spalten Definition Tabelle mit 3 Spalten Mit unterschiedlichen Spaltenbreiten Abbildung 27: Tabelle mit 3 Spalten (3 Zeilen) und unterschiedlicher Spalten-Breite B EN UT ZERHA ND BUC H 205 4.18.12 Wx_GetChgInput() Empfangen Eingabe-Daten Über die Prozedur Wx_GetChgInput() werden die die eingegebenen Daten empfangen. Der Aufruf muss nach der Definition der Ein-/Ausgabe-Felder über WOPiXX-Prozeduren und vor der individuellen Eingabe-Prüfung bzw. vor dem Fortscheibend der erfassten Daten erfolgen. Für den WOPiXX-Programmierer kann die Prozedur Wx_GetChgInput() mit der Ausführung des OpCodes EXFMT in Green-Screen-Dialog-Programmen verglichen werden. Tatsächlich wird in der Prozedur das HTML-Dokument an den Browser geschickt und das Programm beendet. Beim nächsten Aufruf über den Browser werden die erfassten Daten empfangen und können wie nach einem EXFMT weiterverarbeitet werden. Prototype *************************************************************************** P* Procedure name: Wx_GetChgInput P* Purpose: Get Input Values P* --> Input values get retrieved for either mode SAVE or APPLY P* Returns: *************************************************************************** D Wx_GetChgInput... D PR OPDesc Source Code 242: Prototype - Prozedur Wx_GetChgInput() - Empfangen Eingabe-Daten Parameter Die Prozedur erfordert weder einen Rückgabewert noch Parameter. Die Ein-/Ausgabe-Daten werden direkt in die entsprechenden Datenstruktur-Unterfelder ausgegeben. Beispiel für den Aufruf //Ein-/Ausgabe-Felder definieren Wx_ChgFld('Land': %Addr(GblDS.Land): 'Land': 'Required CTL(Country)'); Wx_ChgFld('PLZ': %Addr(GblDS.PLZ): 'FLD0012': 'NoNewLin'); Wx_ChgFld('Ort': %Addr(GblDS.Ort): '': 'Required SelectList'); //Eingabe-Daten empfangen Wx_GetChgInput(); //Individuelle Eingabe-Prüfung //Fortschreiben der erfassten Daten Source Code 243: Aufruf - Prozedur Wx_GetChgInput() - Empfangen Eingabe-Daten B EN UT ZERHA ND BUC H 206 4.18.13 Error-Handling Viele Eingabe-Prüfungen können bereits durch die Angabe von entsprechenden Optionen (z.B. Range für einen Bereich oder vordefinierte Comboboxen) direkt in HTML bzw. über JavaScript-Funktionen erfolgen. Ähnlich den Schlüssel-Worten, die im DDS gesetzt werden können. Der Programmierer kann zusätzliche individuelle Prüfungen im Programm hinterlegen. Die (individuelle) Eingabe-Prüfung darf erst nach Aufruf der Prozedur Wx_GetChgInput() (Empfangen der Eingabe-Werte) erfolgen. Die erfassten Werte werden durch die Prozedur Wx_GetChgInput() in die Datenstruktur-Unterfelder übertragen, die bei der Definition der Ein-/Ausgabe-Felder angegeben wurden. Für den Fehler-Fall bzw. zur Ausgabe und Prüfung von (individuellen) Fehlermeldungen werden die folgenden WOPiXX-Funktionen zur Verfügung gestellt. Wx_FldErr() Fehlermeldung für ein einzelnes Ein-/Ausgabe-Feld (vergl. 4.18.13.1) Wx_MultFldErr() Fehlermeldung für eine Gruppe von Ein-/Ausgabe-Feldern (vergl. 4.18.13.2) Wx_isChgFldErr() Prüfung, ob mindestens eine individuelle Fehlermeldung ausgegeben wurde (vergl. 4.18.13.3) Soll die Fehlermeldung unmittelbar nach der Prüfung ausgegeben werden, ist der Aufruf der Prozedur Wx_WrtChgTbl() Change Table erforderlich. Anstatt die Fehlermeldungen einzeln auszugeben können auch zunächst alle Prüfungen durchgeführt, die Fehler über Wx_FldErr() oder Wx_MultFldErr() ausgegeben werden. Ob ein Fehler über die Funktionen Wx_FldErr() oder Wx_MultFldErr() ausgegeben wurde, kann mit der Funktion Wx_isChgFldErr() geprüft werden. Sofern kein Fehler festgestellt wurde, kann der Programmierer die Daten fortschreiben. Die Aufbereitung und Ausgabe des HTML-Dokuments erfolgt über die Prozedur Wx_WrtChgTbl(). In der Prozedur Wx_WrtChgTbl() wird ebenfalls geprüft, ob ein Fehler ausgegeben wurde. Im Fehler-Fall wird das aktuelle Dokument erneut (inklusive der Fehlermeldung) ausgegeben. Wurde kein Fehler festgestellt, wird auf das vorgelagerte Programm (z.B. Worktable) zurückverzweigt. Die Fehlermeldungen werden immer unmittelbar nach dem fehlerhaften Ein-/Ausgabe-Feld in rot angezeigt, unabhängig davon, ob die Fehlermeldung durch eine Java-Script-Prüfung oder den Aufruf WOPiXX-Prozeduren Wx_FldErr() oder Wx_MultFldErr() erzeugt wurde. B EN UT ZERHA ND BUC H 207 Abbildung 28: Beispiel Fehlerhafte Eingaben und Fehlermeldungen 4.18.13.1 Wx_FldErr() /Ausgabe-Feld Individuelle Fehlermeldung für Ein- Wurde bei der individuellen Eingabe-Prüfung für ein bestimmtes Ein-/Ausgabe-Feld ein Fehler festgestellt, so kann mit Hilfe der Prozedur Wx_FldErr() eine individuelle Fehlermeldung für dieses Ein/Ausgabe-Feld ausgegeben werden. An die Prozedur müssen sowohl die Fehlermeldung (oder eine entsprechende Message-Id) sowie das Feld (bzw. die eindeutige Kennung, die bei der Definition angegeben wurde) als Parameter übergeben werden. Soll die Fehlermeldung unmittelbar nach der Prüfung ausgegeben werden, ist der Aufruf der Prozedur Wx_WrtChgTbl() Change Table erforderlich. Prototype *************************************************************************** P* Procedure name: Wx_FldErr P* Purpose: Set Field Error P* Returns: P* Parameters: ParMsg => Message-Id or Text P* Parameters: ParField => Field P* Parameters: ParFile => File P* Parameters: ParLib => Bibliothek *************************************************************************** D Wx_FldErr... D PR OPDesc D ParMsg Like(FldRef.MsgData) Const D ParField Like(FldRef.NameSQL) Const B EN UT ZERHA ND BUC H 208 D D D D ParFile Like(FldRef.NameSQL) Options(*NoPass) Like(FldRef.Lib) Options(*NoPass) ParLib Const Const Source Code 244: Prototype - Prozedur Wx_FldErr() - Fehlermeldung für einzelnes Ein-/Ausgabe-Feld Parameter ParMsg ParField Fehlermeldung Die Fehlermeldung kann entweder direkt oder als Message-Id angegeben werden. Bei Verwendung einer Message-Id muss die zugehörige Message-File in Directweb für die Anwendung hinterlegt sein. Feld/Spalten-Name des Ein-/Ausgabe-Feldes oder eindeutige Kennung bei ArbeitsFeldern. Das Ein-/Ausgabe-Feld (Feld-Name oder eindeutige Kennung) muss über eine WOPiXX-Prozedur definiert worden sein. Beispiele für den Aufruf If GblDs.Land = 'D' and %Len(%Trim(GblDS.PLZ)) <> 5; Wx_FldErr('Ungültige Postleitzahl': 'PLZ'); EndIf; Monitor; If Wx_isModeAdd(); GblDS.KBGUELTAB = %Date(GblDS.KBGUELTNum); //Prüfen PLZ Deutschland //Prüfen numerisches Datum EndIf; On-Error; Wx_FldErr(PGMSDS.MsgTxt: 'KBGUELTAB'); EndMon; If %Len(%Trim(GblDS.EMeMail)) = *Zeros and ( %Len(%Trim(GblDS.EMSend)) <> *Zeros or %Len(%Trim(GblDS.EMSign)) <> *Zeros); Wx_FldErr('KXE0031': 'ADDEMAIL'); ElseIf %Len(%Trim(GblDS.EMeMail)) <> *Zeros and %Len(%Trim(GblDS.EMSign)) = *Zeros; Wx_FldErr('KXE0030': 'ADDSIGN'); EndIf; //Ohne eMail-Adresse //Mit Senden an //Mit Signatur If GblDS.KGSTRTIM < %Time(073000: *ISO) and GblDS.KGSTRTIM <> *LoVal; Wx_FldErr('KXE0005': 'STRTIM'); EndIf; //Startzeit vor 7:30 //Startzeit <> 00:00:00 If GblDS.KGENDTIM <= GblDS.KGSTRTIM; //Endezeit vor Startzeit //Mit Mail-Adresse //Ohne Signatur Wx_FldErr('KXE0007': 'STRTIM'); Wx_FldErr('KXE0007': 'ENDTIM'); EndIf; Source Code 245: Aufruf Prozedur Wx_FldErr() - Fehlermeldung für einzelnes Ein-/Ausgabe-Feld B EN UT ZERHA ND BUC H 209 Abbildung 29 : Individuelle Eingabe-Prüfung - Ungültige Postleitzahl 4.18.13.2 Wx_MultFldErr() mehrere Felder Individuelle Fehlermeldung für Sofern bei einer individuellen Eingabe-Prüfung die gleiche Fehlermeldung für mehrere Ein-/AusgabeFelder angezeigt werden soll, kann entweder die Prozedur Wx_FldErr() mehrfach aufgerufen oder die Prozedur Wx_MultFldErr(). Bei der Funktion Wx_MultFldErr() können bis zu 10 Ein-/Ausgabe-Felder angegeben werden. Prototype *************************************************************************** P* Procedure name: Wx_MultFldErr P* Purpose: Set Error for Multiple Fields P* Returns: P* Parameters: ParMsg => Message-Id or Text P* Parameters: ParField01 => Field 01 P* Parameters: ParField02 => Field 02 P* Parameters: ParField03 => Field 03 P* Parameters: ParField04 => Field 04 P* Parameters: ParField05 => Field 05 P* Parameters: ParField06 => Field 06 P* Parameters: ParField07 => Field 07 P* Parameters: ParField08 => Field 08 P* Parameters: ParField09 => Field 09 P* Parameters: ParField10 => Field 10 P* Parameters: ParFile => File P* Parameters: ParLib => Bibliothek *************************************************************************** D Wx_MultFldErr... D PR OPDesc D ParMsg Like(FldRef.MsgData) Const D ParField01 Like(FldRef.NameSQL) Const D ParField02 Like(FldRef.NameSQL) Const D Options(*NoPass) D ParField03 Like(FldRef.NameSQL) Const D Options(*NoPass) D ParField04 Like(FldRef.NameSQL) Const B EN UT ZERHA ND BUC H 210 D D D D D D D D D D D D D D D D D ParField05 ParField06 ParField07 ParField08 ParField09 ParField10 ParFile ParLib Options(*NoPass) Like(FldRef.NameSQL) Options(*NoPass) Like(FldRef.NameSQL) Options(*NoPass) Like(FldRef.NameSQL) Options(*NoPass) Like(FldRef.NameSQL) Options(*NoPass) Like(FldRef.NameSQL) Options(*NoPass) Like(FldRef.NameSQL) Options(*NoPass) Like(FldRef.NameSQL) Options(*NoPass) Like(FldRef.Lib) Options(*NoPass) Const Const Const Const Const Const Const Const Source Code 246: Prototype - Prozedur Wx_MultFldErr() - Fehlermeldung für mehrere Ein-/Ausgabe-Felder Parameter ParMsg Fehlermeldung Die Fehlermeldung kann entweder direkt oder als Message-Id angegeben werden. Bei Verwendung einer Message-Id muss die zugehörige Message-File in Directweb für die Anwendung hinterlegt sein. ParField01 Feld/Spalten-Name des Ein-/Ausgabe-Feldes oder eindeutige Kennung bei ArbeitsFeldern. Das Ein-/Ausgabe-Feld (Feld-Name oder eindeutige Kennung) muss über eine WOPiXX-Prozedur definiert worden sein. ParField02 ParField10 Feld/Spalten-Name der weiteren Ein-/Ausgabe-Felder oder eindeutige Kennungen bei Arbeits-Feldern. Das Ein-/Ausgabe-Feld (Feld-Name oder eindeutige Kennung) muss über eine WOPiXX-Prozedur definiert worden sein. Optionaler Parameter Beispiele für den Aufruf If GblDS.EKPreis > GblDS.VKPreis; Wx_MultFldErr('Verkaufspreis muss über dem Einkaufspreis liegen': 'EKPreis': 'VKPreis'); EndIf; If ( GblDS.Hoehe > *Zeros or GblDS.Breite > *Zeros or GblDS.Tiefe > *Zeros) and ( GblDS.Hoehe = *Zeros or GblDS.Breite = *Zeros or GblDS.Tiefe = *Zeros); Wx_MultFldErr('Höhe, Breite und Tiefe müssen angegeben werden': 'Hoehe': 'Breite': 'Tiefe'); EndIf; If GblDS.KGSTRDAT > GblDS.KGENDDAT; Wx_MultFldErr('KXE0004': 'STRDAT': 'ENDDAT'); ElseIf GblDS.KGSTRDAT = GblDS.KGENDDAT B EN UT ZERHA ND BUC H 211 and GblDS.KGSTRTIM > GblDS.KGENDTIM; Wx_MultFldErr('KXE0004': 'STRTIM': 'ENDTIM'); EndIf; Source Code 247: Aufruf Prozedur Wx_MultFldErr() - Fehlermeldung für mehrere Ein-/Ausgabe-Felder Abbildung 30: Beispiel - gleiche Fehlermeldung für mehrere Felder 4.18.13.3 Wx_isChgFldErr() viduelle Fehlermeldung Prüfung mindestens eine indi- Über die Funktion Wx_isChgFldErr() kann geprüft werden, ob mindestens ein Fehler mit Hilfe der Funktionen Wx_FldErr() oder Wx_MultFldErr() registriert wurde. Sofern kein Fehler aufgetreten ist, kann der Datensatz ordnungsgemäß fortgeschrieben werden. Prototype *************************************************************************** P* Procedure name: Wx_isChgFldErr P* Purpose: Check if Field Errors occurred P* Returns: True/*On = Field Errors Occurred P* False/*Off = No Field Error *************************************************************************** D Wx_isChgFldErr... D PR N OpDesc Source Code 248: Prototype - Prozedur Wx_isChgFldErr() - Prüfung individueller Fehler aufgetreten Parameter Rückgabe-Wert *ON = mindestens ein individueller Fehler aufgetreten *OFF = kein Fehler aufgetreten Keine Parameter erforderlich Beispiel für den Aufruf B EN UT ZERHA ND BUC H 212 If Not Wx_isChgFldErr(); If GblDS.Id = *Zeros; Write MyFileF GblDS; Else; Update MyFileF GblDS; EndIf; EndIf; Source Code 249: Aufruf Prozedur Wx_isChgFldErr() - Prüfen individueller Fehler aufgetreten 4.18.14 Prozeduren zum Beenden von Change Tables Change Tables können auf zwei Arten beendet werden: Wx_WrtChgTbl() Beenden Change Programm Je nachdem, ob ein individueller Fehler registriert wurde oder nicht, wird das aktuelle HTML-Dokument erneut ausgegeben oder auf das vorgelagerte Programm zurückgesprungen. Wx_RtnPrv() Rücksprung auf vorgelagertes Programm Sofern in Change-Programmen für die Aktion/Modus keine Dialog-Ausgabe erforderlich ist (z.B. Löschen von Datensätzen) 4.18.14.1 Wx_RtnPrv() gramm Rücksprung auf vorgelagertes Pro- Ist in einem Change Programm keine Dialog-Ausgabe erforderlich (z.B. zum Löschen von Datensätzen oder zur Aktivierung eines Buchungsprogramms), muss nach Ausführung der entsprechenden Aktion das Change Programm durch Aufruf der Funktion Wx_RtnPrv() auf das vorgelagerte Programm zurückgegangen werden. Prototype *************************************************************************** P* Procedure name: Wx_RtnPrv P* Purpose: Return to previous display HTML P* Returns: P* Parameters: ParMsg => Message Text or Message-Id P* --> If an error occurs *************************************************************************** D Wx_RtnPrv... D PR OPDesc D ParMsg Like(FldRef.MsgData) Const D Options(*NoPass) Source Code 250: Prototype - Prozedur Wx_RtnPrv() - Auf vorgelagertes Programm zurückspringen Parameter ParMsg Fehlermeldung, die im vorgelagerten Programm ausgegeben werden soll. Optionaler Parameter B EN UT ZERHA ND BUC H 213 Sofern keine Fehlermeldung ausgegeben werden soll, wird der Parameter entweder nicht, leer oder mit *Blanks gefüllt übergeben. Die Fehlermeldung kann entweder direkt oder als Message-Id angegeben werden. Bei Verwendung einer Message-Id muss die zugehörige Message-File in Directweb für die Anwendung hinterlegt sein. ParSvrError Signoff Optionaler Parameter Sofern der Parameter mit *ON übergeben wird, wird die Sitzung beendet. (Signoff) Beispiele für den Aufruf If Wx_isModeDelete(); ArrKeyVal = Wx_GetDBKeyArrInt(); For Index = 1 To %Elem(ArrKeyVal); If ArrKeyVal(Index) > *Zeros; Delete(E) ArrKeyVal(Index) MyFileF; If %Error; ErrMsg = 'Fehler beim Löschen'; EndIf; EndIf; EndFor; Wx_RtnPrv(ErrMsg); EndIf; //Löschen //Ermitteln Schlüssel für Löschen //Verarb. aller Schlüssel-Werte //Datensatz löschen //Fehler aufgetreten //Fehlermeldung sichern //Rücksprung Source Code 251: Prozedur Wx_RtnPrv() - Rücksprung auf vorgelagertes Programm 4.18.14.2 Wx_WrtChgTbl() Beenden Change Programm Nachdem die Eingabe-Prüfungen erfolgt sind, die Datensätze, sofern keine Fehler aufgetreten sind, fortgeschrieben wurden, muss das Change Programm beendet werden. Die Funktion Wx_WrtChgTbl() gibt im Fehler-Fall die Change Table erneut aus oder verzweigt auf das vorgelagerte Programm, sofern kein Fehler aufgetreten ist. Prototype *************************************************************************** P* Procedure name: Wx_WrtChgTbl P* Purpose: Write Change Table P* Returns: P* Parameters: ParMsg => Message Text or Message-Id P* --> If an error occurs P* Parameters: ParParm01 => Parameter 01 for the next Call P* Parameters: ParParm02 => Parameter 02 for the next Call P* Parameters: ParParm03 => Parameter 03 for the next Call P* Parameters: ParParm04 => Parameter 04 for the next Call P* Parameters: ParParm05 => Parameter 05 for the next Call *************************************************************************** D Wx_WrtChgTbl... D PR OPDesc D ParMsg Like(FldRef.MsgData) Const D Options(*NoPass) D ParParm01 Like(FldRef.TextVar) Const D Options(*NoPass) D ParParm02 Like(FldRef.TextVar) Const B EN UT ZERHA ND BUC H 214 D D D D D D D Options(*NoPass) Like(FldRef.TextVar) Options(*NoPass) Like(FldRef.TextVar) Options(*NoPass) Like(FldRef.TextVar) Options(*NoPass) ParParm03 ParParm04 ParParm05 Const Const Const Source Code 252: Prototype Prozedur Wx_WrtChgTbl() - Beenden Change Program Parameter ParMsg ParParm1 Globale Fehlermeldung, die im aktuellen HTML-Dokument ausgegeben werden soll. Optionaler Parameter Sofern keine Fehlermeldung ausgegeben werden soll, wird der Parameter entweder nicht, leer oder mit *Blanks gefüllt übergeben. Die Fehlermeldung kann entweder direkt oder als Message-Id angegeben werden. Bei Verwendung einer Message-Id muss die zugehörige Message-File in Directweb für die Anwendung hinterlegt sein. ParParm5 Parameter-Wert Optionale Parameter Es können bis zu 5 alphanumerische Parameter-Werte übergeben werden. Diese Parameter-Werte können in dem Folge-Programm verwendet werden. Anstatt die gewünschten Parameter-Werte über die Funktion Wx_WrtChgTbl() zu setzen, ist es auch möglich die Werte über durch Aufruf einer der Funktionen Wx_SetParmXXXX zu setzen (vergl. 4.13 Ermitteln und Setzen von Parameter-Werten). Beispiele für den Aufruf Monitor; Clear ErrMsg; If KeyVal > *Zeros; GblDSSav = GblDS; Chain KeyVal MyFileF1 GblDS; GblDS = GblDSSav; EndIf; //Error Message initialisieren //Mit Schlüssel-Wert //geänderten Datensatz sichern //Aktuellen Datensatz in DS einlesen //gesicherten Datensatz umladen If KeyVal = *Zeros or Not %Found(MyFile); //Ohne Schlüssel / nicht gefunden Write MyFileF GblDS; //Schreiben neuen Datensatz Else; Update MyFileF GblDS; //eingelesenen Datensatz aktualisieren EndIf; On-Error; //Fehler beim Update oder Write ErrMsg = 'Fehler beim Schreiben des Datensatzes'; //Fehlermeldung angeben EndMon; Wx_WrtChgTbl(ErrMsg); //HTML-Dokument erneut anzeigen oder //Rücksprung auf vorher. CGI-Programm Return; Source Code 253: Aufruf Prozedur Wx_WrtChgTbl() - Beenden Change Programm B EN UT ZERHA ND BUC H 215 4.19 Header-Informationen Mit Hilfe der Header-Funktionen können sowohl bei Work- als auch bei Change Tables im Kopf-Bereich zusätzliche Informationen / Texte ausgegeben werden. Die folgenden Funktionen stehen zur Verfügung: Wx_HdrText Beliebige Texte im Header anzeigen (Vergl. 4.19.1 Wx_HdrText() Beliebigen Text in Header ausgeben) Wx_HdrFile() Definition der Dateien, aus denen die Header-Felder stammen (Vergl. 4.19.2 Wx_HdrFile() Datei für Header-Informationen) Wx_HdrFld() Definition der Header-Felder Vergl. 4.19.3 Wx_HdrFld() Feld für Header-Informationen) Wx_HdrFileFld() Definition der Datei sowie des ersten Header-Felds (Vergl. 4.19.4 Wx_HdrFileFld() Datei und erstes Feld für Header) ■ Header-Informationen in Work-Programmen ■ Header-Informationen in Change-Programmen Abbildung 31: Beispiel Header-Informationen in Work- und Change-Programmen 4.19.1 Wx_HdrText() Beliebigen Text in Header ausgeben Mit Hilfe der Prozedur Wx_HdrText() können sowohl in Change als auch Work-Programmen Informationen in dem Header-Bereich angezeigt werden. Prototype B EN UT ZERHA ND BUC H 216 *************************************************************************** P* Procedure name: Wx_HdrText P* Purpose: Header Text Information P* Returns: P* Parameters: ParField => Field P* Parameters: ParMsg => Message-Id or Text P* Parameters: ParValue => Message-Id/Value to be displayed as Character P* Parameters: ParOptions => Options *************************************************************************** D Wx_HdrText... D PR OPDesc D ParField Like(FldRef.NameSQL) Const D ParMsg Like(FldRef.MsgData) Const D ParValue Like(FldRefCGI.DftValue) Const D ParOptions Like(FldRefCGI.Options) Const D Options(*NoPass) Source Code 254: Prototype Wx_HdrText() - Beliebigen Text in Header ausgeben Parameter ParField ParDescr Beschreibung, die links neben dem Header-Feld angezeigt wird Sofern keine Beschreibung angezeigt werden soll, wird der Parameter entweder leer oder mit *Blanks gefüllt übergeben. Soll eine Beschreibung angezeigt werden, kann diese entweder direkt oder als Message-Id angegeben werden. Bei Verwendung einer Message-Id muss die zugehörige Message-File in Directweb für die Anwendung hinterlegt sein. ParValue Header-Informationen Beliebiger alphanumerischer Text, der im Header angezeigt werden wird. Der Text kann entweder direkt oder als Message-Id angegeben werden. Bei Verwendung einer Message-Id muss die zugehörige Message-File in Directweb für die Anwendung hinterlegt sein. ParOptions Aufbereitungsoptionen Optionaler Parameter (Vergl. 4.3.8 Aufbereitungsoptionen für Header) Eindeutige Kennung des Header-Feldes Es ist nicht erforderlich, dass ParField in einer Datei/Tabelle/View hinterlegt ist. Die Kennung muss jedoch innerhalb des Headers eindeutig sein. Beispiele für den Aufruf Wx_HdrText('EVENT': 'KXD0022': %Trim(GblDS.KGKNGR) + ' ' + %Trim(EVKGBEZ)); Wx_HdrText('STRDAT': 'Von/Bis': %Char(GblDS.KGSTRDAT: *EUR) + ' - ' + %Char(GblDS.KGENDDAT: *EUR)); If %Len(%Trim(GblDS.KGHOTEL)) <> *Zeros; Wx_HdrText'KGHOTEL': 'KXD0041': //Kongress //Zeitraum //Hotel B EN UT ZERHA ND BUC H 217 %Trim(GblDS.KGHOTEL + ' ' + GblDS.KGHOTELORT + ' ' + GblDS.KGHOTELSTR + ' ' + GblDS.KGHOTELTEL)); EndIf; Source Code 255: Aufruf Prozedur Wx_HdrText - Beliebigen Text in Header ausgeben Abbildung 32 : Ergebnis aus dem vorherigen Source Code 4.19.2 Wx_HdrFile() Datei für Header-Informationen Sofern in den Header-Informationen im Programm verwendete Feld-Werte angezeigt werden sollen, müssen zunächst die Dateien/Tabellen/Views für die Header-Informationen definiert werden. Die für die Header-Informationen definierten Dateien/Tabellen/Views werden auch zur Definition der Filter- und Spalten in den Work-Programmen bzw. zur Definition der Ein-/Ausgabe-Felder in den Change Tables verwendet. Werden für Work-Programme mehrere Dateien/Tabellen/Views hinterlegt, so muss die Verknüpfung zwischen den einzelnen Dateien/Tabellen/Views angegeben werden. In Change-Programmen ist die Angabe der Verknüpfungen nicht erforderlich. Die Join-Anweisungen müssen in gültiger SQL Notation angegeben werden. Anmerkung: Anstatt die Verknüpfungen in der Funktion Wx_FltFile anzugeben, wird empfohlen SQL Views zu erstellen, die die alle Spalten, sowie die Verknüpfungen enthalten. Prototype *************************************************************************** P* Procedure name: Wx_HdrFile P* Purpose: Define Files used for Header P* --> Up to 10 Files can be specified P* --> If more than 1 File is specified: Join Conditions are B EN UT ZERHA ND BUC H 218 P* required P* Returns: P* Parameters: ParFile1 => File/Table 1 P* Parameters: ParFile2 => File/Table 2 (Optional) P* Parameters: ParJoin2 => Join Previous Tables and Table 2 (Optional) P* Parameters: ParFile3 => File/Table 3 (Optional) P* Parameters: ParJoin3 => Join Previous Tables and Table 3 (Optional) P* Parameters: ParFile4 => File/Table 4 (Optional) P* Parameters: ParJoin4 => Join Previous Tables and Table 4 (Optional) P* Parameters: ParFile5 => File/Table 5 (Optional) P* Parameters: ParJoin5 => Join Previous Tables and Table 5 (Optional) P* Parameters: ParFile6 => File/Table 6 (Optional) P* Parameters: ParJoin6 => Join Previous Tables and Table 6 (Optional) P* Parameters: ParFile7 => File/Table 7 (Optional) P* Parameters: ParJoin7 => Join Previous Tables and Table 7 (Optional) P* Parameters: ParFile8 => File/Table 8 (Optional) P* Parameters: ParJoin8 => Join Previous Tables and Table 8 (Optional) P* Parameters: ParFile9 => File/Table 9 (Optional) P* Parameters: ParJoin9 => Join Previous Tables and Table 9 (Optional) P* Parameters: ParFile10 => File/Table 10 (Optional) P* Parameters: ParJoin10 => Join Previous Tables and Table 10 (Optional) *************************************************************************** D Wx_HdrFile... D PR OPDesc D ParFile1 Like(FldRef.NameSQL) Const D ParFile2 Like(FldRef.NameSQL) Const D Options(*NoPass) D ParJoin2 Like(FldRef.TextVar) Const D Options(*NoPass) D ParFile3 Like(FldRef.NameSQL) Const D Options(*NoPass) D ParJoin3 Like(FldRef.TextVar) Const D Options(*NoPass) D ParFile4 Like(FldRef.NameSQL) Const D Options(*NoPass) D ParJoin4 Like(FldRef.TextVar) Const D Options(*NoPass) D ParFile5 Like(FldRef.NameSQL) Const D Options(*NoPass) D ParJoin5 Like(FldRef.TextVar) Const D Options(*NoPass) D ParFile6 Like(FldRef.NameSQL) Const D Options(*NoPass) D ParJoin6 Like(FldRef.TextVar) Const D Options(*NoPass) D ParFile7 Like(FldRef.NameSQL) Const D Options(*NoPass) D ParJoin7 Like(FldRef.TextVar) Const D Options(*NoPass) D ParFile8 Like(FldRef.NameSQL) Const D Options(*NoPass) D ParJoin8 Like(FldRef.TextVar) Const D Options(*NoPass) D ParFile9 Like(FldRef.NameSQL) Const D Options(*NoPass) D ParJoin9 Like(FldRef.TextVar) Const D Options(*NoPass) D ParFile10 Like(FldRef.NameSQL) Const D Options(*NoPass) D ParJoin10 Like(FldRef.TextVar) Const D Options(*NoPass) Source Code 256: Prototype Prozedur Wx_HdrFile Parameter Dateien für Header-Informationen definieren B EN UT ZERHA ND BUC H 219 ParFile1 Physische Datei/Tabelle/View Kann als kurzer System-Name (Max.10 Zeichen) oder langer SQL Name (Max. 128 Zeichen) angegeben werden. ParFile2 Physische Datei/Tabelle/View Optionaler Parameter Kurzer System- oder langer SQL Name ParJoin2 Verknüpfung zwischen Datei/Tabelle/View 1 und 2 Optionaler Parameter Muss in einem Work-Programm (bei List-Ausgabe) angegeben werden, wenn ParFile2 angegeben wurde (auch dann wenn ein Cross Join gewünscht wird). Beispiel: YFILE2 + on Key1File1 = Key1File2 + In Change-Programmen ist die Angabe der Verknüpfung nicht erforderlich. Die Parameter ParFile3 ParFile10 sind optional und werden analog ParFile2 verwendet. Die Parameter ParJoin3 ParJoin10 sind optional werden analog ParJoin2 verwendet. Beispiel für den Aufruf Wx_HdrFile('AuftrKopfX'); Wx_HdrFile('AuftrKopfX': 'AuftrPosX': 'Join AuftrPosX on AuftrKopfX.BestNr = AuftrPosX.BestNr': 'KundSt': 'Left Outer Join KundSt on KundeNr = KndNr'); Source Code 257: Beispiel Aufruf Prozedur Wx_HdrFld() 4.19.3 Wx_HdrFld() Dateien für Header-Informationen definieren Feld für Header-Informationen Ausgabe-Felder mit Header-Informationen, die in den zuvor definierten Tabellen hinterlegt sind, können mit der Prozedur Wx_HdrFld() ausgegeben werden. Zusätzlich zu dem Feld-Inhalt, kann ein zusätzlicher String (z.B. Artikel-Bezeichnung zu Artikel-Nr.) angegeben werden. Beide Texte werden miteinander verknüpft, durch ein Blank getrennt ausgegeben. Werden Header-Felder in Worktables definiert, kann über Option AddFlt dafür gesorgt werden, dass diese Header-Informationen in der Where-Anweisung des automatisch generierten SQL SelectStatement berücksichtigt werden. Wird das Header-Feld als Filter berücksichtigt, kann zusätzlich der Vergleichsoperator für die WhereBedingung angegeben werden. Prototype *************************************************************************** B EN UT ZERHA ND BUC H 220 P* Procedure name: Wx_HdrFld P* Purpose: Define Fields used for Header P* Returns: P* Parameters: ParField => Field P* Parameters: ParMsg => Message-Id or Text P* Parameters: ParValue => Value to Display as Character Value P* Parameters: ParDescr => Additional Descriptions as Character Value P* Parameters: ParOptions => Options P* Parameters: ParCompare => Comparison Operator (Optional) --> Default: = P* (=, <>, >=, <=, <, >, Like, Not Like, P* Not LikeLeft, LikeRight, Not LikeRight) *************************************************************************** D Wx_HdrFld... D PR OPDesc D ParField Like(FldRef.NameSQL) Const D ParMsg Like(FldRef.MsgData) Const D ParValue Like(FldRefCGI.DftValue) Const D ParDescr Like(FldRef.TextVar) Const D Options(*NoPass) D ParOptions Like(FldRefCGI.Options) Const D Options(*NoPass) D ParCompare Like(FldRef.Text15V) Const D Options(*NoPass) Source Code 258: Prototype - Prozedur Wx_HdrFld Definieren Felder mit Header-Informationen Parameter ParField ParDescr Beschreibung, die links neben dem Filter-Feld angezeigt wird Sofern keine Beschreibung angezeigt werden soll, wird der Parameter entweder leer oder mit *Blanks gefüllt übergeben. Soll eine Beschreibung angezeigt werden, kann diese entweder direkt oder als Message-Id angegeben werden. Bei Verwendung einer Message-Id muss die zugehörige Message-File in Directweb für die Anwendung hinterlegt sein. ParValue Alphanumerischer Feldwert Sofern es sich um das Feld, das die Header-Informationen enthält nicht um ein alphanumerisches Feld handelt, muss der Feld-Inhalt mit Hilfe der Built-in-Funktion %Char() konvertiert werden. ParAddInfo zusätzliche alphanumerische Informationen Optionaler Parameter Neben dem Feld-Wert können weitere alphanumerische Informationen angegeben werden (z.B. ParValue=Artikel-Nr. und ParAddInfo=Artikel-Bezeichnung) Der Feldwert und die zusätzlichen Informationen (sofern angegeben) werden aufeinanderfolgend in der gleichen Zeile nur durch ein Blank getrennt ausgegeben. ParOptions Aufbereitungsoptionen Feld/Spalten-Name des Ein-/Ausgabe-Feldes Das Ein-/Ausgabe-Feld (der angegebene Feld-Name) muss in den zuvor definierten Tabellen vorhanden sein. Wahlweise kann der kurze System-Name oder der lange SQL Name angegeben werden. B EN UT ZERHA ND BUC H 221 Optionaler Parameter (vergl. 4.3.8 Aufbereitungsoptionen für Header) Sofern in Work-Programmen bei dem entsprechenden Header-Field die Option AddFlt angegeben wurde, wird der Header-Wert als Filter-Information in die WhereBedingung des automatisch erstellten Select-Statement integriert. ParCompare Vergleichsoperator Optionaler Parameter wird nur bei Work-Programmen berücksichtigt, wenn Option AddFlt angegeben wurde. Beispiel für den Aufruf Wx_HdrFileFld('AuftrKVX01': 'Firma': 'FLD0007': DSCsrC01.Firma: '': 'AddFlt'); //Firma Wx_HdrFld('BestNr': 'FLD0025': DSCsrC01.BestNr: '': 'AddFlt'); //Bestell-Nr. Wx_HdrFld('KundeNr': 'FLD0001': DSCsrC01.KundeNr: DSCsrC01.NameOrt); //Kunde Wx_HdrFld('LiefTerm':'FLD0030': DSCsrC01.LiefTerm); //Liefer-Termin Wx_HdrFld('LiefBed': 'FLD0028': //Liefer-Bedingungen DSCsrC01.LiefBed: DSCsrC01.LiefBedT); Wx_HdrFld('AuftrArt':'FLD0027': DSCsrC01.AuftrArt: DSCsrC01.AuftrArtT); //Auftrags-Art Wx_HdrFld('KopfStatus': 'FLD0026': DSCsrC01.KopfStatus: DSCsrC01.KopfStsT); //Kopf-Status Source Code 259 :Aufruf Prozedur Wx_HdrFld() Abbildung 33: Ergebnis aus Source Code 231 Felder mit Header-Informationen definieren B EN UT ZERHA ND BUC H 222 4.19.4 Wx_HdrFileFld() Datei und erstes Feld für Header Sofern nur auf eine einzige physische Datei/Tabelle/View zugegriffen wird, kann diese Datei/Tabelle/View über die Funktion Wx_HdrFileFld() direkt zusammen mit dem ersten Header-Feld definiert werden. Bei dieser Funktion wird die Datei/Tabelle/View als 1. Parameter übergeben. Die folgenden Parameter entsprechen den Parametern (Anzahl, Reihenfolge und Schlüssel-Wort CONST), die für Prozedur Wx_HdrFld() übergeben werden können. Prototype *************************************************************************** P* Procedure name: Wx_HdrFileFld P* Purpose: Define Fields used for Header P* Returns: P* Parameters: ParFile => File P* Parameters: ParField => Field P* Parameters: ParValue => Value to Display as Unicode Value P* Parameters: ParDescr => Additional Descriptions as Unicode Value P* Parameters: ParMsg => Message-Id or Text P* Parameters: ParOptions => Options P* Parameters: ParCompare => Comparison Operator (Optional) --> Default: = P* (=, <>, >=, <=, <, >, Like, Not Like, P* Not LikeLeft, LikeRight, Not LikeRight) *************************************************************************** D Wx_HdrFileFld... D PR OPDesc D ParFile Like(FldRef.NameSQL) Const D ParField Like(FldRef.NameSQL) Const D ParMsg Like(FldRef.MsgData) Const D ParValue Like(FldRefCGI.DftValue) Const D ParDescr Like(FldRef.TextVar) Const D Options(*NoPass) D ParOptions Like(FldRefCGI.Options) Const D Options(*NoPass) D ParCompare Like(FldRef.Text15V) Const D Options(*NoPass) Source Code 260: Prototype - Prozedur Wx_HdrFileFld() - Definiere Header-Datei und 1.Feld Parameter ParFile Physische Datei/Tabelle/View Kann als kurzer System-Name (Max.10 Zeichen) oder langer SQL Name (Max. 128 Zeichen) angegeben werden. Analog Parameter ParFile1 in Funktion Wx_HdrFile() ParField Feld/Spalten-Name des Ein-/Ausgabe-Feldes Das Ein-/Ausgabe-Feld (der angegebene Feld-Name) muss in den zuvor definierten Tabellen vorhanden sein. Wahlweise kann der kurze System-Name oder der lange SQL Name angegeben werden. ParDescr Beschreibung, die links neben dem Filter-Feld angezeigt wird Sofern keine Beschreibung angezeigt werden soll, wird der Parameter entweder leer B EN UT ZERHA ND BUC H 223 oder mit *Blanks gefüllt übergeben. Soll eine Beschreibung angezeigt werden, kann diese entweder direkt oder als Message-Id angegeben werden. Bei Verwendung einer Message-Id muss die zugehörige Message-File in Directweb für die Anwendung hinterlegt sein. ParValue ParAddInfo zusätzliche alphanumerische Informationen Optionaler Parameter Neben dem Feld-Wert können weitere alphanumerische Informationen angegeben werden (z.B. ParValue=Artikel-Nr. und ParAddInfo=Artikel-Bezeichnung) Der Feldwert und die zusätzlichen Informationen (sofern angegeben) werden aufeinanderfolgend in der gleichen Zeile nur durch ein Blank getrennt ausgegeben. ParOptions Aufbereitungsoptionen Optionaler Parameter (vergl. 4.3.8 Aufbereitungsoptionen für Header) Sofern in Work-Programmen bei dem entsprechenden Header-Field die Option AddFlt angegeben wurde, wird der Header-Wert als Filter-Information in die WhereBedingung des automatisch erstellten Select-Statement integriert. ParCompare Vergleichsoperator Optionaler Parameter wird nur bei Work-Programmen berücksichtigt, wenn Option AddFlt angegeben wurde. Alphanumerischer Feldwert Sofern es sich um das Feld, das die Header-Informationen enthält nicht um ein alphanumerisches Feld handelt, muss der Feld-Inhalt mit Hilfe der Built-in-Funktion %Char() konvertiert werden. Beispiele für den Aufruf Wx_HdrFileFld('AuftrKVX01': 'Firma': 'FLD0007': DSCsrC01.Firma: '': 'AddFlt'); Wx_HdrFileFld('WXUMSKNDJS': 'Jahr': 'FLD0013': GblJahr: '': 'AddFlt'); Source Code 261: Aufruf Prozedur Wx_HdrFileFld() - Definieren Header-File und 1. Feld 4.20 Sonstige Funktionen In WOPiXX sind auch einige allgemein gültige und einsetzbare Prozeduren/Funktionen enthalten. 4.20.1 Wx_SplitStringArr() String in Feldgruppe splitten Über die Funktion Wx_SplitStringArr kann ein Textstring, in dem die einzelnen Werte durch ein beliebiges Trennzeichen getrennt sind in eine Feldgruppe ausgegeben werden. B EN UT ZERHA ND BUC H 224 Aktuell kann ein Text in bis zu 256 Elemente mit einer Länge von maximal 256 Zeichen aufgeteilt werden. Längere Element-Texte werden ohne Warnung abgeschnitten. Enthält der String mehr als 256 Elemente wird eine entsprechende Escape Message ausgegeben, d.h. die Prozedur bricht ab. Der Fehler kann über eine Monitor-Group abgefangen werden. Prototype *************************************************************************** // Procedure name: WX_SplitStringArr // Purpose: Split String into Array Elements depending on the // passed separator // Texts longer than the Element length will be truncated // without any warning // --> An escape message is sent if more elements are available // Returns: Array with the split texts // Parameter: ParString => String // Parameter: ParSep => Separator // Parameter: ParEmpty => Empty Fields = Return an empty Element // *ON = Empty Element *-------------------------------------------------------------------------* Attention: Maximum 256 Elements with 256 Characters *************************************************************************** D Wx_SplitStringArr... D PR Like(FldRef.TextVar) OpDesc D Dim(RefElemText) D ParString Like(FldRefLA.VarLen) Const D ParSep Like(FldRef.Sep) Const D POutNbrElem 10U 0 Options(*NoPass) D ParEmpty N Options(*NoPass) Const Source Code 262: Prototype - Funktion Wx_SplitStringArr - Text in Feldgruppe aufsplitten Parameter Rückgabe-Wert Feldgruppe mit dem aufgesplitteten Text Bis zu 256 Elemente mit einer Länge von maximal 256 Zeichen ParString Text-String, der aufgesplittet werden soll ParSep Trennzeichen Abhängig von dem angegeben Trennzeichen wird der String aufgesplittet. Jedes beliebige Zeichen kann angegeben werden. POutNbrElements Ausgabe-Parameter Anzahl Elemente Optionaler Parameter Muss als Unsigned Integer-Variable (10U 0) definiert werden ParEmpty Ausgabe von leeren Elementen Optionaler Parameter Sofern mehrere Trennzeichen unmittelbar aufeinander folgen, kann über diesen Parameter gesteuert werden, ob leere Elemente ausgegeben werden sollen. Sofern der Parameter nicht angegeben wurde oder mit *OFF übergeben wurde, wer- B EN UT ZERHA ND BUC H 225 den keine leeren Elemente ausgegeben, d.h. die Ausgabe-Feldgruppe enthält nur gefüllte Elemente (und leere Elemente am Ende) Leere Elemente können z.B. hilfreich sein, wenn *.csv-Dateien in Spalten aufgeteilt werden müssen. Beispiele für den Aufruf D GblText S 1024A Varying D GblArrChar S Like(FldRef.TextVar) Dim(RefElemText) D GblElem S 10U 0 D ConstSep C Const('|') *-----------------------------------------------------------------------------/Free GblArrChar = Wx_SplitStringArr(GblText: ';'); GblArrChar = Wx_SplitStringArr(GblText: ConstSep: GblElem); GblArrChar = Wx_SplitSTringArr(GblText: ';': GblElem: *ON); For GblIndex = 1 To GblElem; //Verarbeitung EndFor; /End-Free Source Code 263: Aufruf - Funktion Wx_SplitStringArr() - Text in Feldgruppe aufsplitten 4.20.2 Wx_SplitStringArrUC2() splitten Unicode-Test in Feldgruppe Über die Funktion Wx_SplitStringArrUC2 kann ein Textstring in Double-Byte-Unicode (RPG Datentyp C), in dem die einzelnen Werte durch ein beliebiges Double-Byte-Unicode-Trennzeichen getrennt sind in eine Feldgruppe ausgegeben werden. Aktuell kann ein Text in bis zu 256 Elemente mit einer Länge von maximal 256 Double-Byte-UnicodeZeichen aufgeteilt werden. Längere Element-Texte werden ohne Warnung abgeschnitten. Enthält der String mehr als 256 Elemente wird eine entsprechende Escape Message ausgegeben, d.h. die Prozedur bricht ab. Der Fehler kann über eine Monitor-Group abgefangen werden. Prototype *************************************************************************** // Procedure name: WX_SplitStringArrUC2 // Purpose: Split Unicode String into Unicode Array Elements depending // on the passed separator // Texts longer than the Element length will be truncated // --> An escape message is sent if more elements are available // Returns: Array with the split texts // Parameter: ParString => String // Parameter: ParSep => Separator // Parameter: ParEmpty => Empty Fields = Return an empty Element B EN UT ZERHA ND BUC H 226 // *ON = Empty Element *-------------------------------------------------------------------------* Attention: Maximum 256 Elements with 256 Characters *************************************************************************** D Wx_SplitStringArrUC2... D PR Like(FldRef.UCVar) OpDesc D Dim(RefElemText) D ParString Like(FldRefLU.VarLen) Const D ParSep Like(FldRef.SepUC) Const D POutNbrElem 10U 0 Options(*NoPass) D ParEmpty N Options(*NoPass) Const Source Code 264: Prototype - Funktion Wx_SplitStringArrUC2 Unicode-Text in Feldgruppe aufsplitten Parameter Rückgabe-Wert Feldgruppe mit dem aufgesplitteten Text Bis zu 256 Elemente mit einer Länge von maximal 256 Zeichen ParString Unicode-Text-String, der aufgesplittet werden soll ParSep Unicode-Trennzeichen Abhängig von dem angegeben Trennzeichen wird der String aufgesplittet. Jedes beliebige Zeichen kann angegeben werden. POutNbrElements Ausgabe-Parameter Anzahl Elemente Optionaler Parameter Muss als Unsigned Integer-Variable (10U 0) definiert werden ParEmpty Ausgabe von leeren Elementen Optionaler Parameter Sofern mehrere Trennzeichen unmittelbar aufeinander folgen, kann über diesen Parameter gesteuert werden, ob leere Elemente ausgegeben werden sollen. Sofern der Parameter nicht angegeben wurde oder mit *OFF übergeben wurde, werden keine leeren Elemente ausgegeben, d.h. die Ausgabe-Feldgruppe enthält nur gefüllte Elemente (und leere Elemente am Ende) Beispiele für den Aufruf D GblText S 4096C Varying D GblArrChar S Like(FldRef.UCVar) Dim(RefElemText) D GblElem S 10U 0 D ConstSep C Const(%UCS2('|')) *----------------------------------------------------------------------------/Free GblArrChar = Wx_SplitStringArrUC2(GblText: ';'); GblArrChar = Wx_SplitStringArrUC2(GblText: ConstSep: GblElem); GblArrChar = Wx_SplitSTringArrUC2(GblText: ';': GblElem: *ON); For GblIndex = 1 To GblElem; //Verarbeitung EndFor; /End-Free Source Code 265: Aufruf - Funktion Wx_SplitStringArrUC2() Unicode-Text in Feldgruppe aufsplitten B EN UT ZERHA ND BUC H 227 B EN UT ZERHA ND BUC H 228 5. Beispiel-Programme 5.1 Work-Programm EXWRKAD01 Bei dem Programm EXWRKAD01 handelt es sich um eine einfache List-Anzeige, mit einem generischen Filter und den Standard-Kontext-Menü-Punkten Ändern, Kopieren, Löschen, Eigenschaften/Anzeigen, sowie dem Standard-Button erfassen. 5.1.1 Programm EXWRKAD01 Web-Anzeige Abbildung 34: Work-Programm EXWRKAD01 - Adress-Stamm 5.1.2 Programm EXWRKAD01 - Source Code In dem Programm EXWRKAD01 wird der Adress-Stamm(Tabelle/Datei ADRESSEX) angezeigt. Es wird ein generischer Filter definiert, durch die Spalten/Felder NAME1F, STASSE und ORT nach der eingegebenen Zeichenkombination in der gleichen Groß/Klein-Schreibweise durchsucht werden. Ein Kontext-Menü mit den Standard-Kontext-Menü-Punkten Ändern, Kopieren, Löschen und Eigenschaften (=Anzeigen) wird automatisch hinzugefügt. Als eindeutiger Schlüssel für die Folge-Programme wird die relative Satz-Nr. verwendet. Die Spalten/Felder KUNDENR, NAME1F, STRASSE, LAND, PLZ und ORT aus der Tabelle/Datei ADRESSEX werden angezeigt. Das Land wird mittig ausgerichtet und durch als Länder-Flagge aufbereitet. Beim ersten Aufruf werden die Datensätze nach Land, Postleitzahl und Kunde sortiert ausgegeben. * H-Bestimmungen *------------------------* H/COPY QCPYLESRC,WX_HSPECS B EN UT ZERHA ND BUC H 229 * F-Bestimmungen *------------------------* * D-Bestimmungen *------------------------* * Prototypes D/INCLUDE QPROLESRC,WX_PROTO * Globale D-Bestimmungen ************************************************************************** * M A I N P R O G R A M ************************************************************************** /Free *INLR = *On; //HTML-Dokument öffnen Wx_OpnHTMLWrk('HDR0001': 'EXCHGAD01'); //Definieren generischen Filter Wx_GenFlt('ADRESSEX': 'NAME1F': 'casesensitive': 'STRASSE': 'ORT'); //Definieren Kontext-Menü/Buttons //--> Default (= Hinzufügen, Ändern, Kopieren, Löschen, Anzeigen) aut Wx_CtxMnuItmChange(); Wx_CtxMnuItmDelete(); Wx_CtxMnuItmProperty(); Wx_CtxMnuItm('EXCHGAD02': 'Test BHA': 'Window icn(start.gif)'); //Definieren Spalten für Work Table Wx_WrkKey('ADRESSEX': *On); Wx_WrkFld('KundeNr': 'FLD0001'); Wx_WrkFld('Name1F': 'FLD0002'); Wx_WrkFld('Strasse': 'FLD0003'); Wx_WrkFld('Land': 'FLD0006': ' center CTL(Country)'); Wx_WrkFld('PLZ': 'FLD0004'); Wx_WrkFld('Ort': 'FLD0005'); Wx_WrkDftOrder('Land': 'PLZ': 'KundeNr'); //HTML-Dokument ausgeben Wx_WrtWrkTbl(); Return; /End-Free Source Code 266: Work-Programm EXWRKAD01 - Adress-Stamm Copy-Strecke Wx_HSPECS - H-Bestimmungen Copy-Strecke Wx_PROTO Wx_OpnHTMLWrk Definieren Standard-HTML-Dokument Überschrift: Message-Id HDR0001 = Adress-Stamm Folge-Programm: EXCHGAD01 Detail-Anzeige Wx_GenFlt Prototypen für alle WOPiXX-Prozeduren Generischen Filter definieren Für Datei: Durchsuchen Spalten: Casesensitive Suche: ADRESSEX Name1F, Strasse und Ort Option casesensitive Default-Kontext-Menü , da weder Kontext-Menü-Punkte noch Buttons definiert wurden B EN UT ZERHA ND BUC H 230 Wx_WrkKey Definieren der relativen Satz-Nr. als eindeutigen Key ADRESSEX Datei aus der die relative Satz-Nr. ermittelt Werden soll *ON Bei dem eindeutigen Schlüssel handelt es Sich um die relative Satz-Nr. 5.2 Wx_WrkFld Spalten Definieren Kunden-Nr. Name Strasse Land Postleitzahl Ort Spalte KUNDENR aus Datei ADRESSEX Überschrift: Message-Id FLD0001 = Kunden-Nr. Spalte NAME1F aus Datei ADRESSEX Überschrift: Message-Id FLD0002 = Name. Spalte STRASSE aus Datei ADRESSEX Überschrift: Message-Id FLD0003 = Strasse Spalte LAND aus Datei ADRESSEX Überschrift: Message-Id FLD0006 = Land Aufbereitung als Flagge und zentrierte Ausrichtung über Optionen CENTER und CTL(COUNTRY) Spalte PLZ in Datei ADRESSEX Überschrift: Message-Id FLD0004 = Postleitzahl Spalte Ort in Datei ADRESSEX Überschrift: Message-Id FLD0005 = Ort Wx_WrkDftOrder: Default Sortierung nach Land, Postleitzahl, Kunden-Nr. Wx_WrtWrkTbl: HTML-Dokument aufbereiten und ausgeben Change-Programm EXCHGAD01 Adress-Stamm Das Programm ExCHGAD01 ist das Folge-Programm, das aus der List-Anzeige des Adress-Stamms beim Hinzufügen, Ändern, Löschen oder Anzeigen von Datensätzen aufgerufen wird. In dem Programm werden die Ein-/Ausgabe-Felder mit einigen wenigen Optionen definiert und aufgerufen. Zum Einlesen und Fortschreiben der Datensätze, sowie für die zusätzliche Eingabe-Prüfung ist individuelle Programmierung erforderlich. B EN UT ZERHA ND BUC H 231 Abbildung 35: Beispiel Change-Programm - Adress-Stamm Um das Beispiel-Programm und die zugehörigen Erklärungen so übersichtlich wie möglich zu machen, wurde es in mehrere Abschnitte aufgeteilt. H-, F- und globale D-Bestimmungen Haupt-Programm Um das Haupt-Programm so übersichtlich wie möglich zu halten, wurden die einzelnen Schritte als Sub-Procedure-Aufrufe hinterlegt. Es bleibt jedoch dem Programmierer überlassen, ob er ebenfalls Sub-Procedures verwenden will, oder ob er stattdessen lieber Subroutinen verwendet, oder ob er alle Schritte im Haupt-Programm ausführen möchte. Sub-Procedures im Beispiel-Programm o Int_ReadData() Einlesen der Daten über Schlüssel-Feld oder relative Satz-Nr. Individuelle Programmierung o Int_DfnFldHdr() Definieren von Header-Informationen Wird in dem Beispiel-Programm nicht benötigt o Int_DfnFldChg() Definieren der Ein-/Ausgabe-Felder o Int_ChkInput() Eingabe-Prüfung Individuelle Programmierung Wird in diesem Beispiel nicht benötigt o Int_WrtUpd() Fortschreiben der erfassten Daten Individuelle Programmierung o Int_Dlt() Löschen der Daten-Sätze über Schlüssel-Felder oder relative Satz-Nr. Individuelle Programmierung B EN UT ZERHA ND BUC H 232 5.2.1 H-, F- und globale D-Bestimmungen *************************************************************************** * H – B E S T I M M U N G E N *************************************************************************** D/COPY QCPYLESRC,WX_HSPECS *************************************************************************** * F – B E S T I M M U N G E N *************************************************************************** FADRESSEX IF E DISK Rename(Adresse: AdresseF) FADRESSEI01UF A E DISK Rename(Adresse: AdresseF1) *************************************************************************** * D – B E S T I M M U N G E N *************************************************************************** * PROTOTYPING *-------------------------------------------------------------------------D/INCLUDE QPROLESRC,WX_PROTO * Interne Prozeduren *-------------------------* * Ab Release 7.1 sind Prototypen für interne Prozeduren nicht mehr erforderlich /If Not Defined (*V7R1M0) * Datensätze einlesen und Default-Werte setzen D Int_ReadData PR OpDesc * Define Fields to Display D Int_DfnFldHdr PR D Int_DfnFldChg PR OpDesc OpDesc * Eingabe-Prüfung D Int_ChkInput PR OpDesc * Datensätze verarbeiten D Int_WrtUpd PR Like(FldRef.MsgText) OpDesc D Int_Dlt PR OpDesc /EndIf *************************************************************************** * G L O B A L E F E L D D E F I N I T I O N E N *************************************************************************** D GblKey S 10I 0 D GblArrKeys S 10I 0 Dim(RefElemCGI) D GblErrMsg S Like(FldRef.MsgText) D DSAdresse D DSAdresseSav E DS DS D GblIndex S D PGMSDS D MsgTxt SDS ExtName(AdresseX) Inz LikeDS(DSAdresse) Inz 3U 0 80A Qualified Overlay(PGMSDS: 91) Source Code 267: Beispiel - Change-Programm Adress-Stamm - H-, F- und globale D-Bestimmungen Copy-Strecke Wx_HSPECS - H-Bestimmungen Datei ADRESSEX: Adress-Stamm Definition als Input-File für ungeschlüsselten Zugriff, da aus dem vorgelagerten WorkProgramm die relative Satz-Nr. übergeben wird. Datensatz wird eingelesen um die erforderlichen Daten in Datenstrukturen einzulesen. Datei ADRESSEI01 logische Datei auf Adress-Stamm Definition als Update-File für ungeschlüsselten Zugriff. Wird erst unmittelbar vor dem Update/Write eingelesen. B EN UT ZERHA ND BUC H 233 Copy-Strecke Wx_PROTO Prototypen für interne Prozeduren Zur Strukturierung des Source-Codes werden in dem Beispiel-Programm interne Prozeduren verwendet. Vor Release 7.1 müssen auch für interne Prozeduren Prototypen angelegt werden. Ab Release 7.1. ist die Angabe von Prototypen für interne Prozeduren optional. GblKey: GblArrKeys: Globale Feldgruppe, in der die relative Satz-Nummern der im vorgelagerten WorkProgramm zum Löschen ausgewählten Datensätze, empfangen werden. Verwendung zum Löschen der Datensätze GblIndex: GblErrMsg: Globale Variable, in der im Fehler-Fall eine Nachricht ausgegeben wird. DSAdresse: Globale Datenstruktur, in die der Datensatz für das Ändern, Kopieren oder Anzeigen eingelesen wird. Die Datenstruktur bzw. die zugehörigen Datenstruktur-Unterfelder werden zum Austausch zwischen dem RPG-Programm und der Web-Ausgabe verwendet. DSAdresseSav: Globale Datenstruktur in der die erfassten Daten kurzfristig gesichert werden. Der Datensatz, der geändert werden soll, kann wegen der stateless Programmierung erst unmittelbar vor dem Update eingelesen werden. Die erfassten Daten müssen kurzfristig weggesichert werden und nach dem Einlesen des Datensatzes übertragen werden. Dies erfolgt mit Hilfe der Datenstruktur DSAdresseSav. PGMSDS Prototypen für alle WOPiXX-Prozeduren Globale Variable, in der die relative Satz-Nr., die aus dem vorgelagerten WorkProgramm übergeben wird, empfangen wird. Verwendung zum Einlesen des Datensatzes zum Ändern, Kopieren oder Anzeigen. Globale Variable zur Verarbeitung der Feldgruppe GblArrKeys. Programm-Status-Datenstruktur mit Unterfeld MSGTXT Im Fehlerfall wird automatisch ein Fehler-Text in die Datenstruktur bzw. in das UnterFeld MSGTXT übertragen. Diese Fehler-Meldung wird im Programm in die Variable GblErrMsg übertragen und in der Web-Anwendung angezeigt. Eine vollständige Definition der Programm-Status-Datenstruktur (mit allen Datenstruktur-Unterfeldern) ist in der folgenden Copy-Strecke hinterlegt und kann auch vom WOPiXX-Programmierer verwendet werden. 5.2.2 /Free Teil-Datei: Datei: Bibliothek: Haupt-Programm D_PGMSDS QCPYLESRC DIRWEB B EN UT ZERHA ND BUC H 234 *INLR = *On; //1. Einlesen der Schlüssel- und Parameter-Werte GblKey = Wx_GetDBKeyInt(); GblArrKeys = Wx_GetDBKeyArrInt(); //2. Verarbeiten Modi ohne Dialog-Anzeige (z.B. Sätze Löschen) // oder Modi, die in anderen Programmen verarbeitet werden Select; When Wx_isModeDelete(); Int_Dlt(); When Wx_isMode('MYMODE'); //DoSomething EndSL; //3. Daten einlesen (individuelle Programmierung) Int_ReadData(); //4. Definieren Dateien und Felder für WOPiXX // 4.1. HTML Dokument öffnen // 4.2. Dateien definieren // 4.3. Header-Informationen // 4.4. Ein-/Ausgabe-Felder definieren Wx_OpnHTMLChg('HDR0003'); Wx_ChgFile('AdresseX'); Int_DfnFldHdr(); Int_DfnFldChg(); //5. Retrieve Changed Input Data Wx_GetChgInput(); //6. Eingabe-Prüfung (Individuelle Programmierung) Int_ChkInput(); //7. Daten fortschreiben (Individuelle Programmierung) GblErrMsg = Int_WrtUpd(); //8. Setzen Parameter-Werte für Folge-Aufrufe (sofern erforderlich) //HTML-Dokument erneut ausgeben //oder auf vorherige Anzeige zurückspringen Wx_WrtChgTbl(GblErrMsg); Return; /End-Free Source Code 268: Beispiel - Change-Programm Adress-Stamm - Haupt-Programm Wx_GetDBKeyInt() - Einlesen der eindeutigen Schlüssel-Werte Über die Funktion Wx_GetDBKeyInt()t wird die relative Satz-Nr., die im vorgelagerten Programm bei den Aktionen Ändern, Anzeigen, Kopieren und Löschen übergeben wird, ermittelt und als ganzzahliger Wert in die Variable GblKey ausgegeben. Wx_GetDBKeyArrInt() Einlesen der eindeutigen Schlüssel-Werte in Feldgruppe Über die Funktion Wx_GetDBKeyInt() werden die relativen Satz-Nummern, die im vorgelagerten Programm bei der Festlegung der zu löschenden Datensätze ausgewählt wurden, ermittelt und als ganzzahlige Werte in die Feldgruppe GblArrKeys übernommen. Wx_isModeDelete() - Prüfen Modus Löschen B EN UT ZERHA ND BUC H 235 Über die Funktion Wx_isModeDelete() wird geprüft, ob Datensätze gelöscht werden sollen. Sofern Datensätze gelöscht werden sollen wird die Prozedur Int_Dlt() aufgerufen. In dieser Funktion wird auch der Rücksprung auf das vorgelagerte Programm gesteuert. Damit ist das Beenden des Programms (z.B. über OpCode Return) an dieser Stelle nicht erforderlich. Int_ReadData Einlesen der Daten In dieser Prozedur wird der Datensatz basierend auf der in der Variable GblKey ausgegebenen relativen Satz-Nr. eingelesen. Individuelle Programmierung Wx_OpnHTMLChg() Definieren Standard-HTML-Dokument Überschrift: Message-Id HDR0003 = Adress-Stamm Details Die Angabe eines Folge-Programms ist an dieser Stelle nicht erforderlich, da das Programm beim nächsten Durchlauf erneut aufgerufen wird. Der Rücksprung auf das vorgelagerte Programm wird über WOPiXX-Prozeduren gesteuert. Wx_ChgFile() Int_DfnFldHdr() Definieren der Header-Informationen Int_DfnFldChg() Definieren der Ein-/Ausgabe-Felder Wx_GetChgInput() Empfangen Eingabe-Daten Beim ersten Durchlauf wird das HTML-Dokument mit den zuvor definierten Ein/Ausgabe-Felder ausgegeben und das Programm beendet Beim nächsten Durchlauf werden die erfassten Daten empfangen. Der WOPiXX-Programmierer muss sich weder um das Beenden, noch um die Fortsetzung des Programms kümmern, sondern lediglich die Prozedur Wx_GetChgInput() aufrufen Wx_IntChkInput() Int_WrtUpd() Wx_WrtChgTbl() HTML-Dokument ausgeben bzw. Steuerung des Rücksprungs. Sofern weder eine individuelle Fehlermeldung noch beim Fortschreiben des Datensatzes eine globale Fehlermeldung ausgegeben wurde, wird das Programm beendet und auf das vorgelagerte Programm zurückgesprungen. Definieren der Dateien/Tabellen/Views für das Change-Programm ADRESSEX Datei Adress-Stamm, die verarbeitet wird Individuelle Eingabe-Prüfung Fortschreiben der Datensätze Im Fehlerfall wird aus der internen Prozedur Int_WrtUpd eine Fehlermeldung in die Variable GblErrMsg ausgegeben. Sofern ein Fehler aufgetreten ist, wird das HTML-Dokument erneut, mit den entsprechenden Fehlermeldungen ausgegeben. B EN UT ZERHA ND BUC H 236 5.2.3 Int_ReadData() Einlesen Daten In der Funktion Int_ReadData() wird der zu ändernde oder anzuzeigende Datensatz im Input-Modus eingelesen. Der Zugriff auf die Daten muss vom WOPiXX-Programmierer codiert werden. Dabei ist es unerheblich, ob der Zugriff über native I/O (z.B. Chain) oder mit Hilfe von embedded SQL erfolgt. ********************************************************************************* P* Procedure name: Int_ReadData P* Purpose: Einlesen der Daten für die Ein-/Ausgabe-Felder P* Aufgrund der STATELESS Programmierung sollten die Dateien als P* INPUT-Files definiert sein. P* Die Ausgabe muss in Datenstrukturen erfolgen P* (wegen Pointer-Handling) P* Returns: P* Parameters: ******************************************************************************** P Int_ReadData B D Int_ReadData PI OpDesc *--------------------------------------------------------------------------------/FREE If GblKey > *Zeros; Chain GblKey AdresseF; EndIf; If GblKey = *Zeros or Not %Found(AdresseX); Clear DSAdresse; EndIf; Return; /END-FREE P Int_ReadData E Source Code 269: Beispiel Change-Programm - Adress-Stamm Prozedur Int_ReadData - Daten einlesen Einlesen des Datensatzes im Input Modus in die Datenstruktur DSADRESSE Das Einlesen des Datensatzes erfolgt nur dann, wenn aus dem vorgelagerten Programm eine relative Satz-Nr. übergeben wurde (bzw. wenn die Variable GblKey über die Funktion Wx_GetDBKeyInt() gefüllt wurde), Sofern kein Datensatz eingelesen wurde, wird die Datenstruktur DSADRESSE initialisiert. Da es sich bei dieser Prozedur um Individual-Programmierung handelt, könnten weitere DefaultWerte in den Datenstruktur-Unterfeldern von DSADRESSE gesetzt werden. 5.2.4 Int_HdrFldDfn() Header Information ******************************************************************************* * Procedure name: Int_DfnFldHdr * Purpose: Definieren / Ausgeben Header Informationen * Returns: * Parameters: **************************************************************************** P Int_DfnFldHdr B B EN UT ZERHA ND BUC H 237 D Int_DfnFldHdr PI OpDesc *------------------------------------------------------------------------------/FREE //Header-Texte (Prozedur Wx_HdrText) können unabhängig von //den registrierten Dateien/Tabellen/Views und //den darin hinterlegten Feldern/Spalten angelegt werden. //Header-Informationen, die sich auf Feld-Werte beziehen werden über //Prozedur Wx_HdrFld() definiert. //Das Feld muss in den zuvor definierten Dateien/Tabellen/Views vorhanden sein Return; /END-FREE P Int_DfnFldHdr E Source Code 270: Beispiel Change-Programm - Adress-Stamm - Prozedur Int_DfnFldHdr - Definieren Header-Informationen In dem Beispiel-Programm werden keine Header-Informationen benötigt. 5.2.5 Int_ChgFldDfn() Ein-/Ausgabe-Feld-Definition ******************************************************************************** P* Procedure name: Int_DfnFldChg P* Purpose: Definieren der Ein-/Ausgabe-Felder P* Die Ein-/Ausgabe-Felder müssen in Datenstrukturen hinterlegt P* sein, unabhängig davon ob Datei-Felder oder Arbeits-Felder P* definiert werden P* Wegen Pointer-Handling P* Returns: P* Parameters: ****************************************************************************** P Int_DfnFldChg B D Int_DfnFldChg PI OpDesc *-------------------------------------------------------------------------/FREE //1. Definieren Ein-/Ausgabe-Felder aus Dateien/Tabellen/Views // --> Felder müssen in den zuvor definierten Dateien/Tabellen/Views // vorhanden sein // --> Ein-/Ausgabe-Felder müssen in Datenstrukturen hinterlegt sein Wx_ChgFld('KundeNr': %Addr(KundeNr): 'FLD0001': 'Range(000000, 999999) Right Required'); Wx_ChgFld('Name1F': %Addr(Name1F): Wx_ChgFld('Name2F': %Addr(Name2F): Wx_ChgFld('Strasse': %Addr(Strasse): Wx_ChgFld('Land': %Addr(Land): 'CTL(Country) required'); Wx_ChgFld('PLZ': %Addr(PLZ): Wx_ChgFld('Ort': %Addr(Ort): 'Required SelectList'); //****** 'FLD0002': 'Required'); 'Name 2' : 'IMG(test.bmp)'); 'FLD0003'); 'FLD0006': 'FLD0012': 'NoNewLin'); '': 'Required '); //2. Definieren Arbeits-Felder als Ein-/Ausgabe-Variablen // --> Ein-/Ausgabe-Felder müssen in Datenstrukturen hinterlegt sein Return; /END-FREE P Int_DfnFldChg... B EN UT ZERHA ND BUC H 238 P E Source Code 271: Beispiel Change-Programm - Adress-Stamm - Int_DfnFldChg - Definieren Ein-/Ausgabe-Felder KUNDENR Definition des Ein-/Ausgabe-Feldes KUNDENR Das Feld KUNDENR ist in der Datei ADRESSEX hinterlegt und damit ein DatenstrukturUnterfeld in der Datenstruktur DSADRESSE. KUNDENR Name des Feldes in Datei ADRESSEX %ADDR(KundeNr) Da ein Austausch von Daten zwischen dem RPGund dem HTML-Skript erfolgen muss und Daten in jedem beliebigen Datentypen definiert sein können, muss ein Pointer auf das Datenstruktur-Unterfeld KUNDENR übergeben werden. FLD0001 Message-Id = Kunde-Nr. Option Range(000000, 999999) Right Required Gültiger Bereich zwischen 0 und 999999, rechtsbündig angeordnet und Muss-Feld NAME1F Definition des Ein-/Ausgabe-Feldes NAME1F Das Feld NAME1F ist in der Datei ADRESSEX hinterlegt und damit ebenfalls ein Datenstruktur-Unterfeld in der Datenstruktur DSADRESSE. NAME1F Name des Feldes in Datei ADRESSEX %ADDR(Name1F) Da ein Austausch von Daten zwischen dem RPGund dem HTML-Skript erfolgen muss und Daten in jedem beliebigen Datentypen definiert sein können, muss ein Pointer auf das Datenstruktur-Unterfeld NAME1F übergeben werden. FLD0002 Message-Id = Name Option Required Muss-Feld NAME2F Definition des Ein-/Ausgabe-Feldes NAME2F Das Feld NAME2F ist in der Datei ADRESSEX hinterlegt und damit ebenfalls ein Datenstruktur-Unterfeld in der Datenstruktur DSADRESSE. NAME2F Name des Feldes in Datei ADRESSEX %ADDR(Name2F) Da ein Austausch von Daten zwischen dem RPGund dem HTML-Skript erfolgen muss und Daten in jedem beliebigen Datentypen definiert sein können, muss ein Pointer auf das Datenstruktur-Unterfeld NAME2F übergeben werden. Name 2 Anstatt einer Message-Id wird die Beschreibung direkt angegeben. STRASSE Definition des Ein-/Ausgabe-Feldes STRASSE Das Feld STRASSE ist in der Datei ADRESSEX hinterlegt und damit ebenfalls ein Datenstruktur-Unterfeld in der Datenstruktur DSADRESSE. STRASSE Name des Feldes in Datei ADRESSEX %ADDR(Strasse) Da ein Austausch von Daten zwischen dem RPGund dem HTML-Skript erfolgen muss und Daten in jedem beliebigen Datentypen definiert sein können, muss B EN UT ZERHA ND BUC H 239 FLD0003 ein Pointer auf das Datenstruktur-Unterfeld STRASSE übergeben werden. Message-Id = Strasse LAND Definition des Ein-/Ausgabe-Feldes LAND. Das Feld LAND ist in der Datei ADRESSEX hinterlegt und damit ebenfalls ein Datenstruktur-Unterfeld in der Datenstruktur DSADRESSE. LAND Name des Feldes in Datei ADRESSEX %ADDR(Land) Da ein Austausch von Daten zwischen dem RPGund dem HTML-Skript erfolgen muss und Daten in jedem beliebigen Datentypen definiert sein können, muss ein Pointer auf das Datenstruktur-Unterfeld LAND übergeben werden. FLD0006 Message-Id = Land Option CTL(Country) required Aufbereitung des Landes als Flagge Muss-Feld PLZ Definition des Ein-/Ausgabe-Feldes PLZ. Das Feld PLZ ist in der Datei ADRESSEX hinterlegt und damit ebenfalls ein Datenstruktur-Unterfeld in der Datenstruktur DSADRESSE. PLZ Name des Feldes in Datei ADRESSEX %ADDR(PLZ) Da ein Austausch von Daten zwischen dem RPGund dem HTML-Skript erfolgen muss und Daten in jedem beliebigen Datentypen definiert sein können, muss ein Pointer auf das Datenstruktur-Unterfeld PLZ übergeben werden. FLD0012 Message-Id = Land Option NoNewLin Das nächste Ein-/Ausgabe-Feld wird in der gleichen Zeile definiert ORT Definition des Ein-/Ausgabe-Feldes ORT. Das Feld ORT ist in der Datei ADRESSEX hinterlegt und damit ebenfalls ein Datenstruktur-Unterfeld in der Datenstruktur DSADRESSE. ORT Name des Feldes in Datei ADRESSEX %ADDR(ORT) Da ein Austausch von Daten zwischen dem RPGund dem HTML-Skript erfolgen muss und Daten in jedem beliebigen Datentypen definiert sein können, muss ein Pointer auf das Datenstruktur-Unterfeld ORT übergeben werden. Da der Ort in der gleichen Zeile wie die PLZ angegeben werden soll ist keine Beschreibung erforderlich. Option Required Muss-Feld B EN UT ZERHA ND BUC H 240 5.2.6 Int_ChkInput() Eingabe-Prüfung Sofern zusätzliche Eingabe-Prüfungen erforderlich sind, können diese in dieser Prozedur vom WOPiXXProgrammierer codiert werden. Die Prozedur sollte nur dann ausgeführt werden, wenn auch Daten eingegeben wurden, d.h. eine Ausführung im Anzeige-Modus ist nicht erforderlich. Da es sich bei der Eingabe-Prüfung um individuelle Programmierung handelt, bleibt es dem WOPiXXProgrammierer überlassen, wie der die Prüfungen codiert und ob er diese Prozedur überhaupt verwenden will. ************************************************************************** P* Procedure name: Int_ChkInput P* Purpose: Individuelle Eingabe-Prüfung P* Returns: P* Parameters: *************************************************************************** P Int_ChkInput B D Int_ChkInput PI OpDesc *-------------------------------------------------------------------------/FREE Monitor; //Nur reine Ausgabe --> Keine Eingabe-Prüfung If Wx_isModeOutput(); Return; EndIf; //Individuelle Eingabe-Prüfung On-Error; Wx_WrtChgTbl(PGMSDS.MsgTxt); EndMon; Return; /END-FREE P Int_ChkInput E Source Code 272: Beispiel Change-Programm - Adress-Stamm - Prozedur Int_ChkInput - Eingabe-Prüfung Wx_isModeOutput() Die Ein-Ausgabe-Prüfung erfolgt nicht, im Anzeige-Modus. Die Prozedur wird beendet und keine Prüfung ausgeführt. In diesem Beispiel-Programm sind keine weiteren individuellen Prüfungen erforderlich. 5.2.7 Int_WrtUpdate() Daten fortschreiben Fortschreiben der erfassten Daten. Aufgrund der stateless Programmierung, darf der zu ändernde Datensatz erst unmittelbar vor dem Fortschreiben eingelesen werden. B EN UT ZERHA ND BUC H 241 *************************************************************************** P* Procedure name: Int_WrtUpd P* Purpose: Fortschreiben Daten in Datei Adresse P* Erneutes Einlesen des Datensatzes erforderlich, P* wegen STATELESS Programmierung P* Returns: P* Parameters: **************************************************************************** P Int_WrtUpd B D Int_WrtUpd PI Like(FldRef.MsgText) OpDesc D RtnErrMsg S Like(FldRef.MsgText) *--------------------------------------------------------------------------/FREE Monitor; //Nur Anzeige oder Fehler --> Kein Update/Write = Ende Prozedur If Wx_isModeOutput() or Wx_isChgFldErr(); Return ''; EndIf; //Fortschreiben Datensatz //1. Sichern der Ein-/Ausgabe-Daten //2. Erneutes Einlesen des Datensatzes (wegen STATELESS Programmierung) //3. Erfasste Daten in den eingelesenen Datensatz übernehmen //4. Datensatz fortschreiben DSAdresseSav = DSAdresse; If GblKey <> *Zeros; Clear DSAdresse; Chain GblKey AdresseF1; EndIf; DSAdresse = DSAdresseSav; If Not %Found(AdresseI01) or GblKey = *Zeros; Write AdresseF1; Else; Update AdresseF1; EndIf; On-Error; DSAdresse = DSAdresseSav; Return PGMSDS.MsgTxt; EndMon; Return ''; /END-FREE P Int_WrtUpd... P E Source Code 273: Beispiel - Change-Programm - Adress-Stamm - Prozedur Int_WrtUpd() - Daten fortschreiben Die Prozedur wird nicht ausgeführt (bzw. sofort beendet), sofern im Anzeige-Modus (Wx_isModeOutput()) gearbeitet wird oder ein Fehler angezeigt werden soll (Wx_isChgFldErr()). Die in Datenstruktur DSADRESSE hinterlegten Ein-/Ausgabe-Werte werden in Datenstruktur DSADRESSESav übertagen. Der Datensatz wird im Update-Modus eingelesen, sofern aus dem vorgelagerten Programm eine B EN UT ZERHA ND BUC H 242 relative Satz-Nr. übergeben wurde (GblKey > *Zeros) Die in der Datenstruktur DSADRESSESav gesicherten Daten werden in die Datenstruktur DSADRESSE übertragen. Sofern ein Datensatz eingelesen wurde wird dieser Datensatz fortgeschrieben. Sofern kein Datensatz eingelesen wurde wird ein neuer Datensatz geschrieben. Wurden der Datensatz ordnungsgemäß fortgeschrieben, wird die Prozedur ohne Fehlermeldung verlassen. Tritt beim Einlesen (im Update-Modus) oder beim Fortschreiben der Datensätze ein Fehler auf, wird in den On-Error-Zweig der Monitor-Group verzweigt. Die Fehlermeldung, die in der Programm-Status-Datenstruktur ausgegeben wird, wird als Rückgabe-Wert ausgegeben. 5.2.8 Int_Dlt() Datensätze löschen ************************************************************************** P* Procedure name: Int_Dlt P* Purpose: Löschen Datensätze aus Datei Adresse P* Returns: P* Parameters: ************************************************************************** P Int_Dlt B D Int_Dlt PI OpDesc D LocIndex S 3U 0 D LocErrMsg S Like(FldRef.MsgText) *------------------------------------------------------------------------/FREE Monitor; //Verarbeiten der zu löschenden Datensätze For LocIndex = 1 To %Elem(GblArrKeys); If GblArrKeys(LocIndex) = *Zeros; Leave; EndIf; Delete(E) GblArrKeys(LocIndex) AdresseF1; If %Error; LocErrMsg = 'Fehler beim Löschen'; EndIf; EndFor; On-Error; Wx_RtnPrv(PGMSDS.MsgTxt); EndMon; //Programm beenden und Rücksprung auf vorheriges Programm Wx_RtnPrv(LocErrMsg); /END-FREE P Int_Dlt E Source Code 274: Beispiel - Change-Programm - Adress-Stamm - Prozedur Int_Dlt() - Datensätze löschen B EN UT ZERHA ND BUC H 243 Verarbeitung aller relativen Satz-Nr. die im vorhergehenden Programm zum Löschen ausgewählt wurden, und die über Prozedur Wx_GetDBKeyArrInt() in die Feldgruppe GblArrKeys eingelesen wurden. Löschen der Datensätze Sollte beim Löschen der Datensätze ein Fehler auftreten, wird der Fehler abgefangen und die Fehlermeldung in der lokalen Variablen LocErrMsg gespeichert. Wurden alle Datensätze gelöscht, wird durch Aufruf der Prozedur Wx_RtnPrv() auf das vorgelagerte Programm zurückverzweigt. Sofern eine Fehlermeldung gesichert wurde, wird diese an das vorgelagerte Programm ausgegeben und dort angezeigt. B EN UT ZERHA ND BUC H 244 6. WOPiXX Verwaltung Nach der Installation und kann WOPiXX über den Browser aufgerufen werden. Bei der Installation wird bereits der http-Server eingerichtet, so dass an dieser Stelle kein zusätzlicher Aufwand erforderlich. Vor Aufruf von WOPiXX sollte jedoch der http-Server gestartet sein. Zum Starten und Beenden der WOPiXX/Directweb-Umgebung werden die CL-Befehle STRWOPIXX (WOPiXX-Server starten) und ENDWOPIXX (WOPiXX-Server beenden) in der Bibliothek DIRWEB zur Verfügung gestellt. Beim ersten Aufruf von WOPiXX sollte man sich mit dem Benutzer-Profil QSECOFR anmelden und zunächst die WOPiXX-Benutzer (Programmierer und User) basierend auf dem IBM i Benutzer-Profilen mit den entsprechenden Berechtigungen anlegen. Die Wartung der Benutzer erfolgt über den MenüAuswahl-Punkt Benutzer-Info anlegen. Das Benutzer-Profil QSECOFR wird automatisch angelegt und mit allen Rechten versehen. Meldet sich ein Benutzer das erste mal unter WOPiXX an und wurde bislang manuell kein Benutzer-Profile angelegt, wird das Benutzer-Profil automatisch mit Benutzer-Klasse USER, d.h. mit minimalen Rechten) in WOPiXX angelegt. Ein WOPiXX-Programmierer sollte mindestens mit Benutzer-Klasse System-Bediener angelegt werden. WOPiXX beinhaltet neben dem Entwicklungstool eine Reihe von Administrations-Programmen die über das WOPiXX-Menü aufgerufen werden können. Die WOPiXX Programme lassen sich in zwei Gruppen, die als Haupt-Menü-Punkte angelegt sind, aufteilen. 6.1 WOPIXX WOPIXX Unter diesem Menü-Punkt sind alle zur Administration von WOPiXX notwendigen Verwaltungs-Programme angesiedelt u.a. Programme zur Registrierung von WOPiXXBenutzern, WOPiXX-Anwendungen, Programmen und Bibliothekslisten. IBM i Allgemeine Verwaltung Unter diesem Menü-Punkt sind einige List-Anzeigen und kleine VerwaltungsProgramme z.B. zur Anzeige und Verwaltung von Spool Files, Anzeige der aktuellen Jobs, sowie diverse Listanzeige die Datenbank betreffend zu finden. Starten/Beenden WOPiXX-Server Vor Aufruf der Web-Anwendung muss der http-Server und die WOPiXX-Anwendung auf dem Server gestartet sein. Zum Starten und Beenden werden die folgenden beiden CL-Befehle, die sich in der Bibliothek DIRWEB befinden und ohne Parameter aufgerufen werden, zur Verfügung gestellt. Die Befehle können in CLProgramme eingebunden werden. B EN UT ZERHA ND BUC H 245 STRWOPIXX: WOPiXX -Server starten. Sofern der http-Server noch nicht gestartet war, wird der http-Server gestartet. Sofern der http-Server bereits gestartet war, wird lediglich die WOPiXX/DirectwebUmgebung aktiviert. WOPiXX, sowie alle WOPIXX-Anwendungen werden im Subsystem QHTTPSVR ausgeführt. ADDLIBLE DIRWEB STRWOPIXX /* Oder qualifiziert ohne vorheriges Setzen der Biblitheksliste /* DIRWEB/STRWOPIXX CL-Befehl 1 : WOPiXX-Umgebung starten ENDWOPIXX: WOPiXX/Directweb-Server beenden Beim Aufruf des ENDWOPIXX-Befehls wird lediglich die WOPiXX/DirectwebUmgebung beendet. Der http-Server wird nicht beendet. ADDLIBLE DIRWEB ENDWOPIXX /* Oder qualifiziert ohne vorheriges Setzen der Biblitheksliste /* DIRWEB/END WOPIXX CL-Befehl 2: ENDWOPIXX - WOPiXX-Umgebung beenden Mit dem CL-Befehl WRKSBSJOB (Mit WOPiXX/Directweb-Jobs angezeigt werden. Subsystem-Jobs arbeiten) können die gestarteten Die folgende Abbildung zeigt die in Sub-System QHTTPSVR gestarteten WOPiXX/Directweb-Jobs. Die Anzeige erfolgt über den Befehl WRKSBSJOB: WRKSBSJOB SBS(QHTTPSVR) CL-Befehl 3: WRKSBSJOB - Anzeige Subsystem Jobs in Subsystem QHTTPSVR B EN UT ZERHA ND BUC H 246 Anzeige WOPiXX/DirectWeb-Jobs über den CL-Gefehl WRKSBSJOB: WRKSBSJOB SBS(QHTTPSVR) Abbildung 36: Anzeige der gestarteten WOPiXX/Directweb-Jobs 6.2 Anmeldung unter WOPiXX Die WOPiXX-Anmeldung erfolgt über den Browser mit der folgenden URL. YourServer steht dabei für die IP-Adresse Ihres Servers und 8888 ist der Port der fix verwendet wird. http://YourServer:8888 Sofern der Server gestartet war, sollte im Anschluss der folgende Anmelde-Bildschirm angezeigt werden: B EN UT ZERHA ND BUC H 247 ■ URL: http://YourServer:8888 ■ Erste Anmeldung mit Benutzer-Profil QSECOFR Anlegen der berechtigten Benutzer ■ Anmeldung mit IBM i User und Passwort Abbildung 37 : Anmeldung für WOPiXX-Anwendungen über Browser Die erste Anmeldung unter WOPiXX nach der Installation sollte mit dem Benutzer-Profil QSECOFR erfolgen. Das QSECOFR-Profil wird automatisch für die WOPiXX/Directweb-Umgebung angelegt und mit allen Rechten ausgestattet. Die WOPiXX-Anwender, Benutzer- und auch Gruppen-Profile sollten zunächst in der WOPiXXUmgebung angelegt und mit den gewünschten Berechtigungen ausgestattet werden. Sofern sich ein Benutzer mit seinem IBM i Benutzer-Profile und Passwort anmeldet, werden ihm die Menü-Auswahl-Punkte für die er berechtigt ist angezeigt. Sofern ein IBM i Benutzer zum ersten Mal anmeldet, ohne dass in WOPiXX ein entsprechendes Benutzer-Profil angelegt ist, wird automatisch ein WOPiXX-Benutzer mit minimalen (User) Berechtigungen angelegt. Sofern sich ein Benutzer versucht sich mit einem Benutzer-Profil, das nicht auf der IBM i registriert ist oder mit einem falschen Passwort anzumelden, gelten die auf der IBM i hinterlegten Regeln. Nach erfolgreicher Anmeldung wird das WOPiXX-Menü, sowie die sonstigen WOPiXX-Anwendungen im Menü-Baum wie in der folgenden Abbildung angezeigt. B EN UT ZERHA ND BUC H 248 Abbildung 38: Anzeige Menü-Baum nach erfolgreicher Anmeldung 6.3 WOPiXX Menü im Überblick Die zur Verfügung gestellten WOPiXX-Programme lassen sich in zwei Klassen, die als separate HauptMenü-Punkte angezeigt werden, aufteilen: WOPiXX: WOPiXX-Verwaltungs-Programme WOPiXX IBM i Allgemeine Verwaltung: Auswahl an IBM i List-Anzeigen und Verarbeitungs-Programme unabhängig von WOPiXX. 6.3.1 WOPiXX Verwaltungs-Programme Unter dem Menü-Punkt WOPiXX befinden sich in mehreren z.T. verschachtelten Unter-Menü-Punkten die folgenden WOPiXX Verwaltungs-Programme: B EN UT ZERHA ND BUC H 249 Abbildung 39: Menü - WOPiXX - Verwaltungs-Programme Anwendung: Über den Menü-Punkt-Anwendung kann eine WOPiXX-Anwendung angelegt und verwaltet werden. Um WOPiXX-Programme ausführen zu können, ist eine Anwendung erforderlich, in der u.a. die Objekt-Bibliothek und/oder die Bibliotheksliste zugeordnet, die Message-Files für Mehrsprachigkeit hinterlegt und die Menü-Punkte unter dem das Programm aufgerufen wird definiert werden. Bibliothekslisten: Bibliothekslisten können unabhängig von irgendwelchen Anwendungen festgelegt werden, d.h. die gleiche Bibliotheksliste kann in mehreren Anwendungen und/oder unterschiedlichen Programmen zugeordnet werden. Bibliothekslisten: Anlegen und Ändern von Bibliothekslisten Bibliotheks-Liste / Anwendung Zuordnung Bibliotheksliste zu Anwendung Bibliotheks-Liste / Programm Zuordnung Bibliotheksliste zu Programm Benutzer-Info: Sitzungen Auflistung aktive/gesicherte Directweb/WOPiXX- B EN UT ZERHA ND BUC H 250 Sitzungen Benutzer Verwaltung der Directweb/WOPiXX-Benutzer Programmierer und User Incl. Gruppen-Profile und Rollen Benutzer-Menüs Verwaltung Anwendungsmenüs auf Benutzer-Ebene Abwesenheit Verwaltung von Abwesenheiten u.a. für RollenZuweisung Einstellungen System Datentypen Datenbanken System-Einstellungen incl. Sprache, Land, Timeouts Verwalten Extentions für IFS-Dateien Zugriff auf verschiedene Datenbanken steuern Aktuell noch nicht realisiert Nummernkreis Verwaltung von Nummernkreisen in beliebigen Spalten/Dateien/Tabellen Funktionen zur Ermittlung des nächsten Wertes in WOPiXX enthalten Parameter verwalten WOPiXX stellt mehre Möglichkeiten zur Festlegung von Auswahllisten zur Verfügung. Über die Parameter können Auswahllisten hinterlegt und in den Programmen über Schlüssel-Wort eingebunden werden. Der Aufruf auf Anwendungsebene erfolgt auch über Kontext-Menü-Auswahl unter Auswahlpunkt Anwendungen. Abfrage verwalten Matchcodes können in WOPiXX in Form von SQLAbfragen hinterlegt werden. Über Abfrage verwalten können SQL-Abfragen auf Anwendungsebene hinterlegt werden. Die SQL-Abfragen können über Schlüssel-Wort in WOPiXX-Programme eingebunden werden. Der Aufruf pro Anwendung erfolgt auch über KontextMenü-Auswahl unter Auswahl-Punkt Anwendung. Abfragen *CUSTOMER Allgemein, für beliebige Anwendungen einsetzbare SQL-Abfragen können diesen Menü-Punkt erfasst und hinterlegt werden. SQL-Abfragen sollten nur in Ausnahme-Fällen unter Anwendung *CUSTOMER hinterlegt werden. System-Texte Über System-Texte können Nachrichten-Texte in B EN UT ZERHA ND BUC H 251 Message-Files gewartet und abgeglichen werden. Dienste 6.3.2 Anwendungstexte Über Anwendungstexte können beliebige Texte in Verschiedenen Sprachen (ohne Message-Files) verwaltet und in mehrsprachigen Umgebungen eingebunden werden. Aktuell noch nicht realisiert. Dyn.Work Tables Über dynamische Worktables soll es in Zukunft möglich sein List-Anzeigen ohne zusätzliche Programmierung definieren zu können. Aktuell noch nicht realisiert Dienste für E-Mail und Briefversand, sowie SMS Email Aktivitäten des E-Mail-Dienstes Briefversand Dienst eines Briefversenders erstellen Funkuhr-Server Funkuhr-Server starten/beenden SMS Versenden und Empfangen von SMS von der IBM i Adapter SMS Sende-Modems verwalten Nachrichten SMS Verwalten WOPiXX IBM i Allgemeine Verwaltung Unter dem Menü-Punkt WOPiXX IBM i Allgemeine Verwaltung befinden sich in mehreren z.T. verschachtelten Unter-Menü-Punkten die folgenden allgemeinen Verwaltungs-Programme B EN UT ZERHA ND BUC H 252 Abbildung 40: Menü-Baum Haupt-Menü-Punkt WOPiXX - IBM i Allgemeine Verwaltung Druckausgaben Verarbeiten von Spool Files Current User Jobs Auflistung aller aktiven und inaktiven Jobs (z.B. in Warteschlange) des aktuellen Benutzers Menü-Punkt auch unter Menü-Punkt Jobs Kennwort ändern Uhrzeit Datenbank Ändern des eigenen IBM i Uhrzeit der Funkuhr Passworts Informationen und Verwaltung von Datenbanken Objekten Datendateien Informationen über Tabellen/Physische Dateien z.B. Anzahl Sätze, Anzahl gelöschte Sätze, Anzahl Inserts/Updates/Deletes etc. . Trigger Informationen über System und SQL-Trigger Journalisierung Informationen über aufgezeichnete Dateien, Views Datenbereiche und Data Queues Beginn und Ende der Aufzeichnung Journal.Bibliotheken Auflistung aller Bibliotheken mit aufgezeichneten Tabellen, Views, Datenbereiche und Data Queues Alle Journale Auflistung aller Journale Erstellen Journal/Journal-Receiver Beginn und Ende der Aufzeichnung DataArea QDFTJRN Verwaltung der QDFTJRN Datenbereiche Erstellen/Löschen Datenbereich QDFTJRN Erstellen CSV/XLS Jobs Erstellen *.Csv-Datei direkt aus SQL-Statement Informationen über aktive und inaktive Jobs Aktive Subsysteme Auflistung aller aktiven Subsysteme Aktive Jobs Auflistung aller aktiven Jobs Jobs in Job Queue Auflistung aller Jobs in JobQueue Sitzungen Current User Jobs Auflistung aktive/gesicherte Directweb/WOPiXXSitzungen Menü-Punkt auch direkt unter WOPiXX IBM i Allgemeine Verwaltung B EN UT ZERHA ND BUC H 253 6.4 WOPiXX Benutzer verwalten Jeder Benutzer, der mit WOPiXX-Arbeiten möchte, muss ein auf der IBM i aktiven Benutzer-Profil haben und zusätzlich in WOPiXX registriert sein. Ohne aktives Benutzer-Profil auf der IBM i ist eine Anmeldung in einer WOPiXX-Web-Anwendung nicht möglich. Sofern der Benutzer bei der ersten Anmeldung in einer WOPiXX-Web-Anwendung noch nicht registriert ist, wird er automatisch als Benutzer mit eingeschränkten Rechten und sonstigen Default-Einstellungen angelegt. Abhängig von WOPiXX Benutzer-Klassen können die Menü-Punkte berechtigt und eingeschränkt werden. Menü-Punkte für die der Benutzer nicht berechtigt ist sind im Menü-Baum nicht sichtbar. In WOPiXX werden die folgenden Benutzer-Klassen unterschieden: Benutzer: Benutzer-Gruppe mit den wenigsten Berechtigungen Systembediener: Kann alle Menü-Punkte aufrufen und ausführen, die auch die Benutzer-Klasse ausführen darf. Zusätzlich darf er noch die speziell für den System-Bediener zugelassenen MenüPunkte aufrufen. Systemadministrator: Der System-Administrator hat die höchsten Rechte und darf alle Menü-Punkte aufrufen. Zusätzlich zu den Benutzer-Profilen können Gruppen-Profile angelegt werden. Diesen Gruppen-Profile können wiederum Benutzer-Klassen zugeordnet werden. Jedem Benutzer kann ein Benutzer-Profil zugeordnet werden. Aus dem Gruppen-Profil werden dann Eigenschaften wie die Benutzer-Klasse, Datums-Format, Sprache, Menü übernommen. Neben den Standard-Menüs, die basierend auf der dem Benutzer zugeordneten Benutzer-Klasse angezeigt werden können zusätzlich Benutzer-Menüs angelegt werden, d.h. Menü-Punkte können innerhalb einer Anwendung für unterschiedliche Benutzer- und Gruppen-Profile anders angeordnet und berechtigt werden. Wird dem Benutzer ein Benutzer-Menü zugeordnet, so wird dieses angezeigt. Anmerkung: WOPiXX-Programmierer sollten entweder der Benutzer-Klasse Systemadministrator zugeordnet sein, oder zumindest für den Menü-Punkt Anwendungen und Bibliotheksliste berechtigt sein. WOPiXX-Programmierer sollten in der Lage sein, neue Anwendungen und Bibliothekslisten anzulegen, sowie fertige Programme als Menü-Punkte in WOPiXX zu hinterlegen. B EN UT ZERHA ND BUC H 254 6.4.1 List-Anzeige: Benutzer Benutzer werden über den folgenden Menü-Punkt in Hauptmenü WOPiXX verwaltet: ■ Haupt-Menü: WOPiXX ■ Benutzer-Info ■ Benutzer Beim Aufruf des Menü-Punktes werden alle WOPiXX-Benutzer inclusive den Gruppen-Profilen und Rollen-Profilen angezeigt und können über dieses Programm verwaltet werden. Über diverse Filter und deren kombinierte Auswahl kann die Anzahl der aufgelisteten Benutzer eingeschränkt werden. So ist z.B. eine Auswahl nach Sprache möglich. Die folgende Abbildung zeigt die aktuellen WOPiXX-Benutzer, sowie die Gruppen- und Rollen-Profile an. Abbildung 41: List-Anzeige Benutzer B EN UT ZERHA ND BUC H 255 Durch Rechts-Click auf dem gewünschten Benutzer-, Gruppen- oder Rollen-Profil wird das folgende Kontext-Menü angezeigt. Abbildung 42: List-Anzeige Benutzer - Kontext-Menü Neben den üblichen Standard-Auswahl-Punkte für Hinzufügen (durch den Button Erstellen), Ändern, Kopieren, Löschen und Anzeigen (Eigenschaften) werden noch einige weitere Auswahlen zur Verfügung gestellt. Sofern ein Datensatz gelöscht werden soll muss die Löschung in einem Bestätigungs-fenster bestätigt werden. Sitzungen Auflistung der aktiven und gesicherten Web-Jobs des Benutzer-Profile. Druckausgaben Die Spool Files des Benutzers werden aufgelistet und können angezeigt werden Abwesenheit Abwesenheiten des Benutzers können erfasst und verwaltet werden. Dies ist insbesondere notwendig im Bezug auf die Rollen-Verwaltung Mitglieder Mitglied von Die Auswahl ist nur für Gruppenmitglieder gültig und listet alle zur ausgewählten Gruppe zugeordneten Benutzer und Gruppen-Profile auf. Bei Auswahl von nicht Gruppen-Mitgliedern wird eine Fehlermeldung angezeigt. Zeigt alle Gruppen- und Rollen-Profile an, denen der ausgewählte Benutzer angehört. directdial Benutzeranwendungen Diese Auswahl ist nur dann sichtbar und möglich wenn das Toolmaker-Produkt directdial installiert ist. Sofern directdial installiert ist, werden die aktuellen directdial-Anwendungen aufgelistet. Einstellungen zurücksetzen Benutzer-Einstellungen (z.B. gesicherte Spalten und SQL-Abfragen) können für den B EN UT ZERHA ND BUC H 256 ausgewählten Benutzer zurückgesetzt / gelöscht werden. 6.4.2 Detail-Anzeige: Ändern/Erstellen Benutzer Über das Programm Benutzer können neben den echten Anwendern (Benutzer und auch WOPiXXProgrammierer) Gruppen- und Rollen-Profile angelegt werden. Die echten Anwender können zu einem Gruppen-Profil und/oder einem oder mehreren Rollen-Profilen zugeordnet werden. Die Anwender wiederum können als System-Benutzer oder als externer Benutzer angelegt werden. 6.4.2.1 Erstellen/Ändern Anwender Jeder Benutzer (Anwender oder Programmierer), der mit WOPiXX arbeiten möchte, muss registriert sein. Es können nur Benutzer mit einem aktiven Benutzer-Profil auf der IBM i in WOPiXX registriert werden. Sofern sich ein Benutzer mit einem aktiven Benutzer-Profil auf der IBM i anmeldet und dieser Benutzer noch nicht registriert ist, wird automatisch ein entsprechendes WOPiXX-Profil, mit Benutzer-Klasse Benutzer und Default-Einstellungen angelegt. Anmerkung: Über das WOPiXX-Verwaltungs-Programm Erstellen/Ändern Anwender können keine IBM i Benutzer-Profile angelegt werden. Bei der folgenden Abbildung handelt es sich um die Erfassungs-Maske für WOPiXX-Anwender. B EN UT ZERHA ND BUC H 257 Abbildung 43: Detail-Anzeige Erfassen/Ändern Benutzer Anwender Die Eingabe-Felder sind nach Zugehörigkeit unter den folgenden Reitern angeordnet: Allgemein: Benutzerindividuelle Informationen Directdial: Benutzerindividuelle Einstellungen für das Toolmaker-Produkt directdial. Der Reiter und die zugehörigen Informationen werden nur angezeigt, wenn das Toolmaker-Produkt directdial installiert wurde directarchiv: Benutzerindividuelle Einstellungen für das Toolmaker-Produkt directarchiv Der Reiter und die zugehörigen Informationen werden nur angezeigt, wenn das Toolmaker-Produkt directdial installiert wurde Arbeitszeit Sicherung der täglichen Arbeitszeiten B EN UT ZERHA ND BUC H 258 Verwendung nur in Verbindung mit Abwesenheiten für die Rollen-Zuordnung notwendig. Informationen unter Reiter Allgemein: Systembenutzer Ein Benutzer der nicht als System-Benutzer angelegt wird, meldet sich zwar mit seinem Benutzernamen und Kennwort an, arbeitet jedoch unter einem anderen allgemeinen Benutzer-Profil (z.B. QUSER oder LAGER) Sofern der Benutzer nicht als System-Benutzer angelegt wird, müssen zusätzliche Informationen wie Beschreibung (=Name), Kennwort, sowie das zugehörige IBM i Benutzer-Profile erfasst werden. Typ Aktiviert Externer Zugriff erlauben Bei Aktivierung wird ein externer Zugriff für den Benutzer erlaubt, falls dieser nicht ins Subnetz gehört. Primäre-Benutzergruppe Jedem Benutzer kann eine Benutzer-Gruppe, die zuvor mit dem Profil-Typ Gruppe angelegt wurde zugeordnet werden. In einer Benutzer-Gruppe können Informationen wie Sprache, Datums- und ZeitFormate hinterlegt werden. Wurde der Benutzer einer Benutzer-Gruppe zugeordnet, können die in der Gruppe hinterlegte Default-Werte auf das Benutzer-Profil übertragen werden. Benutzerklasse Über die Benutzerklasse werden die Berechtigungen des Anwenders, bzw. für welche Menü-Punkte der Anwender berechtigt ist gesteuert. Aktuell werden die folgenden Klassen unterschieden: Benutzer: Nur wenige Rechte bzw. Auswahl weniger MenüPunkte erlaubt. Es können wahlweise Anwender, Gruppen- oder Rollen-Profile erfasst werden. Der Profil-Typ wird einmalig festgelegt und darf nicht mehr geändert werden. Abhängig vom Profil müssen unterschiedliche Informationen erfasst werden. WOPiXX-Anwender und Programmierer müssen mit Typ Benutzer angelegt werden Systembediener: Berechtigung für alle Menü-Punkte, für die auch der Benutzer berechtigt ist, sowie weitere MenüPunkte Administrator: Berechtigung für alle Menü-Punkte Gruppen-Profil Die im zugeordneten Gruppen-Profil hinterlegte Benutzerklasse wird übernommen. WOPiXX-Programmierer sollten entweder der Benutzer-Klasse Administrator zugeord- B EN UT ZERHA ND BUC H 259 net werden. Menübaum Per Default wird dem Benutzer der Standard Directweb/WOPiXX-Menübaum zugeordnet. Abhängig von der zugeordneten Benutzerklasse ist der Anwender dann für alle oder nur ein Sub-Set der vorhandenen Funktionen berechtigt. Daneben ist es möglich über den Menü-Punkt Benutzer-Menüs individuelle MenüBäume zu definieren und den Benutzern oder auch dem Gruppen-Profil zuzuordnen. Über die Auswahl Gruppen-Profil kann der dem Gruppen-Profil zugeordnete MenüBaum für den Anwender übernommen werden. Sprache E-Mail-Adresse Die E-Mail-Adresse des Anwenders kann an dieser Stelle hinterlegt werden CTI Anwendung Auswahl der CTI Anwendung, die für das Computertelefon verwendet werden soll, z.B. Skype SMS Adapter Pool SMS Systeme können pro Benutzer definiert bzw. zugeordnet werden. Die verwendeten Adapter können wiederum zu Pools zusammengefasst werden. Somit kann einem Benutzer ein bestimmter Pool zugeordnet werden. Datumsformat Per Default wird das System-Datums-Format, d.h. das im System-Wert QDATFMT hinterlegte Datums-Format verwendet. Andere Format können jedoch ausgewählt werden. Ebenso kann das im Gruppen-Profil hinterlegte Datumsformat übernommen werden. Datumstrennzeichen Per Default wird das System-Datums-Trennzeichen, d.h. das im System-Wert Über die Sprache wird die Mehrsprachigkeit der Anwendungen gesteuert. Per Default wird die System-Sprache, d.h. die Sprache, die im System-Wert QLANGID hinterlegt ist als Sprache übernommen. Diese Einstellung kann durch die Übernahme des im Benutzer-Profil hinterlegte Sprache überschrieben werden. Des Weiteren kann eine individuelle Sprache ausgewählt werden. In WOPiXX-Anwendungen wird über diesen Eintrag gesteuert, in welcher Sprache der Anwender arbeitet. Sofern die Anwendung die zugeordnete Sprache nicht unterstützt, wird die SystemSprache verwendet. System-Meldungen werden immer in der System-Sprache angezeigt bzw. aus der in dem System-Teil der Bibliotheksliste hinterlegten führenden Sprachen-Bibliothek ermittelt. Auch wenn an dieser Stelle eine Sprache zugeordnet werden muss, WOPiXXAnwendungen müssen nicht zwangläufig mehrsprachig gestaltet werden. B EN UT ZERHA ND BUC H 260 QDATSEP hinterlegte Datums-Trennzeichen verwendet. Andere Datums-Trennzeichen können ausgewählt werden. Ebenso kann das im Gruppen-Profil hinterlegte Datums-Trennzeichen übernommen werden. Uhrzeit Trennzeichen Per Default wird der System-Zeit-Separator, d.h. der im System-Wert QTIMSEP hinterlegte Zeit-Separator verwendet. Andere Separatoren können ausgewählt werden. Ebenso kann der im Gruppen-Profil hinterlegte Zeit-Separator übernommen werden. Serien-Nr. des Mobilgerätes Eingabe der Seriennummer des Mobilgerätes. Diese dient zur eindeutigen Identifizierung des Gerätes. Rufnummer des Mobilgerätes Eingabe der Rufnummer des Mobilgerätes. Diese wird bei Bedarf zum Herstellen einer Verbindung benötigt Informationen unter Reiter Arbeitszeit Die regelmäßigen täglichen und wöchentlichen Arbeitszeiten eines Benutzers können hier hinterlegt werden. Diese Einträge werden in Verbindung mit den erfassten Abwesenheitszeiten bei der Rollen-Zuordnung bzw. der Vertreterregelung geprüft. Ist eine Vertreterregelung im angegebenen Zeitraum nicht möglich, so erfolgt eine Benachrichtigung an den Administrator der Vertreterregelung Flexible Arbeitszeiten und Schicht-Modelle, sowie Arbeitszeiten, die über Mitternacht hinausgehen sind nicht vorgesehen. 6.4.2.2 Erstellen/Ändern Gruppen-Profile In einem Gruppen-Profil kann ein Sub-Set der Informationen, die bei einem WOPiXX-Benutzer eingestellt werden können hinterlegt werden. Die im Gruppen-Profil hinterlegten Eigenschaften können von dem zugeordneten Benutzer übernommen werden. Das gleiche Gruppen-Profil kann mehreren Benutzern zugeordnet werden, d.h. bei einer Änderung muss nur der Eintrag im Gruppen-Profil geändert werden. Die Änderung wird automatisch von allen zugeordneten Benutzer-Profilen übernommen. Die folgende Abbildung zeigt die Informationen, die in einem Gruppen-Profil hinterlegt werden können: B EN UT ZERHA ND BUC H 261 Abbildung 44: Detail-Anzeige Erfassen/Ändern Benutzer Gruppen-Profile Informationen unter Reiter Allgemein: Benutzer Name des Gruppen-Profile Bei dem Gruppen-Profil muss es sich nicht zwangsläufig um ein vorhandenes IBM i Benutzer-Profil handeln. Vielmehr kann ein in und für die directweb/WOPiXX-Anwendungen beliebiger, jedoch eindeutiger Name gewählt werden. Typ Beschreibung Neben dem eindeutigen Gruppen-Profil-Namen kann noch eine Kurzbeschreibung des Gruppen-Profile erfasst werden. Benutzerklasse Über die Benutzerklasse werden die Berechtigungen, für welche Menü-Punkte der Anwender berechtigt ist gesteuert. Aktuell werden die folgenden Klassen unterschieden: Benutzer: Nur wenige Rechte bzw. Auswahl weniger MenüPunkte erlaubt. Gruppen-Profile werden immer mit dem Profil-Typ Gruppe angelegt Systembediener: Berechtigung für alle Menü-Punkte, für die auch B EN UT ZERHA ND BUC H 262 der Benutzer berechtigt ist, sowie weitere MenüPunkte Administrator: Berechtigung für alle Menü-Punkte Die im Gruppen-Profil hinterlegte Benutzerklasse kann in die zugeordneten BenutzerProfile übernommen werden. Menübaum Für das Gruppen-Profil kann ein Menü-Baum hinterlegt werden, dabei kann entweder das Standard-directweb/WOPiXX-Menü und ein individuell angelegtes Benutzer-Menü ausgewählt werden. Der im Gruppen-Profil hinterlegte Menü-Baum kann in die zugeordneten BenutzerProfile übernommen werden. Sprache Verwendung als Verteilerlisten erlauben CTI Anwendung Auswahl der CTI Anwendung, die für das Computertelefon verwendet werden soll, z.B. Skype Die im Gruppen-Profil hinterlegte CTI-Anwendung kann in die zugeordneten BenutzerProfile übernommen werden. SMS Adapter Pool SMS Systeme können pro Benutzer definiert bzw. zugeordnet werden. Die verwendeten Adapter können wiederum zu Pools zusammengefasst werden. Somit kann einem Benutzer ein bestimmter Pool zugeordnet werden. Der im Gruppen-Profil hinterlegte SMS Adapter Pool kann in die zugeordneten Benutzer-Profile übernommen werden. Datumsformat Per Default wird das System-Datums-Format, d.h. das im System-Wert QDATFMT hinterlegte Datums-Format verwendet. Andere Format können jedoch ausgewählt werden. Dar im Gruppen-Profil hinterlegte Datumsformat kann in die zugeordneten BenutzerProfile übernommen werden. Datumstrennzeichen Per Default wird das System-Datums-Trennzeichen, d.h. das im System-Wert QDATSEP hinterlegte Datums-Trennzeichen verwendet. Über die Sprache wird die Mehrsprachigkeit der Anwendungen gesteuert. Per Default wird die System-Sprache, d.h. die Sprache, die im System-Wert QLANGID hinterlegt ist als Sprache übernommen. Die Default-Sprache kann jedoch durch jede andere Sprache ersetzt werden. Der im Gruppen-Profil Sprache kann in die zugeordneten Benutzer-Profile übernommen werden. B EN UT ZERHA ND BUC H 263 Andere Datums-Trennzeichen können ausgewählt werden. Dar im Gruppen-Profil hinterlegte Datums-Trennzeichen kann in die zugeordneten Benutzer-Profile übernommen werden. 6.5 Uhrzeit Trennzeichen Per Default wird der System-Zeit-Separator, d.h. der im System-Wert QTIMSEP hinterlegte Zeit-Separator verwendet. Andere Separatoren können ausgewählt werden. Ebenso kann der im Gruppen-Profil hinterlegte Zeit-Separator übernommen werden. Der im Gruppen-Profil hinterlegte Zeit-Separator kann in die zugeordneten BenutzerProfile übernommen werden. Bibliothekslisten Da IBM i Anwendungen i.d.R. mit mehreren Bibliotheken, die in der Bibliotheksliste hinterlegt sind, gearbeitet wird, ermöglicht auch WOPiXX Bibliotheklisten vorzugeben. Bibliothekslisten werden zunächst unabhängig von einer Anwendung definiert, so dass die gleiche Bibliotheksliste für mehrere Anwendungen oder Programme verwendet werden kann. Die ToolmakerBibliotheken, DIRWEB und WOPIX, die zur Erstellung und Ausführung von WOPiXX-Programmen erforderlich sind müssen nicht zwingend in den Bibliothekslisten hinterlegt werden. Zur Laufzeit werden beide Bibliotheken in die aktuelle Bibliotheksliste aufgenommen, sofern sie noch nicht in der Bibliotheksliste enthalten sind. Bibliothekslisten können auf Programm- und/oder Anwendungsebene zugeordnet werden. Zur Laufzeit wird zunächst geprüft, ob dem aufzurufenden Programm eine Bibliotheksliste zugeordnet wurde. Sofern eine Bibliotheksliste vorgegeben wurde, wird diese gesetzt und das Programm ausgeführt. Wurde für das Programm keine Bibliotheksliste definiert, wird geprüft, ob der Anwendung eine Bibliotheksliste zugeordnet wurde. Sofern eine Bibliotheksliste gefunden wurde, wird diese gesetzt. Sollte auch für die Anwendung keine Bibliotheksliste definiert worden sein, wird geprüft, ob die für die Anwendung definierte Objekt- und Datenbibliotheken in der Bibliotheksliste vorhanden sind. Ggf. werden die Bibliotheken der aktuellen Bibliotheksliste hinzugefügt. Bibliothekslisten können unter dem Menü-Punkt WOPiXX-Administration und Sub-Menü Bibliothekslisten verwaltet werden. Innerhalb des Sub-Menüs sind die folgenden Menü-Punkte vorgesehen: Bibl. Listen Wartung der Bibliothekslisten (ohne Anwendungsbezug) Bibl. Liste/Anwendung Übersicht und Zuordnung von Bibliothekslisten zu Anwendungen Bibl. Liste/Programm Übersicht und Zuordnung von Bibliothekslisten zu Programmen B EN UT ZERHA ND BUC H 264 6.5.1 Allgemeine Bibliothekslisten Universell, für beliebige Anwendungen und beliebige Programme einsetzbare Bibliothekslisten können definiert werden. Die Verwaltung der universellen Bibliothekslisten erfolgt in der WOPiXX-Administration. 6.5.1.1 List-Anzeige Bibliothekslisten Die List-Anzeige der vorhandenen Bibliothekslisten erfolgt über die Menü-Auswahl Bibliothekslisten und Untermenü-Punkt Bibl. Listen in der WOPiXX-Administration. Abbildung 45: Aulistung aller Bibliothekslisten Spalten Bibliotheksliste Eindeutige Kennung der Bibliotheksliste Bezeichnung Bezeichnung/Beschreibung der Bibliotheksliste Bibliotheken: Auflistung der in der Bibliotheksliste hinterlegten Bibliotheken Export: Gibt an, ob die Bibliotheksliste beim Export einer Anwendung mit ausgeliefert werden darf. Import: Gibt an, ob beim Importieren einer Anwendung die Bibliotheksliste ersetzt oder nur wenn noch nicht vorhanden hinzugefügt werden darf. Buttons B EN UT ZERHA ND BUC H 265 Erstellen Erfassen einer neuen Bibliotheksliste Kontext-Menü Ändern Ändern der Bibliotheksliste Bibliotheken können hinzugefügt und entfernt werden. Die Reihenfolge der Bibliotheken kann geändert werden. Kopieren Kopieren der Bibliotheksliste Eine bestehende Bibliotheksliste kann dupliziert und gleichzeitig modifiziert werden. Löschen Löschen einer Bibliotheksliste Eigenschaften Anzeigen der Bibliotheksliste Verwendung List-Anzeige für welche Anwendungen und in welchen Programmen eine Bibliotheksliste verwendet wird. 6.5.1.2 Bibliothekslisten bearbeiten Die Bearbeitung von Bibliothekslisten, d.h. Erstellen, Ändern und Löschen erfolgt durch Klicken auf entsprechende Buttons oder Kontext-Menü-Punkte in der List-Anzeige Anwendungen (6.1.1 List-Anzeige Anwendungen), Zuordnung Bibliotheksliste/Anwendung (6.5.2 Zuordnen Bibliotheksliste zu Anwendung) oder Zuordnung Bibliotheksliste/Programm (6.5.3 Zuordnen Bibliotheksliste zu ). 6.5.1.2.1 Bibliothekslisten erfassen Der Aufruf erfolgt aus der Allgemeinen Bibliothekslisten-Übersicht durch Klick auf den Button Erstellen. Bei der Neuanlage einer Bibliotheksliste können zunächst bis zu 10 Bibliotheken erfasst werden. Die Toolmaker-Bibliotheken DIRWEB und WOPIXX müssen nicht zwangsläufig in der Bibliotheksliste hinterlegt werden, da sie zur Laufzeit automatisch am Ende der Bibliotheksliste eingebunden werden (sofern sie noch nicht in der Bibliotheksliste enthalten sind. Sofern mehr als 10 Bibliotheken benötigt werden, muss die Bibliotheksliste zunächst gespeichert werden. Bei Änderung der Bibliotheksliste können jeweils bis zu 5 weiteren Bibliotheken hinzugefügt werden. B EN UT ZERHA ND BUC H 266 Abbildung 46: Bibliotheksliste Erstellen Eingabe-Felder Bibliotheksliste (Kopf-Daten) Bibliotheksliste Für jede Bibliotheksliste muss ein bis zu 10 Zeichen langer eindeutiger Name festgelegt werden. Nachrichten-Id Bei mehrsprachigen Anwendungen kann eine Message-Id aus der Message-File DIRWEB für die Bezeichnung der Bibliotheksliste angegeben werden. Bezeichnung Beschreibung der Bibliotheksliste. Nachrichten-Id oder Bezeichnung müssen angegeben werden. Sofern keine Bezeichnung jedoch eine Nachrichten-Id angegeben wurde wird die Bezeichnung automatisch aus der Message-File DIRWEB ermittelt. Eingabe-Felder Bibliotheken (Positions-Daten) Bei Erfassung können bis zu 10 Bibliotheken angegeben werden bei Änderung werden die erfassten Bibliotheken angezeigt und es können zusätzlich 5 weitere Bibliotheken erfasst werden. B EN UT ZERHA ND BUC H 267 Für die einzelnen Bibliotheken werden die folgenden Eingabe-Felder zur Verfügung gestellt: Sequenz Bibliothek Reihenfolge in der die Bibliotheken in der Liste erscheinen sollen. Die Sequenz kann beliebig verändert werden, doppelte Sequenzen sind jedoch nicht zulässig. Die angegebenen Bibliotheken müssen existieren und dürfen innerhalb der Bibliotheksliste nicht doppelt erfasst werden. Durch Klick auf den Button wird die SQL-Abfrage LISTLIB aktiviert und die gewünschte Bibliothek kann ausgewählt werden. Löschen Buttons Speichern Mit dieser Auswahl können einzelne Bibliotheken aus der Bibliotheksliste entfernt werden. Beim Speichern wird die Bibliotheksliste neu erstellt, d.h. Kopf- und Positions-Daten werden erzeugt. Die Positions-Daten werden resequenziert. Abbrechen Die Erfassung der Daten wird abgebrochen 6.5.1.2.2 Bibliothekslisten anzeigen/ändern/kopieren Über Kontext-Menü-Auswahl in List-Anzeige Bibliothekslisten können die erfassten Bibliothekslisten angezeigt (Eigenschaften) oder bearbeitet werden (Ändern). B EN UT ZERHA ND BUC H 268 Abbildung 47: Bibliothekslisten anzeigen/ändern Beim Ändern und Kopieren wird die vorhandene Bibliotheksliste angezeigt und 5 freie BibliothekslistenPositionen hinzugefügt. Beim Ändern kann die eindeutige Kennung der Bibliotheksliste nicht geändert werden. Beim Kopieren muss eine neue eindeutige Kennung angegeben werden. Durch Löschen können sowohl beim Kopieren als auch beim Ändern einzelne Bibliotheken aus der Bibliotheksliste entfernt werden. Die Reihenfolge der Bibliotheken kann beliebig verändert werden. Beim Speichern werden die Positionssätze der zu ändernden Bibliotheksliste gelöscht und basierend auf den erfassten Bibliotheken neu erstellt und resequenziert. 6.5.1.2.3 Bibliothekslisten löschen B EN UT ZERHA ND BUC H 269 Das Löschen einer Bibliotheksliste erfolgt über Kontext-Menü-Auswahl in List-Anzeige Bibliothekslisten. Das Löschen muss bestätigt oder abgebrochen werden. Abbildung 48: Bibliotheksliste löschen 6.5.1.3 Bibliothekslisten verwalten Die Kontext-Menü-Auswahl Bibliothekslisten verwalten stellt eine Alternative zu der Kontext-MenüAuswahl Bibliotheklisten ändern dar. Im Gegensatz zu der Auswahl Bibliothekslisten berarbeiten, bei der einer Bibliotheksliste nur 25 Bibliotheken zugewiesen werden können, ist die Anzahl der Biblitoheken bei der Verwaltung der Bibliotheksliste nicht beschränkt. Zusätzliche Bibliotheken können nach Klick auf den Button Bibliothek hinzufügen erfasst werden. Über die Kontext-Menü-Auswahl Bibliothek entfernen können Bibliotheken aus der Bibliotheksliste gelöscht werden. Die Reihenfolge der Bibliotheken innerhalb der Bibliotheksliste kann über Drag und Drop verändert werden. Durch den anschließenden Klick auf den Button Resequenzierung wird die geänderte Reihenfolge fortgeschrieben. B EN UT ZERHA ND BUC H 270 Abbildung 49: Bibliotheken verwalten Spalten Reihenfolge Bibliothek Name der Bibliothek Beschreibung der Bibliothek Kontext-Menü-Auswahl Bibliothek entfernen Bibliothek aus Bibliotheksliste löschen Buttons Bibliohtek hinzufügen Erfassen einer zusätzlichen Bibliothek Resequenzierung Die Reihenfolge der einzelnen Bibliotheken kann über Drag und Drop verändert werden. Sobald mindestens eine Bibliothek bewegt wurde, wird der Button Resequenzierung aktiviert. Durch Klick auf den Resequenzierung wird die geänderte Reihenfolge der Bibliotheksliste fortgeschrieben. 6.5.1.3.1 Bibliothek hinzufügen Bei Klick auf den Button Bibliothek hinzufügen, wird ein Fenster geöffnet in dem eine weitere Bibliothek für die Bibliotheksliste erfasst werden kann. Die bereits zu der Bibliotheksliste gehörenden Bibliotheken werden im Header aufgelistet. Die Bibliothek kann über Matchode ausgewählt werden. B EN UT ZERHA ND BUC H 271 Per Default wird die nächst höhere Sequenz ermittelt, d.h. die Bibliothek würde ans Ende der Bibliotheksliste angefügt werden. Die vorgeschlagene Sequenz kann jedoch überschrieben werden, so dass die neuerfasste Bibliothek zwischen die vorhandenen Bibliohteken eingefügt werden kann. Die Reihenfolge kann jedoch auch noch im Nachinein in der List-Anzeige Bibliotheksliste verwalten korrigiert werden. Abbildung 50: Bibliothek zu Bibliotheksliste hinzufügen 6.5.1.4 Verwendung der Bibliothekslisten Der Aufruf erfolgt über Kontext-Menü-Auswahl in der List-Anzeige Bibliothekslisten (6.5.1.1 List-Anzeige Bibliothekslisten). Die List-Anzeige gibt an, in welchen Anwendungen und/oder Programmen die ausgewählte Bibliotheksliste verwendet wird. Die eindeutige Id der Bibliotheksliste wird als Parameter übergeben. Die eindeutige Kennung, sowie der Name der Bibliotheksliste werden als Header-Felder angezeigt. Eine (Filter-)Auswahl der Bibliotheksliste ist nicht möglich. B EN UT ZERHA ND BUC H 272 Abbildung 51: Zuordnung Bibliothekslisten Spalten Bibliotheksliste-Nr. Eindeutige Kennung der Bibliotheksliste Bezeichnung Bezeichnung der Bibliotheksliste Applikation Eindeutige Kennung der Anwendung, in der die Bibliotheksliste verwendet wird. Bezeichnung Anwendung Programm Programm das die Bibliotheksliste verwendet. Wurde die Bibliotheksliste nur für die Anwendung verwendet, bleibt die Spalte leer. Bibliothek Programm-Bibliothek. Wurde die Bibliotheksliste nur für die Anwendung verwendet, bleibt die Spalte leer. 6.5.2 Zuordnen Bibliotheksliste zu Anwendung Die List-Anzeige der den Anwendungen zugeordneten Bibliothekslisten erfolgt über die Menü-Auswahl Bibliothekslisten und Untermenü-Punkt Bibl. Liste/App. in der WOPiXX-Administration. In dieser List-Anzeige werden die vorhandenen Anwendungen und die ihnen zugeordneten Bibliothekslisten angezeigt. Anwendungen, denen keine Bibliotheksliste zugeordnet wurde, werden nicht angezeigt. B EN UT ZERHA ND BUC H 273 Abbildung 52: Zuordnen Bibliotheksliste zu Anwendung Spalten Applikation Eindeutige Kennung der Anwendung Bibliothekslisten-Nr. Eindeutige Kennung der Bibliotheksliste Bezeichnung Export Gibt an ob die Bibliotheksliste exportiert werden kann Import Gibt an ob beim Importieren die Bibliotheksliste ersetzt oder nur hinzugefügt werden darf. Bibliotheken Auslistung der Bibliotheken in der Bibliotheken Buttons Erstellen Zuordnen Anwendung zu Bibliotheksliste Kontext-Menü Ändern Anwendung andere Bibliotheksliste zuordnen Löschen Zuordnung Bibliotheksliste/Anwendung löschen Alle Bibl. Listen/Anwendung Auflistung aller der Anwendung (Anwendungs- und Programm-Ebene) zugeordneten Bibliothekslisten Bibliotheksliste Anzeige und Bearbeitung der Bibliotheksliste (6.5.1 Allgemeine Bibliothekslisten) B EN UT ZERHA ND BUC H 274 6.5.2.1 Zuordnung Bibliotheksliste/Anwendung bearbeiten Die Bearbeitung der Zuordnung Bibliotheksliste zu Anwendung, d.h. Erstellen, Ändern und Löschen erfolgt durch Klicken auf entsprechende Buttons oder Kontext-Menü-Punkte in der List-Anzeige Zuordnung Bibliotheksliste/Anwendung (6.5.2 Zuordnen Bibliotheksliste zu Anwendung). 6.5.2.1.1 Zuordnung Bibliotheksliste / Anwendung erstellen Der Aufruf erfolgt aus der List-Anzeige Bibliothekslisten/Anwendung (6.5.2 Zuordnen Bibliotheksliste zu Anwendung) durch Klick auf den Button Erstellen. Abbildung 53: Erfassen Zuordnung Anwendung/Bibliotheksliste Eingabe-Felder Applikation Eindeutige Kennung der Anwendung, der eine Bibliotheksliste zugeordnet werden kann. Einer Anwendung kann nur eine einzige Bibliotheksliste zugeordnet werden. Durch Klick auf den Button können die Anwendungen angezeigt und ausgewählt werden. Bibliotheksliste Eindeutige Kennung der Bibliotheksliste Die gleiche Bibliotheksliste kann mehreren Anwendungen zugeordnet werden. Durch Klick auf den Button können die vorhandenen Bibliothekslisten angezeigt und ausgewählt werden. Buttons Speichern Beim Speichern werden die erfassten Informationen geprüft und gespeichert. B EN UT ZERHA ND BUC H 275 Abbrechen Die Erfassung der Daten wird abgebrochen 6.5.2.1.2 Zuordnung Bibliotheksliste / Anwendung ändern Über Kontext-Menü-Auswahl in Zuordnung Bibliotheksliste/Applikation (6.5.2 Zuordnen Bibliotheksliste zu Anwendung) können die zugeordneten Bibliothekslisten geändert werden (Ändern). Abbildung 54: Anzeigen/Ändern Zuordnung Bibliotheksliste/Anwendung Beim Ändern kann lediglich die Bibliotheksliste geändert werden. Alle anderen Informationen werden nur angezeigt. 6.5.2.1.3 Zuordnung Bibliotheksliste / Anwendung löschen Das Löschen der Zuordnung einer Bibliotheksliste zu einer Anwendung erfolgt über Kontext-MenüAuswahl in List-Anzeige Zuordnung Bibliothekslisten/Anwendung (6.5.2 Zuordnen Bibliotheksliste zu Anwendung). Das Löschen muss bestätigt oder abgebrochen werden. Abbildung 55: Löschen Zuordnung Bibliotheksliste/Anwendung B EN UT ZERHA ND BUC H 276 6.5.2.1.4 Alle Bibliothekslisten/ Anwendung anzeigen Der Aufruf erfolgt aus der List-Anzeige Zuordnung Bibliotheksliste/Anwendung (6.5.2 Zuordnen Bibliotheksliste zu Anwendung) über Kontext-Menü-Auswahl Alle Bibliothekslisten/Anwendung. Es werden alle in der Anwendung verwendeten Bibliothekslisten, d.h. die Standard-Bibliotheksliste für die Anwendung sowie die Bibliothekslisten, die einzelnen Programmen zugeordnet wurden. Abbildung 56: List-Anzeige Bibliothekslisten/Anwendung Spalten Applikation Eindeutige Kennung der Anwendung Programm Programm Bleibt für die Standard-Bibliotheksliste der Anwendung leer. Bibliothek Programm-Bibliothek Bleibt für die Standard-Bibliotheksliste der Anwendung leer. Bibliotheksliste Eindeutige Kennung der Bibliotheksliste Bezeichnung Kurzbeschreibung der Bibliotheksliste Bibliotheken Auflistung der Bibliotheken in der Bibliotheksliste Kontext-Menü-Auswahl Ändern Ändern der zugeordneten Bibliotheksliste (6.5.1.2.2 Bibliothekslisten anzeigen/ändern/kopieren) Löschen Zuordnung Bibliotheksliste/Anwendung oder Programm löschen B EN UT ZERHA ND BUC H 277 Bibliotheksliste Anzeige und Bearbeitung der Bibliotheksliste (6.5.1 Allgemeine Bibliothekslisten) 6.5.2.1.5 Bibliotheksliste anzeigen/bearbeiten Der Aufruf erfolgt aus der List-Anzeige Zuordnung Bibliotheksliste/Anwendung (6.5.2 Zuordnen Bibliotheksliste zu Anwendung) über Kontext-Menü-Auswahl Bibliotheksliste. Die zugeordnete Bibliotheksliste wird angezeigt und kann bearbeitet werden (6.5.1.2.2 Bibliothekslisten anzeigen/ändern/kopieren). 6.5.3 Zuordnen Bibliotheksliste zu Programm Die List-Anzeige der den Programmen zugeordneten Bibliothekslisten erfolgt über die Menü-Auswahl Bibliothekslisten und Untermenü-Punkt Bibl. Liste/PGM in der WOPiXX-Administration. In dieser List-Anzeige werden die vorhandenen Anwendungen und die ihnen zugeordneten Bibliothekslisten, sowie die einzelnen Programmen zugeordneten Bibliothekslisten angezeigt. Anwendungen und Programme, denen keine Bibliotheksliste zugeordnet wurde, werden nicht angezeigt. Abbildung 57: List-Anzeige Bibliotheksliste/Programm Spalten Applikation Eindeutige Kennung der Anwendung Programm Programm Bleibt für die Standard-Bibliotheksliste der Anwendung leer. Bibliothek Programm-Bibliothek Bleibt für die Standard-Bibliotheksliste der Anwendung leer. Bibliothekslisten-Nr. Eindeutige Kennung der Bibliotheksliste Bezeichnung B EN UT ZERHA ND BUC H 278 Kurzbeschreibung der Bibliotheksliste Export Import Gibt an, ob die Bibliotheksliste beim Import ersetzt oder nur hinzugefügt werden darf. Bibliotheken Auflistung der Bibliotheken in der Bibliotheksliste Buttons Erstellen Gibt an, ob die Bibliotheksliste exportiert werden kann Zuordnung Bibliotheksliste zu Programm Kontext-Menü-Auswahl Ändern Ändern der dem Programm zugeordneten Bibliotheksliste Kopieren Bibliotheksliste einem anderen Programm zuordnen Eigenschaften Anzeigen der dem Programm zugeordneten Bibliotheksliste Löschen Löschen der zugeordneten Bibliotheksliste Bibliotheksliste Anzeige/Bearbeitung der Bibliotheksliste 6.5.3.1 Zuordnung Bibliotheksliste/Anwendung bearbeiten Die Bearbeitung der Zuordnung Bibliotheksliste zu Programm, d.h. Erstellen, Ändern und Löschen erfolgt durch Klicken auf entsprechende Buttons oder Kontext-Menü-Punkte in der List-Anzeige Zuordnung Bibliotheksliste/Anwendung (6.5.3 Zuordnen Bibliotheksliste zu ). 6.5.3.1.1 Zuordnung Bibliotheksliste / Programm erstellen Der Aufruf erfolgt aus der List-Anzeige Bibliothekslisten/Programm (6.5.3 Zuordnen Bibliotheksliste zu ) durch Klick auf den Button Erstellen. B EN UT ZERHA ND BUC H 279 Abbildung 58: Erfassen Zuordnung Bibliotheksliste Programm Eingabe-Felder Applikation Eindeutige Kennung der Anwendung, der das Programm und die Bibliotheksliste zugeordnet werden. Durch Klick auf den Button können die Anwendungen angezeigt und ausgewählt werden. Bibliothek Programm-Bibliothek Programm Programm Einem Programm kann innerhalb einer Anwendung kann nur eine einzige Bibliotheksliste zugeordnet werden. Bibliotheksliste Eindeutige Kennung der Bibliotheksliste Die gleiche Bibliotheksliste kann mehreren Anwendungen zugeordnet werden. Durch Klick auf den Button können die vorhandenen Bibliothekslisten angezeigt und ausgewählt werden. Buttons Speichern Beim Speichern werden die erfassten Informationen geprüft und gespeichert. Abbrechen Die Erfassung der Daten wird abgebrochen 6.5.3.1.2 Zuordnung Bibliotheksliste / Programm ändern/anzeigen B EN UT ZERHA ND BUC H 280 Über Kontext-Menü-Auswahl in Zuordnung Bibliotheksliste/Programm (6.5.3 Zuordnen Bibliotheksliste zu ) können die den Programmen zugeordneten Bibliothekslisten angezeigt (Eigenschaften) oder geändert werden (Ändern). Abbildung 59: Anzeigen/Ändern Zuordnung Bibliotheksliste/Programm Beim Ändern kann lediglich die Bibliotheksliste geändert werden. Alle anderen Informationen werden nur angezeigt. 6.5.3.1.3 Zuordnung Bibliotheksliste / Programm löschen Das Löschen der Zuordnung einer Bibliotheksliste zu einem Programm erfolgt über Kontext-MenüAuswahl in List-Anzeige Zuordnung Bibliothekslisten/Programm (6.5.3 Zuordnen Bibliotheksliste zu ). Das Löschen muss bestätigt oder abgebrochen werden. Abbildung 60: Löschen Zuordnung Bibliotheksliste/Programm 6.5.3.1.4 Bibliothekliste anzeigen/bearbeiten B EN UT ZERHA ND BUC H 281 Der Aufruf erfolgt aus der List-Anzeige Zuordnung Bibliotheksliste/Programm (6.5.3 Zuordnen Bibliotheksliste zu ) über Kontext-Menü-Auswahl Bibliotheksliste. Die zugeordnete Bibliotheksliste wird angezeigt und kann bearbeitet werden (6.5.1.2.2 Bibliothekslisten anzeigen/ändern/kopieren). B EN UT ZERHA ND BUC H 282 7. Einrichten WOPiXX-Anwendungen WOPiXX-Anwendungen werden aus dem Directweb-Menü aufgerufen und müssen folglich in Directweb hinterlegt werden. WOPiXX-Programme werden zu Anwendungen zusammengefasst bzw. müssen in einer Anwendung hinterlegt sein. Pro Anwendung wird im Directweb-Menü ein Menü-Auswahl-Punkt generiert. Die Programme, die zu einer Anwendung gehören werden, sofern sie direkt, d.h. aus einem Menü aufgerufen werden als Menü-Unterpunkte für die Anwendung angelegt. WOPiXX-Programme können auch über Kontext-Menü (aus Worktables) oder durch einen Klick auf einen Button (Work- und ChangeTables) aufgerufen werden. Einer Anwendung kann eine Bibliotheksliste zugeordnet werden. Bibliothekslisten werden unabhängig von Anwendungen generiert, d.h. die gleiche Bibliothekliste kann mehreren Anwendungen zugeordnet werden. Zusätzlich können Bibliothekslisten auch auf Programm-Ebene zugeordnet werden. Auf Anwendungsebene wird ebenfalls festgelegt ob eine Anwendung mehrsprachig ist, und wenn ja in welchen Message-Files die Nachrichten für die entsprechende Sprache hinterlegt ist. Ebenfalls auf Anwendungsebene können Matchcode entweder über Parameter-Listen oder als gesicherte SQL-Abfragen hinterlegt werden. Sowohl die Parameter-Listen als auch die gesicherten SQLAbfragen werden in den Programmen in Form von Schlüssel-Worten den Ein-/Ausgabe-Feldern zugeordnet werden. 7.1 Anwendung WOPiXX-Anwendungen werden über den Menü-Punkt Anwendung unter Menü-Punkt WOPiXXAdministration verwaltet. 7.1.1 List-Anzeige Anwendungen Nach Auswahl des Menü-Punkts Anwendung werden alle aktuell angelegten Anwendungen aufgelistet. B EN UT ZERHA ND BUC H 283 Abbildung 61: WOPiXX-Administration - Worktable Anwendungen Spalten Anwendung Maximal 10 Zeichen lange eindeutige Kennung der Anwendung. Folge-Nr. Reihenfolge in der die Anwendungen in Menü ausgegeben werden. Text Bezeichnung/Kurzbeschreibung der Anwendung Export Gibt an, ob die Anwendung exportiert werden darf. Bibliothek Objekt-Bibliothek der Anwendung Datenbibliothek Datenbibliothek, sofern eine separate Datenbibliothek angegeben ist Bibliotheksliste Sofern der Anwendung eine Bibliotheksliste zugeordnet ist, werden die Bibliotheken in der Reihenfolge, wie sie in der Bibliothekliste hinterlegt sind aufgelistet. Buttons Erstellen Durch Klicken auf den Button Erstellen kann eine neue Anwendung generiert werden. B EN UT ZERHA ND BUC H 284 Resequenzierung Der Button Resequenzierung ist bei Aufruf des Programms zunächst ausgegraut. Die Reihenfolge in der die Anwendungen im Menü-Baum angezeigt werden, kann in dieser List-Anzeige durch drag-and-drop verändert werden. Sobald die Reihenfolge geändert wurde, wird der Button Resequenzierung aktiviert. Beim anschießenden Klick auf den Button wird die neue Reihenfolge der Anwendungen gespeichert. Im Menübaum selber ist die neue Reihenfolge aktuell erst nach der nächsten Anmeldung sichtbar. Kontext-Menü Ändern Löschen Eigenschaften Anzeigen der Anwendungsdaten Standard-Button/Items Work Listet die hinterlegten Standard-Buttons und Kontext-Menü-Items auf. Die Standard-Buttons und Kontext-Menü-Items werden automatisch in WOPiXX integriert, wenn weder ein Button noch ein Kontext-Menü definiert wurde. Die Auswahl ist nur für die Standard-Anwendung dirweb/WOPIXX zulässig. Standard-Buttons Listet die Standard-Buttons und Modi auf und zeigt an ob und in welcher Umgebung der Button als Default-Button hinterlegt wurde. Die Auswahl ist nur für die Standard-Anwendung dirweb/WOPiXX zulässig. Anwendung kopieren Kopieren einer kompletten Anwendung, mit aller abhängigen Datensätzen, IFS Templates und anwendungsindividuellen Icons. Anwendung umbenennen Umbenennen der bestehenden Anwendung Menü Auflistung und Wartung der Benutzer-Menü-Punkte für die Anwendung Sprachen Auflistung und Zuordnung der Sprachen bei mehrsprachiger Verarbeitung Parameter Änderung der erfassten Anwendungsdaten Löschen einer kompletten Anwendung, incl. aller abhängigen Datensätze, IFS Templates und anwendungsindividueller Icons In der Anwendung registrierte Programme werden nicht gelöscht, sondern lediglich die Einträge aus den WOPiXX-Tabellen. Auflistung und Wartung der anwendungsspezifischen Parameter-Listen / Comboboxen. B EN UT ZERHA ND BUC H 285 Die Einbindung der anwendungsspezifischen Comboboxen erfolgt über Option CTL(Parametergruppe) Parameter übernehmen Einzelne oder alle anwendungsspezifische Parameter-Listen/Comboboxen kopieren. Parameter-Listen/Combo können sowohl von der WOPiXX-Anwendung als auch von jeder beliebigen anderen Anwendung kopiert werden. Werden Parameter-Listen/Combo-Boxen in den Programmen verwendet, wird zunächst geprüft, ob die entsprechende Parameter-Liste in der aktuellen Anwendung angelegt ist. Sofern die Parameter-Liste/Combo-Box nicht in der aktuellen Anwendung vorhanden ist, wird geprüft, ob sie in der WOPiXX-Anwendung angelegt ist. Sofern sie in der WOPiXX-Anwendung gefunden wird, wird diese Parameter-Liste/Combo-Box verwendet. SQL Abfrage Auflistung und Wartung der anwendungsindividuellen SQL-Abfragen (z.B. für Matchcode-Auswahl) Die Einbindung der SQL-Abfragen in Programme erfolgt über Option ExecSQL(SQLAbfrage) . SQL Abfragen übernehmen Einzelne oder alle anwendungsspezifischen SQL-Abfragen kopieren. SQL-Abfragen können sowohl von der WOPiXX-Anwendung als auch jeder beliebigen anderen Anwendung kopiert werden. Werden in den Programmen gesicherte SQL-Abfragen verwendet so wird immer zuerst geprüft, ob diese SQL-Abfrage in der aktuellen Anwendung vorhanden ist. Kann sie in der aktuellen Anwendung nicht gefunden werden, wird geprüft, ob die Abfrage in der WOPiXX-Anwendung hinterlegt wurde. Sofern die Abfrage in der WOPiXXUmgebung gefunden wurde, wird diese verwendet Export Über diese Funktion können kundenindividuelle Anwendungen exportiert werden, um z.B. im Toolmaker App-Store hinterlegt zu werden, oder um an Kunden ausliefert zu werden. Die Funktion befindet sich aktuell noch in der Entwicklung und ist deshalb noch nicht im Kontext-Menü der Anwendung bzw. in WOPiXX integriert. Import Exportierte Anwendungen können über diese Auswahl importiert, d.h. in WOPiXX registriert werden. Die Funktion befindet sich aktuell noch in der Entwicklung und ist deshalb noch nicht im Kontext-Menü der Anwendung bzw. in WOPiXX integriert. 7.1.2 Wartung der Anwendungsdaten Sofern eine Anwendung neu erstellt werden soll erfolgt der Aufruf aus der Worktable Anwendung (7.1 Anwendung) durch Klick auf den Button Erfassen. B EN UT ZERHA ND BUC H 286 Der Aufruf zum Änderung oder Anzeigen der Kopf-Daten für die Anwendung erfolgt ebenfalls aus der Worktable Anwendung (7.1 Anwendung) über Kontext-Menü (Ändern / Eigenschaften=Anzeigen). 7.1.2.1 Neue Anwendung erstellen Nach Klick auf den Button Erfassen aus der Worktable-Anzeige Anwendung (7.1 Anwendung) wird die folgenden Eingabemaske geöffnet. Abbildung 62: Erfassen Anwendung Eingabe-Felder Anwendung Für die Anwendung muss ein eindeutiger maximal 10 Zeichen langer Name festgelegt werden. Der Name sollte aus den Großbuchstaben A-Z und/oder den Ziffern von 0-9 bestehen. Sonderzeichen sollten vermieden werden. Anmerkung: Die eindeutige Kennung der Anwendung kann im Änderungsmodus nicht geändert werden. B EN UT ZERHA ND BUC H 287 Eine Änderung der eindeutigen Kennung ist nur durch das Kopieren der Anwendung auf den neuen Anwendungs-Namen und dem anschließenden Löschen der ursprünglichen Anwendung möglich. Folge-Nr. Gibt die Position die die Anwendung im Menübaum einnehmen soll an. Wird keine Folgen-Nr. eingegeben, so wird die Anwendung wird dann ans Ende des Menübaums positioniert. Durch Klick auf den Button (nach dem Auswahl-Feld) wird die SQL-Abfrage DWAPPSEQ geöffnet, in der die freien sowie durch Anwendungen belegte Folgen-Nr. angezeigt werden. Durch Klicken auf eine nicht belegte Folge-Nr. kann diese übernommen werden. Anmerkung: Die Anwendung kann auch nach der Erstellung in dem ListProgramm, in dem alle Anwendungen aufgelistet sind, durch drag und drop an die gewünschte Stelle positioniert werden. Beschreibung Beschreibung der Anwendung. Wird die Beschreibung der Anwendung nicht angegeben, wird diese aus der Message-Id für Text und der Nachrichten-Datei ermittelt. Message-Id für Text Für mehrsprachige Anwendungen sollte anstatt der Beschreibung eine in der Nachrichten-Datei vorhandene Message-Id hinterlegt werden. Der Nachrichten-Text wird ermittelt und ebenfalls in die Beschreibung übernommen. Sofern sowohl eine Beschreibung als auch eine Message-Id angegeben wurde, kann die Message-Id mit dem Beschreibungstext auf Wunsch in der Message-File angelegt werden. Message-Id in Anwendungs-Message-File erstellen? Sofern Message Id und Beschreibung angegeben wurden, kann die Message-Id in der Message-File erstellt werden, sofern diese Checkbox angehakt wurde. Nachrichten-Datei: Für WOPiXX-Anwendungen ist eine Nachrichten-Datei nicht zwingend erforderlich. Die darunterliegende Directweb-Anwendung arbeitet jedoch mit Nachrichten-Dateien. Die angegebene Message-File muss in der Objekt-Bibliothek entweder vorhanden sein oder angelegt werden. Wird keine Nachrichten-Datei angegeben, da die WOPiXX-Anwendung nicht mehrsprachig sein soll, wird geprüft, ob in der Objekt-Bibliothek eine Nachrichten-Datei vorhanden ist. Sofern eine Nachrichten-Datei vorhanden ist, wird diese übernommen. Sofern keine Nachrichten-Datei vorhanden ist, wird eine neue Nachrichten-Datei mit dem Namen der Anwendung in der Objekt-Bibliothek erstellt. Durch Klick auf den Button wird die SQL-Abfrage DWMSGF aufgerufen und alle Message-Files angezeigt. Die gewünschte Message-File kann ausgewählt und übernom- B EN UT ZERHA ND BUC H 288 men werden. Bibliothek Datenbibliothek Die Angabe einer zweiten Bibliothek ist nicht zwingend erforderlich. Bibliotheksliste Jeder Anwendung kann eine Bibliotheksliste zugeordnet werden. In dieser Bibliotheksliste sollten alle für die Anwendung erforderlichen Bibliotheken in der gewünschten Reihenfolge hinterlegt sein. Zusätzlich kann auch jedem WOPiXX-Programm eine eigene Bibliotheksliste zugeordnet werden. Sofern außer QTEMP, QGPL und den WOPiXX und Dirweb-Bibliotheken nur maximal zwei weitere Bibliotheken (Objekt- und Datenbibliothek) erforderlich sind, kann ohne Bibliotheksliste gearbeitet werden. Von dirweb übernehmen Icons, SQL-Abfragen und vordefinierte Comboboxen können von der BasisAnwendung dirweb übernommen werden. Übernommene Informationen können jederzeit auf Anwendungsebene modifiziert werden. Die in dirweb hinterlegten Icons, SQL-Abfragen und/oder Comboboxen können in den kundenindividuellen Anwendungen kopiert und dort verändert werden. Die von WOPiXX zur Verfügung gestellten SQL-Abfragen und Combo-Boxen können in jeder Anwendung verwendet werden. Bei einer Update-Installation werden die WOPiXX-Daten ggf. ausgetauscht, die kopierten Daten bleiben dagegen unangetastet. HTML Vorlagen Der Pfand in der die HTML-Templates hinterlegt werden, wird automatisch basierend auf dem Anwendungsnamen generiert, und das entsprechende Verzeichnis erstellt. Die Default-Templates für Change und Worktables werden in dieses Verzeichnis eingestellt. Der Pfad und die Default-Templates unterliegen Namensrichtlinien und können deshalb nicht individuell festgelegt werden. Pfad für Symbole Der Pfand in der Icons hinterlegt werden, wird automatisch basierend auf dem Anwendungsnamen generiert, und das entsprechende Verzeichnis erstellt. Der Pfad unterliegt Namensrichtlinien und können deshalb nicht individuell festgelegt werden. Für jede Anwendung ist eine Objekt-Bibliothek erforderlich. Die Objekt-Bibliothek kann nach Erstellung der Anwendung nicht mehr verändert werden. Die für die Anwendung erforderliche Nachrichten-Datei sollte in dieser Bibliothek vorhanden sein. Alle zu der Anwendung gehörenden WOPiXX-Programme sollten in dieser Bibliothek hinterlegt werden. B EN UT ZERHA ND BUC H 289 HTTP-Pfad-Erweiterung Export erlaubt Gibt an ob die Anwendung exportiert (und auf anderen Systemen installiert) werden kann, oder ob es sich um eine lokale Anwendung handelt. Buttons Speichern Beim Speichern wird, sofern keine Eingabefehler gefunden wurden eine neue Anwendung erzeugt. Neben den Kopf-Daten werden noch die folgenden Objekte und Verzeichnisse generiert Sofern die angegebene Message File nicht in der Objekt-Bibliothek vorhanden ist, wird sie angelegt, sofern dies erwünscht ist. Sofern Beschreibung und Message-Id angegeben wurden, kann die Nachricht in der Anwendungs-Message-File angelegt werden. Hauptmenü-Punkt für die Anwendung Dieser Menü-Punkt kann nicht gelöscht werden. Standard-Sprache Der IFS-Pfad für die Templates wird erstellt und die Default-Templates in dieses Verzeichnis kopiert Der IFS-Pfand für die Icons wird erstellt. Sofern die Übernahme von Icons, SQL-Abfragen und/oder Comboboxen aus directweb/WOPiXX erwünscht waren, werden diese Informationen in die Anwendung übernommen. Abbrechen Die Erfassung der Daten wird abgebrochen Bibliotheksliste Eine vorhandene Bibliotheksliste kann über einen Matchcode ausgewählt werden. Sofern die Bibliotheksliste noch nicht erfasst wurde, kann durch Klick auf den Button Bibliotheksliste in das Bibliothekslisten-Wartungs-Programm verzweigt werden und die notwendige Bibliotheksliste angelegt werden. 7.1.2.2 Anwendung anzeigen/ändern Über Kontext-Menü-Auswahl in Wartung Anwendungsdaten können die Anwendungskopf-Daten angezeigt (Eigenschaften) oder geändert werden (ändern) B EN UT ZERHA ND BUC H 290 Abbildung 63: Anzeigen/Änderung Anwendung Eine Änderung des eindeutigen Namens der Anwendung ist über die Kontext-Menü-Auswahl Ändern nicht möglich. Sollte die Anwendung und damit auch alle abhängigen Informationen umbenannt werden, muss dies über Kontext-Menü-Auswahl Anwendung kopieren erfolgen. Die ursprüngliche Anwendung kann im Anschluss gelöscht werden. Die Objekt-Bibliothek wird einmalig festgelegt und kann im Anschluss nicht mehr geändert werden. Die übrigen Informationen, die erfasst werden konnten, können auch geändert werden. Sofern Icons, SQL-Abfragen oder Comboboxen/Parameter von dirweb übertragen werden sollen, werden nur die fehlenden Informationen übernommen. Es werden jedoch keine vorhandene Icons, SQLAbfragen oder Comboboxen/Parameter überschrieben oder gelöscht. Die ermittelten Pfade für die HTML-Templates und die Icons werden angezeigt, können aber weiterhin nicht geändert werden. B EN UT ZERHA ND BUC H 291 7.1.2.3 Anwendung löschen Das Löschen einer Anwendung erfolgt über Kontext-Menü-Auswahl. Das Löschen muss bestätigt oder abgebrochen werden. Abbildung 64: Löschen Anwendung Wurde das Löschen bestätigt werden alle zur Anwendung gehörenden in WOPiXX gespeicherten Informationen, d.h. Daten in abhängigen Tabellen sowie IFS-Verzeichnisse und Dokumente mit anwendungsspezifischen Informationen entfernt. Informationen, die ohne Anwendungs-Kürzel in WOPiXX gespeichert wurden (z.B. Bibliothekslisten) werden nicht entfernt. Individuelle Bibliotheken, Objekte, IFS-Verzeichnisse und Dateien, die sich nicht unterhalb der WOPiXXPfade befinden bleiben unangetastet. Anmerkung: 7.2 Die Anwendung DIRWEB darf nicht gelöscht werden. Standard Buttons/Items für List-Anzeigen Sofern in Work-Programmen weder Buttons noch Kontext-Menü-Items definiert wurden, werden einige Default-Standard-Buttons und Kontext-Menü-Items automatisch integriert. Die Standard-Buttons- und Kontext-Menü-Items sollten nur von Toolmaker festgelegt werden. Über den Menü-Punkt Standard Buttons/Item Work können die vordefinierten Buttons- und KontextMenü-Items angezeigt werden. Weiterhin ist sichtbar, welche der vordefinierten Buttons- und KontextMenü-Items automatisch (als Default) integriert werden. Die Anzeige kann nur bei der Anwendung DIRWEB ausgewählt und angezeigt werden. B EN UT ZERHA ND BUC H 292 Abbildung 65: Default und Standard-Buttons und Kontext-Menü-Items für Work-Programme Spalten Aktion Die Aktion entspricht den Modi. Bei Aufruf der Funktionen WX_WrkBtn() und Wx_CtxMnuItm() kann für die StandardButtons und Kontext-Menü-Items diese Aktion als 1. Parameter übergeben werden. Zur Definition von Default-Buttons und Default-Kontext-Menü-Items wurden auch spezielle Funktionen, definiert, die die Angabe der Aktion überflüssig machen: *ADD Button Erfassen/Hinzufügen Wx_WrkAdd() *EDTLIST Button Änderung Sichern für wartbare List-Anzeigen. Der Button wird aktiviert, sobald eine Änderung in der List-Anzeige erfolgt ist. Wx_WrkEdtList() *RESEQ Der Button wird aktiviert, sobald Einträge in ListAnzeigen über Drag und Drop verschoben wurden. Wx_WrkReseq() *CHANGE Kontext-Menü-Item Ändern Wx_CtxMnuItmChange() *COPY Kontext-Menü-Item Kopieren Wx_CtxMnuItmCopy() *DELETE Kontext-Menü-Item Löschen B EN UT ZERHA ND BUC H 293 Wx_CtxMnuItmDelete() *PROPERTY Kontext-Menü-Item Eigenschaften/Anzeigen Wx_CtxMnuItmProperty() Die Aktionen können im Folge-Programm als übergebene Modi abgeprüft werden. Die Aktion kann bei Aufruf der Funktion Wx_isMode() als 1. Parameter übergeben werden. Zur Prüfung der Standard-/Default-Modi wurden ebenfalls Funktionen angelegt, die die Angabe der Aktion als Parameter überflüssig machen: *ADD Wx_isModeAdd() *EDTLIST Wx_isModeEdtList() *RESEQ Wx_isModeReseq() *CHANGE Wx_isModeChange() *COPY Wx_isModeCopy() *DELETE Wx_isModeDelete() *PROPERTY Wx_isModeProperty() *RENAME Wx_isModeRename() 7.3 Beschreibung Button- oder Kontext-Menü-Item Text Button Menü-Punkt Gibt an, ob für die Aktion ein Kontext-Menü-Item angelegt wird Default Linie davor/danach Gibt an, ob in Kontext-Menüs eine Linie vor oder nach dem Kontext-Menü-Item eingefügt werden soll. Gibt an, ob für die Aktion ein Button angelegt wird Gibt an welche Buttons- und Kontext-Menü-Items als Defaults definiert wurden. Standard Buttons Sowohl in den List- als auch in den Change-Programmen werden eine Reihe von Standard-Buttons oder Funktionen integriert. Über die Auswahl Standard-Buttons wird ersichtlich welche Standard-Buttons in Change und Work-Programmen definiert werden können und welche automatisch integriert werden. Die Standard-Buttons, sowie die Default-Einstellungen sollten nur von Toolmaker festgelegt werden. Der Aufruf und die Anzeige sind bei Anwendung DIRWEB erlaubt. B EN UT ZERHA ND BUC H 294 Abbildung 66: Standard / Default Buttons Spalten Button Default im Änderungs-Modus Kennzeichnet die Default-Buttons in Change-Programmen im Änderungsmodus. Im Änderungsmodus werden automatisch die Buttons Sichern/Save und Abbrechen/Cancel integriert. Refresh wird als Icon in der Header-Zeile hinterlegt Default im Anzeige-Modus Kennzeichnet die Default-Buttons in Change-Programmen im Anzeigemodus. Im Anzeigemodus werden automatisch die Buttons Ändern (Wechsel in Änderungsmodus) und Weiter/Continue integriert. Refresh wird als Icon in der Header-Zeile hinterlegt Default in Work-Tables Kennzeichnet die Default-Buttons in Worktables In Worktables wird nur der Hinzufügen/Add-Button automatisch integriert. Default im Editier-Modus Kennzeichnet die Default-Buttons im Editier-Modus in WorkTables integriert werden. In WorkTables wird im Editier-Modus der Hinzufügen/Add-Button und der EdtListButton automatisch integriert. Gibt die Aktion/Modus für den Button an B EN UT ZERHA ND BUC H 295 Aktiv/Inaktiv Gibt an, ob die Buttons (bzw. Einstellungen) Aktiv oder Inaktiv sind. 7.4 Anwendung kopieren Über den Kontext-Menü-Punkt Anwendung kopieren in Wartung Anwendung, kann eine Anwendung dupliziert werden. Abbildung 67: Anwendung kopieren Eingabe-Felder Von Anwendung Die zu kopierende Anwendung muss angegeben werden. Durch Klick auf den Button wird die SQL-Abfrage DWAPP aufgerufen und alle Anwendungen angezeigt. Die gewünschte Anwendung kann ausgewählt und übernom- B EN UT ZERHA ND BUC H 296 men werden. Nach Anwendung Der Name der neuen Anwendung muss angegeben werden. Sofern die neue Anwendung bereits existiert, wird ein Fehler ausgegeben. Sofern eine bereits vorhandene Anwendung ersetzt werden soll, muss Ersetzen Ja/Nein angegeben werden. Ersetzten Ja/Nein Gibt an ob eine eventuell vorhandene Anwendung ersetzt werden darf. Buttons Speichern Beim Speichern wird eine neue Anwendung erzeugt. Neben den Kopf-Daten werden noch die folgenden Informationen für die neue Anwendung übernommen. Hauptmenü-Punkt, sowie alle Unter-Menü-Punkte für die Anwendung Sprachen SQL-Abfragen Comboboxen/Parameter Der HTML-Templates, IFS-Dokumente und Icons werden in die neu erstellten anwendungsindividuellen Verzeichnisse kopiert. Sofern die neue Anwendung bereits existiert und ersetzt werden darf, werden alle vorhandenen zur neuen Anwendung gehörenden Informationen (abhängige Datensätze und IFS-Verzeichnisse und -Dokumente) zunächst gelöscht. Abbrechen Die Erfassung der Daten wird abgebrochen 7.5 Anwendung umbenennen Über den Kontext-Menü-Punkt Anwendung kopieren in Wartung Anwendung, kann eine Anwendung dupliziert werden. B EN UT ZERHA ND BUC H 297 Eingabe-Felder Von Anwendung Die Anwendung, die umbenannt werden soll muss angegeben werden. Durch Klick auf den Button wird die SQL-Abfrage DWAPP aufgerufen und alle Anwendungen angezeigt. Die gewünschte Anwendung kann ausgewählt und übernommen werden. Nach Anwendung Der neue Name der Anwendung muss angegeben werden. Sofern eine Anwendung mit dem neuen Namen bereits existiert, wird ein Fehler ausgegeben. Um eine bereits vorhandene Anwendung ersetzten zu können, Ersetzen Ja/Nein angegeben werden. Ersetzten Ja/Nein B EN UT ZERHA ND BUC H 298 Gibt an ob eine eventuell vorhandene Anwendung überschrieben werden darf. Buttons Speichern Beim Speichern wird die vorhandene Anwendung, sowie alle abhängigen Datensätze und anwendungsspezifischen IFS-Verzeichnisse und Dokumente. Sofern die neue Anwendung bereits existiert und ersetzt werden darf, werden alle vorhandenen zur neuen Anwendung gehörenden Informationen (abhängige Datensätze und IFS-Verzeichnisse und -Dokumente) zunächst gelöscht. Abbrechen Die Erfassung der Daten wird abgebrochen Anmerkung: 7.6 Die Anwendungen DIRWEB und IBM_I können nicht umbenannt werden. Anwendungsmenü Der Haupt-Menü-Punkt, unter dem alle zur Anwendung gehörenden Menü-Punkte bzw. ProgrammAufrufe angesiedelt werden sollten, wird bereits beim Erstellen der Anwendung automatisch erzeugt. Anwendungsspezifische Unter-Menü-Verzeichnisse und Menü-Punkte für Programm-Aufrufe können über den Kontext-Menü-Punkt Menü in Wartung Anwendungen aufgelistet und bearbeitet werden. Abbildung 68: Aufruf List-Anzeige Anwendungsmenü B EN UT ZERHA ND BUC H 299 7.6.1 List-Anzeige Anwendungsmenü Der Aufruf der List-Anzeige Anwendungsmenü erfolgt über Kontext-Menü-Auswahl Menü in der ListAnzeige der Anwendungsdaten Abbildung 69: List-Anzeige Anwendungsmenü Spalten Menü-Struktur Zeigt die Menü-Struktur und die Position der Menü-Punkte innerhalb der Struktur an. Anmerkung: Unter Release V5R4 werden nur die Menü-Punkte aufgelistet. Die Darstellung der Menü-Struktur (Rekursion in Verbindung mit Mehrsprachigkeit) ist unter Release V5R4 noch nicht möglich. Übergeordneter Menü-Punkt Folge-Nr. des übergeordneten Menü-Punkts innerhalb des Anwendungsmenüs. Die Folgen-Nr. des aktuellen und des übergeordneten Menü-Punkts sind insbesondere unter Release V5R4 wichtig, da die Anzeige der Menü-Struktur noch nicht unterstützt wird. Beschreibung des übergeordneten Menü-Punkts Bezeichnung/Beschreibung des übergeordneten Menü-Punkts innerhalb des Anwendungsmenüs. Folge-Nr. Folge-Nr. des aktuellen Menü-Punkts B EN UT ZERHA ND BUC H 300 Programm Programm, das bei Auswahl des Menü-Punkts ausgeführt wird. Die Angabe eines Programms ist nicht zwingend erforderlich. Menü-Unterpunkte können sowohl unter Menü-Punkten mit als auch ohne ProgrammDefinition angesiedelt werden. Export erlaubt Werden (Test-)Programme in dem Menü hinterlegt, für die kein Export erlaubt ist, so werden diese Menü-Punkte beim Exportieren der Anwendung nicht mitgesichert. Folglich können solche Menü-Punkte auf anderen Systemen auch nicht installiert werden. Benutzer-Klasse Zur Ausführung berechtigte Benutzer-Klasse (Benutzer, Systembediener, Administrator oder Gruppen-Profil) Session Buttons Erstellen Erfassen von neuen Menü-Punkten Kontext-Menü Ändern Detail-Informationen für den Menü-Punkt ändern, z.B. Text/Message-Id ändern, zum Export freigeben, an neue Position innerhalb des Menü-Baums der Anwendung verschieben etc. Eigenschaften Detail-Informationen für Menü-Punkt anzeigen Untermenü-Punkt erstellen Die Erfassungsmaske für Untermenü-Punkte wird geöffnet. Die Position des MenüPunktes wird basierend auf der Position des Menü-Punktes auf dem der KontextMenü-Punkt ausgewählt wurde ermittelt und vordefiniert. Menü-Punkt löschen Menü-Punkt löschen Wird ein Kontext-Menü-Punkt gelöscht so werden ebenfalls alle untergeordneten Menü-Punkte gelöscht. Das Löschen von Kontext-Menü-Punkten muss über die folgende Meldung explizit bestätigt werden. B EN UT ZERHA ND BUC H 301 Abbildung 70: Löschen von Kontext-Menü-Punkten bestätigen Anmerkung: Wird der Haupt-Menü-Punkt einer Anwendung ausgewählt, so werden nur die untergeordneten Menü-Punkte gelöscht. Der HauptMenü-Punkt, der auch automatisch angelegt wird, kann nicht manuell gelöscht werden. Wird die komplette Anwendung gelöscht wird, wird auch der Haupt-Menü-Punkt entfernt. 7.6.1.1 Anwendungsmenü bearbeiten Die Bearbeitung des Anwendungsmenüs, d.h. Erstellen, Ändern und Löschen von AnwendungsmenüPunkten erfolgt durch Klicken auf entsprechende Buttons oder Kontext-Menü-Punkte in der ListAnzeige Anwendungen (7.1.1 List-Anzeige Anwendungen) 7.6.1.2 Anwendungsmenü-Punkt erstellen Ein Anwendungsmenü-Punkt kann aus dem List-Programm Menü auf zwei Arten erfolgen: Button Erfassen Kontext-Menü-Auswahl Unter-Menü-Punkt erstellen Erfolgt die Auswahl über den Button Erfassen, kann sowohl der übergeordnete Menü-Punkt als auch der Menü-Punkt, nachdem der neue Menü-Punkt eingeordnet werden soll ausgewählt werden. Sofern die Auswahl über das Kontext-Menü erfolgt wird der übergeordnete Menü-Punkt aufgrund der Position des Auswahl-Punktes ermittelt und kann nicht geändert werden. Das folgende Beispiel zeigt die Erfassungsmasken für beide Auswahl-Optionen. B EN UT ZERHA ND BUC H 302 Abbildung 71: Anwendungs-Menü-Punkt erstellen Die Anwendung für die der Menü-Punkt angelegt werden soll wird ermittelt und im Header angezeigt. Eingabe-Felder In (Unter-)Menü Die Position des neuen Menü-Punktes muss angegeben werden. Zunächst muss der Menü-Punkt, unterhalb dem der neue Menü-Punkt eingeordnet werden soll. Die Auswahl des Kontext-Menü-Punktes kann über die folgende Combo-Box erfolgen, in der alle Kontext-Menü-Punkte der Anwendung aufgelistet sind. B EN UT ZERHA ND BUC H 303 Abbildung 72: Combo-Box Auswahl übergeordnete Menü-Punkte Nach Auswahl Sofern sich unterhalb des ausgewählten übergeordneten Menü-Punkt mehrere MenüPunkte auf der gleichen Ebene befinden, muss angegeben werden nach welchem der gleichberechtigten Menü-Punkte der neue Menü-Punkt eingeordnet werden soll. Die Auswahl erfolgt über eine Combo-Box analog der Auswahl des übergeordneten Menü-Punkts. Beschreibung Für den anzulegenden Menü-Punkt kann entweder eine Beschreibung oder eine Message-Id angegeben werden. Message-Id für Text Wird eine Message-Id angegeben, so wird der Text des Menü-Punktes über diese Message-Id aus der Message-File, in der Objekt-Bibliothek ermittelt. Message-Id für Tipp Zusätzlich kann eine Message-Id, über die ein Tipp-Text ermittelt wird angegeben werden. Programm B EN UT ZERHA ND BUC H 304 Es können Unter-Menü-Punkte, die nur besseren Strukturierung der Menü-Punkte verwendet werden angelegt werden. In diesem Fall wird Programm nicht ausgewählt. Programm-Name Sofern dem Menü-Punkt ein Programm zugeordnet werden soll, muss zunächst Programm ausgewählt und dann das gewünschte Programm angegeben werden. Das ausgewählte Programm sollte sich in der Objekt-Bibliothek der Anwendung befinden. Durch Klick auf den Button wird die SQL-Abfrage DWLISTPGM aufgerufen. Achtung: Berechtigung Gibt die Berechtigungsgruppe an, die mit dem Menü-Punkt arbeiten können Benutzer: Minimale Rechte Systembediener: Kann alle Menü-Punkte, die mit der SystemBediener-Berechtigung angelegt wurden. Des Weiteren kann er alle mit der BenutzerBerechtigung angelegten Menü-Punkte aufrufen Administrator: Hat alle Rechte und kann alle Menü-Punkte aufrufen Gruppen-Menü Sofern das Gruppen-Menü, dem der Benutzer Zugeordnet ist berechtigt ist, kann der Benutzer den Menü-Punkt aufrufen Symbol Zusätzlich zur Anzeige im Menü-Baum kann ein Icon ausgewählt werden. Export erlaubt Gibt an, ob der Menü-Punkt exportiert werden darf Buttons Speichern Der erste Aufruf des Match-Codes/SQL-Abfrage kann etwas länger u.U. sogar ein paar Minuten dauern. Beim Speichern werden die erfassten Informationen geprüft und gespeichert, dabei werden die einzelnen Menü-Punkte für die Anwendung resequenziert. Abbrechen Die Erfassung der Daten wird abgebrochen 7.6.1.3 Anwendungsmenü-Punkt anzeigen/ändern Über Kontext-Menü-Auswahl in List-Anzeige Anwendungsmenü (7.1.1 List-Anzeige Anwendungen) können die erfassten Anwendungsmenü-Punkte angezeigt (Eigenschaften) oder bearbeitet werden (Ändern) B EN UT ZERHA ND BUC H 305 Abbildung 73: Anzeigen/Ändern Anwendungsmenü-Punkt Ein Anwendungsmenü-Punkt kann keiner anderen Anwendung zugeordnet werden, d.h. die Anwendung kann nicht geändert werden. Sofern ein Anwendungsmenü-Punkt einer anderen Anwendung zugeordnet werden muss, muss er in der alten Anwendung gelöscht und für die andere Anwendung neu erfasst werden. Innerhalb der Anwendung können die Anwendungsmenü-Punkte neu angeordnet oder in andere SubMenüs verschoben werden. Die übrigen Informationen, die erfasst werden konnten, können auch geändert werden. 7.6.1.4 Anwendungsmenü-Punkt löschen Das Löschen eines Anwendungsmenü-Punktes erfolgt über Kontext-Menü-Auswahl in List-Anzeige Anwendungsmenü. B EN UT ZERHA ND BUC H 306 Beim Löschen eines Kontext-Menü-Punktes, werden alle untergeordneten Menü-Punkte ebenfalls gelöscht. Wurde der Haupt-Menü-Punkt zum Löschen ausgewählt, werden untergeordneten Menü-Punkte gelöscht. Der Haupt-Menü-Punkt, der automatisch angelegt wird, wird nicht gelöscht. Das manuelle Löschen des Haupt-Menü-Punkts der Anwendung ist nicht möglich. Beim Löschen der Anwendung wird auch der Haupt-Menü-Punkt der Anwendung gelöscht. Das Löschen muss explizit bestätigt oder abgebrochen werden. Abbildung 74: Anwendungsmenü-Punkt löschen Wurde das Löschen bestätigt wird der ausgewählte Menü-Punkt, sowie alle untergeordneten MenüPunkte gelöscht. 7.7 Sprachen Die Informationen für die Standard-Sprache (Sprache und Message-File) werden bereits beim Erstellen der Anwendung automatisch erzeugt. Sofern nicht mit mehrsprachigen Anwendungen gearbeitet wird, ist keine weitere Bearbeitung erforderlich. B EN UT ZERHA ND BUC H 307 Für mehrsprachige Anwendungen können weitere Sprachen erfasst bzw. die entsprechenden MessageFiles zugeordnet werden. Der Aufruf der List-Anzeige für Sprachen erfolgt über den Kontext-Menü-Punkt Sprachen in Wartung Anwendungen. Abbildung 75: Aufruf List-Anzeige Sprachen 7.7.1 List-Anzeige Sprachen Der Aufruf der List-Anzeige Sprachen erfolgt über Kontext-Menü-Auswahl Sprachen in der List-Anzeige der Anwendungsdaten (7.1.1 List-Anzeige Anwendungen). B EN UT ZERHA ND BUC H 308 Abbildung 76: List-Anzeige Sprachen Spalten Sprache Die Sprache wird durch die entsprechende Länderflagge dargestellt. Die Aufbereitung basiert auf der Parameter/Combobox-Option CTL(Language). Nachrichtendatei Nachrichten-Datei in der die sprachenspezifischen Texte hinterlegt sind. Bibliothek Nachrichten-Datei Bibliothek in der sich die Message-File befindet Buttons Erstellen Eine weitere Sprache kann erfasst werden. Kontext-Menü Ändern Änderung der erfassten sprachenspezifischen Informationen Löschen Löschen der Sprache Eigenschaften Anzeigen der sprachenspezifischen Informationen 7.7.2 Sprachen bearbeiten Die Bearbeitung/Zuordnung der Sprachen, d.h. Erstellen, Ändern und Löschen erfolgt durch Klicken auf entsprechende Buttons oder Kontext-Menü-Punkte in der List-Anzeige Anwendungen (6.1.1 ListAnzeige Anwendungen) B EN UT ZERHA ND BUC H 309 7.7.2.1 Sprachen erfassen Nach Klick auf den Button Erfassen in der List-Anzeige Sprachen (7.7.1 List-Anzeige Sprachen) wird die folgende Eingabe-Maske geöffnet. Abbildung 77: Erfassen Anwendungssprachen Eingabe-Felder Anwendung Bei der Anwendung handelt es sich um ein reines Ausgabefeld. Die Anwendung wird aus dem vorhergehenden Programm übergeben. Sprache Bibliothek Nachrichtendatei Bibliothek in der sich die Nachrichtendatei befindet Bei Klick auf den Button wird die SQL-Abfrage LIBLIST aufgerufen, in der alle Bibliotheken aufgelistet werden und die gewünschte Bibliothek ausgewählt werden kann. Nachrichtendatei Die Nachrichten-Datei in der sich die Nachrichten in der gewünschten Sprache befinden kann erfasst werden. Bei Klick auf den Button wird die SQL-Abfrage DWMSGF ausgeführt, über die alle Message-Files aufgelistet und ausgewählt werden können. Buttons Die gewünschte Sprache kann über die bereitgestellte Combobox ausgewählt werden. Pro Anwendung kann eine Sprache nur einmalig angegeben werden. B EN UT ZERHA ND BUC H 310 Speichern Abbrechen Die Erfassung der Daten wird abgebrochen Beim Speichern werden die erfassten Informationen geprüft und gespeichert. 7.7.2.2 Sprachen anzeigen/ändern Über Kontext-Menü-Auswahl in List-Anzeige Sprache (7.7.1 List-Anzeige Sprachen) können die erfassten Sprachen angezeigt (Eigenschaften) oder bearbeitet werden (Ändern). Abbildung 78: Anzeigen/Ändern Sprachen 7.7.2.3 Sprachen löschen Das Löschen einer Sprache erfolgt über Kontext-Menü-Auswahl in List-Anzeige Sprachen. Das Löschen muss bestätigt oder abgebrochen werden. B EN UT ZERHA ND BUC H 311 Abbildung 79: Sprache löschen 7.8 Parameter-Control-Informationen In WOPiXX sind diverse Möglichkeiten zur Hinterlegung von Matchcode-Daten ohne zusätzliche Programmierung enthalten. Die hinterlegten Informationen können einfach über Schlüssel-Wort bei der Definition von Filtern, Ein-/Ausgabe-Feldern und Spalten in List-Anzeigen integriert werden. Eine dieser Möglichkeiten sind die Parameter-Control-Informationen. Die Parameter-Control-Daten können auf Anwendungsebene hinterlegt werden und auch von einer Anwendung in eine andere Anwendung kopiert werden. Die Parameter-Control-Daten werden zunächst in der Anwendungs-Objekt-Bibliothek gesucht. Wird in der Objekt-Bibliothek kein Eintrag gefunden wird geprüft, ob ein entsprechender Eintrag in der dirweb/WOPiXX-Umgebung vorhanden ist. Werden in der dirweb/WOPiXX-Umgebung entsprechende Einträge gefunden werden diese verwendet. Damit können die Parameter-Control-Daten, die in WOPiXX integriert sind, von jeder beliebigen Anwendung verwendet werden. Parameter-Control-Daten, die von WOPiXX zur Verfügung gestellt werden können auch modifiziert werden. Es ist jedoch zu beachten, dass Änderungen zum Auswirkung auf die vorhandenen WOPiXXAdministrations-Programme haben können, in denen diese Parameter-Daten verwendet werden. Zum anderen werden bei einem Produkt-Update die geänderten Parameter-Control-Daten wieder durch die Original-WOPiXX-Daten ersetzt. Um einen Datenverlust und sonstige Probleme an dieser Stelle zu vermeiden, sollten die zu modifizierenden Parameter-Control-Daten aus WOPiXX/dirweb in eine andere (jede beliebige) Anwendung kopiert und dort modifiziert werden. B EN UT ZERHA ND BUC H 312 Matchcodes, die auf Parameter-Control-Daten basieren werden im RPG-Code über Schlüssel-Wort CTL in Verbindung mit der gewünschten Kennung hinterlegt, z.B. für Kennung COUNTRY wird CTL(Country) angegeben, wobei Groß/Klein-Schreibung ignoriert werden kann. ■ Filter mit Parameter-Control-Daten Schlüssel-Wort CTL(Country) ■ Spalte mit Parameter-Control-Daten Schlüssel-Wort CTL(Country) Abbildung 80: Verwendung von Parameter-Control-Daten Das folgende Beispiel zeigt den zugehörigen Quell-Code ■ Parameter-ControlInformationen Abbildung 81: Source Code mit Parameter-Control-Informationen B EN UT ZERHA ND BUC H 313 7.8.1 List-Anzeige Parameter-Control-Daten Der Aufruf zur Wartung der Parameter-Control-Daten für eine Anwendung erfolgt entweder pro Anwendung über die Kontext-Menü-Auswahl Parameter oder direkt aus dem WOPiXX-Menü über den MenüPunkt Einstellungen Parameter verwalten. Erfolgt der Aufruf über das Kontext-Menü der Anwendung, wird die Anwendung fix übergeben und kann nicht geändert werden. Erfolgt der Aufruf aus dem WOPiXX-Menü, so können entweder die ParameterControl-Gruppen aller Anwendungen angezeigt werden, oder eine einzelne Anwendung kann über eine Combo-Box ausgewählt werden. Die folgende Abbildung zeigt den Aufruf der Parameter-Control-Daten über Kontext-Menü-Auswahl auf Anwendungsebene. Abbildung 82: Aufruf Parameter-Control-Daten über Kontext-Menü-Auswahl Nach Auswahl des Kontext-Menü-Items Parameter werden die Parameter-Control-Header, die für die ausgewählte Anwendung angelegt wurden angezeigt. B EN UT ZERHA ND BUC H 314 Abbildung 83: Auflistung der Parameter-Control-Header-Informationen Die Anwendung wird übergeben und im Header angezeigt. Die Anwendung kann weder ausgewählt noch geändert werden. Filter Parameter-Gruppe Über den Filter Parameter-Gruppe kann eine einzelne Parameter-Gruppe ausgewählt werden. Werteliste Über den Filter Werteliste können die Parameter-Gruppen nach einzelnen Werten gescannt werden. Die Suche erfolgt über eine LIKE-Anweisung und gibt alle Werte-Listen aus, in der die angeforderte Buchstaben/Zeichen-Kombination gefunden wird. Sofern % oder _ in dem zu suchenden String angegeben werden, werden sie nicht als Platzhalter behandelt, stattdessen es wird nach diesen Werten gescannt. Spalten Parameter-Gruppe B EN UT ZERHA ND BUC H 315 Auflistung der einzelnen Parameter-Gruppen in der vorgegebenen Anwendung Export Gibt an, ob die Parameter-Gruppe beim Export gesichert und später auf anderen Maschinen installiert werden darf. Import Sofern eine Anwendung exportiert werden kann, kann festgelegt werden, ob und wie die Daten installiert werden. Hinzufügen und Ersetzten Nur Hinzufügen Sortierung Gibt an ob die Parameter-Daten innerhalb der Combobox nach in einer vorgegebenen Reihenfolge (Sequenz) oder nach dem Text sortiert werden sollen. Bei der Sortierung nach Text wird auch die Mehrsprachigkeit berücksichtigt, so wird Werteliste In der Werte-Liste, werden die zur Parametergruppe zusammengefassten Detail-Werte als String aufbereitet und ausgegeben. Buttons Erstellen Bei Klick auf den Button wird eine Erfassungsmaske geöffnet über die sowohl der Parameter-Control-Header als auch der erste Satz der Detail-Informationen angelegt werden. Kontext-Menü Ändern Die Parameter-Control-Header-Informationen können geändert werden. Detail-Informationen können nur über die Auswahl Parameter-Detail geändert werden. Löschen Beim Löschen werden sowohl die Parameter-Control-Header als auch die zugehörigen Detail-Informationen gelöscht. Das Löschen der Parameter-Control-Daten muss explizit bestätigt werden. Parameter-Detail Die zur Parameter-Gruppe gehörenden Detail-Informationen werden aufgelistet und können über Kontext-Menü-Auswahl bearbeitet werden. Parameter übernehmen Parameter-Control-Informationen (Header and Detail-Informationen) können von einer Anwendung in eine andere Anwendung übernommen werden. B EN UT ZERHA ND BUC H 316 7.8.2 Parameter-Control-Header bearbeiten Über die Kontext-Menü-Auswahl Ändern können die Parameter-Control-Header-Daten bearbeitet werden. Abbildung 84: Ändern Parameter-Control-Header-Informationen Ein-/Ausgabe-Felder Anwendung Die Anwendung wird übergeben und angezeigt, kann jedoch nicht geändert werden. Parameter-Gruppe Die Parameter-Gruppe wird übergeben und kann nicht geändert werden. Eine Kurzbeschreibung der Parameter-Gruppe kann jederzeit hinzugefügt und geändert werden. Export erlaubt Gibt an, ob die Parameter-Gruppe mit allen Detail-Einträgen exportiert werden darf oder nicht. Art des Imports Sofern die Parameter-Gruppe exportiert werden kann, muss die Art des Imports angegeben werden. Die Auswahl Art des Imports wird nur angezeigt, wenn Export erlaubt ist. B EN UT ZERHA ND BUC H 317 Nicht Hinzufügen Diese Option wird automatisch gesetzt, wenn die Parameter-Gruppe nicht exportiert werden kann. Nur Hinzufügen Bei dieser Option wird die Parameter-Gruppe sowie die zugehörigen Detail-Sätze bei der Installation nicht ausgetauscht, sondern lediglich die fehlenden Informationen hinzugefügt. Hinzufügen und Ersetzen Bei dieser Option wird bei der Installation zunächst die eventuell vorhandene Parameter-Gruppe mit allen abhängigen Datensätze gelöscht und im Anschluss komplett neu übernommen. Sortierung Die Auflistung der hinterlegten Parameter-Control-Informationen kann wahlweise in einer vorgegebenen Reihenfolge (Sequenz) oder nach der Beschreibung/Text sortiert werden. Bei der Sortierung nach Beschreibung/Text wird die Mehrsprachigkeit berücksichtigt. stet. Wird dagegen mit der englischen Sprache aufgelistet. Die Art der Sortierung kann jederzeit geändert werden. Buttons Speichern Beim Klick auf den Button Speichern werden die geänderten Daten zurückgeschrieben. Abbrechen Die Verarbeitung wird abgebrochen. 7.8.3 Parameter-Control-Daten erstellen Beim Klick auf den Erstellen-Button kann sowohl eine neue Parameter-Gruppe als auch der erste DetailVerarbeitungs-Satz erstellt werden. Detail-Informationen können auch über die Auswahl Parameter-Detail und anschließendem Klick auf den Erstellen Button erfasst werden. B EN UT ZERHA ND BUC H 318 Abbildung 85: Erfassen Parameter-Control-Header und Detail-Informationen Ein-/Ausgabe-Felder Anwendung Sofern die Auswahl der List-Anzeige über das Kontext-Menü der Anwendung erfolgt, wird die Anwendung übergeben und kann nicht geändert werden. Sofern die List-Anzeige direkt über das WOPiXX-Menü (WOPiXX Einstellungen Parameter verwalten, kann die Anwendung nicht übergeben werden, d.h. die Anwendung muss beim Erfassen der Parameter-Control-Daten angegeben werden. Parameter-Gruppe Sofern die Auswahl der List-Anzeige über das Kontext-Menü der Anwendung oder direkt aus dem WOPiXX-Menü heraus erfolgt, kann die Parameter-Gruppe erfasst werden. Sofern es sich um eine neue Parameter-Gruppe handelt wird diese angelegt. Erfolgt der Aufruf über Kontext-Menü aus der Detail-Anzeige der Parameter, ist die Parameter-Gruppe bekannt, wird vorgegeben und kann nicht geändert werden. Beschreibung Parameter-Gruppe Die Beschreibung der Parameter-Gruppe kann jederzeit, unabhängig davon, ob die Parameter-Gruppe angegeben bzw. geändert werden kann, geändert werden. Die geänderte Beschreibung wird im Parameter-Control-Satz aktualisiert. B EN UT ZERHA ND BUC H 319 Typ Wert Abweichende Daten Sofern von den anzuzeigenden Werten abweichende Werte in die Tabellen geschrie-Werte an dieser Stelle hinterlegt werden, z.B. der Status in der Datei ist 01, in der Combowerden. Nachrichten-Id Zusätzlich zu dem Wert kann eine Beschreibung angegeben werden. Anzeige-Wert der Parameter-Control-Daten Die Angabe eines Wertes ist zwingend erforderlich Die Beschreibung kann entweder in Form einer Message-Id oder, sofern nicht mit Mehrsprachigkeit gearbeitet wird direkt als Text hinterlegt werden. Wird eine Message-Id angegeben, so wird die Beschreibung zur Laufzeit aus der sprachenabhängigen Message-File der Anwendung ermittelt. Sofern für die Sortierung Text ausgewählt wurde, werden die Daten in der Combo-Box zur Laufzeit basierend auf den aus der Nachrichten-Datei ermittelten Beschreibungen sortiert ausgegeben. Symbol Sortierung Die Sortierung kann wahlweise nach der vorgegebenen Sequenz oder nach der Beschreibung erfolgen. Die Art der Sortierung wird nur angezeigt und kann für einen Detail-Satz nicht geändert werden. Sofern eine Änderung der Sortierreihenfolge erforderlich ist, muss die über die Parameter-Gruppe erfolgen (Ändern Parameter-Gruppe) Sequenz Export erlaubt Gibt an ob die Parameter-Control-Daten exportiert werden können Art des Imports Gibt an, ob und wie die Parameter-Control-Daten importiert werden können Nicht importieren Wenn Export nicht erlaubt ist, kann auch kein Import erfolgen Für jeden Kontext-Menü-Punkt kann ein Icon hinterlegt werden. Reihenfolge in der die Combo-Box-Einträge angezeigt werden. Die Reihenfolge kann beliebig, unabhängig von Wert und Beschreibung festgelegt werden. Hinzufügen Hinzufügen und Ersetzten Beim Update werden nur neue Einträge hinzugefügt B EN UT ZERHA ND BUC H 320 Beim Update werden die Parameter-Control-Daten ersetzt 7.8.4 Parameter-Control-Daten löschen Beim Löschen der Parameter-Control-Daten werden sowohl die Parameter-Control-Gruppen, als auch die zugehörigen Detail-Informationen (Parameter-Control-Sätze) gelöscht. Das Löschen muss explizit bestätigt werden. Abbildung 86: Löschen Parameter-Control-Gruppe 7.8.5 Parameter-Control-Detail-Informationen Aus der List-Anzeige für Parameter-Control-Gruppen können über die Kontext-Menü-Auswahl Parameter-Detail die Parameter-Control-Daten für die ausgewählte Parameter-Gruppe angezeigt und bearbeitet werden. Die folgende Abbildung zeigt, wie die Parameter-Control-Detail-Informationen aufgerufen werden. B EN UT ZERHA ND BUC H 321 Abbildung 87: Aufruf List-Anzeige Parameter-Control-Detail-Informationen Nach Auswahl des Kontext-Menü-Items Parameter Detail werden die Parameter-Control-Informationen, die für die ausgewählte Anwendung und Parameter-Gruppe hinterlegt sind angezeigt. Abbildung 88: Listanzeige - Parameter-Control-Daten Detail B EN UT ZERHA ND BUC H 322 Header-Informationen Informationen über die Parameter-Gruppe werden im Header angezeigt und können nicht geändert oder ausgewählt werden. Anwendung Anwendung für die die Parameter-Gruppe angelegt wurde Gruppe Name der Parameter-Gruppe Export Export der Parameter-Gruppe zulässig Import Art des Imports, sofern Export der Parameter-Gruppe zulässig ist Sortierung Art der Sortierung, entweder in vorgegebener Reihenfolge oder nach Beschreibung Sofern die Details für eine andere Parameter-Gruppe angezeigt werden sollen, muss das Fenster geschlossen und erneut Parameter-Details für die gewünschte Parameter-Gruppe ausgewählt werden. Spalten Gruppe Parameter-Gruppe für alle Einträge identisch Beschreibung Beschreibung, die in der Combo-Box angezeigt wird Angezeigte Werte Werte, die in der Combo-Box zur Auswahl angezeigt werden Werte in Datei Sofern abweichende Werte angegeben wurden, werden diese abweichenden Werte angezeigt. Sofern keine abweichenden Werte angegeben wurden, werden die (angezeigten) Werte angezeigt. Icon Buttons Erstellen Sofern ein Icon angezeigt werden soll, wird der relative Pfad, unter dem das Icon hinterlegt ist angezeigt. Erfassen eines neuen Parameter-Control-Detail-Satzes Resequenzierung Der Button Resequenzierung ist bei Aufruf des Programms zunächst ausgegraut. Die Reihenfolge in der die Parameter-Control-Detail-Sätze in der Combobox angezeigt werden, kann in dieser List-Anzeige durch drag und drop verändert werden. Sobald die Reihenfolge geändert wurde, wird der Button Resequenzierung aktiviert. Beim anschießenden Klick auf den Button wird die neue Reihenfolge (Sequenz) der Parameter-Control-Detail-Sätze gespeichert. Anmerkung: Die Reihenfolge, in der die Parameter-Control-Detail-Sätze angeordnet sind, wird bei der Anzeige der Combobox nur berücksichtigt, B EN UT ZERHA ND BUC H 323 wenn die Sortierung nach Sequenz für die Parameter-Gruppe angegeben wurde. Kontext-Menü-Auswahl Ändern Änderung eines Parameter-Control-Detail-Satzes Löschen Löschen eines Parameter-Control-Detail-Satzes Eigenschaften Anzeige eines Parameter-Control-Detail-Satzes 7.8.5.1 Parameter-Control-Details erstellen Beim Klick auf den Erstellen-Button kann ein neuer Parameter-Control-Detail-Satz erfasst werden. Die Parameter-Gruppe, sowie die Parameter-Gruppen-Informationen, wie Anwendung, Parameter-Gruppe, Export etc. werden nur angezeigt und können nicht geändert werden. Abbildung 89: Erfassen Parameter-Control-Detail-Informationen Ein-/Ausgabe-Felder B EN UT ZERHA ND BUC H 324 Anwendung Wird durch die Auswahl fest vorgegeben und kann nicht geändert werden. Parameter-Gruppe Wird durch die Auswahl fest vorgegeben und kann nicht geändert werden. Beschreibung Parameter-Gruppe Sofern für die Parameter-Gruppe keine Beschreibung hinterlegt wurde, kann sie jederzeit beim Erfassen oder Ändern von Parameter-Control-Sätzen erfasst werden. Sofern bereits eine Beschreibung hinterlegt wurde, kann sie weder beim Erfassen noch Ändern von Parameter-Control-Sätzen geändert werden. Typ Wert Abweichende Daten Sofern von den anzuzeigenden Werten abweichende Werte in die Tabellen geschrie-Werte an dieser Stelle hinterlegt werden, z.B. der Status in der Datei ist 01, in der Combowerden. Nachrichten-Id Zusätzlich zu dem Wert kann eine Beschreibung angegeben werden. Anzeige-Wert der Parameter-Control-Daten Die Angabe eines Wertes ist zwingend erforderlich Die Beschreibung kann entweder in Form einer Message-Id oder, sofern nicht mit Mehrsprachigkeit gearbeitet wird direkt als Text hinterlegt werden. Wird eine Message-Id angegeben, so wird die Beschreibung zur Laufzeit aus der sprachenabhängigen Message-File der Anwendung ermittelt. Sofern für die Sortierung Text ausgewählt wurde, werden die Daten in der Combo-Box zur Laufzeit basierend auf den aus der Nachrichten-Datei ermittelten Beschreibungen sortiert ausgegeben. Symbol Sortierung Die Sortierung kann wahlweise nach der vorgegebenen Sequenz oder nach der Beschreibung erfolgen. Wird durch die Parameter-Gruppe fest vorgegeben und kann nicht geändert werden. Sequenz Für jeden Kontext-Menü-Punkt kann ein Icon hinterlegt werden. Reihenfolge in der die Combo-Box-Einträge angezeigt werden. Die Reihenfolge kann beliebig, unabhängig von Wert und Beschreibung festgelegt werden. Eine Sequenz kann nur erfasst werden, wenn die Sortierung nach Sequenz erfolgt. Bei einer anderen Sortierung ist die Sequenz weder sichtbar, noch kann sie erfasst oder geändert werden. B EN UT ZERHA ND BUC H 325 Export erlaubt Gibt an ob die Parameter-Control-Daten exportiert werden können Das Export-Kennzeichen ist durch die Parameter-Gruppe vorgegeben und kann nicht geändert werden. Art des Imports Gibt an, ob und wie die Parameter-Control-Daten importiert werden können Nicht importieren Wenn Export nicht erlaubt ist, kann auch kein Import erfolgen Hinzufügen Hinzufügen und Ersetzten Beim Update werden nur neue Einträge hinzugefügt Beim Update werden die Parameter-Control-Daten ersetzt Die Art des Imports ist durch die Parameter-Gruppe vorgegeben und kann nicht geändert werden. 7.8.5.2 Parameter-Control-Details ändern/anzeigen Über Kontext-Menü-Auswahl in List-Anzeige Parameter-Control-Detail-Informationen können die erfassten Parameter- Control-Detail-Informationen angezeigt (Eigenschaften) oder bearbeitet werden (Ändern). Abbildung 90: Anzeigen / Ändern Parameter-Control-Detail-Informationen B EN UT ZERHA ND BUC H 326 7.8.5.3 Parameter-Control-Details löschen Bei Kontext-Menü-Auswahl Löschen aus den Parameter-Control-Detail-List-Anzeige, wird jeweils nur der ausgewählte Detail-Satz gelöscht. Sofern der letzte Detail-Satz einer Parameter-Gruppe gelöscht wird, wird auch die zugehörige Parameter Gruppe gelöscht. Das Löschen muss explizit bestätigt werden. Abbildung 91: Löschen Parameter-Control-Detail-Informationen 7.9 Parameter übernehmen Die Auswahl Parameter übernehmen kann an mehreren Stellen aufgerufen werden: WOPiXX Anwendung Kontext-Menü: Parameter übernehmen WOPiXX Anwendung Kontext-Menü: Parameter Kontext-Menü: Parameter übernehmen WOPiXX Einstellungen Parameter verwalten Kontext-Menü: Parameter übernehmen Über die Auswahl Parameter übernehmen kann wahlweise eine einzelne Parameter-Gruppe oder alle Parameter-Gruppen von einer Anwendung in eine andere kopiert werden. Des Weiteren ist es möglich eine Parameter-Gruppe innerhalb der Anwendung mit einem neuen Namen zu kopieren. Vorhandene Parameter-Gruppen werden nur überschrieben, wenn Ersetzten Ja/Nein explizit angegeben wurde. B EN UT ZERHA ND BUC H 327 Anmerkung: Parameter-Gruppen in der dirweb/WOPiXX-Anwendung dürfen/können nicht überschrieben werden! Bei der Übernahme werden sowohl die Parameter-Gruppen als auch die zugehörigen ParameterControl-Detail-Informationen kopiert. Abbildung 92: Parameter-Gruppe übernehmen Ein-/Ausgabe-Felder Von Parameter-Gruppe Anwendung Anwendung aus der die gewünschte Parameter-Gruppe oder alle Parameter-Gruppen kopiert werden sollen. Matchcode-Auswahl erfolgt über die SQL-Abfragen DWAPP Nach Parameter-Gruppe Anwendung .Anwendung in die die Parameter-Gruppe oder alle Parameter-Gruppen übernommen werden soll. Sofern einzelne Parameter-Gruppen kopiert werden sollen, kann die Kopie innerhalb der gleichen Anwendung erzeugt werden. In diesem Fall muss für die neue ParameterGruppe ein anderer Name verwendet werden. Matchcode-Auswahl erfolgt über die SQL-Abfragen DWAPP Von Parameter-Gruppe Parameter-Gruppe in der ausgewählten Anwendung, die kopiert werden soll. Matchcode-Auswahl erfolgt über die SQL-Abfrage DWPRMCTL Nach Parameter-Gruppe Name der neuen Parameter-Gruppe Beim Kopieren in eine andere Anwendungen kann der für die kopierte Parameter- B EN UT ZERHA ND BUC H 328 Gruppe der gleiche Name den auch die Original-Parameter-Gruppe hatte verwendet werden. Sollen alle Parameter-Gruppen kopiert werden, kann der Sonderwert *ALL angegeben werden Matchcode-Auswahl erfolgt über die SQL-Abfrage DWPRMCTL. Ersetzten Ja/Nein Vorhandene Parameter-Gruppen werden nur ersetzt, wenn Ersetzten Ja/Nein explizit angegeben wurde. Anmerkung: Parameter-Gruppen in den WOPiXX-Anwendungen werden auch dann nicht überschrieben, wenn explizit Ersetzten Ja/Nein angegeben wurde. Stattdessen wird eine entsprechende Fehlermeldung ausgegeben. 7.10 SQL-Abfrage In WOPiXX sind diverse Möglichkeiten zur Hinterlegung von Matchcode-Daten ohne zusätzliche Programmierung enthalten. Die hinterlegten Informationen können einfach über Schlüssel-Wort bei der Definition von Filtern, Ein-/Ausgabe-Feldern und Spalten in List-Anzeigen integriert werden. Eine dieser Möglichkeiten sind die SQL-Abfragen, d.h. die Matchcodes werden als SQL-SelectStatements hinterlegt. Die anzuzeigenden Spalten werden basierend auf dem SQL-Statement ermittelt. Eine Nachbearbeitung der Spalten ist möglich. So können z.B. für die Spalten zusätzlich Filter integriert oder Aufbereitungsoptionen angegeben werden. Die SQL-Abfragen können auf Anwendungsebene hinterlegt werden, aber auch von einer Anwendung in eine andere Anwendung kopiert werden. Die SQL-Abfragen werden zur Laufzeit zunächst in der Anwendungs-Objekt-Bibliothek gesucht. Wird in der Objekt-Bibliothek kein Eintrag gefunden wird geprüft, ob ein entsprechender Eintrag in der dirweb/WOPiXX-Umgebung vorhanden ist. Werden in der dirweb/WOPiXX-Umgebung entsprechende Einträge gefunden werden diese verwendet. Damit können die SQL-Abfragen, die in WOPiXX integriert sind, von jeder beliebigen Anwendung verwendet werden. SQL-Abfragen, die von WOPiXX zur Verfügung gestellt werden können auch modifiziert werden. Es ist jedoch zu beachten, dass Änderungen zum Auswirkung auf die vorhandenen WOPiXX-AdministrationsProgramme haben können, in denen die Abfragen verwendet werden. Zum anderen werden bei einem Produkt-Update die geänderten SQL-Abfragen wieder durch die Original-WOPiXX-Abfragen ersetzt werden. Um einen Datenverlust und sonstige Probleme an dieser Stelle zu vermeiden, sollten die zu modifizierenden SQL-Abfragen aus WOPiXX/dirweb in eine andere (jede beliebige) Anwendung kopiert und dort modifiziert werden. B EN UT ZERHA ND BUC H 329 Anmerkung: Sofern in WOPiXX integrierte Abfragen modifiziert werden sollen, sollte diese Anpassung nicht an den Original-WOPiXX-Abfragen erfolgen. Vielmehr sollten die gewünschte WOPiXX-Abfrage in eine Anwendung übernommen und dort modifiziert werden. Matchcodes, die auf SQL-Abfragen basieren werden im RPG-Code über Schlüssel-Wort ExecSQL in Verbindung mit der gewünschten Kennung hinterlegt, z.B. für Kennung DWAPP wird ExecSQL(DWAPP) angegeben, wobei Groß/Klein-Schreibung ignoriert werden kann. ■ SQL-Abfrage hinterlegt ■ Anzeige SQL-Abfrage nach Klick auf Abbildung 93: Verwendung von SQL-Abfragen Das folgende Beispiel zeigt den zugehörigen Source Code B EN UT ZERHA ND BUC H 330 ■ SQL-Abfragen Abbildung 94: Source-Code: Einbindung von SQL-Abfragen 7.10.1 List-Anzeige SQL-Abfragen Der Aufruf zur Wartung der SQL-Abfragen-Daten für eine Anwendung erfolgt entweder pro Anwendung über die Kontext-Menü-Auswahl SQL-Abfrage oder direkt aus dem WOPiXX-Menü über den MenüPunkt Einstellungen Abfrage verwalten. Erfolgt der Aufruf über das Kontext-Menü der Anwendung, wird die Anwendung fix übergeben und kann nicht geändert werden. Erfolgt der Aufruf aus dem WOPiXX-Menü, so können entweder die SQLAbfragen aller Anwendungen angezeigt werden, oder eine einzelne Anwendung kann über eine ComboBox ausgewählt werden. Die folgende Abbildung zeigt den Aufruf der SQL-Abfragen über Kontext-Menü-Auswahl auf Anwendungsebene. B EN UT ZERHA ND BUC H 331 Abbildung 95: : Aufruf SQL-Abfragen über Kontext-Menü-Auswahl Nach Auswahl des Kontext-Menü-Items SQL-Abfrage werden die SQL-Abfragen, die für die ausgewählte Anwendung erstellt wurden angezeigt. B EN UT ZERHA ND BUC H 332 Abbildung 96: List-Anzeige SQL-Abfragen Die Anwendung wird übergeben und im Header angezeigt. Die Anwendung kann weder ausgewählt noch geändert werden. Filter Anwendung Der Filter Anwendung wird nur angezeigt, wenn der Aufruf direkt aus dem WOPiXXMenü erfolgt. Beim Aufruf auf Anwendungsebene wird die Anwendung übergeben und im Header angezeigt. Eine Änderung der Anwendung oder die Anzeige aller SQL-Abfragen für alle Anwendungen ist bei diesem Aufruf nicht möglich. SQL Abfrage Über den Filter SQL-Abfrage kann nach einer oder mehreren Abfragen gesucht werden. Die Spalte SQL-Abfrage wird über eine LIKE-Anweisung durchsucht. Spalten Anwendung B EN UT ZERHA ND BUC H 333 Die Spalte Anwendung wird nur angezeigt, wenn der Aufruf direkt aus dem WOPiXXMenü erfolgt, da bei diesem Aufruf die Anwendung ausgewählt oder die Anzeige der SQL-Abfragen aller Anwendungen möglich ist. SQL-Abfrage Name der SQL-Abfrage Der Name der SQL-Abfrage muss innerhalb der Anwendung eindeutig sein. Der Name der SQL-Abfrage wird bei der Verwendung im RPG-Programm in Verbindung mit dem Schlüssel-Wort ExecSQL(NameSQLAbfrage) angegeben. Beschreibung Kurz-Beschreibung der SQL-Abfrage Nachrichten-Nr. In mehrsprachigen Umgebungen kann anstatt der Kurz-Beschreibung auch eine Message-Id, hinter der sich die Kurzbeschreibung verbirgt angegeben werden. Anzahl Spalten Gibt die Anzahl der Spalten, die in dem SQL-Statement hinterlegt sind und im Matchcode angezeigt werden. Export Gibt an, ob die SQL-Abfrage exportiert werden darf, oder nur zu Test-Zwecken angelegt wurde. Import Gibt an, ob und wie eine exportierte SQL-Abfrage importiert werden darf. Nicht hinzufügen Nur hinzufügen Hinzufügen und ersetzen. Beispiel Beim Klick auf den Beispiel-Button wird das Ergebnis SQL-Abfrage wie zur Laufzeit aufbereitet und angezeigt. Abbildung 97: Auswahl - Beispiel Buttons Erstellen Erstellen einer neuen SQL-Abfrage Kontext-Menü Ändern Ändern einer vorhandenen Abfrage Löschen Löschen einer vorhandenen Abfrage incl. aller abhängigen Informationen (SpaltenInformationen, Berechtigungen) Das Löschen muss explizit bestätigt werden. B EN UT ZERHA ND BUC H 334 Eigenschaften Zeigt die Header-Informationen für die ausgewählte SQL-Abfrage an. Spalten Berechtigungen Listet Detail-Informationen über die berechtigten Benutzer auf. Über Kontext-Menü-Auswahl können weitere Benutzer berechtigt werden, oder die Berechtigungen der eingetragenen Benutzer geändert werden. SQL-Abfrage umbenennen Der Name der ausgewählten SQL-Abfrage kann geändert werden. Auch der neue Name muss innerhalb der Anwendung eindeutig sein. SQL-Abfrage übernehmen Eine vorhandene SQL-Abfrage kann entweder aus einer anderen Anwendung übernommen werden, oder innerhalb der gleichen Anwendung kopiert werden. Listet Detail-Informationen über die einzelnen Spalten, die im Matchcode angezeigt werden sollen auf. Über Kontext-Menü-Auswahl ist dann eine Nachbearbeitung der Spalten möglich. 7.10.2 SQL-Abfrage Erstellen Nach dem Klick auf den Erstellen-Button kann eine neue SQL-Abfrage erstellt werden. Basis für die Matchcodes über SQL-Abfragen, sind SQL-SELECT-Statement, die eine Spalte mit einem eindeutigen Schlüssel haben. Dieser eindeutige Schlüssel wird als Haupt-Schlüssel-Spalte definiert und bei Doppelklick ausgegeben. Das eindeutige Schlüssel-Feld sollte als erste Spalte im SELECTStatement definiert sein. Ansonsten kann/darf das SELECT-Statement alles (außer Common Table Expressions) beinhalten, was für das aktuelle IBM i Release unterstützt wird. Beim Speichern der neuen SQL-Abfrage werden für die ausgewählten Spalten Detail-Informationen generiert, die über Kontext-Menü-Auswahl Spalten nachbearbeitet werden können. So können z.B. die Überschriften geändert oder Filter hinzugefügt werden. Die erste Spalte wird automatisch als Hauptschlüssel-Feld deklariert. Neben den Spalten-Informationen werden auch automatisch die Berechtigungen für die SQL-Abfrage erstellt. Per Default wird das Benutzer-Profil QSECOFR, sowie das aktuelle Benutzer-Profil mit allen Rechten ausgestattet. *PUBLIC hat nur die Berechtigung zur Verwendung und Anzeige der Daten. Die Benutzer-Berechtigungen können über Kontext-Menü-Auswahl angezeigt und nachbearbeitet werden. Sofern keine Nachbearbeitung gewünscht ist, kann die SQL-Abfrage direkt nach dem Sichern in Programme eingebunden werden. Die folgende Abbildung zeigt den Erfassungs-Bildschirm für SQL-Abfragen beim Aufruf aus der Auflistung der SQL-Abfragen auf der Anwendungsebene. B EN UT ZERHA ND BUC H 335 Abbildung 98: Erfassen SQL-Abfragen Ein-/Ausgabe-Felder Anwendung Erfolgt der Aufruf auf Anwendungsebene, wird die Anwendung übergeben und angezeigt, kann jedoch nicht geändert werden. Sofern der Aufruf über WOPiXX Einstellungen Abfragen verwalten Button erstellen erfolgt, muss eine gültige Anwendung angegeben werden. Eine gültige Anwendung kann über Matchcode/SQL-Abfrage DWAPP angezeigt und ausgewählt werden. SQL-Abfrage Für jede SQL-Abfrage muss ein innerhalb der Anwendung eindeutiger Name vergeben werden. Im Änderungs-Modus kann der eindeutige Name nicht geändert werden. Sofern die SQL-Abfrage umbenannt werden muss, muss dies über die Kontext-MenüAuswahl Abfrage umbenennen erfolgen. Beschreibung Kurzbeschreibung der SQL-Abfrage Message-Id für Text Sofern mit Mehrsprachigkeit gearbeitet wird kann anstatt der Kurzbeschreibung eine B EN UT ZERHA ND BUC H 336 Message-Id, die in der Message-File in der Objekt-Bibliothek hinterlegt ist angegeben werden. Zuerst Filter erfassen Sofern die SQL-Statements auf große Tabellen zugreifen, oder die anzuzeigenden Daten zuerst über Filter-Auswahl eingeschränkt werden sollen, kann die Option Zuerst Filter erfassen angegeben werden. SQL-Befehl SELECT SQL-Select-Befehl, der in der Matchcode-Anzeige verwendet werden soll. Das SELECT-Statement kann (fast) alles beinhalten, was in einem SELECT-Statement möglich ist. Common Table Expressions werden aktuell nicht direkt unterstützt. SubSelects in der From-Anweisung sind dagegen erlaubt. Zeilenumbruchzeichen werden entfernt, aus diesem Grund muss entweder vor oder nach dem Zeichenumbruch muss ein Blank angegeben werden. Sofern eine ORDER BY-Anweisung angegeben wurde, wird diese entfernt. Das SQL-Statement muss direkt eingegeben oder kopiert werden, eine Bedienerführung ist an dieser Stelle nicht vorgesehen. Vor dem Sichern wird das SQL-Select-Statement geprüft und nur gültige SELECTStatements (ohne Common Table Expressions) akzeptiert. Im Fehlerfall wird die gleiche Fehlermeldung, die auch im STRSQL oder IBM i Navigator angezeigt wird, ausgegeben. Achtung: Die erste oder letzte Spalte muss einen eindeutigen Schlüssel-Wert, der bei Auswahl zurückgegeben wird beinhalten. Werden neue Spalten generiert (z.B. Menge * Preis) muss diese Spalte einen Namen (z.B. as Gesamt) erhalten. Alphanumerische Spalten werden nur bis zu einer Länge von 999 Zeichen unterstützt. Ggf. muss eine größere Spalte explizit gecastet werden (z.B. VarChar(MyLongText, 999) oder Cast(MyLongText as VarChar(999)) aktuell nicht unterstützt. Sub-Selects in der FROM-Anweisung sind dagegen erlaubt. Darstellung als Combo-Box Die Darstellung der Matchcode-Auswahl kann in einem der folgenden Formate erfolgen: Normales Eingabe-Feld B EN UT ZERHA ND BUC H 337 Abbildung 99: SQL-Abfrage als normales Eingabe-Feld Combobox mit Werte Liste Abbildung 100: SQL-Abfrage als Combo-Box mit Werte-Liste Export erlaubt Gibt an, ob die SQL-Abfrage mit allen Spalten-Informationen und Berechtigungen exportiert werden darf oder nicht. Unter Export versteht man das isolierte Bereitstellen der Anwendung mit allen Komponenten zur Installation auf einem anderen System oder zur Bereitstellung im WOPiXX-App-Store. Abfragen, die für den Export nicht erlaubt sind, werden in der exportierten Anwendung nicht ausgeliefert; auf diese Weise können Testabfragen oder ungetestete Abfragen von einer Auslieferung ausgeschlossen werden. Art des Imports Sofern die SQL-Abfrage exportiert werden kann, muss die Art des Imports angegeben werden. Die Auswahl Art des Imports wird nur angezeigt, wenn Export erlaubt ist. B EN UT ZERHA ND BUC H 338 7.10.3 SQL-Abfragen Ändern/Anzeigen Über die Kontext-Menü-Auswahlen Eigenschaften und Ändern können die SQL-Abfragen geändert werden. Anwendung und der Name der SQL-Abfrage können im Änderungsmodus nicht (mehr) geändert werden. Im Bedarfsfall kann jedoch die Anwendung umbenannt werden oder in eine andere Anwendung kopiert werden. Das SQL-Statement kann jederzeit geändert werden. Beim Sichern wird geprüft ob die einzelnen Spalten bereits in der vorherigen Version der SQL-Abfrage vorhanden waren. Bereits angelegte Spalten werden mit allen hinterlegten Bearbeitungskriterien übernommen, neue Spalten werden generiert und nicht mehr benötigte Spalten entfernt. Die Spalten werden in der Reihenfolge, wie sie im SQLStatement angegeben wurden angelegt. Die folgende Abbildung zeigt die SQL-Abfrage im Anzeige und Änderungsmodus. ■ Klick auf Anzeige Matchcode B EN UT ZERHA ND BUC H 339 Abbildung 101: Anzeigen / Ändern SQL-Abfragen Im Änderungs- und Anzeige-Modus kann über Klick auf den Beispiel-Button die Matchcode-Abfrage, wie sie nach dem Einbinden ins Programm dargestellt wird, angezeigt werden. Des weiteren werden im Änderungs- bzw. Anzeige-Modus gegenüber der Erfassungsmaske noch zwei zusätzliche Buttons bereitgestellt, über die zum einen die zum SQL-Statement gehörenden Spalten und zum anderen die zugeordneten Berechtigungen angezeigt und bearbeitet werden können. Zusätzliche Ein-/Ausgabe-Felder Beispiel Bei diesem Feld handelt es sich um kein Eingabe-Feld. Beim Klick den kleinen Button wird die Abfrage, wie sie später auch in den Programmen angezeigt wird ausgegeben. Bei Combo-Boxen wird die Combo-Box dargestellt. Eine Auswahl von Werten ist an dieser Stelle jedoch nicht möglich. Zusätzliche Buttons Spalten Beim Klick auf den Button wird in die List-Anzeige der über das SQL-Statement definierten Spalten verzweigt. Die Bearbeitung kann dann direkt aus der List-Anzeige (über Kontext-Menü-Auswahl)l erfolgen. Berechtigungen Beim Klick auf den Buttonwird in die List-Anzeige der für das SQL-Select-Statement vergebenen Berechtigungen verzweigt. Die Bearbeitung der Berechtigungen kann direkt aus der List-Anzeige (über KontextMenü-Auswahl) erfolgen. 7.10.4 SQL-Abfragen Löschen Beim Löschen der SQL-Abfragen, werden alle zugehörigen Informationen wie Spalten und Berechtigungen gelöscht. Das Löschen von SQL-Abfragen muss explizit bestätigt werden. B EN UT ZERHA ND BUC H 340 Abbildung 102: Bestätigen - Löschen SQL-Abfrage 7.10.5 SQL-Abfragen Spalten List-Anzeige Beim Erstellen oder Ändern werden basierend auf dem SELECT-Statement die neuen bzw. ausgewählten Spalten mit Default-Werten angelegt. Im Änderungsmodus werden die vorhandenen Spalten übernommen bzw. sofern sich z.B. nur die Spalten-Größe ändert angepasst. Die erste Spalte wird dabei immer als Haupt-Schlüssel-Feld angelegt. Die zu dem SELECT-Statement gehörenden Spalten werden inklusive der Überschrift, den Datentypen und Längenangaben, sowie einigen weiteren Eigenschaften aufgelistet. Über Kontext-Menü-Auswahl können die einzelnen Spalten nachbearbeitet werden. Die folgende Abbildung zeigt die Spalten-Definition für die Abfrage TESTSUBS in Anwendung WXEXAMPLES B EN UT ZERHA ND BUC H 341 Abbildung 103: List-Anzeige - Spalten für SQL-Abfrage Header-Informationen Anwendung Anwendung sowie die Kurzbeschreibung der Anwendung in der die SQL-Abfrage hinterlegt ist. SQL-Abfrage Der innerhalb der Anwendung eindeutige Name der SQL-Abfrage Select-Statement SQL-Statement auf dem die Abfrage basiert Export Import Spalten Folge Spalte Gibt an, ob die Abfrage exportiert werden kann Gibt die Art des Imports an, sofern die Abfrage exportiert werden kann Wird nur angezeigt, wenn Export erlaubt. Gibt die Reihenfolge der Spalten, wie sie im SELECT-Statement hinterlegt wurden an. Spalten-Name Entspricht dem System-Spalten-Name oder dem im SELECT-Statement festgelegten Spalten-Name Beschreibung Gibt die Spalten-Überschrift an Wurde die Spalte automatisch generiert, so entspricht die Überschrift dem SpaltenNamen. B EN UT ZERHA ND BUC H 342 Nachrichten-Nr. In mehrsprachigen Umgebungen kann anstatt der Überschrift eine Message-Id hinterlegt werden. Datentyp Datentyp der Spalte Länge Länge der Daten bei numerischen und alphanumerischen Spalten Dezimal-Positionen Anzahl der Dezimal-Positionen bei numerischen Feldern Filter Schlüssel-Feld Kennzeichnet die Spalte, die den eindeutigen Schlüssel-Wert enthält. Trefferliste Gibt an, ob die Spalten-Werte über Filter selektiert werden können. Kontext-Menü und Buttons Ändern Nachbearbeitung der Spalten Eigenschaften Anzeige der detaillierten Spalten-Informationen Die angelegten Spalten können nur bearbeitet oder angezeigt werden. Es können jedoch weder Spalten gelöscht, noch zusätzlichen Spalten generiert werden. Anmerkung: Hinzufügen oder Entfernen von Spalten ist nur durch die Änderung des SELECT-Statements möglich 7.10.5.1 SQL-Abfragen Spalten bearbeiten Über Kontext-Menü-Auswahl können die Detail-Informationen für die einzelnen Spalten bearbeitet werden. In der Ausgabe werden zunächst die folgenden Informationen angezeigt, die nicht geändert werden können: Anwendung SQL-Abfrage Der innerhalb der Anwendung eindeutige Name der SQL-Abfrage Select-Statement SELECT-Statement auf der die Abfrage basiert Sequenz Spalte Position der Spalten (in 10-er Schritten) Name der Spalte B EN UT ZERHA ND BUC H 343 Datentyp Länge Dezimal-Positionen Anzahl der Dezimal-Positionen (Anzeige erfolgt nur für numerische Spalten) Datentyp der Spalte Länge (Anzeige erfolgt abhängig davon, ob eine Länge angegeben wurde, bzw. ob für den Datentypen eine Längenangabe erforderlich ist. Die zu bearbeitenden Detail-Informationen werden in 3 Blöcke gruppiert, die in der Anzeige unter den folgenden Reitern angeordnet sind: Allgemein Ausgabe Suche Allgemeine Informationen wie Beschreibung, Schlüssel und Sortierung Aufbereitung, z.B. Ausrichtung Hinzufügen und bearbeiten von Filter-Feldern Die folgende Abbildung zeigt die allgemeinen Detail-Informationen: ■ SQL-Abfrage Ändern Spalten ■ Reiter: Allgemein Abbildung 104: SQL-Abfragen - Ändern Spalten - Reiter Allgemein Ein-/Ausgabe-Felder Beschreibung Spalten-Überschrift in der Matchcode-Ausgabe Message-Id für Text B EN UT ZERHA ND BUC H 344 Anstatt einer Überschrift kann in mehrsprachigen Umgebungen auch eine Message-Id hinterlegt werden. Hauptschlüssel-Feld Kennzeichnet die Spalte mit dem eindeutigen Key. Bei Auswahl werden diese Informationen zurückgegeben. Standard-Sortierfeld Sofern keine vorhergehende Sortierung der Daten vorhanden ist, wird die Ausgabe nach dieser Spalte sortiert. Standard-Sortierfolge absteigend Auswahl kann nur erfolgen, wenn Standard-Sortierfeld ausgewählt wurde. Sortieren erlauben Die Spalte darf nach Klick auf die Überschrift aufsteigend/absteigend sortiert werden. Die folgende Abbildung zeigt die Detail-Informationen, die unter dem Reiter Ausgabe bearbeitet werden kann. Abhängig vom Datentypen der Spalte werden unterschiedliche Ein-/Ausgabe-Felder angezeigt. ■ SQL-Abfrage Ändern Spalten ■ Reiter: Ausgabe ■ Unterscheidliche Auswahl-Möglichkeiten abh. vom Datentypen Abbildung 105: SQL-Abfragen - Ändern Spalten - Reiter Ausgabe B EN UT ZERHA ND BUC H 345 Ein-/Ausgabe-Felder In Liste anzeigen Spalte wird nicht angezeigt (hidden) Groß/Kleinschreibung Wird nur bei alphanumerischen Spalten angezeigt Aufbereitung der Texte in Großbuchstaben oder Kleinbuchstaben oder unverändert CCSID der Spalte Bei alphanumerischen Spalten kann die CCSID angegeben werden Spezielle Anzeige als: Diverse Aufbereitungsoptionen, z.B. CheckBox, Telefon-Nr., E-Mail-Adresse. Die Funktion dieser Aufbereitung bewirkt, dass bei Checkbox = Das Feld wird als Checkbox(Häkchen) dargestellt, wenn der Inhalt ein Y(es) oder O(ui) oder J(a) oder 1 ist. Telefonnummer = Die Nr. wird als Link (klickbar) angezeigt. Wird darauf geklickt, wird die Nummer mit dem Programm gewählt, das im Benutzerprofil eingestellt ist. www-Adresse = Der Feldinhalt ist eine Webseite und wird als Link (klickbar) angezeigt. Wird darauf geklickt, wird ein weiteres Browser-Fenster gestartet. E-Mail-Adresse = Der Feldinhalt wird als Link (klickbar) angezeigt. Wird darauf geklickt, wird mit mailto: der E-Mail-Client des Benutzers gestartet. Mobiltelefon = Die Telefon-Nr. wird als Link (klickbar) angezeigt. Wird darauf geklickt, wird die Nummer mit dem Programm gewählt, das im Benutzerprofil eingestellt ist. Die folgende Abbildung zeigt die Detail-Informationen, die unter dem Reiter Suche bearbeitet werden können. Über diese Optionen können für die einzelnen Spalten Filter-Felder hinterlegt werden. Dies ist ender kann das Ergebnis wird von vornherein einschränken. Mit den richtigen Zugriffswegen (Indices / logische Dateien) sollte dann auch der Zugriff auf große Tabellen sehr performant sein. B EN UT ZERHA ND BUC H 346 ■ SQL-Abfrage Ändern Spalten ■ Reiter: Suche Abbildung 106: SQL-Abfrage - Ändern Spalten - Reiter: Suche Ein-/Ausgabe-Felder Volltext-Suche Kann nur bei alphanumerischen Spalten ausgewählt werden. Wurde die Volltext-Suche ausgewählt, wird ein generisches Filter-Feld integriert Filter-Auswahl Für die entsprechende Spalte wird ein Filter generiert Erweiterter Filter Gibt an, ob das Filter-Feld immer sichtbar sein soll, oder als erweiterter Filter angelegt werden soll. Die Auswahl ist nur sichtbar, wenn Filter-Auswahl angegeben wurde. Eingabe erforderlich In dem Filter-Feld ist eine Eingabe erforderlich. Bei großen und komplexen SQL-Abfragen kann die Vorgabe eines Filter-Wertes die Abfrage massiv beschleunigen. Wird eine Eingabe gefordert, können versehentliche Ausführungen der Abfrage über alle Datensätze vermieden werden. Die Auswahl ist nur sichtbar, wenn Filter-Auswahl angegeben wurde. WOPiXX (directweb) SQL-Abfrage Für Filter-Auswahlen können ebenfalls SQL-Abfragen angegeben werden. B EN UT ZERHA ND BUC H 347 z.B. für den Filter Bibliothek kann die SQL-Abfrage DWSCHEMAS hinterlegt werden. Zur Laufzeit kann dann die Bibliothek über diese Abfrage ausgewählt und in das FilterFeld übertragen werden. Die Auswahl ist nur sichtbar, wenn Filter-Auswahl angegeben wurde. Filter Combobox mit Werteliste Gibt an, ob die Aufbereitung der SQL-Abfrage in einem Fenster oder als Werte-Liste erfolgen soll. Die Auswahl ist nur sichtbar, wenn Filter-Auswahl angegeben wurde. Generische Suche Gibt an, ob nur Werte, die den Filter-Eingaben exakt entsprechen selektiert werden, oder ob eine generische Suche (LIKE!) implementiert werden soll. Die Auswahl ist nur sichtbar, wenn Filter-Auswahl angegeben wurde. Schreibweise ignorieren Gibt bei alphanumerischen Filter-Feldern an, ob die Suche case sensitive sein soll oder nicht. 7.10.6 SQL-Abfragen Berechtigungen List-Anzeige Beim Erstellen der SQL-Abfragen werden automatisch Berechtigungen angelegt. Das Benutzer-Profil QSECOFR und das Benutzer-Profil, das die Abfrage angelegt hat erhalten alle Berechtigungen, d.h. diese Profile können die Abfrage nicht nur Anzeigen und Verwenden, sondern auch Ändern und Löschen. Die übrigen Anwender (Jeder/*PUBLIC) können die Abfrage nur Anzeigen und Verwenden. Weitere Benutzer bzw. Berechtigungen können den Button Erstellen erfasst werde. Ebenso ist es möglich die vorhandenen Berechtigungen über Kontext-Menü-Auswahl zu bearbeiten. Berechtigungen können nur von Benutzern mit Administrator-Rechten bearbeitet werden. Anmerkung: Berechtigte Benutzer und Benutzer-Gruppen werden automatisch angelegt und können auch manuell bearbeitet werden. Aktuell werden die Berechtigungen jedoch nicht geprüft. Die folgende Abbildung zeigt die Berechtigungen für die Abfrage TESTSUBS in Anwendung WXEXAMPLES. B EN UT ZERHA ND BUC H 348 Abbildung 107: List-Anzeige Berechtigungen für SQL-Abfrage Header-Informationen Anwendung Anwendung sowie die Kurzbeschreibung der Anwendung in der die SQL-Abfrage hinterlegt ist. SQL-Abfrage Der innerhalb der Anwendung eindeutige Name der SQL-Abfrage Select-Statement SQL-Statement auf dem die Abfrage basiert Export Import Spalten Benutzer Gibt an, ob die Abfrage exportiert werden kann. Gibt die Art des Imports an, sofern die Abfrage exportiert werden kann Wird nur angezeigt, wenn Export erlaubt ist. Berechtigte Benutzer und Benutzer-Gruppen Beschreibung Benutzer Name oder Kurzbeschreibung der Benutzer-Gruppe Verwenden Gibt an, ob der Benutzer/-Gruppe die SQL-Abfrage verwenden darf Ändern Gibt an, ob der Benutzer/-Gruppe die SQL-Abfrage ändern darf B EN UT ZERHA ND BUC H 349 Daten anzeigen Gibt an, ob der Benutzer/-Gruppe die Ergebnisse aus der SQL-Abfrage anzeigen darf. Daten ändern Gibt an, ob die Daten aus der SQL-Abfrage geändert werden können. Daten löschen Gibt an, ob die Daten aus der SQL-Abfrage gelöscht werden können. 7.10.6.1 SQL-Abfragen Berechtigungen erfassen Nach Klick auf den Button Erfassen in der List-Anzeige SQL-Abfragen Berechtigungen, können Benutzer-Berechtigungen über die folgende Erfassungsmaske angelegt werden. Abbildung 108: SQL-Abfragen - Erfassen Benutzer-Berechtigungen Header-Informationen Anwendung Anwendung sowie die Kurzbeschreibung der Anwendung in der die SQL-Abfrage hinterlegt ist. SQL-Abfrage Der innerhalb der Anwendung eindeutige Name der SQL-Abfrage Select-Statement SQL-Statement auf dem die Abfrage basiert Export Gibt an, ob die Abfrage exportiert werden kann B EN UT ZERHA ND BUC H 350 Import Gibt die Art des Imports an, sofern die Abfrage exportiert werden kann Wird nur angezeigt, wenn Export erlaubt ist Eingabe-Felder Benutzer Auswahl des Benutzers oder der Benutzer-Gruppe. Der Benutzer bzw. die Benutzer-Gruppe muss in directweb/WOPiXX angelegt sein. Alle Rechte Gibt an, ob der Benutzer alle Rechte zum Verwalten der Abfrage und zum Ändern der Daten hat. Die Auswahlen Abfrage verwalten und Daten verwalten werden nur dann zur Auswahl angezeigt, wenn der Benutzer nicht alle Rechte hat. Abfrage verwalten Sofern der Benutzer/die Gruppe nicht alle Rechte hat, können für die Verwaltung der Abfrage die folgenden Berechtigungen vergeben werden. Verwenden Gibt an, ob der Benutzer die Abfrage verwenden kann Ändern Gibt an, ob der Benutzer die Abfrage ändern kann Daten verwalten Sofern der Benutzer/die Gruppe nicht alle Rechte hat, können für die Verwaltung der Daten die folgenden Berechtigungen vergeben werden. Daten anzeigen Daten ändern Daten löschen 7.10.6.2 SQL-Abfragen Berechtigungen anzeigen/ändern Über Kontext-Menü-Auswahl in List-Anzeige SQL-Abfrage Berechtigungen können die erfassten Berechtigungen der einzelnen Benutzer/-Gruppen angezeigt (Eigenschaften) oder bearbeitet werden (Ändern). B EN UT ZERHA ND BUC H 351 Abbildung 109: Anzeigen/Ändern SQL-Abfragen Berechtigungen 7.10.6.3 SQL-Abfragen Berechtigungen löschen Das Löschen von Berechtigungen für SQL-Abfragen erfolgt über Kontext-Menü-Auswahl in List-Anzeige SQL-Abfragen Berechtigungen. Die Berechtigungen für das Benutzer-Profil QSECOFR und *PUBLIC(Jeder) können nicht gelöscht werden. Das Löschen muss bestätigt oder abgebrochen werden. B EN UT ZERHA ND BUC H 352 Abbildung 110: SQL-Abfragen - Berechtigungen löschen 7.11 SQL-Abfragen umbenennen SQL-Abfragen können umbenannt werden. Es ist jedoch zu berücksichtigen, dass der innerhalb der Anwendung eindeutige Name der SQL-Abfrage in den Programmen hinterlegt wird, um die SQLAbfrage zur Laufzeit zu finden und aufzurufen. Anmerkung: Beim Umbenennen einer SQL-Abfrage werden zwar alle abhängigen Datensätze (Spalten, Berechtigungen) auf den neuen Namen umgeswitcht, der Quell-Code von WOPiXX-Programmen kann jedoch nicht angepasst werden. Eine SQL-Abfrage kann unter Anwendung Kontext-Menü-Auswahl SQL Abfragen Kontext-MenüAuswahl Abfrage umbenennen umbenannt werden. Sofern bereits eine Abfrage mit dem neuen Namen existiert wird eine Fehlermeldung ausgegeben, d.h. eine vorhandene Abfrage kann nicht versehentlich überschrieben werden. Die folgende Abbildung zeigt die Eingabe-Maske B EN UT ZERHA ND BUC H 353 Abbildung 111: SQL-Abfrage umbenennen Eingabe-Felder Von SQL Abfrage Anwendung Name der Abfrage Nach SQL-Abfrage Anwendung Name der Abfrage Anwendung, aus der die Abfrage umbenannt werden soll. Die Anwendung ist fix vorgegeben und kann nicht geändert werden Abfrage, die umbenannt werden soll Anwendung, in die die Abfrage umbenannt werden Soll. Die Anwendung ist fix vorgegeben und kann nicht geändert werden. Der neue Name der Abfrage 7.12 SQL-Abfragen übernehmen (kopieren) Die Auswahl SQL Abfragen übernehmen kann an mehreren Stellen aufgerufen werden: WOPiXX Anwendung Kontext-Menü: SQL Abfrage übernehmen WOPiXX Anwendung Kontext-Menü: SQL Abfragen Kontext-Menü: SQL Abfrage übernehmen WOPiXX Einstellungen Abfrage verwalten Kontext-Menü: SQL Abfrage übernehmen Über die Auswahl SQL Abfrage übernehmen kann wahlweise eine einzelne Abfrage oder alle Abfragen von einer Anwendung in eine andere kopiert werden. Des Weiteren ist es möglich eine Abfrage innerhalb der Anwendung auf einem neuen Namen zu kopieren. B EN UT ZERHA ND BUC H 354 Vorhandene SQL Abfragen werden nur überschrieben, wenn Ersetzten Ja/Nein explizit angegeben wurde. Anmerkung: SQL-Abfragen in der dirweb/WOPiXX-Anwendung dürfen/können nicht überschrieben werden! Bei der Übernahme werden sowohl die SQL Query-Header-Informationen als auch die SpaltenInformationen und die Berechtigungen kopiert. Abbildung 112: SQL-Abfragen übernehmen Ein-/Ausgabe-Felder Von SQL-Abfrage Anwendung Anwendung aus der die gewünschte SQL-Abfrage oder alle SQL-Abfragen kopiert werden sollen. Matchcode-Auswahl erfolgt über die SQL-Abfragen DWAPP Nach SQL-Abfrage Anwendung .Anwendung in die die SQL-Abfrage oder alle SQL-Abfragen übernommen werden sollen. Sofern einzelne SQL-Abfragen kopiert werden sollen, kann die Kopie innerhalb der gleichen Anwendung erzeugt werden. In diesem Fall muss für die neue SQL-Abfrage ein abweichender Name angegeben werden. Matchcode-Auswahl erfolgt über die SQL-Abfragen DWAPP Von SQL-Abfrage - Name der Abfrage SQL-Abfrage in der ausgewählten Anwendung, die kopiert werden soll. B EN UT ZERHA ND BUC H 355 Sonderwert *ALL für alle Anwendungen ist zulässig Matchcode-Auswahl erfolgt über die SQL-Abfrage DWSQLQRY Nach Parameter-Gruppe Name der Abfrage Name der neuen SQL-Abfrage Sonderwert *ALL für alle Anwendungen ist zulässig Beim Kopieren in eine andere Anwendung kann der für die kopierte SQL-Abfrage der gleiche Name den auch die Original-SQL-Abfrage hatte verwendet werden. Matchcode-Auswahl erfolgt über die SQL-Abfrage DWSQLQRY. Ersetzen Ja/Nein Vorhandene SQL-Abfragen werden nur ersetzt, wenn Ersetzen explizit angegeben wurde. Anmerkung: SQL-Abfragen in den WOPiXX-Anwendungen werden auch dann nicht überschrieben, wenn explizit Ersetzen angegeben wurde. Stattdessen wird eine entsprechende Fehlermeldung ausgegeben. 7.13 Parameter/Combo-Boxen Directweb und WOPiXX stellen eine Reihe von vordefinierten Combo-Boxen (z.T. auch Parameter genannt) zur Verfügung. Diese Combo-Boxen können über das Schlüssel-Wort CTL(Parameter) im Parameter Option in allen WOPiXX-Funktionen über die Filter-Felder (Work Table), Spalten (Work Table) oder Ein-/Ausgabe-Felder (Change Table) definiert werden eingebunden werden. Die von Toolmaker zur Verfügung gestellten Combo-Boxen können in die kundenindividuellen Anwendungen kopiert und dort verändert werden. Es ist auch möglich für die kundenindividuellen Anwendungen beliebige eigene Combo-Boxen zu definieren und in die kundenindividuellen WOPiXX-Programme zu integrieren. Bei der Aufbereitung der Web-Oberfläche wird der Parameter/die Combo-Box zunächst in der individuellen Umgebung gesucht. Sofern die Combo-Box in der individuellen Anwendung gefunden wird, wird diese verwendet. Wurde die Combo-Box nicht in der individuellen Umgebung gefunden, wird geprüft ob sich in der WOPiXX oder Directweb-Umgebung eine entsprechende Combo-Box definiert wurde. B EN UT ZERHA ND BUC H 356 7.13.1 Vorhandene Comboboxen/Parameter Von Toolmaker werden z.Zt. die folgenden Comboboxen/Parameter zur Verfügung gestellt, die kopiert und/oder in WOPiXX-Anwendungen eingebunden werden können. Parameter / Comboboxen Parameter / Anwendung Combobox DIRWEB ADJUST DIRWEB CALC Bezeichnung Ausrichtung Berechnung Alphanumerische Aufbereitung Character Set Id Datei-Typen ComboboxAufbereitung Vergleichsoperatoren Länder Telefon-Art Datums-Formate Datums-Trennzeichen Beschreibung Rechtsbündig, linksbündig, zentriert Mathematische Operatoren und arithmetische Funktionen Großschrift (Upper Case), Kleinschrift (Lower Case) und Groß/Kleinschreibung (Mixed Case) z.B. 273, 1151, 37, 65535 z.B. PDF, HTML, GIF, JPG, TXT DIRWEB CASE DIRWEB DIRWEB CCSID CNTTYP DIRWEB COMBOBOX DIRWEB DIRWEB DIRWEB DIRWEB DIRWEB DIRWEB DIRWEB DIRWEB DIRWEB DIRWEB DIRWEB DIRWEB DIRWEB DIRWEB DIRWEB DIRWEB COMPARE COUNTRY CTI DATFMT DATSEP DSPOPT EMLADRTYP EMLSYS FLDTYP FLDTYPDDS FLDTYPSQL GRPMBRTYP JDBCDRV LANGUAGE MAILPTY OBJTYP DIRWEB PRISEC DIRWEB DIRWEB DIRWEB DIRWEB DIRWEB DIRWEB DIRWEB DIRWEB ROLMBRTYP SEARCH SMSMODE SMSPROV SMSTYP TIMEZONE TIMSEP USRCLASS eMail Adress-Typ eMail System Datentypen Datentypen - DDS Datentypen - SQL Benutzer-Profil-Typ JDBC Driver Sprache eMail Priorität Objekt-Art Priorität Rollenmanagement Rollenmitglieder-Typ Art der Suche SMS Modus SMS Provider SMS Type Zeitzone Zeit-Trennzeichen Benutzer-Klasse DIRWEB WXPGMLNK Wopix-Menüverwaltung z.B. Programm, (Unter-)Menü Keine, Reguläre, Autocomplete Combobox Vergleichsoperatoren in CL-Schreibweise (z.B. EQ, LT, GE) z.B. *DIRECTDIAL, *SKYPE, *TAPI z.B. *YMD, *DMY, *MDY, *SYSVAL z.B. . / z.B. *PHONE, *EMAIL, *WWW z.B. To (T), CC (C), BCC (B), From (F) z.B. *SMTP, *DIRMAIL z.B. A (alphanumerisch), S (gezont), P (gepackt), T (Zeit) z.B. CHAR, DECIMAL, SMALLINT, DATE, TIME Gruppenprofil, User oder Rolle für Mehrsprachigkeit (z.B. DEU, ENG, FRA) z.B. Normal, High, Low z.B. *FILE, *PGM, *OUTQ z.B. Role, Primary, Secondary z.B. User, Role z.B. Exact Match, Scan, Matchcode z.B. Send, Receive, Send & Receive z.B. Received SMS, Sent SMS z.B. . : z.B. User, Operator, Administrator, Group Tabelle 5: Übersicht Comboboxen/Parameter 7.13.2 List-Anzeige Parameter / Comboboxen verwalten Die List-Anzeige der Parameter/Comboboxen erfolgt über die Menü-Auswahl Parameter verwalten. Die List-Anzeige kann außerdem aus der List-Anzeige Anwendungen (7.1.1 Anwendungen List) über Kontext-Menü-Auswahl Parameter aufgerufen werden. B EN UT ZERHA ND BUC H 357 Abbildung 113: List-Anzeige Parameter/Comboboxen Filter Anwendung Durch Auswahl der Anwendung können die für eine Anwendung definierten Parameter/Comboboxen selektiert werden Spalten Anwendung Parameter-Gruppe Eindeutige Kennung des Parameters/Combobox Buttons Erstellen Erstellen einer neuen Parameter-Gruppe/Combobox oder einer neuen Ausprägung innerhalb einer Combobox Kontext-Menü Parameter-Detail Auflistung der einzelnen Ausprägungen Parameter übernehmen Combobox(en)/Parameter aus anderen Anwendungen übernehmen Löschen Parameter-Gruppe für Anwendung löschen