AAAdvanced Customisation Part 1
AAAdvanced Customisation Part 1
Lets take the property class TERM.AMOUNT. The actions which can be
performed on this property class can be found in the actions tab of the property
class record. When the user performs an activity, a set of actions are performed
on a particular property. This information will be stored in the
AA.ACTIVITY.CLASS table. So, for example, when the user perform a
disbursement on an arrangement, the activity class LENDING-DISBURSE-
TERM.AMOUNT will be accessed, through corresponding activity LENDING-
DISBURSE-COMMITMENT (where COMMITMENT is the instance of
TERM.AMOUNT property class used in the product).
All activity classes perform some action on a property class. That is why the ID
of an activity class is Product Line-Action-Property Class name.
The tables used for building the re-usable components & customising AA screens
are:
• AA.PROPERTY.CLASS -> Designed by TEMENOS
• AA.PROPERTY -> Named copy of Property class
• AA.PRD.DES.<PROPERTY.CLASS> -> Used to o design product
conditions by assigning values to attributes of Property class
• Property Class
• Property
• Activity
In this picture, the different levels are from the least specific (Property Class) to
the most specific (Activity). If a conflict arises, the most specific level will take
precedence over the least specific one. This means that when different versions
are associated to two connected levels, the version associated to the most specific
level will take precedence over the other - e.g. if version 1 is associated to the
LENDING-DISBURSE-COMMITMENT Activity and version 2 is associated to
the COMMITMENT Property, when the LENDING-DISBURSE-
COMMITMENT activity takes place, version 1 will be displayed to end-user
instead of version 2.
Now that we have reviewed some important concept about Basic Customisation
in AA, we can focus on a new concept: the ACTIVITY.API Property class.
Let’s take as an example a scenario in which a bank asks us to add some extra
validation to our AA Screen. For instance, our client wants us to set up a
POSTING.RESTRICTION local reference field on the COMMITMENT Property
screen of the Personal Loan product when a LENDING-DECREASE-
COMMITMENT Activity is carried out. Than, when a user fill in this field, the
client wants system field POSTING.RESTICTION on the ACCOUNT Property
screen to be automatically updated.
Activity Class
There are different types of routines which can be associated with AA screen
versions in ACTIVITY.API Property Class, set up through the
AA.PRD.DES.ACTIVITY.API application. These are currently:
processing
- Pre-validation routines will get trigger before core level validation. It is used to input or
modify the required fields or else mandatory fields. But “NOINPUT” and “NON-
NEGOTIABLE” fields would not have no effect on this. E.g. If the value for the
mandatory field AMOUNT has to be populated, then the user should use this field. If
the user wish to populate the value for the field and attach it to the field
PRE.VALIDATE.RTN
- Validation routines are attached to the VALIDATE.RTN field and will get trigger after
core level validation. For example, a local reference field can be introduced with some
value assigned to it. If the user wish to include a local reference field, then he can
achieve it through this field.
Here you can see the ACTIVITY.API routines’ flow – as previously explained,
Record routines are invoked as soon as the AA arrangement they operate on is
opened in an ‘input’ mode and before it is Validated/Committed. Pre-validate
routines are a new kind of AA routines introduced from R12; they are invoked
before core validation, while Validate routines are invoked afterwards. Pre-
routines are executed before the action specified in PC.ACTION field is
processed (e.g. INCREASE or DECREASE commitment, CREATE a new
arrangement etc) while, finally, post-routines will be called after the PC.ACTION
has taken place.
Very important technical note – Validate and Pre-validate routines only work in
R12 after the installation of the R12_AA_Framework_5 update. This update
should be installed before you write and test these types of routines.
Once the “User Defined Field” Screen has come up, we input the Id of our new
field and we click on the edit button.
1. We assign a description and a short name to the new local reference field
through the GB Description AND GB Field Name fields.
2. Width Max is a mandatory field through which you state the local field’s
maximum length; on the other hand, you can decide whether the
AA.COMMITMENT.MEMO has a minimum length through Width Min –
when Width Min is left empty, like in this example, it means that the new
local reference field is not mandatory
3. In this case, we would like the current field to link to the
POSTING.RESTRICT table, so that it will display a dropdown list pointing
to the records contained in the aforementioned table. By populating
LINKED.TABLE, the field ENRICHMENT also becomes mandatory. As you
remember, ENRICHMENT contains the number of the field in the
POSTING.RESTRICT table whose content will be used as an enrichment for
POST.REST.TA
4. If you link a local field to a T24 existing table, like in this example, there’s no
need to specify a TYPE for the local reference field
Once we are finished, we can validate & commit. After committing, the new local
reference field will be automatically live as we are using a self-authorising
version.
Once we are finished, we can validate & commit the record. Please note that the
record will be immediately set to live status, as we are using a self-authorising
version.
Even if we have created a new local reference field and we have linked it to the
TERM.AMOUNT property class, we are not able to view it within an AA screen
quite yet. The end-result we aim for, is to display such new field within the
‘Commitment’ screen of an PERSONAL.LOAN record whenever we perform a
LENDING-DECREASE-COMMITMENT activity. In other words, we would like
the new field to be presented to end-users only when they are trying to decrease
the amount of a Personal Loan arrangement.
The fastest way to achieve this, is to find out which version of
AA.ARR.TERM.AMOUNT is associated with the LENDING-DECREASE-
COMMITMENT activity for the PERSONAL.LOAN product and include our
new POST.REST.TA local reference field to such version. But how can we do
this?
From the AA Basic Customisation course, you should remember that you can
associate versions with Property Classes, Properties and Activities through the
ACTIVITY.API Property Class. In previous workshops, we had created new
product conditions for ACTIVITY.API and then we had associated these
customised conditions to products, using the PRESENTATION Property.
In this case, however, we would like to modify an existing condition rather than
creating new ones so we should proceed backwards – first we will check which
Conditions are already associated with the PERSONAL.LOAN product and then
we will change them so that the AA.ARR.TERM.AMOUNT version used for
LENDING-DECREASE-COMMITMENT activity also includes our new field.
Let us check the list of Conditions associated with the PERSONAL.LOAN
product. We can get the full list of available products in R12 Model Bank, through Admin
Menu > Product Builder > Products. The PERSONAL.LOAN product belongs to the
LENDING Product Line and to the PERSONAL.LOANS Product Group. By clicking on
the ‘View’ context workflow link, we are able to check the features of the
PERSONAL.LOAN product.
Just by casting a quick look to the PERSONAL.LOAN record, we can view from
the ‘Product Designer’ tab that this product is depending on a Parent Product
called PERSONAL.LOAN.PARENT. What are the implications in terms of
Property Conditions?
As we have learnt during the AA Basic Customisation course, a child product will
inherit the parent product’s conditions. However, if there’s a conflict between the
parent’s Property Conditions and the child’s ones, the most specific conditions
will take precedence over the most generic – in other words, the Property
Conditions set at the child level will always take precedence but if no condition is
set at the child level, the parent conditions will be used.
In our case, we should check if the PERSONAL.LOAN conditions include
description of the version to be used for the ‘Commitment’ screen while
performing a LENDING-DECREASE-COMMITMENT activity. If these
description is missing in the child’s Property Conditions, we should look at the
parent’s Property Conditions.
We can check which Property Conditions are associated to the current Product by
clicking on the ‘’Property Conditions’ tab. In this case, the Property we are
interested in is PRESENTATION as this is the property in charge of defining
which versions are presented to end-users when a certain Property, Property Class
or Activity is presented. For the PERSONAL.LOAN product, the Property
Condition associated to the PRESENTATION Property is also called
‘PERSONAL.LOAN’. As we still don’t know whether the PERSONAL.LOAN
condition includes a specific AA.ARR.TERM.AMOUNT version for the
LENDING-DECREASE-COMMITMENT activity, it would be a good idea to
also check the condition associated to the PRESENTATION Property also for the
PERSONAL.LOAN.PARENT product, which is the parent of
PERSONAL.LOAN.
We can view the content of a product condition through Admin Menu > Product
Builder > Product Conditions. In this example, the Property Class through which
we can define how customised screens for AA arrangements are presented to end-
users is ACTIVITY.PRESENTATION. As we have learnt from the AA Basic
Customisation course, each Product Condition associated to
ACTIVITY.PRESENTATION is listing which versions are associated with
Properties, Property Classes or Activities belonging to one or more Products.
In our case, we have to check the content of both the PERSONAL.LOAN and of
the LENDING Product Conditions, to know which version of
AA.ARR.TERM.AMOUNT is linked to LENDING-DECREASE-
COMMITMENT activity, if any. We will start with the PERSONAL.LOAN
condition record as this belongs specifically to the PERSONAL.LOAN Product
(which means that an activity specific version set here would take precedence
over any parent product’s settings).
Important note – if no activity specific version exists in any of the two conditions,
then a Property specific version will be used (in this case, the property would be
‘Commitment’). And if no Property specific version is available, then the
Property Class specific version will be taken in consideration (in this case.
‘TERM.AMOUNT’).
Again, through Admin Menu > Product Builder > Product Conditions, we access
to the list of conditions associated with the ACTIVITY.PRESENTATION
Property Class and we choose LENDING.
The ‘Default Values’ tab under the LENDING condition record, presents a
number of activities for which both Activity versions and a Simulation versions
are defined. In our case, we want to identify which AA.ARR.TERM.AMOUNT
version is used to display the ‘Commitment’ screen (i.e. the screen associated
with the ‘Commitment’ Property) while executing the LENDING-DECREASE-
COMMITMENT activity.
We can easily spot such version, which is
AA.ARR.TERM.AMOUNT,AA.CHANGE.AMOUNT.
Please note that if no Activity specific screen had been available, we could have
either created one or used the version associated with the TERM.AMOUNT
Property (as there is no version linked to the ‘Commitment’ property in the
LENDING condition either).
Now that we have identified the customised ‘Commitment’ screen used for
decreasing commitments in Personal Loans arrangements, we must update such
version so that it includes our POST.REST.TA local reference field.
Our objective now is to write a routine which is invoked only when the
LENDING-DECREASE-COMMITMENT is performed, extracts the content of
the POST.REST.TA local reference field on the TERM.AMOUNT Property Class
and updates the system field POSTING.RESTRICTION on the ACCOUNT
Property Class. We will later learn how it is possible to attach such routine to the
POST.REST.TA field on the
AA.ARR.TERM.AMOUNT,AA.CHANGE.AMOUNT version.
We need to figure out what the algorithm behind this kind of routine could be. We
should –
I_F.AA.ACCOUNT has the field names equated to field positions for the
ACCOUNT property class. I_F.AA.TERM.AMOUNT has the filed names
equated to field position for TERM.AMOUNT property class.
The INITIALISE section is used to initialise local variables used in the API.
MAIN.PROCESS section does the main process of the API
Incoming Parameters:
IN.FIELD.NUMBER – specifies the field number to be converted; please
note that in this case we are not using the field number directly but using
the common variable AA.AC.POSTING.RESTRICT, instead. This is
possible because we mentioned the insert file I_F.AA.ACCOUNT
within our routine. I_F.AA.ACCOUNT maps all field
numbers against common variables defining the field
name.
R.STANDARD.SELECTION - specifies the standard selection record
content
Outgoing Parameters:
FIELD.NO – used to hold the returned standard selection field name
(different from the common variable within I_F.AA.ACCOUNT), blank if not found
DATA.TYPE - data type is set to “D” by default; in case of error, any other data
type passed back
ERR.MSG - variable to store error messages
If you see the code, the common variables are used to retrieve the
arrangement information. These variables are defined in
I_AA.LOCAL.COMMON
PROPERTY.CLASS – holds the property class for which properties are sought
Outgoing Parameters:
PROPERTY - Returns a list of properties (separated by FMs) for the given
property class
Input parameters:
AA.GEN.NEW.ARRANGEMENT.ACTIVITY(ARRANGEMENT.ID,
NEW.ACTIVITY, EFFECTIVE.DATE, ARR.TXN.DETAILS,
ARR.ACTIVITY.ID, ARR.ACT.FIELDS.REC, RETURN.ERROR)
Incoming Parameters:
Outgoing Parameters:
ReturnError is the error variable
Please note that, from R12 TAFC release onwards, if you are trying to compile a
program which has got insert files ( e.g.: I_COMMON, I_EQUATE, etc, etc., )
then the syntax should be
We are assuming you have, like in this case, all your inserts in T24_BP (which, as
you know, is a directory under bnk.run).
Write, compile, catalogue the routine and then make an entry for the
routine in EB.API application.
@ID – should be the same as the routine @ID
Description – should contain a meaningful description of what this routine
does
Protection level – This is the protection level that is to be followed. The
accepted values are FULL, PARTIAL and NONE
Source Type – Basic or Java are the possible options
Let us now add the new Condition to the PERSONAL.LOAN product. We can
get the full list of available products in R12 Model Bank, through Admin Menu >
Product Builder > Products. As we have seen previously, the PERSONAL.LOAN
product belongs to the LENDING Product Line and to the PERSONAL.LOANS
Product Group. By clicking on the ‘Amend’ context workflow link, we are able
to update the features of the PERSONAL.LOAN product.
As you know, in order to authorise any Loan product, we can use the
AA.FIND.ARRANGEMENT.AL composite screen which you find under User
Menu > Retail Operations > Find Loan. Once the composite screen pops up, we
will select the second tab from the left (‘Unauthorised’) and then search by
Arrangement Id.
Once the enquiry output is presented to you, click on the ‘Overview’ context-
workflow icon on the right hand-side of the screen.
Once the ‘Lending Overview – Unauthorised’ composite screen pops up, get the
new record approved. Let us now decrease the commitment of this authorised
Personal Loan arrangement to check if our POST.REST.TA local reference field
is displayed within the ‘Commitment’ screen for the LENDING-DECREASE-
COMMITMENT activity and also to make sure that the
AA.UPDATE.ACCT.POST routine works properly – this should extract the
content of POST.REST.TA and updates the system field ‘POSTING.RESTRICT’
on the ‘Account’ Screen.
As you know, in order to perform a new activity on the authorised personal loan
arrangement, we can use again the AA.FIND.ARRANGEMENT.AL composite
screen available under User Menu > Retail Operations > Find Loan. Once the
composite screen pops up, we will select the first tab from the left (‘Authorised’)
and then search by Arrangement Id.
Once the enquiry output is presented to you, click on the ‘Overview’ context-
workflow icon on the right hand-side of the screen.
Once the ‘Arrangement Overview (Lending)’ composite screen has opened, click
on the ‘New Activity’ hyperlink on the top right-hand side of the screen. An
enquiry output listing New User Activities will pop up and you should now select
the ‘Decrease Commitment’ option, under ‘Term Amount’ property class. In order
to do so, click on the ‘Do activity today’ context-workflow icon.
Again, we can retrieve the unauthorised activity and approve it through User
Menu > Retail Operations > Find Loan. Once the composite screen pops up, we
will select the first tab from the left (‘Authorised’) and then search by
Arrangement Id.
Once the enquiry output is presented to you, click on the ‘Overview’ context-
workflow icon on the right hand-side of the screen.
Let us now jot down the Child Activity Id and check the ‘Commitment’ and
‘Account’ screens on this activity record to see if the update between them has
been carried out successfully between TERM.AMOUNT and ACCOUNT
Property Classes. While executing the LENDING-DECREASE-COMMITMENT
activity, we had populated the local field POST.REST.TA on the ‘Commitment’
screen with value ‘4’. If the routine has worked properly, now the content of the system
field POSTING.RESTRICT on the ‘Account’ screen should be the same.
And on the same record, also the POSTING.RESTRICT system field has been
automatically updated to value ‘4’. This happened because the current
LENDING-DECREASE-COMMITMENT activity, after authorisation, generated
a child activity which updated the ACCOUNT Property as well, thanks to the post
routine we attached to the parent activity. Let us use the Child Activity Id we had
jotted down to check the corresponding record in
AA.ARRANGEMENT.ACTIVITY.
1) To create our new version, we will access the Screen Designer Composite
screen, as usual, through Admin Menu> Implementation Utilities >
Customization > Screen Designer and then we should click on the New
Version option.
2) As soon as the New Version screen comes up, we should type in the Id of our
new VERSION record (i.e. AA.ARR.TERM.AMOUNT,VAL.RTN) and then
click on the Edit button.
3) On the main screen, we will jot down a brief description of the Customised
Screen Layout you are creating in GB Description and set the Language field
appropriately. As we have seen, in this version the NO.OF.AUTH field is
defaulted to 1 and cannot be changed.
4) We should now focus on the first Field Definitions tab in order to define the
fields and their basic structure for the AA.ARR.TERM.AMOUNT,VAL.RTN
version record
5) Each of the requested fields should have an entry in FIELD.NAME
6) COL contains instead information about the indentation from the left margin
(i.e. column position).
7) Text Max defines the amount of characters occupied by each field’s label
8) Text field contains the customised label which will be assigned to a specific
field in this version
We can now validate & commit the record. Version Designer is a self-authorising
version and hence our record will become immediately live.
We have created a new customised layout for the TERM AMOUNT Property
Class and our objective is to display this version to end-users whenever they
perform a LENDING-DECREASE-COMMITMENT activity on a Vehicle Loan.
We know that the versions displayed for each Activity, Property or Property Class
are defined through the PRESENTATION.API Property Class (linked to the
PRESENTATION Property) and that there are different ways to attach a specific
version to an activity – you can create a brand new Condition for
PRESENTATION.API from scratch and then attach it to a product, you can
update the VERSION in an already created Condition for a product (as we did in
Demo 1 of this presentation) or you can update an already existing
PRESENTATION Condition, including your version. In the past, we have seen
examples for the first and the second scenario, while now we are going to try and
update and existing Condition.
What we should do is check which condition is associated with the
PRESENTATION property in VEHICLE.LOAN (if any) and then update such
condition so that our version is linked to the LENDING-DECREASE-
COMMITMENT Activity. Note that, if the PRESENTATION condition is
missing we can either create a new one or update the corresponding condition at
the Parent Product level if VEHICLE.LOAN is a Child Product.
We can get the full list of available products in R12 Model Bank, through Admin
Menu > Product Builder > Products. The VEHICLE.LOAN product belongs to
the LENDING Product Line and to the PERSONAL.LOANS Product Group. By
clicking on the ‘View’ context workflow link, we are able to check the features of
our product.
We can check which Property Conditions are associated to the current Product by
clicking on the ‘’Property Conditions’ tab. In this case, the Property we are
interested in is PRESENTATION as this is the property in charge of defining
which versions are presented to end-users when a certain Property, Property Class
or Activity is presented. For the VEHICLE.LOAN product, the Property
Condition associated to the PRESENTATION Property is also called
‘VEHICLE.LOAN’.
We will now update the VEHICLEL.LOAN condition so that it includes our
AA.ARR.TERM.AMOUNT version for the LENDING-DECREASE-
COMMITMENT activity.
Again, through Admin Menu > Product Builder > Product Conditions, we access
to the list of conditions associated with the ACTIVITY.PRESENTATION
Property Class, we choose VEHICLE.LOAN and click on the ‘Update’ context-
based workflow icon, just beside this record.
The ‘Default Values’ tab under the VEHICLE.LOAN condition record, presents
all activities/properties/property classes for which both Activity versions and a
Simulation versions are defined. Those which are not listed here will be defaulted
from the parent product of VEHICLE.LOAN, i.e. PERSONAL.LOAN.PARENT.
In our case, we want to make sure that a specific AA.ARR.TERM.AMOUNT
version is used while executing the LENDING-DECREASE-COMMITMENT
activity.
As we can see, no Activity Version has been defined for the LENDING-
DECREASE-ARRANGEMENT: only the LENDING-NEW-ARRANGEMENT
activity and the SETTLEMENT Property Class have their own versions defined
while the other activities/properties/property classes will inherit their versions
from PERSONAL.LOAN.PARENT.
We do not want to interfere with the Parent Product settings, in this case, so we
will simply multi-value the Activity field and add the LENDING-DECREASE-
ARRANGEMENT value. Then, using the Activity and Property associated fields
we will connect the AA.ARR.TERM.AMOUNT,VER.RTN version to the
COMMITMENT Property for the aforementioned Activity.
Now that our version is associated to the VEHICLE.LOAN Condition, we need to
write a validate routine for inter-field update and attach it to the
VEHICLE.LOAN product through ACTIVITY.API
This Pre-routine is fairly easy as it does not imply the creation of a new
activity but simply the update of the AA.COMMITMENT.MEMO local
reference field if the POST.REST.TA local reference field contains any
value. Within the first part of our routine we will list, as usual, the insert
files we wish to use.
Then we need to identify the content of POST.REST.TA – in order to do
so, we will use a different method from the one previously seen, which
relied on the GET.LOC.REF API (see slides 35-50, Demo 1 of this same
presentation).
In this routine we will take for granted that we already know the position of
POST.REST.TA based on the standard selection record for
AA.PRD.DES.TERM.AMOUNT and AA.ARR.TERM.AMOUNT (we must
remember that that the latter gets automatically updated based on changes made
on the first, together with all the tables linked to the TERM.AMOUNT Property
Class). Checking out Standard Selection, we notice that POST.REST.TA appears
to be stored in the first position <1,1> of the LOCAL.REF field of the
TERM.AMOUNT-related tables, while MEMO.FIELD.POS is located on the
second position <1,2>.
So, in order to extract the values of POST.REST.TA, we use the common
variable AA.AMT.LOCAL.REF (stored under the insert file
I_F.AA.TERM.AMOUNT) assigning to it the correct position – the content
of POST.REST.TA will be located consequently under
AA.AMT.LOCAL.REF <1,1>. Please note that this parameter is supposed
to be inputted manually by the user and, therefore, we will extract it from the
common variable R.NEW – a dimensioned array which, as we know, contains data
from the currently opened record.
Once we have identified the position of POST.REST.TA, we will initialise the
variable MEMO.TEXT that contains the message to be displayed within the
AA.COMMITMENT.MEMO if the condition defined in the IF-THEN-ELSE structure
is true – in this case if the content of POST.REST.TA (initialised to the local
variable POSTING.RESTRICT.VALUE) is not null, then we will position the
content of MEMO.TEXT in AA.AMT.LOCAL.REF<1,2>, which means where the
AA.COMMITMENT.MEMO local reference field is positioned. Else
AA.COMMITMENT.MEMO will be left empty.
The REBUILD.SCREEN API will rebuild the arrangement page in case the
validate routine is invoked in CUI.
We can now compile and catalog our routine
Note that also the field ‘Default Negotiable’ is mandatory and should be populated under
the ‘Negotiation Rules’ tab
Let us now add the new Condition to the VEHICLE.LOAN product. We can get
the full list of available products in R12 Model Bank, through Admin Menu >
Product Builder > Products. As we have seen previously, the VEHICLE.LOAN
product belongs to the LENDING Product Line and to the PERSONAL.LOANS
Product Group. By clicking on the ‘Amend’ context workflow link, we are able
to update the features of the VEHICLE.LOAN product.
As you know, in order to authorise any Loan product, we can use the
AA.FIND.ARRANGEMENT.AL composite screen which you find under User
Menu > Retail Operations > Find Loan. Once the composite screen pops up, we
will select the second tab from the left (‘Unauthorised’) and then search by
Arrangement Id.
Once the enquiry output is presented to you, click on the ‘Overview’ context-
workflow icon on the right hand-side of the screen.
Once the ‘Lending Overview – Unauthorised’ composite screen pops up, get the
new record approved. Let us now decrease the commitment of this authorised
Vehicle Loan arrangement to check if the AA.ARR.TERM.AMOUNT,VAL.RTN
version is presented and if our pre routine works properly – this should check the
content of POST.REST.TA and updates the local field
AA.COMMITMENT.MEMO on the ‘Commitment’ screen.
As you know, in order to perform a new activity on the authorised personal loan
arrangement, we can use again the AA.FIND.ARRANGEMENT.AL composite
screen available under User Menu > Retail Operations > Find Loan. Once the
composite screen pops up, we will select the first tab from the left (‘Authorised’)
and then search by Arrangement Id.
Once the enquiry output is presented to you, click on the ‘Overview’ context-
workflow icon on the right hand-side of the screen.
Once the ‘Arrangement Overview (Lending)’ composite screen has opened, click
on the ‘New Activity’ hyperlink on the top right-hand side of the screen. An
enquiry output listing New User Activities will pop up and you should now select
the ‘Decrease Commitment’ option, under ‘Term Amount’ property class. In order
to do so, click on the ‘Do activity today’ context-workflow icon.