Wednesday, June 4, 2014

eProseed awarded Oracle Industry Partner of the Year in Middle-East & North Africa

I’m extremely happy to announce that eProseed was awarded Oracle Industry Partner of the Year in Middle-East & North Africa !

Mabrouk and a big applause to all our colleagues in Beirut office for their outstanding work in the region !


Configuring the SOA Human Task Hostname

When a human task is opened in BPM Workspace, it will try by default to connect to either localhost or the server's alias. So if you try to access the BPM Workspace remotely (from a computer other than where Oracle SOA is running) you will get an http error (unable to connect).
You can fix this issue at run-time using the Enterprise Manager (EM). Login to EM and from the farm navigator select your composite by expanding the "SOA", "soa-infra" and your partition node.

Under "Component Metrics", select the affected human task and go to the "Administration" tab.


Change the hostname to the IP of the server or hostname accessible from the server and click apply Select "OK" when prompted whether you want to save your changes.

If you access now the same human task its details should be loaded and rendered.

This configuration can be defined at design time as well by editing the hwtaskflow.xml configuration file located under the "Application Sources" folder of your human task project.


Open the hwtaskflow.xml file and define your preferred hostname.



Monday, May 19, 2014

Using ADF BC Declarative Built-in Rules (Part 3 of 10): Compare Validator


The my last two posts I’ve demoed how to use the “CollectionValidator” and the “Unique Key Validator”, two declarative validation options that can be defined at the entity level.

In the following six posts I will be going through the declarative validation rules that can be defined either at the entity or attribute level but pertain to an entity object attribute and these are the “Compare Validator”, the “Key Exists Validator”, the “Length Validator”, the “List Validator”, the “Range Validator” and the “Regular Expression Validator”.

So the “Compare Validator” is a validator that can be defined either at the entity or the attribute level but relates to an entity object attribute and it used to perform a logical comparison between an entity attribute and another value. This other value could be a literal value, the result of a query, a view object attribute, a view accessor attribute, an expression or an entity attribute. I will demo all these options.

So let’s start by creating an application, in my case it is called "CompareValidatorDemo" and create the basic ADF BC objects for this tutorial. For creating the ADF BC objects (entities and views) i have used the "Business Components from Tables" wizard and created entities for the Employees, Departments, Regions and Countries table, their corresponding view objects and an application module as depicted in the screenshot below.
Let's define the first "Compare Validator" rule on the Employees entity to ensure that an employee's salary does not exceed a defined amount. On the Employees entity, under the "Business Rules" tab click the green plus button "Create new validator".

From the "Add Validation Rule" window select "Compare" in the "Type" drop down and from the "Rule Definition" tab select "Salary" in the "Attribute" drop down, "LessOrEqualTo" as the "Operator" and in the "Compare With" combo select "Literal Value". Enter a value in the "Enter Literal Value" field.

In the "Failure Handling" tab define a failure message and click "OK". In my example I have used two message token expressions to construct a dynamic error message, passing to the failure message the employee's first name and last name.
To test your newly defined "Compare Validator" run the Application module and and try to update one of the employee's salary to a value greater than 40,000. For example, try to update Steven King's salary to 40,001. You should get your custom dynamic error message displayed.
 
Let's see now how you can compare an Entity attribute against the results of a query. I will define a new "Compare Validator" but this time i will enforce a business rule to make sure a user can't specify a future date as the employee's hire date.
So on the Employees entity, under the "Business Rules" tab click the green plus button "Create new validator" and create a new "Compare Validator" business rule. From the "Add Validation Rule" window select "Compare" in the "Type" drop down and from the "Rule Definition" tab select "HireDate" in the "Attribute" drop down, "LessOrEqualTo" as the "Operator" and in the "Compare With" combo select "Query Result" and enter "select sysdate from dual" as an SQL statement.
In the "Failure Handling" tab define a failure message and test the new business rule you've defined by running the Application module and updating one of the employee's hire date to a past date.You should get your error message displayed.
You can implement the exact same business rule using a Groovy expression. So instead of using the "Query Result" option in the "Compare With" combo, select "Expression" and enter "adf.currentDate" as a Groovy expression to get the current date.
 
