XPath advanced functions examples

<< Click to Display Table of Contents >>

Navigation:  Bizagi Studio > Process wizard > Business Rules > Bizagi Functions > Data Access through XPath > XPath Functions >

XPath advanced functions examples

The following examples will be based on the following data model. Imagine you work for a telephone company and you are in charge of the Help Desk to assist with claims and complaints. Each claim will be related to a customer. To resolve each case your team may contact the customer by phone several times. To keep track of all calls made a History log will be constantly updated.




newCollectionItem: Allows to include new records in the collection. The records are initially added as an empty record. You can use XPath or variables to set the new record values.


Example: Each comment must be registered in the History collection.

var User = Me.Case.WorkingCredential.UserId;
CommentRecord.setXPath("Dates", DateTime.Now);



Distinct-values: Returns a filtered collection with no repeated values of an attribute.  It is necessary to indicate the attribute for which the values will not be repeated.  


Example: We need to know how many different phone numbers have been dialed to contact the customer

DiffPhone = <distinct-values(ClaimsAndComplaints.Calls.TelephoneNumber)>;
<ClaimsAndComplaints.DiffPhoneNumbers> = DiffPhone.size();



Get value as collection: In some cases it is necessary to handle Collections in expressions without using the Iterate over XPath functionality to allow a complete manipulation of the code.


Example: It is necessary that all calls have an observation. The function transform a list of all calls stored as a text chain into an array list called AllCalls. Note this example is used to illustrate the functionality; it could be done using Iterate over XPath.

var AllCalls = CHelper.GetValueAsCollection(<ClaimsAndComplaints.Calls>);
for (var i = 0; i< AllCalls.size(); i++) {
  var CallRecord = AllCalls.get(i);
    CHelper.ThrowValidationError("The Call "+CallRecord.getXPath("TelephoneNumber")+" has not observations");


Note: the XPath should NOT contain the parent entity object - only the collection within the entity.



RemoveRelation: Allows to delete items from a collection. It is possible to specify whether you want or not to delete the database records in the second parameter.


Example: All the calls that have not been marked must be removed.

Me.removeRelation("ClaimsAndComplaints.Calls[Mark = false]",true);



Sort: Sorts records of a collection in ascending order according to an attribute. It is possible to sort using an integer, float, date or string attribute.  The method receives a collection, and returns the collection sorts by the attribute’s value.  


We will sort by date all the reviewed Calls and store them in a variable.

var CallsChecked=<sort(ClaimsAndComplaints.Calls[Mark = false],'DateAndTime')>;



Round: is used to reduce a number (currency, real, float) given a specific number of decimals.


Example: Round a currency value with two decimal places.

<Purchase.RoundedPrice> = CHelper.Math.Round(<Purchase.InitialPrice>,2)

Round a currency value without decimal places

<Purchase.RoundedPrice> = CHelper.Math.Round(<Purchase.InitialPrice>)



Floor: is used to round a number (currency, real, float) down to the closest integer.


Example: Round a currency attribute to the smallest integer.

<Purchase.RoundedPrice> = CHelper.Math.Floor(<Purchase.InitialPrice>)



Ceiling: is used to round a number (currency, real, float) up to the closest integer.


Example: Round a currency attribute to the biggest integer.

<Purchase.RoundedPrice> = CHelper.Math.Ceiling(<Purchase.InitialPrice>)