#include vhLib.Macro #include Prod.Product #define HTML(%v) $ZCVT(%v,"O","HTML") #define Attrib(%n,%v) $$PARAMFILL^XMLWRITE(%n,$$$HTML(%v)) #define AttribInvers(%v) $S($G(%arInvers("DItem",%v,1))=1:$$$Attrib("invers",1), 1:"") ; Prod.GAMeta.EM.Item XMLWrite ; Parameters: DItem,DevObj,Taal,Opties,XSLURL #define IsList(%v) $$IsList^vhLib(%v) Do XMLBuildArrayInvers(DItem) If (..Code?1(1"PARAM",1"PARAMFORMULE",1"PARAMOBJ")) Do . If ..Code="PARAMOBJ" Do TAGWRITE^XMLWRITE(DevObj,"WAARDE",DItem.Get("ObjectID"),$$$Attrib("class",DItem.Get("ClassName"))) . Else Do TAGWRITE^XMLWRITE(DevObj,"WAARDE",$$xmlwFormatValue(DItem.Get("Val")),$$$Attrib("unit","")) . Do TAGWRITE^XMLWRITE(DevObj,"PROGLABEL",DItem.Get("ProgLabel")) . Do XMLFabrTekst("FabrTekst") . Do XMLAddTags Else If ..Code="KST" Do . ; KST Niet opnemen in XML Else Do . Do XMLAddTags Quit xmlwFormatValue(ItemVal) Quit:(ItemVal="")||('$$$IsList(.ItemVal)) ItemVal Quit $$$LCVT(.ItemVal) ; Prod.GAMeta.EM.ItemPR XMLWritePR ; Parameters: DItem,DevObj,Taal,Opties,XSLURL New PRNr,Prod Do XMLBuildArrayInvers(DItem) Do xmlwPRBasis Do XMLAddTags Quit ; Prod.GAMeta.EM.ItemPR1DIM XMLWritePR1DIM ; Parameters: DItem,DevObj,Taal,Opties,XSLURL #define ProptPR(%v1,%v2) $$$LCase(##class(Prod.Product).GetPropViaNr(%v1,%v2)) New PRNr,Prod Do XMLBuildArrayInvers(DItem) Do xmlwPRBasis If 'DItem.Autos.IsDefined("FabrTekst") { Do TAGWRITE^XMLWRITE(DevObj,"DIMHF",DItem.Get("DimHF"),$$$Attrib("unit",$$$ProptPR(PRNr,"HFEenheid")),$$$AttribInvers("DimHF")) } Do WRITELN^XMLWRITE(DevObj) Do XMLAddTags Quit XMLFabrGroep #define Delim "\" New XMLGroepen,XMLGroep,i Set XMLGroepen=DItem.EvalTemplAuto("FabrGroep") Set XMLGroep=$P(XMLGroepen,$$$Delim,1) Do XMLFabrGroepAndSortTags(DevObj,XMLGroep,1) ;For i=1:1:$L(XMLGroepen,$$$Delim) Do ;. Set XMLGroep=$P(XMLGroepen,$$$Delim,i) ;. Do TAGWRITE^XMLWRITE(DevObj,"GROEP",XMLGroep,$$$Attrib("OMS",$$$UCASE($E(XMLGroep,1,99)))) ;. Do XMLFabrGroepAndSortTags(DevObj,XMLGroep,1) Quit XMLFabrGroepAndSortTags(DevObj,pdlGroepSort,blnWithSort) #define Delim ";" Set XMLGroep=$P(pdlGroepSort,$$$Delim,1) Set SortKey=$P(pdlGroepSort,$$$Delim,2) ; _DItem.Get("PRNr") ; _(DItem.Code) Do TAGWRITE^XMLWRITE(DevObj,"GROEP",XMLGroep,$$$Attrib("OMS",$$$UCase(XMLGroep))) Do:(blnWithSort)&&($L(SortKey)) TAGWRITE^XMLWRITE(DevObj,"SORT",SortKey) Quit XMLWriteExtra ; Parameters: DItem,DevObj,ParamKey ;d WL^vhDBG("XMLWriteExtra : "_ParamKey_" - "_DItem) Do XMLFabrTekst(ParamKey) Quit XMLFabrTekst(ParamKey) Quit:('DItem.Autos.IsDefined(ParamKey)) New lbTekst,Qty,DimHF,Unit Set lbTekst=DItem.EvalTemplAuto(ParamKey) Quit:(lbTekst="") If $$$IsList(lbTekst) Do . Do XMLFabrGroepAndSortTags(DevObj,$LG(lbTekst,1),1) . Do TAGWRITE^XMLWRITE(DevObj,"LANGTEKST",$LG(lbTekst,2)) . Do:($LD(lbTekst,3)) . . Set DimHF=$LI(lbTekst,3) . . If DimHF?.E1(1"mm") Do . . . Set Unit="mm" ; is nog hard-coded . . . Set DimHF=$$$Replace(DimHF,Unit,"") . . . Do TAGWRITE^XMLWRITE(DevObj,"DIMHF",DimHF,$$$Attrib("unit",Unit),$$$AttribInvers("DimHF")) ; waarde en unit zijn opgesplitst in val en attribute . . Else Do . . . Do TAGWRITE^XMLWRITE(DevObj,"DIMHF",DimHF,$$$AttribInvers("DimHF")) . Do:($LD(lbTekst,4)) . . Set Qty=$LI(lbTekst,4) . . If Qty?.E1(1"st") Do . . . Set Unit="st" ; is nog hard-coded . . . Set Qty=$$$Replace(Qty,Unit,"") . . . Do TAGWRITE^XMLWRITE(DevObj,"QTY",Qty,$$$Attrib("unit",Unit),$$$AttribInvers("Qty")) ; waarde en unit zijn opgesplitst in val en attribute . . Else Do . . . Do TAGWRITE^XMLWRITE(DevObj,"QTY",Qty,$$$AttribInvers("Qty")) . Do:($LD(lbTekst,5)) TAGWRITE^XMLWRITE(DevObj,"MAGAZIJN",$LI(lbTekst,5)) . Do:($LD(lbTekst,6)) TAGWRITE^XMLWRITE(DevObj,"KORTTEKST",$LI(lbTekst,6)) Else Do . ; alleen LangTekst . Do TAGWRITE^XMLWRITE(DevObj,"LANGTEKST",lbTekst) Do WRITELN^XMLWRITE(DevObj) Quit XMLAddTags Quit:('DItem.Autos.IsDefined("XMLTags")) New lbTags,i Set lbTags=DItem.EvalTemplAuto("XMLTags") Quit:(lbTags="") For i=1:1:$LL(lbTags) Do:($LD(lbTags,i)) . Do WRITE^XMLWRITE(DevObj,$LI(lbTags,i)) . Do WRITELN^XMLWRITE(DevObj) Quit xmlwPRBasis #define IsValidPR(%v) (%v?2.6N) New KMVal If DItem.Autos.IsDefined("FabrTekst") Do Quit . Set PRNr=DItem.Get("PRNr") . Do XMLFabrTekst("FabrTekst") ; Else Do XMLFabrGroep Set PRNr=DItem.Get("PRNr") ; Afdekkkappen kunnen klantgebonden zijn, indien de bouwsteen afwijkt van het product in DItem dan wordt het bouwsteen product gebruikt If DItem.Label?1(1"PRAKLI",1"PRAKRE") Do . Set MPRNr=DItem.Product.ProductGetObjectId() . Quit:MPRNr'?4.7N . Set HFPRNr=$P($G(^PRBS("BS",MPRNr,DItem.Label_".001")),"\",1) . Quit:HFPRNr'?4.7N . Quit:HFPRNr=PRNr . Set PRNr=HFPRNr . Do DItem.Parameters.SetAt(HFPRNr,"PRNr") ; ingeheugen wijzigen van Parameters . Do DItem.Parameters.SetAt($$$PRGet($$$KortTekst),"KTekst") . Set:('DItem.IsFixed("PRNr")) DItem.FixedKeys=DItem.FixedKeys_$LB("PRNr") ; Fixed -> speciale markering van langtekst en korttekst Do TAGWRITE^XMLWRITE(DevObj,"PRNR",PRNr) Do TAGWRITE^XMLWRITE(DevObj,"LANGTEKST",$S($$$IsValidPR(PRNr):$$xmlwBuildLangTekst, 1:"["_DItem.Label_"]")) Do TAGWRITE^XMLWRITE(DevObj,"KORTTEKST",DItem.Get("KTekst")) Do xmlwKORTTEKSTfmt Do TAGWRITE^XMLWRITE(DevObj,"QTY",DItem.Get("Qty"),$$$Attrib("unit","st"),$$$AttribInvers("Qty")) Do WRITELN^XMLWRITE(DevObj) Quit xmlwBuildLangTekst() ; Als FabrOms niet bestaat, dan ..GetLangTekst() ; Als FabrOms wel bestaat, dan EvalTemplAuto("FabrOms") ; FabrOms kan (lees: zal meestal) de exec "Meta.GetOmsViaKenm()" bevatten Quit:(DItem.IsFixed("PRNr")) "### "_..GetLangTekst(PRNr,DItem,1)_" ###" Quit:('DItem.Autos.IsDefined("FabrOms")) ..GetLangTekst(PRNr,DItem,1) ; Else: LangTekst opbouwen adh. van FabrOms ; (??? OOK indien geen product gevonden ???) New txt Set txt=DItem.EvalTemplAuto("FabrOms") Quit txt xmlwKORTTEKSTfmt #define MarkInvers(%v) ""_%v_"" If DItem.IsFixed("PRNr") Do . Set KTxtFmt=DItem.Get("KTekst") . Set:($L(KTxtFmt)) KTxtFmt=$$$MarkInvers(KTxtFmt) Else Do . Set KTxtFmt=$$xmlwBuildKTekst(DItem) Do:($L(KTxtFmt)) TAGWRITE^XMLWRITE(DevObj,"KORTTEKSTfmt",$$$Replace(KTxtFmt," "," ")) Quit xmlwBuildKTekst(DItem) Quit:(+$G(%arInvers("DItem","KTekst"))<1) "" ; Build KortTekst + apply INVERS when necessary New KTxt,i Set KTxt=DItem.Get("KTekst") Quit:(KTxt="") "" Do @("xmlwBuildINVktxt"_DItem.Label) Set Self="" Quit $G(KTxt) xmlwBuildINVktxtPRBDHO Set:($G(%arInvers("DItem","KTekst","LD"))=1) $E(KTxt,1,8)=$$$MarkInvers($E(KTxt,1,8)) Quit xmlwBuildINVktxtPRLALI ; idem voor Links/Rechts xmlwBuildINVktxtPRLARE Set i=$L(KTxt) Set:($G(%arInvers("DItem","KTekst","KL"))=1) $E(KTxt,i-3,i)=$$$MarkInvers($E(KTxt,i-3,i)) Set:($G(%arInvers("DItem","KTekst","DC"))=1) $E(KTxt,10,11)=$$$MarkInvers($E(KTxt,10,11)) Set:($G(%arInvers("DItem","KTekst","ZW"))=1) $E(KTxt,1,9)=$$$MarkInvers($E(KTxt,1,9)) Quit xmlwBuildINVktxtPRCPLI ; idem voor Links/Rechts xmlwBuildINVktxtPRCPRE Set:($G(%arInvers("DItem","KTekst","DK"))=1) $E(KTxt,1,9)=$$$MarkInvers($E(KTxt,1,9)) Quit XMLBuildArrayInvers(DItem) #define DItemGetKenmVal(%v) DItem.MetaItem.GetKenmVal(%v,DItem.Get("PRNr"),DItem.Get("KenmGrp")) #define IsFixedPR DItem.IsFixed("PRNr") Quit:(DItem.Product.MetaStruct.Code'="TBX") Kill %arInvers("DItem") Quit:(DItem.Label="") Quit:($TEXT(@("xmlwArrayInvers"_DItem.Label))="") ; Else: Build KortTekst + determine if INVERS must be applied New Self,tmpAr Set Self=DItem Do @("xmlwArrayInvers"_DItem.Label) Do xmlwSubNodeInversAny(.tmpAr,"KTekst") Merge %arInvers("DItem")=tmpAr Quit xmlwSubNodeInversAny(tmpAr,Node) ; tmpAr als .local doorgeven ; Counts the number of TRUE conditions for this Node ; tmpAr("KTekst","KL")=1 ; tmpAr("KTekst","ZW")=1 ; ==> Set tmpAr("KTekst")=2 New Key,dummy Set tmpAr(Node)=0 Set Key="" For Set Key=$O(tmpAr(Node,Key)) Quit:(Key="") Set:($G(tmpAr(Node,Key))=1) dummy=$INCREMENT(tmpAr(Node)) Quit ; Labels via INDIRECT : xmlwArrayInvers... xmlwArrayInversPRBDHO ; Bodem (Hout) Set tmpAr("KTekst","LD")=($$$DItemGetKenmVal("LadeDiepte")'=500) Set tmpAr("FabrOms","Kleur")=('$$$IsFixedPR)&&(($$$DItemGetKenmVal("Kleur")'="LG")||(DItem.Val("KB")'="LG")) Set tmpAr("DimHF",1)=1 Quit xmlwArrayInversPRRUGHS ; Rug (Hout) Set tmpAr("FabrOms","Kleur")=('$$$IsFixedPR)&&($$$DItemGetKenmVal("Kleur")'="LG") Quit xmlwArrayInversPRRUGLI ; Rughouders xmlwArrayInversPRRUGRE ; idem voor Links/Rechts Set tmpAr("FabrOms","RugHoogte")=('$$$IsFixedPR)&&($$$DItemGetKenmVal("RugHoogte")?1.A1"-"1.A) ; Speciale "L"-rugwandhouder voor Verlaagde rug (1e item uit Kenmerkwaarden) Quit /* xmlwArrayInversPRRUGV1 Set tmpAr("FabrOms","Kleur")=('$$$IsFixedPR)&&($$$DItemGetKenmVal("Kleur")'="MG") Quit */ xmlwArrayInversPRSCRHO ; Bodem (Hout) Set tmpAr("Qty",1)=(DItem.Val("DK")'=80) Quit xmlwArrayInversPRLALI ; LadeZijkant xmlwArrayInversPRLARE ; idem voor Links/Rechts Set tmpAr("KTekst","KL")=($$$DItemGetKenmVal("Kleur")'="MG") Set tmpAr("KTekst","ZW")=($$$DItemGetKenmVal("ZijwandHoogte")'="M")||($$$DItemGetKenmVal("Design")="I") Set tmpAr("KTekst","DC")=($$$DItemGetKenmVal("Design")?1(1"I",1"MA",1"F")) Set tmpAr("FabrOms","Kleur" )=('$$$IsFixedPR)&&(tmpAr("KTekst","KL")) Set tmpAr("FabrOms","Design" )=('$$$IsFixedPR)&&(tmpAr("KTekst","DC")) Set tmpAr("FabrOms","ZijwandHoogte")=('$$$IsFixedPR)&&(tmpAr("KTekst","ZW")) Quit xmlwArrayInversPRCPLI ; CorpusProfielen xmlwArrayInversPRCPRE ; idem voor Links/Rechts Set tmpAr("KTekst","DK")=($$$DItemGetKenmVal("DraagKracht")'=30)||($$$DItemGetKenmVal("Opties")'["B") Quit xmlwArrayInversPRRL ; Reling Set tmpAr("FabrOms","Kleur")=('$$$IsFixedPR)&&($$xmlwRLKleurAfwijkend($$$DItemGetKenmVal("Kleur"),DItem.Val("KL"))) Quit xmlwArrayInversPRBSD2 ; BOXSIDE Dubbelwandig xmlwArrayInversPRBSELI ; idem voor BOXSIDE Enkelwandig -Links/-Rechts xmlwArrayInversPRBSERE Set tmpAr("FabrOms","Kleur")=('$$$IsFixedPR)&&($$xmlwBSKleurAfwijkend($$$DItemGetKenmVal("Kleur"),DItem.Val("KL"))) Quit xmlwArrayInversPRBXKG ; Boxside Glas/Inschuif-element intivo of antaro; hier specifiek inschuif-element in Alu, Leder of Hout xmlwArrayInversPRBXKGSTRK Set tmpAr("FabrOms","Kleur")=('$$$IsFixedPR)&&(DItem.Val("KV")?1(1"ALU.".E,1"LE.".E,1"H.".E)) Quit xmlwArrayInversPRASM ; Anti-slipmatten xmlwArrayInversPRASMROL ; Anti-slipmatten op rol xmlwArrayInversPRASMSTRK ; Anti-slipmatten van strook xmlwArrayInversPRASMROLSPLI ; idem bij asm voor Spoelbak xmlwArrayInversPRASMROLSPRE xmlwArrayInversPRASMROLSPMID xmlwArrayInversPRTUSASMROL Set tmpAr("FabrOms","BasisType")=1 Set tmpAr("FabrOms","Kleur")=1 Quit xmlwArrayInversPRAKLI ; Afdekkappen xmlwArrayInversPRAKRE ; idem voor Links/Rechts Set tmpAr("FabrOms","OptiesTxt")=($$$DItemGetKenmVal("Actief")'="A") ; OptiesTxt is fictieve kenmerknaam, want voor bestaande kenmerken zoekt het systeem naar vertalingen en dat willen we hier niet. Quit xmlwArrayInversPRSRUG Set tmpAr("FabrOms","BasisType")=1 Quit xmlwRLKleurAfwijkend(RK,KL) Quit:(RK="CR") (KL'="IN") ; RelingKleur Chroom komt overeen met LadeKleur Inox Quit (RK'=KL) xmlwBSKleurAfwijkend(KX,KL) Quit (KX'=KL)