Welcome to the OPA Hub!


Category Archives: Oracle Policy Automation

Most Popular Downloads on this Site

Most Popular Downloads on this Site

We used to say that anything with “Google Maps” in the title was a sure-fire winner when it came to people downloading examples – after all Google Maps used to be so easy to get into, and so many people just “get” why a map is useful, that it was absolutely the go-to example. But is it still the case? Google APIs now need a Billing Account, and an API key, which in turn needs to have domain restrictions, and other administrative elements. It’s not quite as easy as it used to be.

So we set out to look at the different examples that have been downloaded on this site. And here are the results. Interesting. Under the graph, some comments and remarks which might explain some of the data.

Most Popular Downloads

Custom Google Maps JavaScript Label Extension Example 21

Custom Dynamic Options JavaScript Extension Example 21

Didn’t expect that one to be in there at all!

Custom JSON Search JavaScript Extension Example 19

Same for this one. Maybe Search is the new Map?

Custom Entity Container Extension Example  17

Google Maps as Custom Input Control Extension 15

Ah, see, the combined score is going to be huge.

Custom JavaScript Extensions Map with Google Places and Custom Options List  12

Told you. Google Maps reigns supreme!

Custom Header as a Timer JavaScript Extension 12

Custom Year Picker JavaScript Input Extension Example 9

JavaScript Extension Entity Collect Control 7

JavaScript Entity Collect Extension Excel Data Load 6

Custom Signature Extension Example 6

Wow. This one isn’t even really an extension!

JavaScript Extension Search Examples – Airlines, Great Circle Mapping, Airports 6

Everyone loves planes. I get that.

Embed Website in Interview Label Extension 5

JavaScript Extensions with a Live Entity-based Chart with D3 5

Everyone hates D3. I get that.

JavaScript Extension Search Example – Railways 5

Not as much fun as airplanes.

Loader Image in Entity Instances Search Extension 4

JavaScript Extension fullCustomInput Example 4

JavaScript Extension Custom Label Detail Pop-up 4

Calendar Input Extension Blackout Dates 3

JavaScript Extension Search Example – Siebel REST API 3

JavaScript Extension Relationship Control 2

JavaScript Label Extension Leaflet JS Map 2

Wow. This is the free alternative to Google Maps. I would have imagined this to be more popular.

Force PDF Click Button Extension and Label  1

As you can see from the Chart, Google Maps is hanging on – but only just! It’s ex aequo with the Search Extension. However if you pool together all the Google Maps stuff, it completely wipes the floor with the competition. Definitely the most popular downloads.

Want even more downloads?