Run the Application module and update one of the employee's hire date to a past date.You should get your error message displayed.
You can also compare an Entity's attribute against a view object's attribute using the "View Object Attribute" option in the "Compare With" drop down. This should be used with great caution as it will use the first row's attribute for comparison.
Just for demo purposes i will be comparing the entity's first name against the Employee's view object last name to ensure they are not the same.
Define an error message in the "Failure Handling" tab and run the application module to test this business rule. The first record that you get when accessing the Employees view  is Steven King and the second employee is Neena Kochhar. Go to another employee, for example to employee with id 102 (Lex De Haan). Update Lex's last name to Kochhar and click the "Validate Row" button. The employee's last name is valid. Now update Lex's last name to King and validate the record. You should get your error message displayed.
So a "View Object Attribute" will compare an entity's attribute against the first row's attribute. If you want to compare an entity's attribute against the entire set of view object attribute values you would use the "View Accessor Attribute" option which requires a "View Accessor" to be created. 
For this demo i will be using the "Countries" entity to ensure a country's name is not the same as the region it belongs to. To do so i will have to first create a view criteria on the "Regions" view object as follows.
Then, on the "Countries" entity, under the "View Accessors" tab, create a new accessor by shuffling the "RegionsVO" view object from the "Available View Objects" list to the "View Accessors" list.
Having the "RegionsVO" selected click on the "Edit" button and shuffled the view criteria you've created on the "Regions" view from the available list to the selected list.If you've followed my exact steps you should have a parameter (regionId) that you should bind to the entity's RegionId parameter.
Create a new "Compare" validator and use the newly created accessor to compare the entity's country name to it's corresponding region name.
Define an error message and run the application module to test your business rule. The first country once you access the Countries view is Argentina and has "Americas" defined as it's region name. Update Argentina's country name to Europe and validate the record. Validation is successful. Update Argentina's country name to Americas and validate the record. Validation should fail and you should get your custom error message.
The last feature that i would like to demo on the "Compare Validator" is the ability to compare an entity's attribute against another attribute from the same entity. For example, ensure that an employee can't have themselves defined as their manager. 
For this example i will be using the "Entity Attribute" option from the "Compare With" drop down to define this business rule.
Define an error message and run the application module to test your business rule. Update Steven King's manager to Neena Kochhar (with employee id = 101) and validate the employee record. Validation is successful. Define Steven King as Steven King's manager and validate the record. The validation will fail and you will get your custom error message displayed.
Download sample application: Compare Validator

Thursday, May 1, 2014

SOA in the Banking Industry

I'm happy to announce that I have been invited to present at the "Oracle Cyprus Architect Club" event that will take place on Wednesday 7th May.

The theme is "Business Integration" and my presentation title is "SOA in the Banking Industry" where I will be sharing my experiences and knowledge I have gathered during a SOA implementation in one of the top 20 Financial Regulation and Supervision Institutions.

For registration please contact Ms. Maria Andreou by phone (+357 22 694694) or by email to cyprus-admin_cy@oracle.com

Hope to see you there!

Friday, April 25, 2014

eProseed Customer Success Story at Oracle WebCenter EMEA Partner Community Forum

Oracle is organizing its annual Oracle EMEA WebCenter Partner Community Forum on Monday, 28th April – Tuesday 29th April 2014 in Barcelona where I along with Manas Deb will be presenting a unique eProseed customer success story, a Webcenter & BPM dominated platform using the entire stack of Fusion Middleware (WebCenter Portal, WebCenter Content, BPM, SOA, BI EE, Data Warehouse, Oracle Data Integrator and Identity Management Suite).

Sorry but can't say anything more. The only thing that i will say is make sure you don't miss it!

See you all in Barcelona!

Hasta pronto!

Tuesday, April 15, 2014

Using ADF BC Declarative Built-in Rules (Part 2 of 10): Unique Key Validator

Following my previous post Using ADF BC Declarative Built-in Rules: Collection Validator I would like to cover another declarative build-in rule, the "Unique Key Validator".

