ullia

changeLog

changeLog

fullScreen ulliaChangeLog
Page 9 of 17, Zeile 161-180 von Treffern, Gesamtzeilen 325
idx
 
161-180 von , tab_totalLength: 325
161 163 5.8b 01.03.2015 subFormControls: Feld-Namen via AS xyz / readNextTableRowId / doUpdateNextUpdate 01. März 2015: NEU: readNextTableRowId : liest die nachfolgende ID einer übergebenen ID in einer DB-Tabelle nextId = readNextTableRowId (dsn, tab, startId); doUpdateNextUpdate : Die generische Funktion zum Editieren von Tabelleninhalten (action:dsnTabTableContent) hat die neue Funktion doUpdateNextUpdate erhalten. Diese wird als erster Button zum Speichern gerendert wenn ein bestehender Datensatz zum Editieren ausgewählt wurde (perform:editRowForm) ansonsten wird doUpdateNextInsert als erster Button gerendert. Hierdurch können alle dem aktuellen Datensatz folgende Tabelleninhalte bequem editiert werden. Hinweis: der nachfolgende Datensatz wird mit Hilfe der neuen Funktion readNextTableRowId ermittelt.   subFormControls : Feldnamen können nun mit Hilfe des Schlüsselworts AS in SELECT - Statements auch abweichend zum definierten Namen generiert werden. Hiermit können die Definitionen als template für Controls verwendet werden und somit auch mehrere Controls vom selben ColDef erzeugt werden. Praktische Anwendung: Ein Login-Formular besteht vereinfacht aus einem Usernamen und einem Passwort. Die registrierten Benutzter sind der entsprechenden Tabelle gespeichert. Beim Registrieren ist es üblich neben dem Usernamen zweimal das Passwort einzugeben um auszuschließen dass sich ein Benutzer bei der Passworteingabe vertrippt.   SELECT Usernamen,Passwort, Passwort AS Passwort_confirm FROM userLoginTable Mit diesem Select-Statement als Eingabe eines subFormControls werden drei Felder erzeugt. Da das dritte sich nur durch den Suffix _confirm vom zweiten unterscheidet, prüft der ULLIA eigene Validator ob der Inhalt der beiden Felder bei Post-Requests identisch ist. Falls die Feldinhalte sich unterscheiden wird eine Fehlermeldung ausgegeben.
162 164 5.8c 07.03.2015 getColDefTransformedData / hasColDefCrypt 07. März 2015: NEU: getColDefTransformedData : tranformiert anhand der CoDef-Optionen einen Datenwert in den Zielwert Aufruf: getColDefTransformedData (aColDefHash, data, $mode=''); Über den optionalen Paramerter mode können Kontextabhänige Optionen gesetzt werden (z.B. bcrypt bei verschlüsselten Werten) hasColDefCrypt : Prüft ob ein ColDef-Control beim Speichern die Daten verschlüsselt. Aufruf: hasColDefCrypt ($aColDefHash)
163 165 5.8d 14.03.2015 _prepListData / _prepDetailData / getCsvValueDefault / serializeCompositeComponent 14. März 2015: NEU: _prepListData : Neue ColDef-Option (Checkbox) zum präparieren von Datensätzen. Wenn diese Option gewählt ist, dann kann via codeBehind der Datensatz einer Zelle vor dem Rendern im Daten-Hash manipuliert werden oder Abhängig vom Datensatz kann auch beliebiger Code programmiert werden. Zum Beispiel können mehrere Datenfelder zusammengesetzt werden und der HTM:-Head Titel gesetzt werden. _prepDetailData : (Noch nicht implementiert) Wie  _prepListData  mit dem Unterschied dass diese Funktion nur in der Detailansicht aufgerufen wird getCsvValueDefault (csvList, prefix_, default): liefert den ersten Suffix des ersten Element das mit prefix_ beginnt zurück. Ist der Suffix leer dann wird der default zurückgegeben. Beispiel-Verwendung areaedit-optionen: dataOptions=rows_15,format_xml rows = getCsvValueDefault (dataOption, 'rows_', 12); // gibt 15 zurück, da ein Wert mit rows_ beginnt und dann mit 15 weitergeht (der Suffix) cols = getCsvValueDefault (dataOption, 'cols_', 62); // gibt 62 zurück, da kein Element der csvListe mit cols_ beginnt serializeCompositeComponent : erweiterung um optionalen Parameter useNoDbData. Mit dem Default useNoDbData=false werden nur Controls serialisiert die nicht die Option noDbData gesetzt haben. function serializeCompositeComponent (dsn, tab, domain, ctrlPrefix='', useNoDbData=false) ---- colDefSubControl: --> wird wahrscheinlich wieder entfernt , da auch über type=subFormControls machbar   colDef = "myDynControl=subFormControls&_req=1&_data=SELECT webforms:columnPrepareChooser";   aColDefHash = getTabColumnDefinitionHash (colDef);   ctrl = colDefSubControl(aColDefHash);
164 166 5.8e 20.03.2015 E_UNAUTHORIZED_BUTTON / ignoreList / authHidden Visualisierung / db_select_tabDef (SELECT [TABDEF] ) / csvHashStateKeyValue 20. März 2015: Neu: E_UNAUTHORIZED_BUTTON : Vor dem Anwenden von Button-Actions wird geprüft ob das Ausführen der Aktion für den Anwender und im Status der Anwendung erlaubt ist. Wenn nicht wird der Fehler E_UNAUTHORIZED_BUTTON mit dem Button-Namen ausgegeben. E_UNKNOWN_BUTTON : Es wird geprüft ob der übermittelte Button definiert ist. Falls nicht wird der Fehler E_UNKNOWN_BUTTON und der Button-Name ausgegeben. Refactoring: ignoreList eleminiert: Aufgrund des bewährten SQL-Datenproviders wird die Black-List (ignoreList) für die Definition von SubFormControl nicht mehr benötigt. Der Parameter ignoreList ab der Version 5.8e in den Funktionsaufrufen nicht mehr vorhanden. authHidden : Durch die Bedingung authHidden versteckte Controls werden mit der Option u_ignore_render_conditions nun ebenso sichtbar angezeigt wie authRender-Controls (aktueller Style: stark transparent mit grauem Hintergrund) db_select_tabDef : ColDef - Spaltendefinitionen als Liste von Rows einer Tabelle abfragen SELECT [TABDEF] id,Name FROM dsn:tab liefert die Projektion von tabDef auf die Elemente id und Name SELECT [TABDEF] FROM dsn:tab@ App liefert die ColDef-Liste aller Spalten aus der App - dsn Tabelle tab csvHashStateKeyValue : Hilfsfunktion, setzt toCsvValue(HashStateKeyValue ($key, $pHash)) ab. Verwendung: in codeBehind zur Restaurieung bei Get-Requests für State-Persist Controls Bugfix: prepareIsValidState : verwendet in IsValid(Control), fehlenden Präfix dsnTabKey im Key der HashMap aCtrlList hinzugefügt
165 167 5.8f 22.03.2015 IsEmpty-Condition / get_signature_key / ajaxContentGet / focusOnDownArrow, focusOnUpArrow, focusOnLeftArrow, focusOnRightArrow 22. März 2015: Neu: IsEmpty : Leere Controls setzen ab der Version 5.8f den Status IsEmpty    ( sysStateKeyVal_IsEmpty_ CtrlName -ulliaSys_TRUE ). Dieser kann als renderCondition (IsEmpty-Conditions) ausgewertet werden focusOnDownArrow , focusOnUpArrow , focusOnLeftArrow , focusOnRightArrow : FamGrp-Client-Events die den Fokus auf das nächste angegebene Element (nicht disabled) setzt. Hiemit läßt sich eine komfortable Autovervollständigung mit einem search-Feld und einer selectbox realisieren Bugfix: get_signature_key (Javascript): für den ermittelten Key wird nun die Sprache angehängt (bodyClass lang_). Hierdurch werden nach einer Sprachumschaltung auch die LocalStorage und SessionStorage Werte korrekt sprachabhängig abgebildet. ajaxContentGet: Wenn die URL bei ajax Get-Requests die maximallänge von 1000 Zeichen überschreitet wird auf ajax-POST umgeschaltet. Der Wert von 1000 ist hierbei vom Author bestimmt worden :-)
166 168 5.8g 23.03.2015 Sortierung: Apps und Styles 23. März 2015: Change: Apps und Styles : Sortierung über natcasesort: Apps via: getCsvUserApplicationApps, getUserApplicationAppChooser, getCsvAvailableUserApplicationApps Styles via: getUserLayoutStyleSelection, getUserLayoutStyleChooser
167 169 5.8h 30.03.2015 Modul xml_utils: xml_pretty & xml_to_html 30. März 2015: Neu: Modul xml_utils : xml_pretty & xml_to_html
168 170 5.8i 12.04.2015 SELECT [CACHED seconds] 10. April 2015: Neu: SELECT [CACHED seconds ]: Resultsets aus SQL-Abfragen können nun mit den neuen ULLIA-spezifischen KEY [CACHED (int) seconds] für die angegebene Sekundendauer zwischengespeichert werden. Beispiel: SELECT [CACHED 120] * FROM ContactList WHERE Vorname LIKE t ORDERBY Nachname speichert das Ergebnis für 2 Minuten (=120 Sekunden) im Cache sodass eine erneute Abfrage innerhalb dieser 2 Minuten das Ergebnis aus dem Cache liefert. Hinweis: Die gleiche Abfrage nur mit anderer Cache-Zeit wird auch aus diesen Cache beantwortet falls die Cachezeit des ersten Schreibers noch nicht abgelaufen ist: SELECT [CACHED 168] * FROM ContactList WHERE Vorname LIKE t ORDERBY Nachname 
169 171 5.8j 20.04.2015 buttonList als label 20. April 2015: Change: buttonList wird nun zusätzlich mit einem label-for gerendert, wenn die Option noLabel nicht gesetzt ist. Der Button erhält in diesem Fall die css-Klasse hidden. Mit der Option noLabel wird die Button-Liste wie bisher gerendert. Im label werden die data-Attribute für  data-name : der Name der buttonList (somit bei allen Button-Elementen der Liste identisch ) data-key : der Schlüssel zum Identifizieren des betätigten Buttons data-val : Falls die Button-Liste über eine key:val-Liste erzeugt wurde (z.B. via SELECT id_,name...) dann ist der Wert des val hier gespeichert. Mit Hilfe von CSS content-after kann somit individuell die Beschriftung des Label gesteuert werden.  buttonList : Neu Unterstützung der Optionen placeholder und title
170 172 5.8k 30.04.2015 viewState Erweiterung / buttonLabelList / u_control-label-order 30. April 2015: NEU: appInfo : Erweiterung um den neuen Abschnitt viewState - Info. Dieser listet die Werte des viewStates auf. (TimeStamp, FirstAccess,LoginTime,KEY) Server Page - Info : Zeigt die neuen ViewState-Werte in lesbarer Form und listet die verstrichene Zeit seit dem ersten Zugriff, dem letzten Zugriff (vorhergehender Request)  sowie seit dem Login auf. Mit diesen Werten können zukünftig expiry-Zeiten für authentifizierte Zugriffe implementiert werden. Ein Beispiel hierfür wäre: Ein Admin-Login ist max. 2 Stunden gültig (Bezug auf LoginTime) desweiteren kann noch eine inaktive verweildauer von z.B. 30 min eine Neuanmeldung erzwingen /Bezug auf TimeStamp) buttonLabelList : analog zu buttonList, enthält zusätzlich noch einen referenzierenden label-TAG zum Button u_control-label-order : bodyClass Settings-Option, wenn u_control-label-order gesetzt ist dann wird beim Rendern statt label-input die umgekehrte Reihenfolge input-label ausgegeben.
171 173 5.8l 06.05.2015 Floating Label / popoverHint / checkColDefConsistency / renameFile / button_submit /SELECT @ @+ / u_hide_data_hint 06. Mai 2015: NEU: button_submit : Neuer ColDef-Typ erzeugt einen HTML button-TAG [button] Floating Label : Inspiriert durch das Material Design von Google unterstützt Ullia mit dieser Version durch Setzen der neuen Option "u_floating_label" das Floating-Label Pattern für Eingabe-Elemente. Aktuell wird hierzu leider noch eine kleine Javascript Hilfsfunktion verwendet um den CSS-Zustand von leeren Feldern zu synchronieren (Der CSS-Selector [value=""] bezieht sich leider nur auf den initalen Zustand beim Laden der Seite). Analog zur Option u_control-label-order wird hier auch die abweichende input-label Reihenfolge verwendet. popoverHint : Controls welche den Focus haben zeigen wichtige Feldinformationen in einem Popup Bereich neben dem Feld an. Technisch werden die angezeigten Daten über ein html-attribut [data-hint] in einem zusätzlich zum Control gerenderten Element eingebettet. Die bodyClass u_hide_data_hint schaltet diesen Hinweis ab. u_hide_data_hint : Neue Settings-Option Hinweis-Element für Eingabeelemente nicht rendern. checkColDefConsistency : Konsistenz-Prüfung von ColDef Parametern renameFile : Hilfsfunktion: protokolliert wenn die rename nicht durchgeführt werden konnte. SELECT @ : Neues sql-Hilfsstatement führt SELECT * FROM sys_sqlstore.userapplications aus und listet alle verfügbaren Anwendungen auf. SELECT @+ : Analog zu SELECT @ werden zusätzlich die System Apps aufgelistet. Führt SELECT * FROM sys_sqlstore.allapplications aus
172 174 5.8m 17.05.2015 getProcessPhase() / RequestCount / IsLocalhost() / get_row_value() / sql_query_value() / db_select_colNames() 17. Mai 2015: NEU: getProcessPhase() : gibt die aktuelle Phase in der Verarbeitungskette zurück (validate, dispatch, fireSucceeded, updateSysState, verifyViewState, performContent, post-dispatch, renderMessages, ...) RequestCount : neuer sysSession Parameter: Anzahl der Server-Requests IsLocalhost() : prüft ob ullia in der localhost Umgebung ausgeführt wird ( =Development ) get_row_value (aRows, tabDef, colName, rowIndex=0): liefert den Wert der Spalte " colName " aus der aRows-Hash in der rowIndex - Reihe. Anwendung:   $aRows = sql_query_rows ('SELECT firstName,LastName FROM Userdata', $tabDef);   $nachname = get_row_value ($aRows, $tabDef, 'LastName', 1); // gibt den Nachnamen der zeiten Row zurück sql_query_value ($sql, $colName) Selektiert aus der ersten Row den Wert der Spalte colName . db_select_colNames : Namen der Spalten einer Tabelle   SELECT [COLNAMES] FROM dsn:tab
173 175 5.8n 24.05.2015 auth_roleList / auth_rightList / u_noAutoFocus / u_mockup_design / getSpecificationDocumentation / footer-as-window 24. Mai 2015: Neu: u_noAutoFocus : Autofokus abschalten u_mockup_design : Durch einbinden der neuen Style-Datei mockup_design.css in ein Layout kann optional die App durch Setzen der neuen Option u_mockup_design wie ein handgezeichneter Mockup dargestellt werden. getSpecificationDocumentation : erzeugen von Spezifikationsdokumenten direkt aus der Anwendung heraus. IDEE: Die erzeugten Dokumenten können bei der Erstellung von Pflichtenheften unterstützen. Die Funktions steht berechtigten Anwendern im Context-Menü zur Verfügung. Refactoring: component_auth_roleList : vormals component_auth_roles_dsnTabList component_auth_rightList : vormals component_auth_rights_dsnTabList type auth_roleList : vormals auth_roles_dsnTabList type auth_rightList : vormals auth_rights_dsnTabList RenderAuthRoleList : vormals RenderDsnTabAuthRoles RenderAuthRightList : vormals RenderDsnTabAuthRights footer-as-window : die Option stellt die Settings aus dem Footer als Overlayfenster dar. Neu ist das Laden der SubMenüs über den Notifications-Hook per Ajax.
174 176 5.8o 07.06.2015 getAuthAppStateHash() / sql_query_row_hash() / sysStateKeyVal_authUserLevel-ulliaSys / sysStateKeyVal_authUserDbId-ulliaSys / sysStateKeyVal_hasAuthUserLevel-ulliaSys_n / setServerValue(,.,persist) / colDef-Type serverValue / getColDefRegExClientPattern / navArea-Liste als Definition von Sitemaps / sql_query_value / IsSudoAuthorized / hasSudoAlias 07. Juni 2015: Neu: sysStateKeyVal_hasAuthUserLevel-ulliaSys_n : Die Wertemen sysStateKeyVal_authUserDbId-ulliaSys: sysStateKeyVal_authUserLevel-ulliaSys_ getAuthAppStateHash () Die Methode reichert beim Abruf den internen StateKeyHash um die oben genannten Systemwerte an sql_query_row_hash (sql, &tabDef, rowIndex=0) liefert tabDef und rowHash bzgl. des sql's an der Stelle rowIndex. Beispiel:   firstContactHash = sql_query_row_hash ("SELECT TOP 1 * FROM usr:adresses WHERE id_ = usrId", tabDef); getColDefRegExClientPattern : wenn kein spezielles pattern definiert ist, wird ein generisches Pattern (.{min,max}) für die Client-Validierung gerendert. Voraussetzung: min > 2 hasSudoAlias : neuer SysState (hasSudoAlias-ulliaSys_yes): signalisiert ob eine bereits authentifizierter User höhere sudo-rechte erwerben kann. IsSudoAuthorized : neuer SysState (IsSudoAuthorized-ulliaSys_yes): signalisiert ob ein sudo-User login stattgefunden hat. CHANGE: setServerValue : Zusätzlicher optionaler Parameter persist =false . Beispiel:   setServerValue ("UserName", "Paulchen Panter", true); // Hiermit kann überall [ =UserName= ] referenziert werden colDef-Type serverValue : Der Typ serverValue verwendet nun den dataProvider mit den optionalen Settings setState, setPersist. sql_query_value : Bei der Methode sql_query_value (sql, colName='') ist der zweite Parameter colName nun optional. Wenn dieser nicht angegeben (=leer) ist, wird der Name aus der ersten SELECT-Spalte genommen. Erweiterung sitemap : Der page-type sitemap unterstützt nun auch Listen von navi_n Elementen. Hierzu kann ein kommasepariete Liste von navArea-Werten die im Feld configData angegeben werden. Beispiel (syscommand=sitemap): configData= navi_6,navi_2,navi_1,optionsMenu Security: setState : prüft vor dem Setzen der Key-Value Paare den Key gegen eine interne Black-List . Hiermit soll manipulation via codeBehind verhindert werden.
175 177 5.8p 14.06.2015 setRenderContainer / getColDefHashTypeLimitValue / inplaceConditionGetRoleRightDataCtrl 14. Juni 2015: Neu: setRenderContainer( renderContainer ) : Mit dem Parameter renderContainer kann ein vom ullia-Standard (ul/li) abweichendes Parent/Client Paar von HTML-Tags definiert werden, welche die definierten Controls umschließen. Beispielsweise kann mit setRenderContainer('section/article') auf HTML5 umschließende TAG's umgestellt. Die Tags können auch leer gelassen werden, d.h. Aufrufe von setRenderContainer('/p'), setRenderContainer('p/') oder setRenderContainer('/') sind auch gültig Syntax für HTTP-GET: renderContainer=Parent/Client z.B. renderContainer=/p bewirkt dass die Controls im -Tag eingebettet sind, diese jedoch nicht in einem zusätzlichen übergeordneten TAG gruppiert sind.   Beispiele: renderContainer=table/tr|td renderContainer=table|tr/td renderContainer=ul/li renderContainer=div/div renderContainer=p/div renderContainer=article/p appInfo - Application - renderContainer Der Abschnitt Application der Anwendung appInfo listet die aktuellen Einstellungen des renderContainers inplaceConditionGetRoleRightDataCtrl : Rollen / Rechte / Gruppen könenn nun auch inplace zugewiesen werden Bugfix: getColDefHashTypeLimitValue: Auswahl-Typen wie checkboxList, radioList, selectbox, buttonSelector geben nun die Anzahl der ausgewählten Elemente zurück. Zuvor hat das nur korrekt funktioniert, wenn die Werte bereits über ein Array überprüft wurden, mit dem Fix werden nun auch csv-Werte korrekt behandelt.
176 178 5.8q 28.06.2015 buttonToggler (Select-One) / buttonSelector (Select.Many) / CmsGetSortedSubNaviCsv 28. Juni 2015: Neu: buttonToggler : Analog zu checkboxList (SelectMany) können über diesen neuen colDef-Typen Zustände über Buttons gesetzt werden. Hiermit sind javascriptfreie Implementierungen von Checkbox Gruppen möglich. buttonSelector : Verhält sich wie die radioList (SelectOne) und ist wie buttonToggler für javascriptfreie Implemtierungen von Web-Anwendungen geeignet. CHANGE: CmsGetSortedSubNaviCsv : useCache abgeschaltet. Damit funktioniert ein App-Wechsel ohne refresh. Die Ursache warum das mit eingeschalteten cache nicht immer funktioniert ist noch zu untersuchen....
177 179 5.8r 12.07.2015 Grömitz-Release: renderConditions unterstützen epoch-Rechte 09. Juli 2015: (Grömitz-Release) Neu: epoch_right @ renderConditions : Sonderrechte die über die epoch-Tabelle definiert sind können nun auch für jedes Control als Render-Bedingung verwendet werden. Hiermit kann beispielsweise das Speichern oder Senden von Formularen nur "tagsüber" (epoch_tagsueber ) erlaubt werden. Noch spezieller : Individuelles Rendering kann über einen vorgelagerten Entscheider-Prozess vorgenommen werden. Hierzu wird ein codeBehindProcess definiert und in der zugehörenden codeBehind-Funktion wird dann anhand eines Business-Prozesses eine Zustandsvariable gesezt (via setState(name, val). Ein konstruiertes Beispiel: ein Button kann zu jeder geraden Minute disabled werden. (setState('minute','gerade'), wenn die die akuelle Uhrzeit eine gerade Minute enthält. Syntax: authDisabled=sysStateKeyVal_minute_gerade Das ganze kann noch mit logischen Operatoren verknüpft werden, sodaß auch soetwas wie "Nur Donnerstags im Dezember zu jeder geraden Stunde editierbar" möglich wäre :-)
178 180 5.8s 19.07.2015 text_key_i18n / Block-, Box- resize 14. Juli 2015 Neu: text_key_i18n: Neuer ColDef-Type, erzeugt aus dem eingegebenen Text via db_normalizeKeyName einen getrimmten sprechenden Schlüssel-Wert und trägt unter diesem in der Übersetzungstabelle den eingegebenen Text ein. Resize von Blöcken : Mit den CSS-Regeln   overflow: auto;   resize: both; können Elemente direkt im Browser in der Breite und Höhe angepasst werden (Falls der Browser das unterstützt)
179 181 5.8t 26.07.2015 timeline style / button_submit / userSelectNone 26. Juli 2015 Neu: timeline: Neuer Timeline-Style  HTML button type=submit : der Ullia-Type button_submit , welchen nicht den input type=submit, sondern einen button type=submit rendert, unterstützt nun auch familyGroups und renderConditions inklusive Ajax-Requests. userSelectNone : neue CSS-Datei userSelectNone.css welche für die HTML-Elemente a, label, button, legend sowie der css-Klasse .userSelectNone die Eigenschaft   user-select: none definiert. Diese wird über den Ullia-Style Compiler mit dem ggf. notwendigen Browser-Vendor Präfix ergänzt. Pseudo-State indeterminate Mit Hilfe von Javascript kann beim Laden der Seite die Option indeterminate (unbestimmte Zustand) gesetzt werden, welche dann mit CSS kenntlich gemacht werden kann Beispiel: Bei alle Checkboxen und Radiobuttons die Option intermediate setzen: $$('[type="checkbox"],[type="radio"]').each(function(el){  el.indeterminate = true; }) [type="checkbox"]:indeterminate {    opacity:0.5; }
180 182 5.8u 08.08.2015 getColDefCustomRenderTarget /skin 08. August 2015 Neu: getColDefCustomRenderTarget: ColDef-Option (_customRenderTarget). Wenn dort ein Wert eingetragen ist, dann wird dieser als HASH-KEY mit dem Wert des gerenderten Controls verwendet. Mit [ =HASH-KEY= ] kann dann das Control an beliebier Stelle eingefügt werden. Einführung von Skins : Als Vorbereitung zum feingranularen Zuschneiden des Gesamt-Layouts unterstützt Ullia ab der Version 5.8u das Setzen einer Skin-Option. Beispiel: Für einen bestehenden Style kann mit der Option skin=mdl benuzterindividuell das Verhalten einiger Controls analog dem des Material-Design-Light eingeschaltet werden.