Xspecial: Unterschied zwischen den Versionen
(Die Seite wurde neu angelegt: „=xspecial - Nachschlagelisten aus SQL-Abfragen= Specials sind auch Nachschlageliste, allerdings werden sie im Gegensatz zu xlookup als SQL-Statement definiert…“) |
|||
(4 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
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. | ||
− | [[file:Xspecial.png|987px| | + | [[file:Xspecial.png|987px|Nachschlageliste aus einer SQL-Abfrage]] |
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.) | 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. | 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. |
Aktuelle Version vom 13. Mai 2021, 15:26 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.