225 lines
5.4 KiB
Plaintext
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
|
|
|