Xdevtext

Aus bafbal.de
Zur Navigation springen Zur Suche springen

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.

Entwicklertexte

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:

  1. In den Entwicklertexten das CREATE TABLE-Statement suchen, ergänzen, kopieren und speichern.
  2. Im Code-Dialog auf der Seite SQL Exec oben und unten einfügen.
  3. Unten aus dem CREATE- ein ALTER-Statement machen, die schon bisher vorhandenen Spalten entfernen, ausführen
  4. Dem Tabellennamen ein _hist anhängen, um dieselbe Spalte auch in der History-Tabelle einzufügen, ausführen
  5. 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.