Xspecial
Inhaltsverzeichnis
xspecial - Nachschlagelisten aus SQL-Abfragen
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.