Tag: OPM

Back to OPA Basics : Oracle Policy Modeling Features

Back to OPA Basics : Oracle Policy Modeling Features

Welcome to another in our periodic back to OPA basics series. At the moment I am watching a lot of new starters join a set of experienced developers. And funnily enough, both groups sometimes are stuck in their routine. For the new people, they fall back on what they know from other rules engines. For the more experienced people, that are familiar with Oracle Policy Modeling, they repeat what they learned long ago and do not necessarily see anything that has been added to the application in the intervening time since they first started using it.

So here are my top five cool time savers and useful things you can find in Oracle Policy Modeling today.

  • The Rule Assistant

I still find it strange that many people don’t use the Assistant in Word. If there was ever a tool to avoid having to remember the arcane spelling and phraseology of an Oracle Policy Automation attribute, this is it!

Back to OPA Basics - Rule Assistant

  • The Convert to Test Case Export

Watching people filling in every cell in their Test Case spreadsheet, when they probably have already saved many of the initial scenarios as debug sessions, I think they should remember the fact that they can move a unit test into a Test Case, and vice-versa.

Back to OPA Basics - Export as Test Case

  • The Find Unused Attribute Filter

I tend to use this one when the Rule Assistant has not been used very much, so we are looking for duplicate / mispelled attributes in our Project (see Rule Assistant, above).

Back to OPA Basics - Unused Attributes

  • The Inclusion Report

OK, so I’m probably cheating as far as this one is concerned, but it is a real time saver. In 19A, the introduction of the Inclusion Report has saved me time already. Great for beginning an impact assessment when some sort of surgery is required on Project structure. Find out more here.

Back to OPA Basics - Inclusion Report

  • The Export Entity Data Model Option

This is a tiny little option hidden away in the toolbar but I’m often asked by non-OPA people for the data model and I find this export really simple and quick to use.

Tiny Button - Export Data Model

Well, that’s our top five for now. What other tricks do you use to get the most out of Oracle Policy Modeling?

Let us know in the comments!

 

Dynamic Charts in Container Controls

Dynamic Charts in Container Controls

As many of you know, we try to provide JavaScript Extension examples for you to experiment with in your own Projects. A while ago, we looked at an interesting question about using Dynamic Charts in Container Controls – basically to display a chart (which is the sort of thing it was designed for),  but to also include the capability to update the chart live as the data is edited on the same Screen. A quick animation will give you the idea:

The example is an interesting one, on account of it allowing us to talk about the difference between viewing data that exists already, versus using data that has just been created.

To keep it simple, we can think of server-side data and client-side data. Server-side data, for example used in Container Controls, represents the data that has been collected in a previous Screen. It’s already been seen by the determination server.

Client-side data is information that has been entered on the current Screen before the Next button has been clicked. So as far as the determination process is concerned it is “not quite there yet”.

