Xspecial: Unterschied zwischen den Versionen

Aus bafbal.de
Zur Navigation springen Zur Suche springen
(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|nachschlageliste aus einer SQL-Abfrage]]
+
[[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, 16:26 Uhr

xspecial - Nachschlagelisten aus SQL-Abfragen

Das Formular

Specials sind auch Nachschlageliste, allerdings werden sie im Gegensatz zu xlookup als SQL-Statement definiert.

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.)

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.