If you are interested in even more examples (including a complete Entity Collect, a Carousel, Breadcrumbs, lots of Inputs and more, then you will be interested in our new book, JavaScript Extensions for Oracle Policy Modeling.

Whats New in Oracle Policy Automation 19D?

Whats New in Oracle Policy Automation 19D?

Another quarter rolls by and the Oracle Policy Automation team have released their latest version. This is the final one for 2019, and who knows what 2020 will bring us? Judging by the conversations at the different Focus Groups this year, I would say “lots of things”! So here is our traditional roundup of Whats New in Oracle Policy Automation 19D!

Don’t forget to reach out to the Oracle Policy Automation Blog team and hassle them to publish the 2020 Oracle Policy Automation Focus Group calendar, so you can start convincing your boss that you need to go there. And believe me, you need to go there. It’s by far the best way to get facetime with the great and the good of the community, both from Oracle and from the customer side. And it’s all in the spirit of sharing and collaboration. No selling!

Whilst I’m on this subject, don’t forget the Early Bird prices for Modern CX 2020 in Chicago run out soon. We’ll be there, so I look forward to meeting as many people as possible!

Back to the subject at hand – what’s new in Oracle Policy Automation 19D? Well, here is the list:

New Hub User Interface in Oracle Policy Automation 19D

There have been mutterings about this for a while so it’s with pleasure that I see the new UI has grown more responsive and more in line with the other Oracle applications in the Cloud:

Whats New in Oracle Policy Automation 19D? 1
You might think that was a bit of a disappointment since it’s pretty similar to the last one, but digging a bit reveals more news:

Whats New in Oracle Policy Automation 19D? 2
The fonts have changed. And…
Whats New in Oracle Policy Automation 19D? 3

So have the role names! And the deployment pages get a refresh too. Someone has been downloading icon sets I think!
Whats New in Oracle Policy Automation 19D? 4
And the detail pages get a wash and brush-up too. I find the metrics very small however:Whats New in Oracle Policy Automation 19D? 5
Drilling down on one of the metrics, shows the updated screen shown below. Still no visibility on metric for Web Services,or any other channel (sigh).
19d - Project Metrics
But there’s more. Wandering around in there, we can notice that the “collection” idea has been renamed the rather more sexy “Workspace”:

Whats New in Oracle Policy Automation 19D Workspace
This all seems to smack of “clearing the way for a bunch of new stuff” but hey, what do I know?

Entity Level Forms

So now if you have a household with 3 individuals applying for something, you can run off Forms for the individual members of the household.

Entity Level FormsResubmit Interview Data

Interview designers can now allow Screens to resubmit data. This is only available for Interviews using the Connector Framework.

Resubmit Data in Connector

Pass a cookie parameter in the OAUTH header for embedded interviews

For a web service connection, there is now the ability to name a cookie which will be passed through in the parameters of any Load, Save, GetCheckpoint or SaveCheckpoint request made. This enables customers that authenticate users of their interviews via an OAUTH token passed in a cookie to have that same token passed when the data adaptor is invoked during an interview.

Refresh Seed Data

This is a very interesting one. Suppose you need to refresh the seed data in the course of the Interview. I mean, reissue the load and pull in mapped data like you did at the start? An intriguing prospect, with lots of side effects, for example in the case of mapped entities (and this taken from the online help) :

This means that when seed data is reloaded:

  • any instance that currently exists in the session but not in the seed data will be deleted,
  • any instance that exists in the seed data but not the session will be created in the session, and
  • any instance that exists in both the session and the seed data will be left alone.

Well, that started out looking like a modest release but in fact there are lots of things that are going in Oracle Policy Automation and Modeling. Thanks as always to the whole team for another cracking release!

Table Headers Tabular Layout Trick 7

Table Headers : Tabular Layout Trick

Table Headers : Tabular Layout Trick

There is always much discussion when users first discover the Interview tab. Let’s be honest – not all of the comments are exactly positive. It all feels a bit, well, basic.

There are a number of things that catch you out at first (and indeed, later). So let’s take a moment to study tabular layouts and a common issue.

For this example I’m going to use the same project (Credit and Visa Cards) as the previous post, since that gives us two entities to work with.

Tabular Layout

Let’s consider that you want to display both entities using tabular layout. You create a Screen and set them both to tabular display. But let’s assume that you want to display the Visa Card with a couple of specifics. You want to include the provider of the credit card. So let’s set that up as a Value List and use an attribute on the Credit Card, and infer it on the Visa Card:

Table Headers Tabular Layout Trick 1So, with that now done, we want to display the Visa Card provider in the Entity Collect (as it is an inferred entity, we cannot use an Entity Collect). But we want to display it as a label as you can see in this screenshot (we added a name to the attribute as you saw in step one so we can reference it in our Screen:

Table Headers Tabular Layout Trick 2Notice how we added a label and used that to display the text of the provider? Using a label ensures three things

  1. It is read-only
  2. If the user is tabbing from input to input, the cursor will not get stuck in that field
  3. It doesn’t look like a read-only input, just a label (which is what we want).

But the downside is that the label does not have a table header in that column, since the Interview designer only adds those for Inputs:

Table Headers Tabular Layout Trick 4

I find it a shame that we cannot put table headers in this “tabular” column, since in HTML a table should have column headers. In fact if we take a moment to inspect this table in the browser, we note that annoying, there is a table header in the table:

Table Headers Tabular Layout Trick 5

So, we need to get that table header populated with our chosen text. But how shall we do it? We don’t want to create an Entity Container extension, since that would mean we have to do the whole thing from top to bottom. So we only want a little tiny change. We have a couple of choices.

  1. Create a Style Extension for the Entity Collect
  2. Create a Label Extension for stealth modification

Let’s try the first option, since it reveals some interesting facts about Styling Extensions. Firstly, get ready by doing the following; change the text associated with your entity in the Interview by double-clicking where the rectangle is, and entering whatever text you would like to display in the missing header.

Then add a compound Styling Extension to your Project. Tabular Containers allow for nested styling, like this:

OraclePolicyAutomation.AddExtension({
style: {
tabularContainer: function (control) {
if (control.getProperty("name") === "xContainer") {
style: {
headerRow:
YOUR STUFF GOES HERE
 
}
}
}
 
}
});

Notice the “headerRow” is a child of “tabularContainer”. And notice the line that says YOUR STUFF GOES HERE. Now for an interesting fact about Styling Extensions. They behave, to a reasonable degree, just like Control Extensions. They are really one and the same thing – the main difference of course is the handlers that are exposed in Control and Interview Extensions.

Drop jQuery into your resources folder, and then replace YOUR STUFF GOES HERE with the following line:

$("#opaCtl4th0").text(control.getCaption());

Of course, the jQuery selector may be different for you but it is easy to find the “header” I illustrated in the previous screenshots. Open your Project in a real Browser (Ctrl+F5) for debugging and take a look at the results:

Final Header Result

Our Styling Extension has added the text to the header, drawing it from the Interview Screen Entity Container definition, and we have it where we want it. Of course, you could style it as well.

But it goes to show that Styling Extensions are really not very different to Control Extensions!

InferInstanceFor Debug Screen Final

Back to Basics : InferInstanceFor

Back to Basics : InferInstanceFor

It’s one of those functions that people often ask questions about. At first glance InferInstanceFor appears to be “just another one of those Instance functions”. But it actually hides something very interesting. The ability to create copies, to a certain degree.

So copies of instances, huh? Why would I want to do that? Well there are many reasons. But before we look at reasons, let’s look at how it works. Starting with a simple data model – consider the credit card as an entity. And the visa card as well. Let’s say that (logically enough) the visa card will be hosting instances of the credit card that are Visa cards.

So if we wanted to actually infer the existence of these Visa cards (as opposed to inferring membership of a relationship) then InferInstanceFor is going to come in very handy.

What we need, in order to be able to do this, is to establish an inferred associative relationship. We need to connect the credit and Visa cards with a relationship, so that we can use that in our upcoming rules.

InferInstanceFor 1

Suppose we enter into the Debugger 3 credit cards. Note that the Visa card is an inferred entity – you are about to add the rules to infer them. Here is the rule to begin the Word document:

InferInstanceFor Rule

And so, let’s tidy up the Interview and make a nice Screen layout with the two entities on the Screen – the credit card as a New Input and the Visa card as a new Control > Entity Container. I’ve added some labelling and put it into Tabbed layout for clarity:

InerInstanceFor Screen Layout

So now let’s run the Debugger and see the result, with 3 cards entered:

InferInstanceFor Debug 1

Hmm, that’s seriously underwhelming – what’s with the unknown?! The reason is, InferInstanceFor simply creates the “copy” instance. It does not in any way clone the attribute values. So right now you have a Visa card, but there is no information at all in the instance.

That’s why, whenever you see an InferInstanceFor, you are highly likely to see another rule right after it, making sure that some of the data is actually populated. A useful function in this context would be For(), since it is designed for cross-entity reasoning – which you are now doing since you have two entities. A sample rule might look like this:

InferInstanceFor Rule For

Note that this rule assumes that your credit card entity has an attribute called the credit card number. I renamed the attribute the credit card to the credit card number in my project. And of course, the separator “,” might be different in your region.

After a bit more tidying up it looks like this. Nice!

Debug Screen Final

Job done. So InferInstanceFor is useful for creating mirror copies of instances, but you will need to leverage other functions and rules to actually populate the instances you create.

If anyone wants the Zip File, just leave a comment!

Back to Basics : ForScope, For, ExistsScope and the rest

Back to Basics : ForScope, For, ExistsScope and the rest

Back to Basics : ForScope, For, ExistsScope : If there is one error message guaranteed to strike fear into the heart of an Oracle Policy Automation rulesmith learning their craft, it’s the “My Thing is not available here. You may need an alias…” error that pops up just as things start getting interesting when you are learning about Entities and Relationships.

It doesn’t help that the error is a bit opaque. But at heart this error is trying to tell you some good news – you’ve gotten your Entities off the ground!

Let’s start with some ideas to get back on track:

Firstly a picture. Its nearly Halloween and here in my office they’ve been decorating so I’ve been forced to follow their lead:

 

Back to Basics : ForScope, For, ExistsScope and the rest 1
Imagine you are walking through the graveyard late at night. It’s dark and stormy and you find your way to the first tomb. A big, crumbling Gothic one. And inside are some graves. And in each grave there are maybe some ghosts.

Alright, you get the idea. But trying to write a rule like this (assuming you have changed the relationship texts from “all instances of…” into something more useful:

the person walking at night is frightened if

InstanceCount(the ghosts in the grave) > 4

…and you will get the magic error:

Back to Basics : ForScope, For, ExistsScope and the rest 2

Think of it like this. Walking through the graveyard with your flickering torch, you can hardly see your way forward. Your “vision” of the ghosts that await is dependent on your ability, first of all, to focus on a grave ( since ghosts live in a grave) and seeing a grave means you first have to focus on a tomb. That’s the way our model is built.

Now consider the following:

Back to Basics : ForScope, For, ExistsScope and the rest 3

You can see that the rule document mirrors our nervous walk in the graveyard at night..find the tombs, then find the graves in the tombs, and peep inside each grave to look for ghosts. I can handle up to three ghosts per grave.

The basic idea should make sense – you need to give the correct “scope” to your conditions. This whole idea is all about scoping.

Once you’ve gotten your head around that concept, the next step is to be clear on what you are actually trying to achieve. The above example might be written like this instead:

Back to Basics : ForScope, For, ExistsScope and the rest 3

Did you really mean that you are only frightened if every tomb has graves, and all of the graves have more than three ghosts? Wow! I’m impressed. I’m way more likely to want to write:

Back to Basics : ForScope, For, ExistsScope and the rest 4

Or, in longer form:

Back to Basics : ForScope, For, ExistsScope and the rest 5

That’s right, some of these scoping functions have filters so that you can quickly define “all of them” or “at least one of them” kind of conditions.

So far so good. But what’s the difference between these two?

Back to Basics : ForScope, For, ExistsScope and the rest 7

Back to Basics : ForScope, For, ExistsScope and the rest 8

Aside from the obvious visual difference, they are the same. Let’s review the help text:

Exists(<relationship><condition>)

Used to refer from one entity to another entity in a relationship, when you need to determine whether any members of the target entity group need to satisfy the rule. This form is used when there is only one condition in the rule.

ExistsScope(<relationship>)

Used to refer from one entity to another entity in a relationship, when you need to determine whether any members of the target entity group need to satisfy the rule. This form is used when there are one or more conditions in the rule. This function is not supported in Microsoft Excel rules.

I’ve highlighted the difference. Using “Exists” limits you to one element after the relationship name. If you want to have more than one, you need to use ExistsScope, you can’t stick them in the “shorter” version.

Ghoulish Result 2

Don’t worry, there’s more 🙂 but that’s a good start. We’ll dig into some details next.

Extensions : A First Style Extension

Extensions : A First Style Extension

To better understand the process of creating, testing and delivering a style extension, and how it relates to the Interview experience, let’s start with a skeleton example. You have been tasked with creating a text input for the Interview, which has a different behavior to the normal one. For this short example, you could simply create a new Project by selecting the Project tab and clicking New Project.

1. Before doing anything, check that the behavior you are looking to implement is not already configurable using the Styles dialog on the Interview tab. For example, there are a number of options on this page, that allow us to change the font, color and so on:

Style Extension - What to do

2. Click the Custom Files button

3. Notice the warning. If you are developing for a public sector organization or for an organization that needs to meet certain accessibility standards, you should review the warning and check that any extension you create meets the standard Web Content Accessibility Guidelines (WCAG) mentioned. You can find out more here: https://www.w3.org/WAI/standards-guidelines/wcag/.

4.In the screenshot above, the Project is called Style Extension. Notice that the folder is called interview-theme/resources. This folder can contain your Extension files, but it also can contain other resources for your Project, notably images (and a folder is already present with that name).

Adding a file is as simple as adding a new file to this folder. You can choose to add a new file manually, or you can use a code generator such as the one available from https://theopahub.com which can help you quickly create standard files to work on.

In this, our first example, let’s create a new Text File and rename it example.js. Even though it is concerned with styling rules, all extensions are always driven by a JavaScript file. But before you add the file, a word about the file structure.

Custom Style Extension Template

Most Extension creators like to use template files, since all extensions have a similar structure. You might use this sample styling template as a general starting point for self-study purposes. Over the following pages, you will implement several examples of Custom Styling Extensions; each time you will construct a file based on a template similar to this.

OraclePolicyAutomation.AddExtension({
style: {
objecttype: {
className: "css class name",
errorclassName: "error css class",
propertyname: "property value"
}
 
}
});

In the template shown above, there are four main areas that may be modified:

Object Type
The Object Type identifies the element you are trying to restyle. This could be the Interview content, the “Next” button, or a specific type of element such as a Calendar input Control.
Class Name
The style details (color, background, or indeed any Cascading Style Sheet content) are in most cases based on a standard CSS file with different classes.
Error Class Name
The style details to use when a control is in an error state (for example, a user has entered an invalid date).
Property Name
In simple cases, where only one aspect is changed, in certain controls it is possible to change the value without a separate style sheet. For example, in order to change only the background color of an element, it is not required to create a style sheet, you may reference the property directly as you will see in a moment.

In the case of this first walk-through, you will construct a Style Extension that changes the look of one or more text input areas in your Project.

Using the code below as your guide, add text to your blank example.js file.

OraclePolicyAutomation.AddExtension({
style: {
textInput: {
 
style: {
color: "darkblue",
backgroundColor: "lightgrey",
fontSize: "14px",
fontWeight: "bolder"
}
 
}
}
});

Notice the following key points:
1. The Oracle Policy Automation AddExtension object allows us to pass details of an extension to normal behaviour, to “register your extension”
2. The style key indicates that it is a styling extension, and you will change text color, background color, font size and weight properties in your extension
3. The textInput key tells Oracle Policy Automation that you wish to extend textInput styling
4. The entire code of your extension is a JavaScript object

Build a First Example Style Extension Project

In order to test your work, you will need to add some content to your Oracle Policy Automation Project. In the Data tab, create three attributes according to the example below (note there are two text attributes and one number attribute).

Style Extension - Attributes for Example

Make the following changes to the Interview tab of your Project

  1. Click New Screen on the Interview Tab
  2. Drag the New Screen so that it is the first in the vertical list
  3. Double -click the title and change it to “Customer Management”
  4. Click New Input
  5. Double-click each attribute until they are all visible on your Screen

Once these simple steps are finished, your Interview should look like the one below. Use the bullet points in the screenshot to make sure you have the same result.

Style Extension Interview

So you are ready to test your Style Extension. Start a new Debug session by clicking Debug in the top right hand corner of Oracle Policy Modeling. If you have followed the steps, you should see the following:

Style Extension - result

You are perhaps surprised at the result as to why both of the first two inputs are styled. That’s because the underlying HTML tags are the same. In a later example you will find out how to style numbers differently to text, and so on. There are many more options available to style developers.

But that’s it – you now have a functioning Style Extension. Enjoy, until next time!

Data Model Viewer – Updates

Data Model Viewer – Updates

When they are not working making toys for Father Christmas, the elves take time out to update the Data Model Viewer. This little tool came out of a desire to be able to see what is going on in an Oracle Policy Automation project at a high level. Questions like:

  1. How many entities and attributes?
  2. How many temporal attributes?
  3. How many named attributes?
  4. What relationships?
  5. What Value Lists?

And of course, the  ability to print the model in PDF, zoom in and out and so on. Well, with a little bit of Visual Studio magic, and the help of the Internet, the Data Model Viewer was born. We recently updated some things in it like:

Data Model Viewer Main Window

Data Model Viewer Preferences

Data Model Viewer PDF export

  • Snapshot of the Project

A great way to have a split-second overview of the project.

  • Icon-based Attribute Lists

We pulled the text labels and replaced them with icons.

  • Enumerations (Value Lists)

Now you can add Value Lists to your diagram with ease.

  • Highlight (un)named attributes and temporal attributes

Useful to see how many mapped or temporal things are going on in your project.

  • Change color schemes

Because not everyone likes bright red boxes!

  • Set prefixes for searching attributes

Sometimes you just want to highlight things

  • Change Diagram type

Anneal (Ring) or Hierarchy depending on your preference.

  • Export to PDF

Obviously – and also to SVG for easy manipulation.

Help Us!

We’ll keep adding to it until we are satisfied that it holds everything that might be useful. If you have anything on your “would like to see in OPM but won’t ever get it” list then please get in touch. In the meantime, you can also download the app from the OPA Hub Website Shop of course.

Input REST Batch Requests into Debugger

Input REST Batch Requests into Debugger

One of the new features introduced in 19C is the ability to use REST batch sessions (or requests, to give them their real name) directly in the Debugger. This is a great leap forward. Up to now, where I am working at the moment, we had built a tool to translate the REST into XML but it was still less than optimal.

So you can imagine how excited I was when I saw this new feature arrive in the product. There is, however, one major issue that I still find very frustrating. You will understand perhaps if I show you an example. Let’s consider the following. I have a batch of 10000 REST Batch cases that have been used in our testing and saved in JSON format. Now I want to open one of these in my Debugger to investigate what is happening. I open the project in Oracle Policy Modeling and I rush to the Debugger.

REST Batch

The pop-up window shows that my JSON file has been loaded, and shows me…the case id. Which from a functional point of view, of course, tells me nothing at all. Most of the testers here would be unable to remember which case represents which testing scenario. What we would have loved (and we are going to ask for) is the possibility to choose what to display in that window. For example, in our case, maybe if we show the identifying attribute from one of the entities being used, that would be more than enough for us to be able to recognize which case it is.

This might not seem a big deal but when you have an operations department who simply sends you the file and says it does not work i(they don’t necessarily know anything about Oracle Policy Automation apart from how to run it) it can be frustrating working backwards from REST case numbers back to scenarios that we can relate to our Test Cases in Excel.

I’m going to be accused of mixing everything up but it would be nice to have something easier to recognize, or perhaps a parameter that we could change.

What’s new in Oracle Policy Automation 19C?

What’s new in Oracle Policy Automation 19C?

The autumn follows the summer and just as logically, the new release of Oracle Policy Automation follows it’s own, similar, seasonal rhythm. Version 19C is now available for download from your usual source, and as usual it contains a number of really juicy updates for us, and here is the lowdown:

Import Batch REST requests into Policy Modeling debugger

I know a good many users of Oracle Policy Modeling will be relieved to see this one. It allows you to load REST requests into your Debugger (as opposed to only allowing SOAP requests in previous versions). Then you can select which REST batch case you wish to review in the Debugger, since one request might contain many cases. Excellent news!

19C Debug

Integration Cloud Service OPA Interview Adapter

This and the next section are one and the same, more or less. Oracle Integration Cloud service can be hooked up to an Oracle Policy Automation Interview through this adapter. Previously Oracle Integration Cloud users were restricted to consuming Oracle Policy Automation Assess Web Service sessions.

Generic REST integration protocol for interviews

If you are familiar with Connector API and the SOAP-based platform it provides, then this will feel like a tremendous leap forward.  Essentially it allows the following

  1. Rule designers to specify input and output attributes for an interface contract, without needing to know / have available the technical details of the mapping.
  2. The technical team to receive the Project, view the contract and hook up the defined load and save to whatever

The most exciting thing is that although it is perfectly designed to work with Oracle Integration Cloud (see the previous section) , it is completely designed to be generic – another provider could be used.

It sort of turns data mapping on it’ head. Instead of the technical team defining the input and output “contract” and the rules designer then mapping attributes to that interface, the rules designer builds the rule model, defining the input and output mapping names for contract items, before deploying the Project. And then the technical team hooks up the integration to these targets.

19C Mapping

It has the potential to completely change how we think about Connections in Oracle Policy Automation, reduce coding, allow for integrations to be modified without any impact on the interview design process, and to imagine federated data sourcing (the Interview does not know, or need to know, where the data is actually coming from, or what the Integration Server is doing upstream (calling different systems, transforming data, whatever). As you can see in the next screenshot, the mapping values can be defined ad hoc.

Engagement Cloud Connection Type

The Engagement Cloud gets its own connection type, as future enhancements will leverage this new type.

19C - Connection Types

Update all inclusions

Tired of manually updating all the inclusions in your Projects? Well the new one-shot option is for you. It will automatically update and accept all the changes on all the inclusions in the Project. It is also available in command-line format too. Sounds great, but not something you click on without actually thinking about what you are doing, right?

19C Inclusions

Redirection target support

If you have embedded an Interview in an IFRAME and you want to redirect the user (with the Submit and Redirect, Submit or Exit buttons) now you can specify an additional piece of information – the target (top, parent or self) for the redirect. Smart!

19C Redirect

Smart Checkpoint Resume

OPA interviews that are embedded into other applications can now auto-resume (without prompting) if a checkpoint is found. This functionality is enabled by using the resumeCheckpointOrStartNew operation and providing the URL parameters needed to start or resume the interview. It works for both Service Cloud and Web Service connections.

File Uploads you can Download

Ever wanted to check a file you have added to an upload group, before you end the interview – by downloading it again?

So now you can.

Something for everyone in this release!

Fun with Aliases and Strings #3

Fun with Aliases and Strings #3

In the previous parts of this article (1, 2) we’ve taken the time to look at an amusing string-based manipulation technique which has helped us create a long string from lots of strings. Of course, the main reason for the example was to showcase two of Oracle Policy Automation’s language features, namely logical loops and aliases.

In this final part we will look at some of the downsides and potential challenges relating to strings and logical loops, and a few other things besides.

  1. Inferring instances of an entity to impress your friends

This can go wrong of course. In the current example you must enter the instances manually either in the Debugger or in the Interview itself. But what if you decided to infer them, for example from an Excel spreadsheet. Regular readers will know that we’ve hacked and worked with Excel many times in the past, and it comes as no surprise to us that on a single instance of Oracle Policy Automation, with the instances inferred from an Excel spreadsheet, the following will occur regularly as soon as you get into the 150,200 instance range:

Aliases and Strings Error

Closely followed (of course) by the following in the Interview:

Aliases and Strings HTTP Error

Obviously there are lots of configuration changes we can make on WebLogic (if you have access to it) to ensure we are running the JVM with appropriate memory, in Production mode and so on. But hopefully the point is clear. Inferring instances (large volumes) can be costly in terms of performance / memory.

2) Entering lots of instances manually to impress your friends.

It is worthwhile remembering that logic loops have a 1000 iteration limit – if they cannot be stabilized by then, an error occurs. So assuming you add 1001 instances of the ticker tape manually using the Interview or the Debug, you would expect to hit the logical loop ceiling. Oracle Policy Automation gets out of the loop, just in case it goes on for ever and ever. The easiest way to test this is to use the Test Case format and try out your logical loop with zero to many iterations in order to verify that you are never going to have the scenario where there are more iterations than the limit.

999 InstancesAliases and Strings 999 Cases
1001 Instances
Aliases and Strings 1001 Cases

For the same reason, the warning about logical loops on the Rules Tab : if you do decide to hide it, will you remember it in 6 months time? Have you documented your tests somewhere?

Have fun!