The same concepts exist in the world of JavaScript extensions. For example, consider the difference between these two keys : mount and update from the updated  Container Control example that is available here.

 return {
                mount: function(el) {
                    console.log("Starting customContainer Mount");
                    if (document.readyState == 'complete') {
                        var rows = [];
                        for (i = 0; i < entities.length; i++) {
                            entity = entities[i];
                            if (entity.entityId === "payment") {
                                break;
                            }
                        }
                        rows = entity.instances;
                        var myFlatList = [];
                        var myObject;
                        var width = 300,
                            height = 300,
                            radius = 150,
                            color = d3.scaleOrdinal(d3.schemeCategory10);
                        var size = rows.length;
                        for (i = 1; i < size + 1; i++) {
                            myObject = new Object();
                            myObject.label = control._source.screen.serverState.payment['the payment' + i].payment;
                            myObject.value = control._source.screen.serverState.payment['the payment' + i].amount;
                            myFlatList.push(myObject);
                        }
                        data = myFlatList;
                        var vis = d3.select(el);
                        vis.select('svg').remove();
                        var vis = d3.select(el)
                            .append('svg')
                            .data([data])
                            .attr('width', width)
                            .attr('height', height)
                            .append('g')
                            .attr('transform', 'translate(' + (width / 2) + ',' + (height / 2) + ')');
                        var arc = d3.arc().outerRadius(radius)
                            .innerRadius(0);
                        var pie = d3.pie()
                            .value(function(d) {
                                return d.value;
                            });
                        var arcs = vis.selectAll('g.slice')
                            .data(pie)
                            .enter()
                            .append('svg:g')
                            .attr('class', 'slice');
                        arcs.append('svg:path')
                            .attr('fill', function(d, i) {
                                return color(i);
                            })
                            .attr("d", arc);
                        arcs.append('svg:text')
                            .attr('transform', function(d) {
                                d.innerRadius = 0;
                                d.outerRadius = radius;
                                return "translate(" + arc.centroid(d) + ")";
                            })
                            .attr('text-anchor', 'middle')
                            .text(function(d, i) {
                                return data[i].label;
                            });
                        console.log("Ending customContainer Update");
                    }
                    console.log("Ending customContainer Mount");
                },
                update: function(el) {
                    console.log("Starting customContainer Update");
                    var myFlatList = [];
                    var myObject;
                    entity = control._source.publicInterface._source.screen.clientState.payment;
                    var rows = [];
                    rows = entity;
                    for (var key in entity) {
                        if (!rows.hasOwnProperty(key)) continue;
                        var obj = rows[key];
                        for (var prop in obj) {
                            if (!obj.hasOwnProperty(prop)) continue;
                            myObject = new Object();
                            myObject.label = obj.payment;
                            myObject.value = obj.amount;
                        }
                        if (myObject.label != "") {
                            myFlatList.push(myObject);
                        }
                    }
                    var width = 300,
                        height = 300,
                        radius = 150,
                        color = d3.scaleOrdinal(d3.schemeCategory10);
                    data = myFlatList;
                    var vis = d3.select(el);
                    vis.select('svg').remove();
                    var vis = d3.select(el)
                        .append('svg')
                        .data([data])
                        .attr('width', width)
                        .attr('height', height)
                        .append('g')
                        .attr('transform', 'translate(' + (width / 2) + ',' + (height / 2) + ')');
                    var arc = d3.arc().outerRadius(radius)
                        .innerRadius(0);
                    var pie = d3.pie()
                        .value(function(d) {
                            return d.value;
                        });
                    var arcs = vis.selectAll('g.slice')
                        .data(pie)
                        .enter()
                        .append('svg:g')
                        .attr('class', 'slice');
                    arcs.append('svg:path')
                        .attr('fill', function(d, i) {
                            return color(i);
                        })
                        .attr("d", arc);
                    arcs.append('svg:text')
                        .attr('transform', function(d) {
                            d.innerRadius = 0;
                            d.outerRadius = radius;
                            return "translate(" + arc.centroid(d) + ")";
                        })
                        .attr('text-anchor', 'middle')
                        .text(function(d, i) {
                            return data[i].label;
                        });
                    console.log("Ending customContainer Update");
                },

Notice that the mount key uses the server-side data : when we draw the Control, we can only draw what is already available to us. But in the update, we want to take into account the new data entered by the user, so we look for the client-side data. So now we can be more specific : you can access clientstate and serverstate information which can help you work with previously entered or just-entered dynamic information.

Hope you have fun building your Dynamic Charts in Container Controls! We’ve updated the Shop example to include the complete Zip File.

Dynamic Charts in Container Controls Example Image

Siebel and Oracle Policy Automation May 2017 – In (em)bed together

Siebel and Oracle Policy Automation  12 May 2017 – In (em)bed together

Siebel and Oracle Policy Automation 12 May 2017 : Since the release of Oracle Policy Automation May 2017 edition, teams of Siebel developers are breathing a sigh of relief. Finally, Oracle Policy Automation can fully integrate into the Siebel Open UI JavaScript API thanks to the arrival of it’s own Extension API.

It does not take long to compare the advantages of this Siebel and Oracle Policy Automation integration method :

  1. No longer having to use the static HTML file-based integration that was proposed in Siebel Innovation Pack 15.5 and above. This means that all the native Oracle Policy Modeling components (sliders, image controls, explanations, Form downloads just to name a few) can be displayed in Siebel Applets or any other element you can imagine in the Siebel Open UI object model (I’m thinking Plugin Wrappers and so on)
  2. Allowing the Oracle Policy Modeling users to concentrate on optimizing the experience and the Siebel Developers to concentrate on delivering the data model to Oracle Policy Modeling. Separation of concerns
  3. Avoiding IFRAME. Always a good thing.
  4. Implementing different Physical Renderers depending on user situation – perhaps to display the Oracle Policy Automation Interview in a jQuery Dialog if the screen is big enough, otherwise using the full Siebel Applet
  5. Potentially creating a Presentation Model with User Properties to allow Siebel Developers to pass properties into the JavaScript API which then can be used to implement some logic on the middle layer – perhaps passing the Rulebase name into a generic Applet.

It doesn’t really matter if you are not a Siebel person, this opens up a lot of great possibilities. Here are some of the basic steps

    1. Find a Form Applet in Siebel that you want to show an Interview from Oracle Policy Automation in. Using Duncan Ford’s template generator, create an empty Physical Renderer for a Form Applet. This is the starting point for any integration using Siebel and Oracle Policy Automation 12 May 2017 Extension API.
    2. Populate the ShowUI Framework hook with your code to inject the Oracle Policy Automation interview into an available <SPAN> or just make space for yourself. You will want to write much tidier code than this example, but you can get the idea – select, inject.

Siebel and Oracle Policy Automation 12 May 2017 - ShowUI

    1. Add the new Physical Renderer to the Manifest, along with any other files that you downloaded (if you are referencing statics copies of the interviews.js and the CSS files for example)
    2. Restart Siebel and navigate to the View with your Applet in it.

Siebel and Oracle Policy Automation 12 May 2017 Embedded

No IFRAME, no HTML files. Just the magic of the new Extension API. It’s breathed new life into Siebel and Oracle Policy Automation.

 

February 2017 Release of Oracle Policy Automation

February 2017 Release of Oracle Policy Automation

In case you missed it, the February 2017 Release of Oracle Policy Automation is now available for download and inspection from the official sources. This release sees some interesting new tweaks in the Interview Tab, as well as enhancements to the Oracle Policy Automation Hub, especially in respect of programmatic access to some features. There are also some exciting new flexibility enhancements in respect of the Oracle Service Cloud connection. Here is a list of the new features.

  • Service Cloud connection – enhanced usage of a single interview for agents, logged-in users and anonymous users
  • Manage Hub users programatically – Oracle Policy Automation HUB REST Interface
  • New User Account Type in the Hub (see Video)
  • Use external identity providers (via REST)
  • Export Data Model to CSV (See Video)
  • Entity Type Highlight in Data Tab (See Video)
  • Slider Enhancements (See Video)
  • File Upload Enhancements (See Video)
  • Unsaved Interview Prompts

We have already posted five videos outlining the new features, and more will be uploaded in the coming days to give you a rapid overview of the new enhancements both in the Oracle Policy Modeling application and on the Oracle Policy Automation Hub web application.  Proof, if ever proof was needed, of the continued investment in the OPA line to further enhance its status as the go-to natural language logic and dematerialised interview engine.

OPA 12 – November 2016 Release New Feature Review #3

 OPA 12 – November 2016 Release New Feature Review #3

Continuing our review of the new features of the OPA 12 – November 2016 release of Oracle Policy Automation, we begin this episode (you can find the previous two parts of this series here – Part One and Part Two) with a slightly less visible change but one that will bring a smile to anyone who has worked with Oracle BI Publisher.

Fonts in Forms in OPA 12 – November 2016

The Oracle Policy Modeler now allows for the embedding of True Type fonts in Form document templates!

OPA 12 – November 2016

The process for embedding fonts is quite simple :

  1. Write your Form in the usual way, formatting the text in the Word file with the font you want to use. Save and Close the Form Template and return to Oracle Policy Modeling.
  2. The font will display in the lower part of the Form pane, when you select the Embed True Type
  3. Decide on the fallback font to use

Of course you are still responsible for checking that your have the correct license for the fonts in question.

Switch it up!

The oft-hacked and simulated Switch has finally made it to Oracle Policy Modeler : now you can use them to show off your Boolean attributes in Interviews. And because we like them so much, this screenshot also shows another Slider even though we talked about it in the previous episode.

OPA 12 – November 2016

The Oracle Policy Modeler lets us build modern, fluid interfaces for our interviews. And that’s great news for customers and rule designers alike!

Back to Basics 5 – Using the Go To Button in Oracle Policy Modeler

Back to Basics 5 – Using the Go To Button in Oracle Policy Modeler

Alright so this one is a bit strange, but I wanted to point out a piece of screen Real-Estate that in my humble opinion does not get used enough. The Go To Button in Oracle Policy Modeler in the Microsoft Word Ribbon that you see when you are editing Word Documents using Oracle Policy Modeler. Let me demonstrate by showing you a screenshot, as this will hopefully make things clear.

the Go To Button in Oracle Policy Modeler

To be honest, the name on the button bugs me. It is not really a “Go To” button at all. For me, luddite that I am, “Go To” means go somewhere in my document. And while the Go To button in Oracle Policy Modeler does indicate location, it does not go anywhere. In fact you have to put your mouse on the relevant item to get it to work. It is more a “what’s here?” button if you ask me. And yes, it tells me of the different properties of the item I have put the cursor on. Like this:

the Go To Button in Oracle Policy Modeler -- Results Window

As you can see in the screenshot above, the mouse was clicked on the conclusion. Then the Go To button was clicked. The dialog that was displayed reveals the text and any locations it appears in the Project (for example if you have your logic in two separate Word files, they will both appear here). In addition there are shortcut buttons to edit the Attribute or jump into the Oracle Policy Modeler Debugger. But the best part, if you ask me, is the ability to pin the window and open one, or many, more at the same time. Sometimes when debugging a document written by someone else it can be useful to have these all displayed as reference points – or just because you are trying to keep track of several things at once. If you pin a window, you can go right ahead and “Go To” again on another Attribute or whatever takes your fancy.

the Go To Button in Oracle Policy Modeler Pinned Wiindows

This picture is too big to display immediately so you can click it to go to full size. These simple things can be the source of saved time and heartache – for finding misspellings and so on – and I’m happy to be talking about them here on the ODE OPA Blog. Oh, and I did a little dance just now as we passed the 100 post landmark. Woohoo!

Worldwide
Logo by Southpaw Projects LLC