300 lines
8.7 KiB
Plaintext
300 lines
8.7 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
|
|
#
|
|
|
|
GLOBALS "ws_shoppingCart.inc"
|
|
|
|
TYPE GoodsListType DYNAMIC ARRAY OF RECORD
|
|
SERIAL INTEGER,
|
|
DESCRIPTION STRING,
|
|
UnitPrice FLOAT
|
|
END RECORD
|
|
|
|
TYPE CartListType DYNAMIC ARRAY OF RECORD
|
|
SERIAL INTEGER,
|
|
DESCRIPTION STRING,
|
|
Quantity INTEGER
|
|
END RECORD
|
|
|
|
CONSTANT GoodSource = 1
|
|
CONSTANT CartSource = 2
|
|
|
|
MAIN
|
|
|
|
DEFINE user STRING
|
|
CLOSE WINDOW SCREEN
|
|
|
|
IF num_args()==1 THEN
|
|
LET ShoppingCart_ShoppingCartPortTypeSoap12Endpoint.Address.URI = Retrieve_URL()
|
|
END IF
|
|
|
|
OPEN WINDOW win WITH FORM "Shopping" ATTRIBUTE (TEXT="ShoppingCart demo")
|
|
|
|
|
|
MENU
|
|
ON ACTION login
|
|
LET USER = LogInDialog()
|
|
IF USER IS NOT NULL THEN
|
|
DISPLAY BY NAME user
|
|
CALL DoShoppingDialog(user)
|
|
LET USER = NULL
|
|
DISPLAY BY NAME user
|
|
END IF
|
|
|
|
ON ACTION CLOSE
|
|
EXIT MENU
|
|
|
|
|
|
END MENU
|
|
|
|
CLOSE WINDOW win
|
|
|
|
END MAIN
|
|
|
|
FUNCTION LogInDialog()
|
|
DEFINE user STRING
|
|
OPEN WINDOW w2 WITH FORM "User" ATTRIBUTE (TEXT="Log In",STYLE="dialog")
|
|
INPUT BY NAME user ATTRIBUTES (UNBUFFERED)
|
|
ON ACTION accept
|
|
IF user IS NOT NULL THEN
|
|
EXIT INPUT
|
|
END IF
|
|
AFTER FIELD user
|
|
IF user IS NULL THEN
|
|
NEXT FIELD user
|
|
END IF
|
|
ON ACTION cancel
|
|
EXIT INPUT
|
|
END INPUT
|
|
CLOSE WINDOW w2
|
|
RETURN user
|
|
END FUNCTION
|
|
|
|
|
|
FUNCTION DoShoppingDialog(user)
|
|
DEFINE USER STRING
|
|
DEFINE goodList GoodsListType
|
|
DEFINE cartList CartListType
|
|
DEFINE DragSource INTEGER
|
|
DEFINE DragSerial INTEGER
|
|
DEFINE DragIndex INTEGER
|
|
DEFINE dnd ui.DragDrop
|
|
DEFINE wsstatus INTEGER
|
|
DEFINE ind INTEGER
|
|
DEFINE found BOOLEAN
|
|
DEFINE SESSION STRING
|
|
DEFINE TOTAL FLOAT
|
|
|
|
#
|
|
# Reset session
|
|
#
|
|
LET ShoppingCart_ShoppingCartPortTypeSoap12Endpoint.Binding.Cookie = NULL
|
|
|
|
#
|
|
# Initialize ShoppingCart for given user
|
|
# and store session identifier
|
|
#
|
|
LET GetShoppingCartRequest.login = user
|
|
CALL GetShoppingCart_g() RETURNING wsstatus
|
|
CASE wsstatus
|
|
WHEN 0
|
|
FOR ind = 1 TO GetShoppingCartResponse.list.element.getLength()
|
|
LET goodList[ind].* = GetShoppingCartResponse.list.element[ind].*
|
|
END FOR
|
|
LET SESSION = ShoppingCart_ShoppingCartPortTypeSoap12Endpoint.Binding.Cookie
|
|
OTHERWISE
|
|
ERROR "[", wsError.code, "] ", wsError.description
|
|
END CASE
|
|
|
|
|
|
#
|
|
# Retrieve old ShoppingCart from current user (if any)
|
|
#
|
|
CALL GetGoodsInCart_g() RETURNING wsstatus
|
|
CASE wsstatus
|
|
WHEN 0
|
|
FOR ind = 1 TO GetGoodsInCartResponse.goods.element.getLength()
|
|
LET cartList[ind].* = GetGoodsInCartResponse.goods.element[ind].*
|
|
END FOR
|
|
OTHERWISE
|
|
ERROR "[", wsError.code, "] ", wsError.description
|
|
END CASE
|
|
|
|
|
|
INITIALIZE DragIndex TO NULL
|
|
|
|
DIALOG ATTRIBUTE(Unbuffered)
|
|
|
|
DISPLAY ARRAY goodList TO sr_goods.*
|
|
|
|
ON DRAG_START(dnd)
|
|
LET DragSource = GoodSource
|
|
LET DragIndex = arr_curr()
|
|
LET DragSerial = goodList[DragIndex].SERIAL
|
|
|
|
ON DRAG_FINISHED(dnd)
|
|
INITIALIZE DragSource TO NULL
|
|
|
|
ON DRAG_ENTER(dnd)
|
|
IF DragSource IS NULL THEN
|
|
CALL dnd.setOperation(NULL)
|
|
END IF
|
|
|
|
ON DROP (dnd)
|
|
IF DragSource == GoodSource THEN
|
|
CALL dnd.dropInternal()
|
|
ELSE
|
|
#
|
|
# Remove one good from cart
|
|
#
|
|
CALL RemoveFromCart(DragSerial) RETURNING wsstatus
|
|
CASE wsstatus
|
|
WHEN 0
|
|
# Update cart dialog
|
|
LET cartList[DragIndex].Quantity = cartList[DragIndex].Quantity -1
|
|
IF cartList[DragIndex].Quantity == 0 THEN
|
|
CALL cartList.deleteElement(DragIndex)
|
|
END IF
|
|
WHEN FaultID_BadSessionError
|
|
ERROR "[BadSessionError] ", BadSessionError.msg
|
|
OTHERWISE
|
|
ERROR "[", wsError.code, "] ", wsError.description
|
|
END CASE
|
|
|
|
END IF
|
|
END DISPLAY
|
|
|
|
DISPLAY ARRAY cartList TO sr_cart.*
|
|
ON DRAG_START(dnd)
|
|
LET DragSource = CartSource
|
|
LET DragIndex = arr_curr()
|
|
LET DragSerial = cartList[DragIndex].SERIAL
|
|
|
|
ON DRAG_FINISHED(dnd)
|
|
INITIALIZE DragSource TO NULL
|
|
|
|
ON DRAG_ENTER(dnd)
|
|
IF DragSource IS NULL THEN
|
|
CALL dnd.setOperation(NULL)
|
|
END IF
|
|
|
|
ON DROP(dnd)
|
|
IF DragSource == CartSource THEN
|
|
CALL dnd.dropInternal()
|
|
ELSE
|
|
#
|
|
# Add given good to cart
|
|
#
|
|
CALL AddToCart(DragSerial) RETURNING wsstatus
|
|
CASE wsstatus
|
|
WHEN 0
|
|
# Update cart dialog
|
|
LET FOUND = FALSE
|
|
FOR ind = 1 TO cartList.getLength()
|
|
IF cartList[ind].SERIAL == DragSerial THEN
|
|
LET cartList[ind].Quantity = cartList[ind].Quantity +1
|
|
LET FOUND = TRUE
|
|
END IF
|
|
END FOR
|
|
IF NOT FOUND THEN
|
|
CALL cartList.appendElement()
|
|
LET ind = cartList.getLength()
|
|
LET cartList[ind].SERIAL = goodList[DragIndex].SERIAL
|
|
LET cartList[ind].DESCRIPTION = goodList[DragIndex].DESCRIPTION
|
|
LET cartList[ind].Quantity = 1
|
|
END IF
|
|
WHEN FaultID_BadSessionError
|
|
ERROR "[BadSessionError] ", BadSessionError.msg
|
|
OTHERWISE
|
|
ERROR "[", wsError.code, "] ", wsError.description
|
|
END CASE
|
|
END IF
|
|
END DISPLAY
|
|
|
|
ON ACTION ORDER
|
|
#
|
|
# Order goods
|
|
#
|
|
CALL OrderCart() RETURNING wsstatus, total
|
|
CASE wsstatus
|
|
WHEN 0
|
|
INITIALIZE cartList TO NULL
|
|
CALL fgl_winmessage("Order","Total price :"||total,"information")
|
|
WHEN FaultID_BadSessionError
|
|
ERROR "[BadSessionError] ", BadSessionError.msg
|
|
OTHERWISE
|
|
ERROR "[", wsError.code, "] ", wsError.description
|
|
END CASE
|
|
|
|
EXIT DIALOG
|
|
|
|
ON ACTION discard
|
|
#
|
|
# Order goods
|
|
#
|
|
CALL DiscardCart() RETURNING wsstatus
|
|
CASE wsstatus
|
|
WHEN 0
|
|
INITIALIZE cartList TO NULL
|
|
CALL fgl_winmessage("Discard","Cart discarded","information")
|
|
WHEN FaultID_BadSessionError
|
|
ERROR "[BadSessionError] ", BadSessionError.msg
|
|
OTHERWISE
|
|
ERROR "[", wsError.code, "] ", wsError.description
|
|
END CASE
|
|
|
|
ON ACTION close
|
|
EXIT PROGRAM
|
|
|
|
END DIALOG
|
|
|
|
END FUNCTION
|
|
|
|
|
|
FUNCTION Retrieve_URL()
|
|
DEFINE url STRING
|
|
DEFINE custo STRING
|
|
OPEN WINDOW w2 WITH FORM "EnterURL" ATTRIBUTE (TEXT="Web Services URL",STYLE="naked")
|
|
LET url = arg_val(1)
|
|
INPUT BY NAME url WITHOUT DEFAULTS ATTRIBUTE (UNBUFFERED)
|
|
ON ACTION ACCEPT
|
|
EXIT INPUT
|
|
ON CHANGE url
|
|
IF url=="Customize" THEN
|
|
LET url="http://host:port/ShoppingCart"
|
|
PROMPT "Enter your URL" FOR url ATTRIBUTES (WITHOUT DEFAULTS)
|
|
IF NOT INT_FLAG THEN
|
|
LET INT_FLAG = false
|
|
EXIT INPUT
|
|
ELSE
|
|
LET url = arg_val(1)
|
|
END IF
|
|
END IF
|
|
ON ACTION CANCEL
|
|
EXIT PROGRAM
|
|
END INPUT
|
|
LET INT_FLAG = false
|
|
CLOSE WINDOW w2
|
|
RETURN url
|
|
END FUNCTION
|
|
|
|
FUNCTION fillcombourls(cb)
|
|
DEFINE cb ui.ComboBox
|
|
IF cb.getTag()=="COMBO" THEN
|
|
CALL cb.addItem(arg_val(1),"(Standalone) "||arg_val(1))
|
|
CALL cb.addItem("http://localhost:6394/ws/r/demo/ShoppingCart","(Httpdispatch) http://localhost:6394/ws/r/demo/ShoppingCart")
|
|
CALL cb.addItem("http://localhost/gas/ws/r/demo/ShoppingCart","(FastCGI) http://localhost/gas/ws/r/demo/ShoppingCart")
|
|
CALL cb.addItem("http://localhost/gas/ws/r/demo/ShoppingCart","(ISAPI) http://localhost/gas/ws/r/demo/ShoppingCart")
|
|
CALL cb.addItem("Customize","(Customize) Click here to add your own URL")
|
|
END IF
|
|
END FUNCTION
|