Using MABLE logic engine with existing .NET applications.
MABLE web services provide an interface to MABLE business objects and logic.
Let us review some technical details of the MABLE web services.
· MABLE utilizes SOAP 1.2 protocol.
· MABLE uses AXIS 1.4 as a web service transport.
· MABLE support state-full conversations by implementing a conversation
session.
In this small article we will create a client application that use the MABLE
'Store' application
MABLE Web Service client has to maintain a state-full conversation with the
MABLE
engine. The best way to handle this is by keeping a single instance of the
MABLE web service on the client side during sequence of events. Of course,
if you are not going to use
multiple threads or MABLE applications you can create multiple instances.
Before operating and manipulating business objects and their logic and
rules, the Web Service client has to initiate the MABLE application and the
business objects that it will use:
MABLE .NET WEB SERVICE CLIENT
Here is the listing of the .NET C# console application that implements MABLE
web services. The first step we should do is to add a Web Reference to your
..NET project that is pointing to the following MABLE WSDL descriptor:
http://www.alfabdi.com/MABLEWebServi...ontroller?wsdl
Listing MABLESimpleWebS erviceClient.cs
------------------------------------------------------------------
using System;
using System.Text;
using System.Data;
using System.Configur ation;
using System.Web;
using System.Net;
using MABLESimpleWebS erviceClient.co m.alfabdi.www;
/// <summary>
/// Title: Mind Ahead Business Logic Engine - MABLE client
/// Description: MABLE Web Service
/// Copyright: (c) 2006
/// Company: AL&FA Business Data Integrity, http://www.alfabdi.com
/// Author: Alisher Fatykhov
/// </summary>
namespace MABLEClient
{
class WebServiceClien t
{
private FFrontServiceCo ntrollerService mable = new
FFrontServiceCo ntrollerService ();
public WebServiceClien t()
{
initMable();
}
private void initMable()
{
CookieContainer newCookieContai ner = new CookieContainer ();
mable.CookieCon tainer = newCookieContai ner;
mable.setEjbnam e("FFboSessionE jb");
mable.setHost(" localhost");
mable.setConfig ("store/faframework-fbo-config.xml");
mable.setDebug( "store/faframework-config.xml", "STORE");
mable.addFboSet ("FFboSessionEj b", "STORE", "PRODUCTSEARCH" , "",
"", "", "true", true);
mable.addFboSet ("FFboSessionEj b", "STORE", "PRODUCT", "", "",
"", "true", true);
}
public void getProduct()
{
mable.setParame ter("STORE", "PRODUCTSEARCH" , "STARTDATE" ,
"12/30/2005");
mable.sendActio n("STORE", "PRODUCTSEARCH" , "DATA-EVENTS",
"MAKEWHERE" );
string message = "";
if (!mable.sendAct ion("STORE", "PRODUCT",
"DATA-EVENTS","ISNEW" ))
{
message = mable.getExcept ionMessage("STO RE", "PRODUCT",
"ISNEW");
mable.sendActio n("STORE", "PRODUCT", "DATA-EVENTS",
"ROLLBACK") ;
}
else
{
mable.sendActio n("STORE", "PRODUCT", "DATA-EVENTS",
"COMMIT");
}
int size = mable.getFboSet Size("STORE", "PRODUCT");
System.Console. Write("\n\n");
System.Console. Write("\n numberProducts = " + size);
System.Console. Write("\n product = " +
mable.getParame ter("STORE", "PRODUCT", "DESCRIPTION")) ;
System.Console. Write("\n shelf = " + mable.getParame ter("STORE",
"PRODUCT", "SHELFID")) ;
System.Console. Write("\n status ="+ message);
System.Console. Write("\n\n");
}
static void Main(string[] args)
{
WebServiceClien t mableClient = new WebServiceClien t();
mableClient.get Product();
}
}
}
----------------------------------------------------------------------------------------------------
After we compile our project we run the MABLESimpleWebS erviceClient.ex e
The result will be like:
--------------------------------------------------------------------------------------
C:\...bServiceC lient\MABLESimp leWebServiceCli ent\bin\Debug>M ABLESimpleWebSe rviceClient.exe
numberProducts = 2
product = My Cat
shelf = 5
status =This business object's record is not new !
--------------------------------------------------------------------------------------
If you take a closer look at the source code of this client application you
will find a lot of similarities with the web applications we created in the
previous chapters.
Now we trace step by step what this client does first.
1. After the service object is created, it is necessary to set a
session conversation.
CookieContainer newCookieContai ner = new CookieContainer ();
mable.CookieCon tainer = newCookieContai ner;
2. Setting the MABLE EJB name by:
mable.setEjbnam e("FFboSessionE jb");
3. Setting the MABLE EJB connection parameters:
mable.setHost(" localhost");
4. Setting the MABLE application metadata location:
mable.setConfig ("store/faframework-fbo-config.xml");
5. Setting the MABLE application logging verbosity level:
mable.setDebug( "store/faframework-config.xml", "STORE");
6. Adding and initializing the MABLE business object 'PRODUCTSEARCH' :
mable.addFboSet ("FFboSessionEj b", "STORE", "PRODUCTSEARCH" , "",
"", "", "true", true);
7. Adding and initializing the MABLE business object 'PRODUCT':
mable.addFboSet ("FFboSessionEj b", "STORE", "PRODUCT", "", "",
"", "true", true);
Now we will use newly created business objects and operate with their
business logic.
8. Creating a WHERE clause for the 'PRODUCT' business object:
mable.setParame ter("STORE", "PRODUCTSEARCH" , "STARTDATE" , "12/30/2005");
This call sets the 'STARTDATE' section of the WHERE clause to the
'12/30/2005' value.
9. The client calls CCSC action 'MAKEWHERE' which will create a new
WHERE clause and repopulate the 'PRODUCT' business object.
mable.sendActio n("STORE", "PRODUCTSEARCH" , "DATA-EVENTS", "MAKEWHERE" );
10. The client checks the first business object in the stack of the
business objects if it has the 'NEW 'status.
if (!mable.sendAct ion("STORE", "PRODUCT", "DATA-EVENTS","ISNEW" ))
11. If the status of the business object is not 'NEW' than the client
gets a status message of the 'ISNEW' CCSC action.
message = mable.getExcept ionMessage("STO RE", "PRODUCT", "ISNEW");
12. Rolling back current business object transaction (In this example we
are not using MABLE auto commit feature):
mable.sendActio n("STORE", "PRODUCT", "DATA-EVENTS", "ROLLBACK") ;
More information about MABLE logic engine can be found
http://www.alfabdi.com
Al Fatykhov
Copyright (c) 2006. AL&FA Business Data Integrity. All rights reserved.
Patents pending
Mind Ahead Business Logic Engine - MABLE, Mind Ahead Web Framework and
SuperGrid are registered trademarks of AL&FA Business Data Integrity