Basis klasse voor de csp-klasse serial vhLib.Macro %Library.RegisteredObject,cspBasis.cspAbstract 0 Deze parameter SOAPServer... is pseudo: De werkelijke target voor de WebService wordt bepaald door PeekSOAPServer() routine. Parameter alleen om te testen of de bewerking WEL OF NIET via WebService moet uitgevoerd worden : If $ZU(110)'=..#SOAPServerComputer Do call via WS Else direct call to method CACHE0x2 Deze parameter SOAPServer... is pseudo: zie: Parameter SOAPServerComputer DEV-ADMIN1 Vult de berekende prijs van de kaderdeur via JavaScript in het HTML-veld "ObjectName" in. Berekening: zie method CalcPrijsNew() 1 ObjectName:%Library.String,Aantal:%Library.Integer=1,MuntCode:%Library.String="EUR",ProfType:%Library.String,Hoogte:%Library.Float,Breedte:%Library.Float,Beslag:%Library.String,QtyBeslag:%Library.Integer=0,QtyGlasBoor:%Library.Integer=0,QtyProf1:%Library.String,QtyProf2:%Library.String,QtyProf3:%Library.String,QtyProf4:%Library.String,Vulling:%Library.String,VullingExtra:%Library.String,KlantID:%Library.String 0 %String &JS<#(ObjectName)#=#($J(Prijs,0,2))#;> Quit $J(Prijs,0,2) ]]> Creëert een object via parameters (FillObjectViaParam) en berekent de Prijs ervan. De parameters kunnen afkomstig zijn van een JavaScript oproep en kunnen mogelijk anders geformatteerd zijn (decimale komma). Het kaderdeur-object wordt opgeslagen + een log-entry aangemaakt 1 Aantal:%Library.Integer,MuntCode:%Library.String="EUR",ProfType:%Library.String,Hoogte:%Library.Float,Breedte:%Library.Float,Beslag:%Library.String,QtyBeslag:%Library.Integer=0,QtyGlasBoor:%Library.Integer=0,QtyProf1:%Library.String,QtyProf2:%Library.String,QtyProf3:%Library.String,QtyProf4:%Library.String,Vulling:%Library.String,VullingExtra:%Library.String,KlantID:%Library.String 1 %Float 0:%sVal, 1:0) #define SoapMethod 0 Quit:($G(Hoogte)="") "" Quit:($G(Breedte)="") "" Quit:($G(KlantID)="") "" d WLIP^vhDBG(97,"CalcPrijs") ;New KadObj,Prijs,objMunt,sData,Korting,LogDate,LogTime Set sData=$G(^KLDATA(KlantID),"") Set Korting=+$P(sData, "\", 5) Set Hoogte=$$$CDec(Hoogte) Set Breedte=$$$CDec(Breedte) Set Aantal=$$$CPosNum(Aantal)\1 Set:(+Aantal=0) Aantal=1 Set QtyBeslag=$$$CPosNum(QtyBeslag)\1 Set QtyGlasBoor=$$$CPosNum(QtyGlasBoor)\1 Set KadObj=..BuildKadObj(.ProfType,.Hoogte,.Breedte,.Beslag,.QtyBeslag,.QtyGlasBoor,.QtyProf1,.QtyProf2,.QtyProf3,.QtyProf4,.Vulling,.VullingExtra) Set OK=KadObj.%Save() Set Prijs=$$cprCalcPrijs() ; ..CalcPrijsOnly(KadObj,Aantal,MuntCode,Korting) Set LogDate=$P($H,",",1) Set LogTime=$P($H,",",2) Set:(OK) ^LOG(LogDate, $O(^LOG(LogDate,""),-1)+1)="KL\"_KlantID_"\CSP\"_LogTime_"\"_KadObj.%Id()_"\"_Aantal_"\"_$J(Prijs,0,2)_" "_$G(MuntCode)_"\"_KadObj.KortTekst() Quit Prijs cprCalcPrijs() If $G(%blnDirectCalc)=1 Do . Do cprCalcPrijsDirect Else If $$cprUseSoapMsg Do . ;Set SoapErrorMsg="" . Do cprCalcPrijsViaSoap Else Do . ; Uitvoeren in huidige namespace: . If $$$SoapMethod Do . . Do cprCalcPrijsViaSoapMethod() . Else Do . . d WL^vhDBG("CalcPrijs Via classmethod ..CalcPrijsViaSoap()") . . Set Prijs=..CalcPrijsViaSoap(.Aantal,.MuntCode,.ProfType,.Hoogte,.Breedte,.Beslag,.QtyBeslag,.QtyGlasBoor,.QtyProf1,.QtyProf2,.QtyProf3,.QtyProf4,.Vulling,.VullingExtra,.KlantID) Quit Prijs cprCalcPrijsDirect d WL^vhDBG("CalcPrijs Direct") Set Prijs=..CalcPrijsOnly(KadObj,Aantal,MuntCode,Korting) Quit cprUseSoapMsg() Quit ($$$UCase($G(ComputerName,$$$Server))'=..#SOAPServerComputer)||($G(NameSpace,$$$NSpace)'=..#SOAPServerNSpace) cprCalcPrijsViaSoapMethod(Opties) d WLIP^vhDBG(97,"CalcPrijs Via SoapMethod") Set Prijs=##class(WS.PR.KADWeb).CalcPrijs(.Aantal,.MuntCode,.ProfType,.Hoogte,.Breedte,.Beslag,.QtyBeslag,.QtyGlasBoor,.QtyProf1,.QtyProf2,.QtyProf3,.QtyProf4,.Vulling,.VullingExtra,.KlantID) ; Class Method Quit cprCalcPrijsViaSoap d WLIP^vhDBG(97,"CalcPrijs Via SoapMsg (WS)") Set Prijs="" Do cprCalcPrijsViaSoapSub("WS.PR.KADWebSoap","CalcPrijs") Quit cprCalcPrijsViaSoapSub(SoapClass,method) ; On Cache01/ADMIN1 call: ..CalcPrijsViaSoap(.Aantal,.MuntCode,.ProfType,.Hoogte,.Breedte,.Beslag,.QtyBeslag,.QtyGlasBoor,.QtyProf1,.QtyProf2,.QtyProf3,.QtyProf4,.Vulling,.VullingExtra,.KlantID) ;New Client,Result,lbLocations,locNdx Set Client=$System.OBJ.New(SoapClass) Set Result=Client.PrepareCalcPrijs(.lbLocations,.locNdx) ; Uses PeekServer and TimeOut=30 sec d WL^vhDBG("PeekServer (PrepareCalcPrijs) finished ==> locNdx="_$G(locNdx)) Quit:('Result) Set $ZTRAP="cprSoapErrorCP" Set Prijs=Client.CalcPrijs($G(Aantal),$G(MuntCode),$G(ProfType),$G(Hoogte),$G(Breedte),$G(Beslag),$G(QtyBeslag),$G(QtyGlasBoor),$G(QtyProf1),$G(QtyProf2),$G(QtyProf3),$G(QtyProf4),$G(Vulling),$G(VullingExtra),$G(KlantID),$G(Opties)) Set $ZTRAP="" Quit cprSoapErrorCP Set $ZTRAP="" ;New CustomMsg Set CustomMsg=SoapClass_" - "_method_"() : KLNr="_$G(KlantID)_$ZE_"."_$S(locNdx>1:" ["_$LG(lbLocations,locNdx)_"]" ,1:"") Do SOAPErrorMail^cspBasis.SOAPlib("",,CustomMsg,) Set Prijs="" Quit ]]> CSP-Method creëert een object via parameters (FillObjectViaParam) en berekent de Prijs ervan. De parameters moeten hier wel in het juiste formaat doorgegeven zijn. 1 Aantal:%Library.Integer,MuntCode:%Library.String="EUR",ProfType:%Library.String,Hoogte:%Library.Float,Breedte:%Library.Float,Beslag:%Library.String,QtyBeslag:%Library.Integer=0,QtyGlasBoor:%Library.Integer=0,QtyProf1:%Library.String,QtyProf2:%Library.String,QtyProf3:%Library.String,QtyProf4:%Library.String,Vulling:%Library.String,VullingExtra:%Library.String,KlantID:%Library.String 1 %Float Creëert het Kaderdeur-object via parameters (FillObjectViaParam). 1 ProfType:%Library.String,Hoogte:%Library.Float,Breedte:%Library.Float,Beslag:%Library.String,QtyBeslag:%Library.Integer=0,QtyGlasBoor:%Library.Integer=0,QtyProf1:%Library.String,QtyProf2:%Library.String,QtyProf3:%Library.String,QtyProf4:%Library.String,Vulling:%Library.String,VullingExtra:%Library.String 1 Prod.GADef.KaderDeur Berekent de Prijs van het Kaderdeur-object 1 KadObj:Prod.GADef.KaderDeur,Aantal:%Library.Integer=1,MuntCode:%Library.String="EUR",Korting:%Library.Float=0,KLNr:%String 0 %Float $S(Munt=FaMunt:2,1:2) ABdCfrs=$S(Munt=FaMunt:2,1:2) ;Set:ABdCfrs>$S(Munt=FaMunt:1,1:2) ABdCfrs=$S(Munt=FaMunt:1,1:2) Set VrkPrs=VrkPrs*(10**ABdCfrs)+.999999\1/(10**ABdCfrs) Quit VrkPrs ]]> CSP-Method creëert een object via parameters (FillObjectViaParam) en berekent de Prijs ervan. 1 ObjectName:%Library.String,Aantal:%Library.Integer=1,MuntCode:%Library.String="EUR",ProfType:%Library.String,Hoogte:%Library.Float,Breedte:%Library.Float,Beslag:%Library.String,QtyBeslag:%Library.Integer=0,QtyGlasBoor:%Library.Integer=0,QtyProf1:%Library.String,QtyProf2:%Library.String,QtyProf3:%Library.String,QtyProf4:%Library.String,Vulling:%Library.String,VullingExtra:%Library.String,KlantID:%Library.String 0 0:%sVal, 1:0) Quit:($G(ObjectName)="") Quit:($G(Hoogte)="") Quit:($G(Breedte)="") Quit:($G(KlantID)="") New KadObj,Prijs,objMunt,sData,Korting,LogDate,LogTime Set sData=$G(^KLDATA(KlantID),"") Set Korting=+$P(sData, "\", 5) Set Hoogte=$$$CDec(Hoogte) Set Breedte=$$$CDec(Breedte) Set Aantal=$$$CPosNum(Aantal)\1 Set:(Aantal=0) Aantal=1 Set QtyBeslag=$$$CPosNum(QtyBeslag)\1 Set QtyGlasBoor=$$$CPosNum(QtyGlasBoor)\1 Set:($G(MuntCode)'="") objMunt=##CLASS(Res.Munt).%OpenId(MuntCode) Set KadObj=##CLASS(Prod.GADef.KaderDeur).%New() Do KadObj.FillObjectViaParam(ProfType,Hoogte,Breedte,Beslag,QtyBeslag,QtyGlasBoor,QtyProf1,QtyProf2,QtyProf3,QtyProf4,Vulling,VullingExtra) ;Set:($G(Vulling)="") KadObj.Gemonteerd="K" Set OK=KadObj.%Save() Set Prijs=KadObj.LijstPrijs(Aantal,$G(objMunt),0,1)*(1-Korting) Set Prijs=$$RND(Prijs,$S(MuntCode="BEF":3,MuntCode="NLG":2,MuntCode="EUR":2,1:"R"),MuntCode) Set LogDate=$P($H,",",1) Set LogTime=$P($H,",",2) Set:(OK) ^LOG(LogDate, $O(^LOG(LogDate,""),-1)+1)="KL\"_KlantID_"\CSP\"_LogTime_"\"_KadObj.%Id()_"\"_Aantal_"\"_$J(Prijs,0,2)_" "_$G(MuntCode)_"\"_KadObj.KortTekst() ;&JS &JS<#(ObjectName)#=#($J(Prijs,0,2))#;> Quit ; Afronding RND(VrkPrs,Round,Munt) If "R"[Round Quit $$AUTORND(VrkPrs,Munt) If Round=1 Set VrkPrs=$J(VrkPrs*100+.499999,0,0)/100 If Round=2 Set VrkPrs=VrkPrs+.049999*100\5*5/100 If Round<3 Quit $J(VrkPrs,0,2) If Round=3 Quit VrkPrs+.99999\1 If Round=4 Quit VrkPrs+4.99999\5*5 If Round=5 Quit VrkPrs\1 ; Afronden naar beneden TIJDELIJK If Round=6 Quit $J(VrkPrs,0,2) If Round=7 Quit $J($J(VrkPrs,0,1),0,2) If Round=8 Quit $J(VrkPrs,0,0) If Round=9 Quit $J(VrkPrs/5,0,0)*5 Quit VrkPrs ; ; Automatische afronding AUTORND(VrkPrs,Munt) New ABdCfrs,FaMunt Set FaMunt="EUR",ABdCfrs=3-($L(VrkPrs*1000\1)-3) Set:ABdCfrs>$S(Munt=FaMunt:2,1:2) ABdCfrs=$S(Munt=FaMunt:2,1:2) ;Set:ABdCfrs>$S(Munt=FaMunt:1,1:2) ABdCfrs=$S(Munt=FaMunt:1,1:2) Set VrkPrs=VrkPrs*(10**ABdCfrs)+.999999\1/(10**ABdCfrs) Quit VrkPrs /* */ ]]> %Library.CacheSerialState ^cspBasis.KadQuotationS