Xdevtext
Inhaltsverzeichnis
xdevtext - Entwicklertexte
In den Entwicklertexten können Texte gespeichert werden, die in einer baumartigen Struktur organisiert sind. Von Haus aus sind die Command Wizards dort enthalten, also die Code-Vorlagen, sowie die Table Defs, also die Tabellen-Definitionen. Weitere Äste können ergänzt werden: Rezepte, Anforderungen, Dokumentation, was auch immer.
Die Bedienung sollte ziemlich selbsterklärend sein: Mit dem Button Neuer Text im Button-Bereich wird ein Text auf der obersten Ebene angelegt, mit dem Button Eintrag hinzufügen auf jeder Seite eine Unterseite. Das Feld Parent ist beschreibbar, so dass den Baum auch umorganisieren kann. Man kann die Texte nach darin vorkommenden Begriffe filtern, statt im Text kann der Suchbegriff auch in Keywords stehen.
Noch ein Hinweis zu den Tabellendefinitionen: Wenn Sie einer Tabelle eine Spalte hinzufügen, dann muss der Trigger aktualisiert werden. Von daher ist die schnellste Vorgehensweise nach meiner Erfahrung die folgende:
- In den Entwicklertexten das CREATE TABLE-Statement suchen, ergänzen, kopieren und speichern.
- Im Code-Dialog auf der Seite SQL Exec oben und unten einfügen.
- Unten aus dem CREATE- ein ALTER-Statement machen, die schon bisher vorhandenen Spalten entfernen, ausführen
- Dem Tabellennamen ein _hist anhängen, um dieselbe Spalte auch in der History-Tabelle einzufügen, ausführen
- Auf der rechten Seite den Button beziehungsweise die Buttons zur Anlage des Triggers, der Trigger oder der Funktion klicken.
Damit das flott funktioniert, müssen die Tabellendefinitionen schnell zur Hand sein - dafür werden sie in den Entwicklertexten gespeichert.
Tabellen
create table sys_devtext( sys_devtext_id varchar(40) not null primary key, parent varchar(40), name varchar(40) not null, keywords varchar(80), ctext text, status int, datechg date, usrchg varchar(40), progchg varchar(40) );
Code
xdevtext
#rights n=frm r_user.admin=w #frm y=treepage c="xdevtext - Texts for development tasks" flt=xdevtext_flt w=300 #btn y=save s=#save se=c #btn y=cancel s=#cancel se=cp #btn y=back s=#treeback se=b #btn y=backback s=#treebackback se=b #btn y=export s=xdevtext_eximport(ex) se=b #btn y=import s=xdevtext_eximport(im) se=b #btn c=$T(Refresh) se=b s=#filter w=100 #btn c=$T(new_text) se=b s=xdevtext_add(root) w=100 #lbl c=$T(devtext_filter) w=80 #edt n=edt1 w=165 h=$T(devtext_filter_hint) #filter
Die Formulardefinition ist ziemlich Standard. Der Refresh-Button wird dazu benötigt, nach einer Änderung in den Parent-Feldern den Baum neu aufzubauen.
xdevtext_add
~ $ICP(0,root) #tree_add u=root c=$T(new_text) c1=name t=sys_devtext s="#page_fill d=xdevtext_page_text" si=Y o=devtext_open ~ $ICP(0,sub) #tree_add u=sel c=$T(new_text) c1=name t=sys_devtext s="#page_fill d=xdevtext_page_text" si=Y o=devtext_open f_sys_devtext_id=$GUID() f_parent=$FND(s,sys_devtext_id) ~~
Je nach dem, wo der neue Eintrag eingefügt werden soll, wird u aus root oder sel gesetzt. Handelt es sich um einen untergeordneten Eintrag, dann wird das Feld parent entsprechend gesetzt. Des weiteren muss sys_devtext_id auf einen Wert gesetzt werden, den es noch nicht gibt, damit nicht die Werte des übergeordneten Eintrags aus der Datenbank geladen werden.
xdevtext_eximport
~ $ICP(0,ex) #val_set n=1 z=$FILEDIALOG(save,$T(filter_baf),baf) #sql_exporttables fn=$VAL(1) t=sys_devtext ~ $ICP(0,im) #val_set n=1 z=$FILEDIALOG(open,$T(filter_baf),baf) #sql_importdefs t=sys_devtext #sql_importtables fn=$VAL(1) t=sys_devtext ~~
Beim Ex- und Import gibt es nichts besonderes.
xdevtext_flt
#tree_clear ~ $NEMPTY($EDT(edt1)) #sql select * from sys_devtext where upper(name) like upper(:kname) or upper(keywords) like upper(:kname) or upper(ctext) like upper(:kname) #tree_fill u=root t=sys_devtext c1=name f_parent=! s="#page_fill d=xdevtext_page_text" o=xdevtext_open fi=Y kname=%$EDT(edt1)% ~ #sql select * from sys_devtext where parent is null or parent = order by name #tree_fill u=root t=sys_devtext c1=name f_parent=! s="#page_fill d=xdevtext_page_text" o=xdevtext_open fi=Y ~~
Ist ein Suchbegriff eingegeben, so wird in den Feldern name, keywords und ctext danach gesucht, Groß- und Kleinschreibung ist dabei egal. Sofern kein Suchbegriff eingegeben ist, wird die oberste Ebene im Baum geladen.
xdevtext_open
#sql select * from sys_devtext where parent = :kid order by name #tree_fill u=exp t=sys_devtext kid=$FND(exp,sys_devtext_id) c1=name f_parent=! s="#page_fill d=xdevtext_page_text" o=xdevtext_open fi=Y
Wenn ein Eintrag geöffnet wird, wird einfach nur eine weitere Ebene im Baum nachgeladen.
xdevtext_page_text
#page #prim as=Y #cat as=Y c=Einträge #btns_seg #btns_btn c="Eintrag hinzufügen" w=150 cmd=xdevtext_add(sub) #vl_seg cc=4 clt=ss w1=100 w2=300 w3=300 w4=0 n=vl c=" " b=H #vl_line c1="ID / Parent" f2=sys_devtext_id ro2=Y nvic2=$GUID() f3=parent nv3=$FND(s,parent) f4=ctext #vl_line c1="Name" f2=name cs2=2 #vl_line c1="Keywords" f2=keywords cs2=2 #sql select * from sys_devtext where sys_devtext_id = :kid #vl_data q=sql t=sys_devtext kid=$FND(s,sys_devtext_id) #memo_seg q=link i=vl f=ctext c=" " b=H
Wir haben hier im VL-Segment vier Spalten, wobei die vierte unsichtbar ist (w4=0) und zur Aufnahme des Textes dient, der dann im Memo-Segment angezeigt wird und bearbeitet werden kann. Wird die Seite neu angelegt, dann sorgt das c in nvic2=$GUID() dafür, dass auch gleich der Cancel-Button verfügbar wird und die Aktion sofort abgebrochen werden kann.