# # FOURJS_START_COPYRIGHT(U,2011) # Property of Four Js* # (c) Copyright Four Js 2011, 2019. All Rights Reserved. # * Trademark of Four Js Development Tools Europe Ltd # in the United States and elsewhere # # Four Js and its suppliers do not warrant or guarantee that these samples # are accurate and suitable for your purposes. Their inclusion is purely for # information purposes only. # FOURJS_END_COPYRIGHT # IMPORT XML IMPORT COM GLOBALS "Types.4gl" # # GetShoppingCart parameters # DEFINE getcart_in RECORD login STRING END RECORD DEFINE getcart_out RECORD list DYNAMIC ARRAY OF Good END RECORD # # AddToCart parameters # DEFINE addtocart_in RECORD SERIAL INTEGER END RECORD # # RemoveFromCart parameters # DEFINE removefromcart_in RECORD SERIAL INTEGER END RECORD # # GetGoodsInCart parameters # DEFINE getgoodsincart_out RECORD goods DYNAMIC ARRAY OF GoodValue END RECORD # # OrderCart parameters # DEFINE ordercart_out RECORD totalPrice FLOAT END RECORD # # The state variable exchanged as HTTP cookie # DEFINE state STRING # # Fault returned in case of error # DEFINE BadSession RECORD ATTRIBUTE (XMLName="BadSessionError") msg STRING END RECORD &define display_status(status) \ IF NOT screen THEN \ DISPLAY status \ ELSE \ DISPLAY status TO MSG \ MENU ON idle 1 EXIT MENU ON ACTION close EXIT PROGRAM END MENU \ END IF # # Returns a new shopping with the list of goods # FUNCTION CreateShoppingCartService(generateWSDL) DEFINE generateWSDL boolean DEFINE serv com.WebService DEFINE op com.WebOperation DEFINE ret INTEGER # Create ShoppingCart service LET serv = com.WebService.CreateStatefulWebService("ShoppingCart","http://tempuri.org",state) CALL serv.setFeature("Soap1.2",TRUE) # # Create BadSession Fault # CALL serv.createFault(BadSession,FALSE) # Create GetShoppingCart operation # will initiate a new session LET op = com.WebOperation.CreateDOCStyle("GetShoppingCart","GetShoppingCart",getcart_in,getcart_out) CALL op.initiateSession(true) CALL serv.publishOperation(op,NULL) # Create AddToCart operations # requires a session to be initated before LET op = com.WebOperation.CreateDOCStyle("AddToCart","AddToCart",addtocart_in,NULL) CALL op.addFault(BadSession,NULL) CALL serv.publishOperation(op,NULL) # Create RemoveFromCart operations LET op = com.WebOperation.CreateDOCStyle("RemoveFromCart","RemoveFromCart",removefromcart_in,NULL) CALL op.addFault(BadSession,NULL) CALL serv.publishOperation(op,NULL) # Create GetGoodsInCart operations LET op = com.WebOperation.CreateDOCStyle("GetGoodsInCart","GetGoodsInCart",NULL,getgoodsincart_out) CALL op.addFault(BadSession,NULL) CALL serv.publishOperation(op,NULL) # Create DiscardCart operations LET op = com.WebOperation.CreateDOCStyle("DiscardCart","DiscardCart",NULL,NULL) CALL op.addFault(BadSession,NULL) CALL serv.publishOperation(op,NULL) # Create OrderCart operations LET op = com.WebOperation.CreateDOCStyle("OrderCart","OrderCart",NULL,ordercart_out) CALL op.addFault(BadSession,NULL) CALL serv.publishOperation(op,NULL) IF generateWSDL THEN # # Generate WSDL # LET ret = serv.saveWSDL(serverURL) IF ret=0 THEN DISPLAY "WSDL saved" ELSE DISPLAY "ERROR: Unable to save WSDL" END IF ELSE # # Register service # CALL com.WebServiceEngine.RegisterService(serv) display_status("ShoppingCart Service registered") END IF END FUNCTION # # Returns a new shopping cart or a previous one not yet released # FUNCTION GetShoppingCart() DEFINE ind INTEGER DEFINE tmp DYNAMIC ARRAY OF Good LET state = MgrGetSessionId(getcart_in.login) LET tmp = GetGoodsList() FOR ind = 1 TO tmp.getLength() CALL getcart_out.list.appendElement() LET getcart_out.list[ind].* = tmp[ind].* END FOR END FUNCTION # # Adds given goods to the cart # throw BadSession if there is no session # FUNCTION AddToCart() IF NOT MgrAddGoodToCart(state,addtocart_in.SERIAL) THEN LET BadSession.msg = "Cannot add to cart" CALL com.WebServiceEngine.SetFaultDetail(BadSession) END IF END FUNCTION # # Removes from cart # FUNCTION RemoveFromCart() IF NOT MgrRemoveGoodFromCart(state,removefromcart_in.SERIAL) THEN LET BadSession.msg = "Cannot remove from cart" CALL com.WebServiceEngine.SetFaultDetail(BadSession) END IF END FUNCTION # # GetGoodsInCart # FUNCTION GetGoodsInCart() DEFINE ok BOOLEAN DEFINE tmp DYNAMIC ARRAY OF GoodValue DEFINE ind INTEGER CALL MgrGetGoodsInCart(state) RETURNING ok, tmp IF NOT OK THEN LET BadSession.msg = "Cannot return goods" CALL com.WebServiceEngine.SetFaultDetail(BadSession) ELSE FOR ind =1 TO tmp.getLength() LET getgoodsincart_out.goods[ind].* = tmp[ind].* END FOR END IF END FUNCTION # # Discard cart # release the cart # FUNCTION DiscardCart() CALL MgrDiscardShoppingCart(state) END FUNCTION # # Order cart # release the cart # FUNCTION OrderCart() DEFINE ok BOOLEAN CALL MgrOrderCart(state) RETURNING ok,ordercart_out.totalPrice IF NOT ok THEN LET BadSession.msg = "Cannot order cart" CALL com.WebServiceEngine.SetFaultDetail(BadSession) END IF END FUNCTION