dmSQL(GridTabId,ParCol,Par,SeqColumn,Seq,Table,PrefixAlias,Language,DateFM,SelInSel) ;Dynamische SQL-queries ; dmSQL G 1 ; T1 ;QBE bevat een ongeldig datum formaat; T2 ;Fout opgetreden bij het aanmaken van het dynamisch SQL-statement : ; ; T1F ;QBE contains an illegal date format; T2F ;Error occuring during built dynamic SQL-statement : ; ; T1E ;QBE contains an illegal date format; T2E ;Error occuring during built dynamic SQL-statement : ; ; T1D ;QBE contains an illegal date format; T2D ;Error occuring during built dynamic SQL-statement : ; ; dotNET(GridTabId,ParCol,Par,SeqColumn,Seq,Table,PrefixAlias,Language,DateFM,SelInSel) ; Dynamische Queries via dotNet N NET S NET=1 G 1 ; dotNETS(GridTabId,ParCol,Par,SeqColumn,Seq,Table,PrefixAlias,Language,DateFM,SelInSel,FixedWhere,LangUser) ; Dynamische Queries via dotNet + Tab-Setup N NET,SETUP S NET=1,SETUP=1 G 1 ; ; GridTabId = Id voor ^VB(0,"GRID.TAB" ; Verplicht ; ParCol = 0 = parameters worden op kolom-niveau doorgegeven voor alle kolommen ; 1 = parameters worden op parameter-niveau doorgeven ; Indien geen parameter gedef. in kolom wordt in Caché getest of er een vaste waarde inzit ; ; Opgelet : vanuit VB wordt er verplicht met parameters op parameter-niveau gewerkt ! ; ; Par = String met parameters per kolom : ; ParCol=0 : ; Parameter Col1\Parameter Col2\....\Parameter Coln ; ParCol=1 : ; Parameter 1\Parameter 2\....\Parameter n ; Niet ingevuld is alle records nemen ; SeqColumn = String met volgnrs (of ID's (VB.NET)) van kolommen welke gebruikt worden voor de volgorde ; Niet ingevuld = geen volgorde ; Volgnr Col1\Volgnr Col2\...\Volgnr Coln ; Seq = String met ASC\DESC en volgorde in sortering ; 0 = Ascending (van A-Z), 1 = Descending (van Z-A) ; Niet ingevuld = 0 ; 0#2\1#0\0#1 ; Table = HoofdTabel : indien niet ingevuld wordt de tabel uit de grid genomen ; indien wel ingevuld wordt steeds met deze gewerkt ; Niet verplicht ; PrefixAlias = Prefix dat zal gebruikt worden voor de Aliassen : default="T" ; Niet verplicht ; Language = taal van de client ; DateFM = Formaat van datum op de client ; SelInSel = 1 : wordt opgeroepen voor een Select In Select-statement ; FixedWhere = Fixed where-statement dat bijgevoegd wordt als "AND ...." ; Bestaat uit 4 velden : ; 1. Where-statement ; 2. Gewicht (niet verplicht : hoe zwaarder, hoe eerder in het where-statement) ; 3. 1 = negeer het vast wherestatement uit de def. in grid.tab ; 4. GridId (mtemp99 - algemene selectie), gescheiden door ";" ; Indien deze parameter wordt doorgegeven, wordt er automatisch een ; where-statement aangemaakt waarbij MT.TempId = T1.Property en MT.GridId = GridId ; 5. Overrule properties, gescheiden door ";" ; ; Selectie mtemp99 ziet er als volgt uit: ; -------------------------------------- ; ; ^mtemp99(,"COMMON",x)="" ; |-> x = specifiek ID ; ; ^mtemp99(,"COMMON.PAR",0) ; 1. Alle records geselecteerd ; 0 of "": neen ; 1 : ja ; 2. Alle records = ; 0 of "": Alle operationele records ; 1 : Alle records ; 3. Property uit hoofdtabel (waarmee link wordt gelegd) ; ; ^mtemp99(,"COMMON.PAR",1) ; 1. Selectie-klasse ; 2. Selectie-grid ; 3. Selectie-parameters ; 4. Selectie-vast wherestatement ; ; LangUser = Taal van de gebruiker ; dotNETZ Q ; INPUT(GridTabId,Par,Language,DateFM,FixedWhere,LangUser) ; uit te voeren vanuit de input functie (zie QUERY^cAFVBI01) N ParCol,NET,INPUT S (INPUT,NET,ParCol)=1 G 1 INPUTZ Q ; 1 S $ZT="ERR^"_$T(+0) N %dmINIT N @$$INITVAR^dmTOOL("GridTabId,ParCol,Par,SeqColumn,Seq,Table,PrefixAlias,NET,INPUT,Language,DateFM,SelInSel,SETUP,FixedWhere,LangUser") ; initialisatie variabelen I '$D(Language) S Language="E" I '$D(LangUser)!($G(LangUser)=" ") S LangUser=Language S QT=Language D QT^cAFVBO01 D ; KU 25.11.05 . N QT,QTU . S QT=LangUser . D QT^cAFVBO01 . S QTD=QT,QTDU=QTU ; NET = 1 indien opgeroepen via dotNET S UREF="^VB(0)" S:$G(NET) UREF="^VBN(0)" S BIOrigTab=7 S:$G(NET) BIOrigTab=11 S BIParNr=18 S:$G(NET) BIParNr=19 S BIInputPos=8 S:$G(NET) BIInputPos=13 S BIDefValue=9 S:$G(NET) BIDefValue=14 S ParPos=0 S:$G(NET) ParPos=1 ; indien .NET dan is parameter 1 = 0, 2 = 1, ... naar analogie met kolomnrs ; ; Datum formaat van de client S DateFM=$$DATEFM($G(DateFM)) ; ; reden : in VB is de eerste entree in een tabel steeds 0 S er="",SQL="" F i="SeqColumn","ParCol","Par","Seq","Table" I '$L($G(@i)) S @i="" ; ; GM : 01.06.05 : meerdere sortering F i=1:1 S OrderCol=$P(SeqColumn,D,i) Q:'$L(OrderCol) D . I OrderCol[" " S OrderCol=$P(OrderCol," ",$L(OrderCol," ")) ; indien Id van de kolom doorgegeven wordt ipv volgnr . S OrderBy(0,OrderCol)=+$P($P(Seq,D,i),"#") ; ASC\DESC . S OrderBy(1,+$P($P(Seq,D,i),"#",2))=OrderCol ; Volgorde in sortering = ColNr ; S:'$L($G(PrefixAlias)) PrefixAlias="T" F i=1:1:$L(GridTabId,"||") Q:GridTabId'["||" s GridTabId=$P(GridTabId,"||")_" "_$P(GridTabId,"||",2,$L(GridTabId,"||")) ; ophalen gegevens van het tabblad 11 I '$L($G(GridTabId)) S er="0\No Id for Grid.Tab" G YZ S GridTab=$G(@UREF@("GRID.TAB",GridTabId,0)) ; Standaardtab ? I '$L(GridTab) S GridTab=$G(@UREF@("USER.GRID.TAB",GridTabId,0)) ; usertab ? I '$L(GridTab) S er="0\No data for GridTabId "_GridTabId G YZ ; ophalen standaardtab waarvan gekopieerd werd S OrigTabId=$p(GridTab,D,BIOrigTab) I '$L(OrigTabId) S OrigTabId=GridTabId ; Eigenschappen van de originele tab waarvan gekopieerd werd S OrigTab(0)=$G(@UREF@("GRID.TAB",OrigTabId,0)) I '$L(OrigTab(0)) S er="0\No data for OrigTabId "_OrigTabId G YZ S OrigTab(1)=$G(^(1)) I '$P(OrigTab(1),D) S er="0\No definition for dynamic query" G YZ ; dynamisch querie ? 13 S GridId=$P(OrigTab(0),D) I '$L(GridId) S er="0\No Id for Grid" G YZ ; Algemene eigenschappen van de grid S Grid=$G(@UREF@("GRID",GridId,0)) I '$L(Grid) S er="0\No data for GridId "_GridId G YZ I '$L(Table) S Table=$P(Grid,D,2) ; ophalen hoofdtabel I '$L(Table) S er="0\No Table defined" G YZ S OrigTable=Table ; GM/KU 02.02.06 S Table=$$TABLE(Table) ; Haal vertaaltabel van de operatoren op 15 D TBLOPER ; ; opbouw tabel van de parameters : steeds met als index : Kolomnummer ; ParCol = 0 = parameters worden op kolom-niveau doorgegeven voor alle kolommen ; 1 = parameters worden op parameter-niveau doorgeven ; Indien geen parameter gedef. in kolom wordt in Caché getest of er een vaste waarde inzit ; Par = String met parameters per kolom : ; ParCol=0 : ; Parameter Col1\Parameter Col2\....\Parameter Coln ; ParCol=1 : ; Parameter 1\Parameter 2\....\Parameter n 2 K PAR S Col=OrigTabId_" " F S Col=$O(@UREF@("GRID.TAB.COL",Col)) Q:$E(Col,1,$L(OrigTabId)+1)'=(OrigTabId_" ") D . S B(0)=^(Col,0),ColNr=$P(B(0),D,4) . ; indien parameters doorgegeven op Kolom-niveau . I 'ParCol S PAR(ColNr)=$P(Par,D,ColNr+1) Q . ; indien parameters doorgegeven op parameter-niveau . S ParNr=$P(B(0),D,BIParNr) ; ophalen nr van de parameter . ; indien parameter ingevuld : waarde parameter komt uit de parameters doorgegeven vanuit VB . I $L(ParNr) D Q .. ; indien voor inputfunctie en er is geen waarde doorgegeven en geen input- of zichtbare kolom : ophalen defaultwaarde .. I $G(INPUT),'$L($P(Par,D,ParNr+ParPos)),'$P(B(0),D,BIInputPos)!'$P(B(0),D,15) S PAR(ColNr)=$P(B(0),D,BIDefValue) Q .. S PAR(ColNr)=$P(Par,D,ParNr+ParPos) . ; indien input-kolom : waarde parameter komt uit de parameters doorgegeven vanuit VB . ; I $P(B(0),D,BIInputPos) S PAR(ColNr)=$P(Par,D,ParNr) Q . S PAR(ColNr)=$P(B(0),D,BIDefValue) ; defaultwaarde van een kolom ; 3 ; Opbouwen van Col per kolom, maar enkel waar een SQLKolom ingevuld is ; en bepalen van de aliassen ; Dit is nodig aangezien bij een select ... in een selectstatement we desnoods een SQL-kolom en Alias moeten kunnen meegeven S Col=OrigTabId_" ",SELSEL=0 ; ,(ALIAS(Table),ALIAS("T1"))=PrefixAlias_1,AliasNr("T",1)=Table S ALIAS=$$ALIAS(PrefixAlias,Table,.ALIAS) ; KU : 06.02.06 F S Col=$O(@UREF@("GRID.TAB.COL",Col)) Q:$E(Col,1,$L(OrigTabId)+1)'=(OrigTabId_" ") D . S B(0)=^(Col,0),B(1)=$G(^(1)),B(2)=$G(^(2)) . D SETB ; beïnvloeden B(x) . S ColNr=$P(B(0),D,4) . ; indien geen SQL-kolom , Select ... in selectstatement . I '$L($P(B(1),D)) S:$L($P(B(2),D)) SELSEL=1 Q . I $P($P(B(1),D),"~",2)'=1 D .. ; ophalen FULL-reference van de SQL-Kolom .. S FULL=$$FULL($P(B(1),D),Table) .. S TABLE=$$TABLE($P(FULL,".",1,$L(FULL,".")-1)) .. S ALIAS=$$ALIAS(PrefixAlias,TABLE,.ALIAS) ; KU : 06.02.06 .. ; S ALIAS=$G(ALIAS(TABLE)) I '$L(ALIAS) S ALIAS=PrefixAlias_AliasNr,AliasNr=AliasNr+1,ALIAS(TABLE)=ALIAS .. S $E(FULL,1,$L(TABLE))=ALIAS ; vervangen tabel door alias . ; dummy-kolom . I $P($P(B(1),D),"~",2)=1 S FULL="" . S Col(ColNr)=FULL . D SET . ; GM 02.02.06 : x->y vervangen : enkel indien Add To Select=1 . I $L($P(Col(ColNr),D,2)),$P(B(1),D,2),$L($P(Col(ColNr),D),"->")=2 D .. ; GM 27.02.07: Enkel indien: .. ; Of - kolom gelinkt is met Data Dic. .. ; Of - het gaat om een DAMTOOL- of PROG-grid .. I '($L($P(B(0),D,45))!($P($P(B(0),D),".")="DAMTOOL")!($P($P(B(0),D),".")="PROG")) Q .. S ColRef=$P(Col(ColNr),D) .. S REFCL=$$REF(OrigTable,$P(ColRef,"->")) I '$L(REFCL) Q ; ophalen referentieklasse .. S ALIAS=$$ALIAS("R",REFCL_" "_$P(ColRef,"->"),.ALIASR) ; alias per ref.klasse en property .. S REF(REFCL_" "_$P(ColRef,"->"))=$P(ColRef,"->")_D_REFCL_D_ALIAS .. S REF(REFCL_" "_$P(ColRef,"->"),ColNr)="" .. S $P(Col(ColNr),D,2)=$$FUNC(ALIAS_"."_$P(ColRef,"->",2),$P(B(1),D,11)) .. ; S $P(Col(ColNr),D,2)=ALIAS_"."_$P(ColRef,"->",2) .. ; S FULL=$P(Col(ColNr),D) ; ; 2de maal aflopen om Select ... in Selectstatement op te bouwen 4 I 'SELSEL G 5 S Col=OrigTabId_" " 41 F S Col=$O(@UREF@("GRID.TAB.COL",Col)) Q:$E(Col,1,$L(OrigTabId)+1)'=(OrigTabId_" ") D I er Q . S B(0)=^(Col,0),B(1)=$G(^(1)),B(2)=$G(^(2)) . S ColNr=$P(B(0),D,4) 43 . I $L($P(B(1),D)) Q ; indien SQL-kolom . I '$L($P(B(2),D)) Q ; geen GridTabId voor een Select in Select ingevuld . D SETB ; Beïnvloeden B(x) 45 . S ColS=$P(B(2),D)_" ",ParColS=0 . ; opzoeken of er nrs van parameters in de GridTab (van Select... in Select) zitten . F S ColS=$O(@UREF@("GRID.TAB.COL",ColS)) Q:$E(ColS,1,$L($P(B(2),D))+1)'=($P(B(2),D)_" ") I $L($p(^(ColS,0),D,18)) S ParColS=1 . ; Samenstellen string met parameters . F i=1:1:$L($P(B(2),D,2),U) S COLPAR=$P($P(B(2),D,2),U,i),$P(ParS,D,i)=$$SELPAR(COLPAR) . ; Samenstellen Querie . I '$G(NET) S FULL=$$^dmSQL($P(B(2),D),ParColS,ParS,$P(B(2),D,3),$P(B(2),D,4),$P(B(2),D,5),$P(B(2),D,6),$G(Language),$G(DateFM),1) . I $G(NET),'$G(SETUP) S FULL=$$dotNET^dmSQL($P(B(2),D),ParColS,ParS,$P(B(2),D,3),$P(B(2),D,4),$P(B(2),D,5),$P(B(2),D,6),$G(Language),$G(DateFM),1) . I $G(NET),$G(SETUP) S FULL=$$dotNETS^dmSQL($P(B(2),D),ParColS,ParS,$P(B(2),D,3),$P(B(2),D,4),$P(B(2),D,5),$P(B(2),D,6),$G(Language),$G(DateFM),1) . I $P(FULL,D)=0 S er=FULL Q . S FULL="("_FULL_")",Col(ColNr)=FULL . D SET I $L(er) G YZ ; ; samenstellen Select 5 S ColNr="",Select="" F S ColNr=$O(Col(ColNr)) Q:ColNr="" I $L($P(Col(ColNr),D,2)) S Select=Select_$s($L(Select):", ",1:"")_$P(Col(ColNr),D,2) I $P(OrigTab(1),D,2) S Select="DISTINCT "_Select ; Distinct ? ; samenstellen From 51 D ALIAST($P($G(FixedWhere),D,4),$P($G(FixedWhere),D,5),OrigTable,DateFM,$G(INPUT),.ALIAS) ; Opzetten ALIAS("MT" S TABLE="",From=$$ALIASF($P(OrigTab(1),D,4),.ALIAS) ; Eventueel vast From-statement I $D(ALIAS("MT",0,1)) S From=From_$S($L(From):", ",1:"")_"Tech.Temp MT1" ; GM - 25.06.07 - Algemene selectie F S TABLE=$O(ALIAS("T",TABLE)) Q:TABLE="" I TABLE'="T1" S From=From_$S($L(From):", ",1:"")_$P(TABLE," ")_" "_ALIAS("T",TABLE) S VNR=1 F S VNR=$O(ALIAS("MT",0,VNR)) Q:VNR="" S From=From_$S($L(From):", ",1:"")_"Tech.Temp MT"_VNR ; GM - 25.06.07 - Algemene selectie ; GM 02.02.06 : samenstellen outer joins I $L($O(REF(""))) S From="%INORDER "_From S Ref="" F S Ref=$O(REF(Ref)) Q:'$L(Ref) D . ; indien niet in select ("" of null as) en niet in where-statement moet er niets gebeuren. . S ColNr="" . F S ColNr=$O(REF(Ref,ColNr)) Q:ColNr="" I '(('$L($P(Col(ColNr),D,2))!($E($P(Col(ColNr),D,2),1,7)="null as"))&'$l($P(Col(ColNr),D,3,15))) Q . I '$L(ColNr) Q ; geen enkele kolom gevonden . S From=From_" LEFT OUTER JOIN "_$P(REF(Ref),D,2)_" "_$P(REF(Ref),D,3)_" ON "_$P(REF(Ref),D)_" = "_$P(REF(Ref),D,3)_".ID" ; samenstellen Where ---------------------------------------- 53 ; vast Where-stamenent uit link tussen mtemp99 en hoofdtabel (GM - 25.06.07 - Algemene selectie) F i=0:1:1 S VNR="" F S VNR=$O(ALIAS("MT",i,VNR)) Q:'$L(VNR) S WHERE((1000-(100*i))-VNR,-1)=ALIAS("MT",i,VNR) ; vast Where-statement vanuit VB meegegeven : indien veld 3 op 1 : Vast Where uit definitie negeren I $L($P($G(FixedWhere),D)) S WEIGHT=$P(FixedWhere,D,2) S:'$L(WEIGHT) WEIGHT=-2 S WHERE(WEIGHT,-1)=$$ALIASF($P(FixedWhere,D),.ALIAS) I $P(FixedWhere,D,3) G 54 ; vast Where-statement in def. grid.tab I $L($P(OrigTab(1),D,3)) S WEIGHT=$P(OrigTab(1),D,5) S:'$L(WEIGHT) WEIGHT=-1 S WHERE(WEIGHT,-1)=$$ALIASF($P(OrigTab(1),D,3),.ALIAS) 54 S WEIGHT="",Where="" F S WEIGHT=$o(WHERE(WEIGHT),-1) Q:WEIGHT="" S ColNr="" F S ColNr=$O(WHERE(WEIGHT,ColNr)) Q:ColNr="" D . I ColNr=-1 S Where=Where_$s($L(Where):" AND ",1:"")_WHERE(WEIGHT,ColNr) Q . I '$L($P(Col(ColNr),D,3)) Q . S Where=Where_$s($L(Where):" AND ",1:"") . S Where=Where_$S($L($P(Col(ColNr),D,11)):"(",1:"") ; eventueel OR . S Where=Where_$P(Col(ColNr),D,3)_$S($L($P(Col(ColNr),D,4)):" ",1:"")_$P(Col(ColNr),D,4)_" "_$P(Col(ColNr),D,5) . ; eventueel OR voor dezelfde kolom . I $L($P(Col(ColNr),D,11)) S Where=Where_" OR "_$P(Col(ColNr),D,''$L($P(Col(ColNr),D,12))*9+3)_$S($L($P(Col(ColNr),D,10)):" ",1:"")_$P(Col(ColNr),D,10)_" "_$P(Col(ColNr),D,11)_")" ; samenstellen Group By : toekomstig 55 S GroupBy="" ; samenstellen Having : toekomstig 57 S Having="" ; samenstellen Order By ; GM : 01.06.05 : meerdere sortering 59 S Seq="",OrderBy="" F S Seq=$O(OrderBy(1,Seq)) Q:Seq="" S ColNr=OrderBy(1,Seq) I $L($P($G(Col(ColNr)),D,7)) S OrderBy=OrderBy_$s($L(OrderBy):", ",1:"")_$P(Col(ColNr),D,7) ; 6 I $G(scr) W !,Select,!,From,!,Where,!,OrderBy S SQL="SELECT "_Select_" FROM "_From I $L(Where) S SQL=SQL_" WHERE "_Where I $L(GroupBy) S SQL=SQL_" GROUP BY "_GroupBy I $L(Having) S SQL=SQL_" HAVING "_Having I $L(OrderBy) S SQL=SQL_" ORDER BY "_OrderBy ; YZ Q $S($L(er):er,1:SQL) ; ALIAST(GRIDIDS,PROPS,TABLE,DATEFM,INPUT,ALIAS) ; Opzetten ALIAS("MT" GM - 25.06.07 - Algemene selectie ; Input: GRIDIDS: GridIds, gescheiden door ";" ; PROPS: Overrule properties, gescheiden door ";" ; TABLE: Hoofdtabel ; DATEFM: Datum formaat ; INPUT: Opgeroepen via "INPUT"-ingang? ; ALIAS: Tabel met aliassen, doorgeven als referentie ; ; LAYOUT: ; ------ ; ; ALIAS("MT",0: Specifieke selecties (komen in From en Where-statement) ; ,0,x) = Where statement ; ; "MT",1: Alle records in selectie (wordt enkel vermeld in Where-statement) ; ,1,x) = Where statement ; ; S $ZT="TRAP^cAN000" N STemp,PTemp,N,GRIDID,PROP,VNR,LEV,SQL,PC ; ; Controle parameters ALIAST1 I '$L($G(GRIDIDS)) G ALIASTZ ; ; Variabelen opzetten ALIAST2 S STemp="^mtemp99(GRIDID,""COMMON"")",PTemp="^mtemp99(GRIDID,""COMMON.PAR"")",PC=0 ; ; ALIAST3 S PC=PC+1,GRIDID=$P($G(GRIDIDS),";",PC),PROP=$P($G(PROPS),";",PC) I '$L(GRIDID) G ALIASTZ S:'$L(PROP) PROP=$P($G(@PTemp@(0)),D,3) I '$L(PROP) G ALIAST9 ; ; Specifieke records ALIAST4 I $P($G(@PTemp@(0)),D),$$UC^cAFA1(PROP)'="ID" G ALIAST5 I $G(INPUT) G ALIAST6 ;I '((PC=1)&$G(DETAIL)) I '$D(@STemp) G ALIAST9 S VNR=$O(ALIAS("MT",0,""),-1)+1 S ALIAS("MT",0,VNR)=$$ALIASF("(MT"_VNR_".GridId='"_GRIDID_"' AND MT"_VNR_".TempId=%ALPHAUP("_$$TABLE(TABLE)_"."_PROP_"))",.ALIAS) G ALIAST9 ; ; Alle records ALIAST5 S LEV=$$ALIASF($$TABLE(TABLE)_"."_PROP_"->LevelUsage",.ALIAS) S VNR=$O(ALIAS("MT",1,""),-1)+1 I '$P(@PTemp@(0),D,2) S ALIAS("MT",1,VNR)="("_LEV_" = '0')" I $P(@PTemp@(0),D,2) S ALIAS("MT",1,VNR)="("_LEV_" <> '2' OR "_LEV_" IS NULL OR "_LEV_" = '')" S PAR=$G(@PTemp@(1)) I '($L($P(PAR,D,3))!$L($P(PAR,D,4))) G ALIAST9 ; Geen parameters of FW doorgegeven S SQL=$$QUERY^cAFVBI01($P(PAR,D),"","","","","",$P(PAR,D,2),$P(PAR,D,3),DATEFM,"",$P(PAR,D,4),"") S SQL=$P(SQL," AND ",2) I '$L(SQL) G ALIAST9 S ALIAS("MT",1,VNR)=ALIAS("MT",1,VNR)_" AND "_$$REPL^cAFA10(SQL,"T1.",$$ALIASF($$TABLE(TABLE)_"."_PROP_"->",.ALIAS)) G ALIAST9 ; ; Specifieke records Aangeroepen via INPUT (enkel WHERE-statement) ALIAST6 S VNR=$O(ALIAS("MT",1,""),-1)+1 S ALIAS("MT",1,VNR)="%ALPHAUP(T1."_PROP_")" S ALIAS("MT",1,VNR)=ALIAS("MT",1,VNR)_" IN (SELECT MT"_VNR_".TempId FROM TECH.TEMP MT"_VNR S ALIAS("MT",1,VNR)=ALIAS("MT",1,VNR)_" WHERE MT"_VNR_".GridId ='"_GRIDID_"')" ; ALIAST9 G ALIAST3 ALIASTZ Q ; ALIAS(PREFIX,TABLE,ALIAS) S $ZT="TRAP^cAN000" N ALIASNR S ALIAS=$G(ALIAS("T",TABLE)) I $L(ALIAS) G ALIASZ I '$L($G(PREFIX)) S PREFIX="T" S ALIASNR=$O(ALIAS("A",PREFIX,""),-1)+1 S ALIAS=PREFIX_ALIASNR,ALIAS("T",TABLE)=ALIAS,ALIAS("A",PREFIX,ALIASNR)=TABLE ALIASZ Q ALIAS ; ALIASF(R,ALIAS) ; aliassen invullen in de vaste staments I '$L(R) G ALIASFZ N i,j S i="" F S i=$O(ALIAS("T",i)) Q:i="" s j="" F S j=$F($$UC^cAFA1(R),i_".",j) Q:'j S $E(R,j-$L(i_"."),j-1)=ALIAS("T",i)_".",j=j-($L(i)-$L(ALIAS("T",i))) ALIASFZ Q R ; SETB ; beïnvloeden B N R,R1 S $ZT="TRAP^cAN000" ; Indien User Tab en de kolom staat op zichtbaar of In de Standaardtab staat 'Beheerbaar op neen' en 'In Select' op ja : In Select moet op ja gezet worden I $G(SETUP),OrigTabId'=GridTabId s $P(B(1),D,2)=(($S('$P(B(0),D,38):$p(B(1),D,2),1:0))!$P($G(@UREF@("USER.GRID.TAB.COL",GridTabId_" "_$P(Col," ",$L(Col," ")),0)),D,15)) ; invullen default functie in de functies voor select, where, ... I $L($P(B(1),D,5)) f i=11:1:16 S $P(B(1),D,i)=$S($P(B(1),D,i)=0:"",'$L($P(B(1),D,i)):$P(B(1),D,5),1:$P(B(1),D,i)) I $P(B(1),D)["#" D ; indien taalafhankelijk . S R="" I $P(B(1),D)["->" S R=$P($P(B(1),D),"->",1,$L($P(B(1),D),"->")-1)_"->",$P(B(1),D)=$P(B(1),R,2,99) . S R1=$P($P(B(1),D),"#",QTDU) S:'$L(R1) R1=$P($P(B(1),D),"#") . S $P(B(1),D)=R_R1 ; Indien kolom buiten gebruik (=n.v.t.) staat: In Select moet op neen gezet worden - GM 04.05.07 I $P(B(0),D,30) S $P(B(1),D,2)=0 Q ; CONVDT(PAR) ; Variabel gegeven "D" (=vandaag) omvormen naar datum ; Bv: >D+2 wordt >Overmorgen N i,DS,R S R=PAR I $$UC^cAFA1(PAR)'["D" G CONVDTZ S PAR=$$UC^cAFA1(PAR) S R=$P(PAR,"D")_$$HD^cAFD1(+$H+$P(PAR,"D",2)) CONVDTZ Q R ; DATEFM(R) ; convert to the wright dateformat I '$L($G(R)) S R="'DD/MM/YYYY'" S:$E(R)'="'" R="'"_R S:$E(R,$L(R))'="'" R=R_"'" S R=$$UC^cAFA1(R) ; D naar DD I R["D",R'["DD" S i=$F(R,"D"),R=$E(R,1,i-1)_"D"_$E(R,i,$L(R)) ; M naar MM I R["M",R'["MM",R'["MO" S i=$F(R,"M"),R=$E(R,1,i-1)_"M"_$E(R,i,$L(R)) DATEFMZ Q R ; FULL(COL,TABLE) ; bepalen van de FULL-reference van een SQL-Kolom : Pakket.Table.Column (Pakket niet nodig : ""= SQLUser) N R S R=$P(COL,"->") ; Kolom zonder verwijzing naar kolom van andere tabel (KOL->Kol2) S R=$P(R,".",1,$L(R,".")-1) I '$L(R) S R=TABLE_"."_COL E S R=COL FULLZ Q R ; FUNC(COL,FUNC) ; Kolom COL in functie FUNC plaatsen ; ACC = 1 : '' plaatsen N R S R=COL I '$L(R) G FUNCZ I '$L($G(FUNC)) G FUNCZ S R=FUNC F Q:R'["~col~" S R=$P(R,"~col~")_COL_$P(R,"~col~",2,99) F Q:R'["~DateFM~" D . ; indien datum DD.MM.YY is steeds 'DD.MM.YY' als datumformaat . I COL?1"'"2N1"."2N1"."2N1"'" S R=$P(R,"~DateFM~")_"'DD.MM.YY'"_$P(R,"~DateFM~",2,99) Q . S R=$P(R,"~DateFM~")_DateFM_$P(R,"~DateFM~",2,99) I FUNC["%ALPHAUP" S R=$$EC^cAFA1(R) G FUNCZ I $$UC^cAFA1(R)["TO_DATE" S i=$$todate^%qarfunc(COL,$S(COL'?1"'"2N1"."2N1"."2N1"'":DateFM,1:"'DD.MM.YY'")) I i'?1.N ZTRAP i FUNCZ Q R ; PAR(PAR,FUNC,DEFOP) ; parameter omvormen + bepalen operator ; uitgang : operator_D_parameter S $ZT="TRAP^cAN000" N OP,R,i,OPAR I $$UC^cAFA1(FUNC)["TO_DATE" S PAR=$$CONVDT(PAR) S OP="" S:'$L(DEFOP) DEFOP="LIKE" I "\IS NULL\IS NOT NULL\"[(D_$$UC^cAFA1(PAR)_D) S (OPAR,R)=$$UC^cAFA1(PAR) G PARZ ; NULL I $E(PAR)?1AN G PARA ; geen operator meegegeven I $D(OPER(" "_$E(PAR,1,2))) S OP=OPER(" "_$E(PAR,1,2)),R=3 G PARA I $D(OPER(" "_$E(PAR))) S OP=OPER(" "_$E(PAR)),R=2 G PARA ; I "<>="[$E(PAR) S OP=$G(OPER(" "_$E(PAR))),R=2 G PARA ; I $E(PAR)="'",$E(PAR,2)?1AN S OP=$G(OPER(" '")),R=2 G PARA ; I $E(PAR)="'" S OP=$G(OPER(" "_$E(PAR,1,2))),R=3 G PARA PARA I '$L(OP) S OP=DEFOP,R=1 S PAR=$E(PAR,R,$L(PAR)),OPAR=PAR ; indien = of '= of != of <> doorgegeven werd zonder waarde, deze als IS NULL of IS NOT NULL aanschouwen I '$L(PAR),OP="="!(OP="<>") S (OPAR,R)=$S(OP="=":"IS NULL",1:"IS NOT NULL"),OP="" G PARZ I PAR["'" F i=1:1:$L(PAR)+1 I $E(PAR,i)="'" S:$E(PAR,i+1)'="'" PAR=$E(PAR,1,i)_"'"_$E(PAR,i+1,$L(PAR)) S i=i+1 ; indien er een SQLKolom doorgegeven wordt : geen ' ' toevoegen (kan enkel maar vanuit select ... in selectstatement I $P(PAR,$C(31),2)=2 S (R,OPAR)=$P(PAR,$C(31)) G PARZ I OP["LIKE" S:PAR["*" PAR=$TR(PAR,"*","%") I $E(PAR,$L(PAR))'="%" S PAR=PAR_"%" S R="'"_PAR_"'" I '$L($G(FUNC)) G PARZ I OP'["LIKE" S R=$$FUNC(R,FUNC) G PARZ ; indien functie : functie toepassen op de waardes (en niet op '%') ; voorbeeld : 'A%' wordt : Functie('A')_'%' S R="" F i=1:1:$L(PAR,"%") D . S K=$P(PAR,"%",i) . I '$L(K) Q . S K="'"_K_"'" . S K=$$FUNC(K,FUNC) . I i>1,i<$L(PAR,"%") S R=R_"_'%'_" ; GM 01.06.05 Fout in where-statement (ab*cd) S R=R_$S(i=2:"'%'_",1:"_'%'_") . S R=R_K . I i=$L(PAR,"%") S R=R_"_'%'" I OP'["LIKE" G PARZ F Q:$E(R)'="_" S R=$E(R,2,$L(R)) I $E(R,$L(R)-2,$L(R))'="'%'" S R=R_$S($L(R):"_",1:"")_"'%'" PARZ Q OP_D_R_D_OPAR ; REF(CL,PROP) ; opzoeken referentieklasse van een property S $ZT="TRAP^cAN000" N REF,FieldRef S REF="" I $L(PROP,".")=2 S PROP=$P(PROP,".",2) ; krijgt reeds T1.prop door S FieldRef=##CLASS(%Dictionary.PropertyDefinition).%OpenId(CL_"||"_PROP,0) I '$L(FieldRef) G REFZ S REF=FieldRef.Type D FieldRef.%Close() S FieldRef="" S REF=$$TABLE(REF) REFZ Q REF ; SELPAR(COLPAR) ; omvormen N R I '$L($TR(COLPAR,"~")) S R="" G SELPARZ ; verwijzing naar kolomnr + waarde nemen van de kolom I +$P(COLPAR,"~",2)=0 S R=$P($G(Col($P(COLPAR,"~"))),D,6) ; vaste waarde I $P(COLPAR,"~",2)=1 S R=$P(COLPAR,"~") ; verwijzing naar kolomnr + SQL-kolom nemen van de kolom I $P(COLPAR,"~",2)=2 S R=$P($G(Col($P(COLPAR,"~"))),D) I $L(R) S R=R_$C(31)_2 ; is er een operator ? I $L(R),$L($P(COLPAR,"~",3)) S R=$P(COLPAR,"~",3)_R SELPARZ Q R ; SET ; aanvullen Col met Select, where, .... ; Select-Item indien Kolom in Select-statement moet komen I $P(B(1),D,2) S $P(Col(ColNr),D,2)=$$FUNC(FULL,$P(B(1),D,11)) ; Indien niet opgeroepen via dmSQL(... SelInSel) : Kolom staat niet als in Select en het is geen Select In Select-statement (begint met "(")) I $G(SETUP),'$G(SelInSel),'$P(B(1),D,2),$L($P(Col(ColNr),D)) S $P(Col(ColNr),D,2)="null as "_$S($E(Col(ColNr))'="(":$TR($P($P(Col(ColNr),D),".",2,99),"->","_"),1:"SubQuery") ; Where-Item indien er een parameter is doorgegeven voor de kolom SETA I $L($G(PAR(ColNr))) D . S $P(Col(ColNr),D,4,6)=$$PAR(PAR(ColNr),$P(B(1),D,13),$P(B(1),D,4)) . ; gewone where . I ($P(Col(ColNr),D,5)_" ")'[(" NULL ") S $P(Col(ColNr),D,3)=$$FUNC(FULL,$P(B(1),D,12)) . ; zoeken op IS NULL of IS NOT NULL . I ($P(Col(ColNr),D,5)_" ")[(" NULL ") D .. S $P(Col(ColNr),D,3)=FULL .. ; instellen OR voor dezelfde kolom .. S $P(Col(ColNr),D,10)=$S($P(Col(ColNr),D,5)["NOT":"<>",1:"="),$P(Col(ColNr),D,11)="""""" . ; in deze gevallen "Or col is null" bijvoegen" . I "\<>\<\<=\"[(D_$P(Col(ColNr),D,4)_D),$L($P(Col(ColNr),D,6)) D .. S $P(Col(ColNr),D,12)=FULL ; origenele kolom wegschrijven zonder functie .. S $P(Col(ColNr),D,10)="IS NULL",$P(Col(ColNr),D,11)="OR "_$P(Col(ColNr),D,12)_" = """"" . S WEIGHT=$P(B(1),D,3) S:'$L(WEIGHT) WEIGHT=-1 ; bepalen gewicht . S WHERE(WEIGHT,ColNr)="" ; Order By-item indien kolom overeenstemt met de doorgegeven sorteerkolom (SeqColumn) ; GM : 01.06.05 : meerdere sortering SETC I $D(OrderBy(0,ColNr)) S R=$$FUNC(FULL,$P(B(1),D,14)),$P(Col(ColNr),D,7)=R_$S($L(R):" "_$P("ASC\DESC",D,OrderBy(0,ColNr)+1),1:"") ; Group by : toekomst ; S $p(Col(ColNr),D,8)=$$FUNCT(FULL,$P(B,D,15)) ; Having : toekomst ; S $p(Col(ColNr),D,9)=$$FUNCT(FULL,$P(B,D,16)) I $G(scr) W !,ColNr,?10,Col(ColNr) SETZ Q ; TABLE(R) ; tabel omvormen I '$L(R) G TABLEZ S R=$$UC^cAFA1(R) F Q:$L(R,".")=2 S R=$P(R,".")_"_"_$P(R,".",2,99) TABLEZ Q R ; TBLOPER ; ophalen tabel met operatoren ; in eerste instantie manueel opgezet, misschien later in tabel ? S OPER(" =")="=" S OPER(" '=")="<>" S OPER(" !=")="<>" S OPER(" <>")="<>" S OPER(" >")=">" S OPER(" <")="<" S OPER(" '<")=">=" S OPER(" !<")=">=" S OPER(" >=")=">=" S OPER(" '>")="<=" S OPER(" !>")="<=" S OPER(" <=")="<=" S OPER(" ")="LIKE" S OPER(" '")="NOT LIKE" S OPER(" !")="NOT LIKE" Q ; ERR ; errortrap I $$UC^cAFA1($ze)["TODATE"!($ze["ILLEGAL DATE")!($ze["todate")!($ze["") S $ze="",OK="0\"_$P($T(@("T1"_QT)),U,2) G ERRZ D LOG^dmERROR S OK=0_$P($T(@("T2"_QT)),U,2)_$ze s $ze="" ERRZ Q OK ; ZZ ; 28.08.07 - 14 u 49 * V8.09