Xspecial: Unterschied zwischen den Versionen
Zeile 1: | Zeile 1: | ||
=xspecial - Nachschlagelisten aus SQL-Abfragen= | =xspecial - Nachschlagelisten aus SQL-Abfragen= | ||
+ | |||
+ | ==Das Formular== | ||
Specials sind auch Nachschlageliste, allerdings werden sie im Gegensatz zu xlookup als SQL-Statement definiert. | Specials sind auch Nachschlageliste, allerdings werden sie im Gegensatz zu xlookup als SQL-Statement definiert. |
Version vom 10. Mai 2021, 20:00 Uhr
Inhaltsverzeichnis
xspecial - Nachschlagelisten aus SQL-Abfragen
Das Formular
Specials sind auch Nachschlageliste, allerdings werden sie im Gegensatz zu xlookup als SQL-Statement definiert.
Die Bedienung ist recht selbsterklärend: Mit dem Button Special hinzufügen wird exakt dies getan, neben einer Kategorie und einem Namen muss in Code ein SQL-Statement angegeben werden; dabei muss die Spalte mit den Schlüssel ckey und die Spalte für den (angezeigten) Wert cvalue heißen. (Das Prefix c steht für column und ist erforderlich, weil bei manchen Datenbanksysteme key und/oder value geschützte Bezeichner sind.)
Mit dem Button Special testen kann das SQL-Statement ausgeführt werden.
Tabelle
create table data_special ( data_special_id varchar(40) not null primary key, category varchar(40), name varchar(40) not null unique, description varchar(80), code text(4000), status int, datechg date, usrchg varchar(40), progchg varchar(40) );
Code
xspecial
#rights n=frm r_user=r r_user.admin=w #frm c=xspecial flt=xspecial_flt w=300 r=frm #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=xspecial_eximport(ex) se=b #btn y=import s=xspecial_eximport(im) se=b #btn c=$T(Add_special) w=120 s=xspecial_add se=b #filter
Die Formulardefinition ist ziemlich "Standard", User haben Leserechte, Administratoren Schreibrechte.
xspecial_add
~ $EMPTY($FND(s,category)) #tree_add u=root c=$T(new_special) t=data_special c1=name s="#page_fill d=xspecial_page_list" si=Y ~ $EMPTY($FND(s,data_special_id)) #tree_add u=sel c=$T(new_special) t=data_special c1=name s="#page_fill d=xspecial_page_list" si=Y ~ #tree_add u=selp c=$T(new_special) t=data_special c1=name s="#page_fill d=xspecial_page_list" si=Y ~~
Je nach dem, ob, und wenn ja, welcher Baumeintrag selektiert ist, muss der Parameter u auf einen anderen Wert gesetzt werden (wurde schon bei xlookup_add ausführlich erklärt).
xspecial_eximport
~ $ICP(0,ex) #val_set n=1 z=$FILEDIALOG(save,$T(filter_baf),baf) #sql_exporttables fn=$VAL(1) t=data_special ~ $ICP(0,im) #val_set n=1 z=$FILEDIALOG(open,$T(filter_baf),baf) #sql_importdefs t=data_special #sql_importtables fn=$VAL(1) t=data_special ~~
Ex- und Import ist auch ziemlich "Standard".
xspecial_flt
#tree_clear #sql select * from data_special order by category, name; #tree_node u=root k=category c1=category nc=Y s="#page_fill d=xspecial_page_category" #tree_node u=last t=data_special c1=name s="#page_fill d=xspecial_page_list" #tree_fillsql mex=3
Die Specials werden in zwei Baumebenen als Kategorie und Name angezeigt. Mit mex=3 werden bei bis zu drei Kategorien diese gleich geöffnet.
xspecial_page_list
#page #prim as=Y sz=800 #cat as=Y sz=800 c=$T(Special) #vl_seg cc=3 clt=ss w1=100 w2=300 wst2=300 w3=0 n=vl #vl_line c1="ID" f2=data_special_id ro2=Y nvic2=$GUID() f3=code #vl_line c1="Category" f2=category nv2=$FND(s,category) #vl_line c1="Name" f2=name #vl_line c1="Description" f2=description #sql select * from data_special where data_special_id = :kid #vl_data q=sql t=data_special kid=$FND(s,data_special_id) #memo_seg i=vl f=code q=link c="Code" b=H #prim as=Y sz=800 #cat as=Y sz=800 c=$T(test) #btns_seg #btns_btn c=$T(Test_special) w=150 cmd="#page_fill d=xspecial_page_list(test)" ~ $ICP(0,test) #grd_seg frc=0 fcc=0 clt=ss n=grid #grd_col f=ckey c1="Key" w=250 ro=Y #grd_col f=cvalue c1="Value" w=400 wst=400 ro=Y #sql $PVAL(vl,2,0) #grd_data q=sql ~~
Im VL-Segment können Kategorie, Name und Beschreibung gepflegt werden. Der Code wird in einer unsichtbaren Zelle gehalten, darum ist die Zahl der Spalten drei (#vl_seg cc=3 w3=0) und in der ersten Zeile wird der Code geladen (#vl_line f3=code). Angezeigt und bearbeitet wird der Code in einem Memo-Segment; damit dieses mit der unsichtbaren Zelle verbunden ist, muss mit i=vl auf das VL-Segment und mit f=code auf die Zelle verwiesen werden. Zudem muss mit q=link die Datenquelle des Memo-Segments angegeben werden.
Soll der Code getestet werden, so wird dieselbe Seite, aber mit dem Parameter test aufgerufen. Mit ~ $ICP(0,test) wird geprüft, ob ein solcher Aufruf erfolgt ist und gegebenenfalls der darauffolgende Code ausgeführt. Zur Anzeige wird ein simples Grid-Segment mit zwei Spalten verwendet. Mit $PVAL(vl,2,0) wird das SQL-Statement aus dem VL-Segment geholt und dann gleich ausgeführt.