The "Unique Key Validator" is an entity level validator that ensures that primary key values for an entity object are always unique. For example, in the Employees table in the HR schema you can create a "Unique Key Validator" on the "EMPLOYEE_ID" (since this is the primary key) to ensure that an employee should have a unique employee id. If a key (in this example an employee id) is found in either the entity's cache or the database a "TooManyObjectsException" is thrown. Let's see how you can define a "Unique Key Validator" on the EMPLOYEE_ID column of the EMPLOYEES HR table.

I've created a new ADF Application "UniqueKeyValidatorDemo" using the "Fusion Web Application (ADF)" template and using the "Business Components from Tables" wizard I've created an Entity "EmployeesEO" based on the EMPLOYEES table, a view "EmployeesVO" based on the "EmployeesEO" entity and an Application Module "UniqueKeyValidatorAM".

Business rules are defined on the entity object so to create a 'Unique Key Validator" open the "EmployeesEO" and in the "Business Rules" tab click the green plus icon "Create new validator".

From the "Add Validation Rule" window select "UniqueKey" in the "Type" drop down and select the "EmpEmpIdPk(Employee_ID)" key.

In the "Failure Handling" tab define a failure message and click "OK". In my example I have used three message token expressions to construct a dynamic error message, passing to the failure message the "Employee Id" (using the newValue expression to get the value being validated), "First Name" and "Last Name".

To test your newly defined "Unique Key Validator" run the Application module and and try to update one of the employees using an existing employee id. For example, try to update Steven King's employee id to 101. You should get your custom dynamic error message displayed.

What if you wanted to enforce a "Unique Key Validator" on a non-primary key attribute? For example, what if you wanted to ensure that every employee should have a unique email address. The The "Unique Key Validator" can be applied on non-primary key attributes known as "alternate keys".

You can create an alternate key using the entity's "General" tab. So in our case, let's create an alternate key for the "Email" attribute of the "EmployeesEO" entity object.  Under the "Alternate Keys" section click on the green plus icon "Add Alternate Key".

 In the "Define Alternate Key" window specify a name in the "Alternate key Name" field (in my case it's "EmailAltKey") and shuffle the "Email" attribute from the "Available" list to the "Selected" list and click "OK".

To define a "Unique Key Validator" based on the newly created email alternate key go to the "Business Rules" tab and click on the green plus button "Create new validator" (just as you did above with the "Unique Key Validator" defined on the Employee Id primary key). In the "Add Validation Rule" window select "UniqueKey" in the "Rule" drop down and select alternate key that you have created above.

Define a failure message using the "Failure Handling" tab and click "OK".
 
Run your application module and update an employee's email  with an existing email. For example, update Steven King's email to "NKOCHHAR". You should get an error message saying that the email is already in use.

Download sample application: Unique Key Validator





Wednesday, April 9, 2014

How a better Customer Experience can improve your business

Today, customers are surrounded by opportunities. It is therefore critical to make their experiences as enjoyable, simple, consistent, and relevant as possible as they move throughout the sales lifecycle, from buying to owning, and back again. By delivering exceptional customer experiences, businesses can acquire new customers, retain more customers, and improve efficiency.

Building the ultimate Customer Experience with eProseed and Oracle
Oracle, backed by eProseed's mastery of process and system integration - eProseed was elected Oracle Partner of the Year for four consecutive years -, provides the most complete, cloud-enabled customer experience solution in the industry, creating an environment where companies can differentiate themselves across all channels, touch points, and interactions.

eProseed and Oracle have the pleasure to invite you to the Workshop on How a better Customer Experience can improve your business, at Windsor restaurant, on 13th May 2014 from 10:00 to 14:00.

AGENDA
10h00 – 10h30       Welcome & coffee
10h30 – 11h00       Introduction: eProseed
11h00 – 11h10       Oracle’s Customer Experience Concept
11h10 – 11h40       Social
11h40 – 12h10       Marketing
12h10 – 12h40       Customer Service
12h40 – 13h00       Q&A
13h00 – 14h00       Lunch

SPEAKERS
Bernard Hermant (eProseed),
Roel Van den Bergh, Petra Bikkenbergs, Ward Schoonjans (Oracle)

REGISTRATION
events@itone.lu