#include %occInclude #include PRGACNTs InitSOAPTest() s %request=##class(%CSP.Request).%New() s %request.URL="http://www.tandem-box.com/VHISIE/TBX/TestByWimV" s %session=##class(%CSP.Session).GetSession("1234") ;s kl=##class(cspBasis.GAProd.TBox).GetKlantData("VHEPN",4645,,) w kl,! ;d $system.OBJ.Dump(kl) Quit StdLadeArray(KLNr,TBDesign,arStdL) ; Parameters:KLNr,arStdL (arStdL als .local doorgeven) Kill arStdL New wsID,WSOrd,i,tmpAr,arWSStdL,arMDRow,lbNoMatch,MatchResult,node,NoMTransl Set wsID=##class(cspBasis.GAProdTBox).WSOrderIDStdLadeViaKLNr(KLNr,TBDesign) Set WSOrd="" Set:($L(wsID)) WSOrd=##class(WS.TBX.OrderAbstract).%OpenId(wsID) Set:('WSOrd) arStdL=##class(cspBasis.GAProdTBox).WebTextValue("StdLNoVERW",Taal,"O")_"." ; "Geen Standaard Laden (uit stock) voor deze verwerker." Quit:('WSOrd) Do WSOrd.DataArrayFromWS(.arWSStdL) Merge arInit2=arInits("LN",1) Set lbNoMatch="" Do stlExcludeNotAppl Set WSOrd="" ; Close ;d WL^vhDBG($$ArrayToText^vhLib("arInit2")) ;d WL^vhDBG($$ArrayToText^vhLib("arWSStdL")) Set i="" For Set i=$O(arWSStdL("LN",i)) Quit:(i="") Do . Quit:(($G(arWSStdL("LN",i,"LT"))="") || ($G(arWSStdL("LN",i,"LIJNNR"))="")) . Merge arMDRow=arWSStdL("LN",i) . Set MatchResult=$$stlCompareCriteria(.arMDRow,.arInit2) . If 'MatchResult Do Quit .. Set NoMTransl=##class(cspBasis.GAProdTBox).WebTextValue($P(MatchResult," ",1),Taal,"L")_$S($L(MatchResult," ")>1:" "_$P(MatchResult," ",2,999) , 1:"") .. Set:($LF(lbNoMatch,NoMTransl)=0) lbNoMatch=lbNoMatch_$LB(NoMTransl) .. ;Set:($LF(lbNoMatch,MatchResult)=0) lbNoMatch=lbNoMatch_$LB(MatchResult) . ; Else . Set:($G(arMDRow("FB"))="") arMDRow("FB")=arInit2("FB") . Kill tmpAr . Set tmpAr=i . Set tmpAr("KOL",1)=##class(cspBasis.GAProdTBox).PDLFromMDRow(.arMDRow) . Set MatchResult=$$CompareFull(.arMDRow,.arInit2) ; OPGELET: CompareFull haalt nodes weg uit arMDRow . If MatchResult=1 Do .. Set tmpAr("SEL")=1 ; Deze lijn komt volledig overeen met de StdL-lijn. . Else Do .. ;Set node=$P(MatchResult,"-",1) .. ; d WL^vhDBG("Row "_i_" Nd:"_node_" --> "_arMDRow(node)_" ?= "_arInit2(node)) . Merge arStdL(arMDRow("LT")_"\"_arMDRow("BX"),arMDRow("CB"),arMDRow("DK"))=tmpAr If $D(arStdL)<10 Do ; No SubNodes . Set arStdL=##class(cspBasis.GAProdTBox).WebTextValue("StdLNoCrit",Taal,"O")_":" ; "Geen Standaard Laden (uit stock) voor de gekozen waarden:" . Set:($L(lbNoMatch)) arStdL=arStdL_$$$CRLF_$$LCVTXTD^vhLib(lbNoMatch," / ",,0) Quit stlExcludeNotAppl New i,FBVal,blnFBisNA Set FBVal=$G(arInit2("FB")) ; $G(arInit2("KLR","FB")) Quit:(FBVal="") Set blnFBisNA=0 Set i="" For Set i=$O(arWSStdL("LN",i)) Quit:(i="") Do . If (WSOrd.Lijnen.GetAt(i).AddPrs.GetAt("FB_"_FBVal)="N/A") Do .. Kill arWSStdL("LN",i) ; StdL not applicable for FB=FBVal .. Set blnFBisNA=1 Set:(blnFBisNA) lbNoMatch=lbNoMatch_$LB(##class(cspBasis.GAProdTBox).WebTextValue("Frontbevestiging",Taal,"L")) Quit stlCompareCriteria(arMDRow,arInit2) Quit:($G(arInit2("BM"))'="I") "StdLNoMatchGeleiderTechnologie" ; "Tags : GeleiderTechnologie TOB" _" ["_$G(arInit2("BM"))_"]" Quit:($G(arInit2("LT"))'="")&&(arMDRow("LT")'=arInit2("LT")) "Ladetype [Code:"_$G(arInit2("LT"))_"]" ; 0 ; Check LadeType ;Quit:($G(arInit2("CB"))'="")&&(arMDRow("CB")'=arInit2("CB")) "CB" ; 0 ; Check LadeType New node,blnEqual Set blnEqual=1 Set node="" For Set node=$O(arInit2("KLR",node)) Quit:(node="") Do:(node'?1(1"FB",1"KV")) Quit:('blnEqual) . If arInit2("KLR",node)'=$G(arMDRow("KLR",node)) Set blnEqual="Kleurkeuze ["_node_"]" ; 0 ; Check KleurKeuze Quit blnEqual CompareFull(arMDRow,arMatchLn) // arMDRow is a row of the full arWSData array. // Compares all the node's values with the values of the arMatchLn array (except those specified in lbSkipNodes/Subnodes) // ATTENTION : CompareFull removes nodes from the arMDRow array !!! New blnEqual,node,sn Do cpfRemoveNodes Set blnEqual=1 Set node="" For Set node=$O(arMDRow(node)) Quit:(node="") Do Quit:('blnEqual) . If $D(arMDRow(node))'=10 Do ; $D() = 01 or 11 .. Set:(arMDRow(node)'=$G(arMatchLn(node))) blnEqual=node . Else Do ; Compare subnodes .. Set sn="" .. For Set sn=$O(arMDRow(node,sn)) Quit:(sn="") Do Quit:('blnEqual) ... If $D(arMDRow(node,sn))'=10 Set:(arMDRow(node,sn)'=$G(arMatchLn(node,sn))) blnEqual=node_"-"_sn ... ;Else Do ; Compare subnodes --> ultimate solution is an recursive algorithm. Quit blnEqual cpfRemoveNodes // Define and remove the nodes that should not be compared to the arMatchLn. New lbSkipNodes,lbSkipSubnodes,j,N Set lbSkipNodes=$LB("AANT","EXCLUDE","LIJNNR","PRIJS","STDL","DS","VPK","SPZK","FB") Set lbSkipSubnodes=$LB($LB("KLR","FB"),$LB("KLR","KV")) For j=1:1:$LL(lbSkipNodes) Kill arMDRow($LI(lbSkipNodes,j)) For j=1:1:$LL(lbSkipSubnodes) Do . Set N="arMDRow("_$$cpfBuildSubNodes($LI(lbSkipSubnodes,j))_")" ; Result: N = "arMDRow(SN1,SN2,...)" . Kill @N Quit cpfBuildSubNodes(lbSNodes) Quit:($G(lbSNodes)="") "" New i,txt Set txt=""""_$LI(lbSNodes,1)_"""" For i=2:1:$LL(lbSNodes) Set txt=txt_","""_$LI(lbSNodes,i)_"""" Quit txt /* AddToLog ; Parameters: Actie,Domain,KLNr,WizMode,wsID,Verwerker,Taal,VhisieLogin,lbExtras Quit CustomEHandlerInitTBX Quit CustomLogError ; Parameters: arErrInfo Quit GetKlantData() ; Parameters: sDomVERW,KLNr,lbFlags="" Quit KLMini BuildWSFromDataString() ; Parameters: pdlKleurKeuze,pdlMData,pdlPData,wsID Quit WSOrd WSOrderIDStdLadeViaKLNr() ; Parameters: KLNr,GetSet,newID Quit wsID GetDataString ; Parameters: wsID Quit CheckDataString() ; Parameters: pdlKleurKeuze,pdlMData Quit "" CheckDataWS() ; Parameters: arFullData,arErrs,blnUpdateData=1 Quit 1 UpdateDataString() ; Parameters: pdlPData,wsID Quit "" UpdateDataWS() ; Parameters: arFullDataNew,wsID Quit "" CalcDataString() ; Parameters: pdlKleurKeuze,pdlMData,pdlPData,wsID Quit "" CalcDataWS() ; Parameters: arFullData,arPrices,wsID Quit wsID */ otaSoapAddToLog New lbExtras Set lbExtras=$$PeekSOAPBuildLog^cspBasis.SOAPlib(SoapClass,method,lbLocations,locNdx) Do ##class(cspBasis.GAProdTBox).AddToLog("SOAP_BACKUP",$G(%session.Data("DOMAIN")),$G(%session.Data("KLNR")),$G(%session.Data("MODE")),wsID,$G(%session.Data("VERW")),$G(Taal),,lbExtras) Quit otaSoapErrorTransfer New CustomMsg Do . Quit:($G(%objlasterror,1)) . New msg,blnOnServer . Set blnOnServer=($$$GETERRORCODE(%objlasterror)=$$$SOAPFaultReceived) . Set msg="'TransferToADMIN Failed."_"\n\n"_"SOAP message: '"_"+"_##class(%CSP.Page).QuoteJS($S(blnOnServer:"the SOAP server returned a SOAP fault.", 1:$$ParseStatus^vhLib(%objlasterror))) . Write "alert("_msg_");" // Send mail Set CustomMsg="WSOrd: ID="_wsID_" : TransferToADMIN Failed." Do SOAPErrorMail^cspBasis.SOAPlib("TBX_ERR",,CustomMsg,,Client) Set $ZE="" Quit $lb("","Een error has occured") otaAddToLog Do oxxAddToLog("TRANSF") Quit oxxAddToLog(Actie) New sDomain,lbExtras Set lbExtras="" Set:($L($G(%Location))) lbExtras=lbExtras_$LB("SoapServer="_%Location) Set:($L($G(%Action)) ) lbExtras=lbExtras_$LB("SoapAction="_%Action) Set:($L($G(OptiePRS))) lbExtras=lbExtras_$LB("Opties="_OptiePRS) Set:($L($G(SoapErrorMsg))) lbExtras=lbExtras_$LB("Msg="_SoapErrorMsg) If '$IsObject($G(%request)) Do . Set %request=##class(%CSP.Request).%New() . Do ##class(cspBasis.GAProdTBox).AddToLog(Actie,$G(arData("DOMAIN")),$G(arData("KLNR")),$G(arData("MODE")),wsID,$G(arData("VERW")),,,lbExtras) . Set %request="" k %request Else Do . Do ##class(cspBasis.GAProdTBox).AddToLog(Actie,$G(%session.Data("DOMAIN")),$G(%session.Data("KLNR")),$G(%session.Data("MODE")),wsID,$G(%session.Data("VERW")),,,lbExtras) Quit WSOrdRecalc(wsID) #define SoapMethod 1 ;#define SoapLoc "cache01\ADMIN1" #define SoapLoc "cache02\DEV-ADMIN1" New %RemoteIP,WSOrd,msg,sc,SoapErrorMsg,Opties,DestLoc,lbResult ; ,SaveOK,blnCalcPrs,blnFixed,OptiePRS,PreCalcID Set %RemoteIP=$G(%request.CgiEnvs("REMOTE_ADDR")) Set WSOrd=##class(WS.TBX.Order).%OpenId(wsID) Quit:('$IsObject(WSOrd)) $LB("","Unable to open WSOrder object") Set sc=$$$OK If (##class(TECH.Config.ConfigMgr).Instance().GetBoolean("cspBasis.GAProdTBox_CalcPrsConditieViaGlobalExpressie")) { // Op de DEMO-versie van TBoxWeb : geen prijzen berekenen, behalve als ExprCondit voldaan is (wordt geëvaluuerd t.o.v. locale variabelen) // Zelfde code staat bij class(cspBasis.GAProdTBox) method CalcDataWS() Set blnCalcPrs=0 New CalcExpr Set CalcExpr=$G(^UI.Settings("WWW-TBX","DEMO","CalcPrijs","ExprCondit"),0) If @CalcExpr Set blnCalcPrs=1 ;Set:(%RemoteIP?1(1"192.168.1.195")) blnCalcPrs=1 } Else { Set blnCalcPrs=1 ; (WSOrd.KLNummer>0)||($G(%session.Data("UserType"))>$$$utKlantAnon) } Do orcSetURLValues Set PreCalcID=WSOrd.%Id() Do orcRecalcWS ; Sets lbResult to: OK = $LB(1,"") ; ERROR = $LB("","ErrorMsg" or sc) ;s lbResult=$LB("","TEST") If ($LG(lbResult,1)>0) Do . Do:(WSOrd.mID=PreCalcID) WSOrd.OverwriteOID(PreCalcID) . Set WSOrd.IngaveTijdStip=$ZDT($H,3) . ;Set WSOrd.SubmitTS="" ; bij (her)berekening vervalt de (vorige) sumbit-flag. . ;Set WSOrd.TransferLog="" . Set sc=WSOrd.%Save() . Set wsID=WSOrd.%Id() Do orcAddToLog Set WSOrd="" ; Close Quit:($$$ISERR(sc)) $LB("",sc) Quit lbResult orcSetURLValues New tmpAr Set WSOrd.WebDomain=$$$LCase($G(%session.Data("DOMAIN"))) Set WSOrd.WebURL=$G(%session.Data("URL")) Merge tmpAr=%session.Data("QSDATA") Kill tmpAr("CSPToken") Kill tmpAr("REFMN") Kill tmpAr("CSPPAGE") Set WSOrd.WebQSData=##class(cspBasis.GAProdTBox).CQueryString(.tmpAr) Quit orcRecalcWS Set OptiePRS="PRS="_blnCalcPrs_";" ; ||($G(Opties)["PRS=1;"))_";" ;d DbgWrite(OptiePRS_" KLNr:"_WSOrd.KLNummer_" UserTp:"_$G(%session.Data("UserType"))) If $$orcUseSoapMsg Do . Set lbResult=$$orcRecalcViaSoapMsg(OptiePRS) Else Do . ; Uitvoeren in huidige namespace: . Set DestLoc="-" . If $$$SoapMethod Do .. Set lbResult=$$orcRecalcViaSoapMethod(OptiePRS) . Else Do .. Do ##class(BL.PR.GA.TandemBox).BuildFromWSNew(WSOrd,OptiePRS) .. Set lbResult=$LB(1,"") Quit orcRecalcViaSoapMethod(Opties) Set WSOrd=##class(WS.TBX.Calc).BuildWS(WSOrd,.Opties) ; Class Method Quit $LB(1,"") orcUseSoapMsg() Quit ##class(TECH.Config.ConfigMgr).Instance().GetBoolean("cspBasis.GAProdTBox_OrderRecalcViaSoapMsg") orcRecalcViaSoapMsg(Opties) Set lbResult="" Do orcRecalcViaSoapMsgSub("WS.TBX.CalcSoap","BuildWS") Quit lbResult orcRecalcViaSoapMsgSub(SoapClass,method) New Client,Result,lbLocations,locNdx Set Client=$System.OBJ.New(SoapClass) Set Result=Client.PrepareBuildWS(.lbLocations,.locNdx) ; Uses PeekServer and TimeOut=(120-1)sec ;d WL^vhDBG("PeekServer (PrepareBuildWS) finished ==> locNdx="_$G(locNdx)) Do:(locNdx<0) orcSoapAddToLog ; Problem: no location Quit:('Result) Do:(locNdx>1) orcSoapAddToLog ; Not the first location Set $ZTRAP="orcSoapErrorRecalc" Set WSOrd=Client.BuildWS(WSOrd,.Opties) Set $ZTRAP="" Set lbResult=$LB(1,"") Quit orcSoapAddToLog Do orcSoapAddToLog Quit orcSoapErrorRecalc New CustomMsg,arOrdKLT Do . Quit:($G(%objlasterror,1)) . // Hyperevent JS error messagebox . New msg,blnOnServer . Set blnOnServer=($$$GETERRORCODE(%objlasterror)=$$$SOAPFaultReceived) . Set msg="'Recalculation Failed."_"\n\n"_"SOAP message: '"_"+"_##class(%CSP.Page).QuoteJS($S(blnOnServer:"the SOAP server returned a SOAP fault.", 1:$$ParseStatus^vhLib(%objlasterror))) . Write "alert("_msg_");" // Send mail Set CustomMsg="WSOrd: ID="_wsID_" : Recalculation Failed." Do SOAPErrorMail^cspBasis.SOAPlib("TBX_ERR",,CustomMsg,Client) Set $ZE="" Quit orcAddToLog Do oxxAddToLog("RECALC") Quit /* SELECT item.Product->Product, item.Product , param.Parameters , param.ID FROM Prod_GAData.Item As item, Prod_GAData.Item_Parameters As param WHERE (item.ID=Param.Item) and (item.product > 200000) and (item.Label='DC') and (param.element_key='Val') and (param.Parameters = 'L') ORDER BY item.Product, param.Parameters SELECT item.Product , item.Code , item.Label , item.SubGroepCode , param.element_key , param.Parameters , item.Display , item.VolgNr , item.FixedKeys , item.MetaItem , item.ID , param.Item , param.ID FROM Prod_GAData.Item As item, Prod_GAData.Item_Parameters As param WHERE (item.product > 200000) and (item.ID=Param.Item) and (item.Label='BS') and (param.element_key='Val') and NOT (param.Parameters IN ('DR','ER','ZR','BD','BF','BZ')) ORDER BY item.Product, param.Parameters // Column headers: Product Code Label SubGroepCode element_key Parameters Display VolgNr FixedKeys MetaItem item.ID param.Item param.ID */