Files
MBS/WEBSERVICES/shoppingcart/server/ShoppingCartService.4gl
T

225 lines
5.4 KiB
Plaintext

#
# 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