Xdevtext: Unterschied zwischen den Versionen

Aus bafbal.de
Zur Navigation springen Zur Suche springen
 
(2 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 64: Zeile 64:
 
  ~~
 
  ~~
  
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.
+
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===
 
===xdevtext_eximport===
Zeile 97: Zeile 97:
 
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.
 
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.

Aktuelle Version vom 13. Mai 2021, 16:22 Uhr

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.