Welcome to the OPA Hub!

Blog

Importing Data into an Interview : Excel Example

Importing Data into an Interview : Excel Example

Readers will remember a while ago I explained briefly how to use Microsoft Excel to act as a Connection Datasource – in this overview article, followed by this one in a little more detail. Now we look at another challenge : Importing Data into an Interview.

Well, here comes another example of the ubiquitous nature of Microsoft Excel. The customer requirement was as follows:

Using a simple mechanism, let the user upload an existing Excel spreadsheet into the Interview. Parse the spreadsheet, read the data in it, create corresponding rows in an Entity. Let the user review the data but do not require any new data entry. There may be up to 250 rows of data to import. So how do you go about about Importing Data into an Interview?

So how can we face up to a challenge like that? We need:

  • An upload that isn’t a standard File Upload Group
  • A parsing mechanism to read Excel and extract the data in a given tab, or wherever
  • A custom Entity Collect to handle the data import / create the rows in a Screen

The shopping list above isn’t that long.

The File Upload is essentially an HTML 5 component to let the user select a file on their computer. We cannot access an arbitrary local path from JavaScript, so we need the user to point to the file they want to upload.

There are a number of JavaScript-based Excel parsers, including the excellent SheetJS js-xlsx which we used. It is capable of converting to and from Excel, which is no easy task when you consider that an Excel file is basically a Zip file with a bunch of complicated stuff inside it. The library can convert to HTML, CSV and magically (for our requirement) JSON. Awesome!

Plus, in a previous post we’ve also looked at the (large amount of) work required to build a Custom Entity Collect Extension. In fact when I was writing that article I was thinking, for goodness sake Richard, when do you think you will actually need to go to the trouble of building that Entity Collect Extension? Well, I’ve finally found a use for it – Importing Data into an Interview!

We need an Entity Collect Extension since we need some way of getting the Excel data into the Entity Collect, which ultimately means we need to do some work behind the scenes between the import of the data and the display of the Entity Collect. We need to rewire the Entity Collect temporarily so that it sucks our Excel data up, before we show it to the user so they can examine the results.

For the purposes of a raw demo, I unplugged all the other functionality (delete buttons, add buttons, etc.) and just concentrated on getting the data into the Entity Collect. There are how ever a few caveats. Once you get into the larger imports, at least in the Debugger, you can expect to see “concurrent record editing” errors. I’m trying to find out what the limit is exactly. But up to a few hundred I think it’s OK.

So let’s look at the items in turn.

File Upload and Data Load

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
{
					//console.log("Starting customInput Mount");
					var div = document.createElement("input");
					div.id = "myFile";
					div.type = "File";
					//div.value = control.getValue();
					el.appendChild(div);
 
					function handleFile(e) {
						var files = e.target.files,
						f = files[0];
						var reader = new FileReader();
						reader.onload = function (e) {
							var data = new Uint8Array(e.target.result);
							//console.log("In Change");
							var workbook = XLSX.read(data, {
									type: 'array'
								});
 
							worksheet = workbook.Sheets["YOURWORKSHEET"];
							jsonoutput = XLSX.utils.sheet_to_json(worksheet, {
						raw: true, header : 1
							});
						//console.log("Read " + jsonoutput );
						};
 
						reader.readAsArrayBuffer(f);	
						var completepath = $(':file').val();
							//console.log(completepath);
						interview.setInputValue("rest_filenameandpath", completepath);
					}
 
 
				var filedialog = document.getElementById("myFile");
					filedialog.addEventListener('change', handleFile, false);
 
					var completepath = $(':file').val();
						control.setValue(completepath);
						//console.log("Hello " + completepath);
						//console.log("Ending customInput Mount");
				}

Assuming you have a custom Input framework as your starting point, the above code will be in the mount. This will build an HTML5 file upload control, and attach an event handler. The code regarding EExcel depends upon xlsx.full.min.js being in the resources directory. But that’s it. You’ve loaded the Excel file into a JSON object.

Entity Collect

The next step is to include a Custom Entity Collect in your project, and use the jsonoutput object (which you just created from the imported file above) in the mount of the Entity Collect to load the JSON into the Entity Collect. The following is an extract from the mount code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var numEntities = Object.size(jsonoutput);
					//console.log(numEntities);
					// Remove header row if the file has one
					jsonoutput.shift();
					// load records into the Entity Collect
 
					if (control.getRows() == 0) {
						for (j = 0; j < numEntities - 1; j++) {
							control.addNewRow();
							var mycurrentrecords = control.getRows();
							mycurrentrecords[j][0].setValue(jsonoutput[j][0]);
							mycurrentrecords[j][1].setValue(jsonoutput[j][1]);
							mycurrentrecords[j][2].setValue(jsonoutput[j][2]);
							mycurrentrecords[j][3].setValue(jsonoutput[j][3])
drawrows();

The end result is something like this:

Importing Data into an Interview

The File is loaded into the Entity Collect, and the contents displayed to the user. In my case I unhooked all the code related to modification (the onchange stuff from the original idea) and removed the add / delete buttons, since it was designed to just allow the user to see the loaded result, not modify it.

Importing Data into an Interview

If anyone is interested I can share the project. Have a great day!

Sneak Peek : Web Authoring – Modules

Sneak Peek : Web Authoring – Modules

Having recently installed an Oracle Policy Modeling 19A platform, in an On Premise / Private Cloud scenario, I proceeded, as per usual, to dig around and see what was new behind the scenes. One item that caught my attention was a parameter, in the usual table (I’m not going to mention which table, since if you have an On Premise installation you will know which table I mean, and if you are in the Cloud, you won’t have access to it anyway) called feature_web_rules_enabled.  Web Rule Authoring has been on the radar for a while, and mentioned under safe harbor at a few events recently. So what’s behind this idea of Web Authoring?

Simply put, it’s the idea that some users might want to develop rules without Microsoft Word or Excel.

Having recently installed an Oracle Policy Modeling 19A platform, in an On Premise / Private Cloud scenario, I proceeded, as per usual, to dig around and see what was new behind the scenes. One item that caught my attention was a parameter, in the usual table (I’m not going to mention which table, since if you have an On Premise installation you will know which table I mean, and if you are in the Cloud, you won’t have access to it anyway) called feature_web_rules_enabled.  Web Rule Authoring has been on the radar for a while, and mentioned under safe harbor at a few events recently. So what’s behind this idea of Web Authoring?

Simply put, it’s the idea that some users might want to develop rules without Microsoft Word or Excel.

So, I couldn’t help but switch the parameter on. Now, obviously this is a work in progress, and the finished product will look very different, but it is always exciting to see what the Oracle Policy Automation team are working on. It is especially true in respect of authoring without Microsoft Word or Excel. Web Authoring – “Modules” have the potential to provide a new approach to rule creation. Perhaps targeting a more technically savvy audience, whilst Microsoft Word and Excel could continue to provide the well-known and well-loved platform for more busines-oriented users. Of course, that is just my subjective opinion : I’m sure Davin and the team have their own very exciting vision of the future.

So, I couldn’t help but switch the parameter on. Now, obviously this is a work in progress, and the finished product will look very different, but it is always exciting to see what the Oracle Policy Automation team are working on. It is especially true in respect of Rules Authoring without Microsoft Word or Excel. Web Authoring – Modules have the potential to provide a new approach to rule authoring, perhaps for a more technically savvy audience, whilst Microsoft Word and Excel would continue to provide the well-known and loved platform for business users. Of course, that is just my subjective opinion : I’m sure Davin and the team have their own very exciting vision of the future.

So here are the things I was able to look at, once I had enabled the parameter:

Web Rules Modules

A funky new icon, which is a combination of Repository and Deployment arranged to look like a set of epaulettes that an airline captain might wear. Good Choice!

At it’s heart, obviously, a new interface for entering rules, complete with auto-detection of attributes and operators (watch for the formatting and indenting in the video below), plus Rule Assistant-style pop-up suggestions as you type, complete with functions. And secondly, the ability to quickly deploy the Module and pick up the WSDL from this “one-shot” screen.

As I said at the start : the end product will I’m sure look completely different, but isn’t it exciting to see the development of a new feature already taking shape? What do you think of the potential of this?

OPA Entity Model Viewer 1.0

OPA Entity Model Viewer 1.0

Edit : 5/5/19 updated version available (see Shop for details)

As many readers will know, I was a fan of the Oracle Policy Automation 10 feature which allowed you to visualise the entity model of your Project:

OPA Entity Model Viewer

A while ago I wrote about an idea I had, to use the same library (Mindfusion Diagrams for Windows) to build something like it. Since the advent of version 12, the way the data model is stored as changed somewhat and for various reasons, this feature is no longer in Oracle Policy Automation 12. And I think that is a shame. So I decided to keep going with the idea, and the result is the small application which I would like people to download and tell me if it works for them.

It is a ClickOnce application, that is easy to download and install. It runs by letting the user view the contents of projectDatamodel.xml (which contains most, but not all, of the interesting bits of your data model.

It has various features. It can let you see the entire data model, including enumerations, and links:

OPA Entity Model Viewer

It also allows you to view the enumerations (value lists) associated with entity attributes:

OPA Entity Model Viewer

You can see in the above picture that it also shows public names for attributes  – great for finding those you have forgotten about. You can move the items around the page, zoom in and out, even just play with the layout until it is perfect. Some of the larger entity models might need a bit of moving around!

You can contract and expand all the entities if they are taking up too much space. You can also add the hidden upload pseudo-attributes to your diagram, if you are using the new Upload Group feature introduced recently:

OPA Entity Model Viewer

You can of course print the output – to any printer or PDF generator. And you can save it as an SVG which is good for embedding in other programs.

OPA Entity Model Viewer

There are a bunch of preferences, including the colors used for the diagram. Some of the more interesting options don’t actually do anything yet.

OPA Entity Model Viewer

So, what am I getting at? Well, I’ve tested it on a bunch of 18D and 19A projects including the sample projects and some of my own. They all seem to work reasonably well. But of course, it only will be when lots of people test it, that I’ll know of any weirdnesses. And heaven knows, there will be plenty. I’m just a recreational coder, so I’m not looking for a sellable product. But if I can get rid of most of the obvious things, then I will be happy.

If you are interested, please download the Zip from the OPA Hub Shop and install it, and let me know if anything goes strangely. Just leave a comment an help with the OPA Entity Model Viewer!

 

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!

 

We’ve Updated our Free Challenge

We’ve Updated our Free Challenge

When you register for the OPA Hub Website, you land on a Thank You page. That page includes a Free Challenge , where you can win an OPA Hub T-Shirt just for answering a simple one question quiz.

Free Challenge QuizSo many people have answered the free challenge quiz but nobody has given the correct answer yet. We have now added a new Section “Hints to Help You“.

We have added various remarks culled from previous answers. So we are helping you get closer to the answer. We hope that the new hints help eliminate some of the common answers and save you time.

Enter As Many Times as You Want

The winner will get a free OPA Hub T-Shirt in the size of their choice. It’s free to enter, you can enter multiple times and we will keep the Challenge open until somebody wins.

Yes : You can enter the  Challenge as many times as you want, there are no limits.

So what have you got to lose? Nothing, so get over there and try your luck – can you crack the Challenge? Do you have an idea for another Challenge – get in touch, leave a comment or reach out on LinkedIn. We’re always happy to hear from our readers.

Good luck and see you soon on the OPA Hub Website!

Business Process : Force PDF Download in OPA

Business Process : Force PDF Download in OPA

After last week’s business case put forward about Calendar Blackout dates, this week we can thank Arnaud D and Sylvie A from Switzerland for their excellent use case. This week we will be discussing the idea of letting a user progress to the end of an Interview, only if they have clicked to download a PDF file. So, can we Force PDF Download in OPA?

There is not really a technically feasible way to prove that a user actually read a PDF. But if we can force them to download it, at least we know they have gotten that far!

The business case is easily applied to many industries, for example where terms and conditions or a contract are generated and tacit approval needed before the user continues. Or, more simply, you need some way to encourage people to read the BI Publisher thing you spent all those weeks developing.

It is also a good opportunity for us to investigate the new custom Button extensions available in Oracle Policy Automation 19A. So this won’t work in 18D or earlier. The approach we are going to take will involve two different extensions. Let’s go!

Input Extension

The input extension is needed because we wish to capture the value of a Boolean attribute for our demonstration. Navigating forwards will only be allowed if this Boolean is true.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
/*  Generated by the OPA Hub Website 29/03/2019 19:35
Educational Example of Custom Input Extension for Oracle Policy Automation
I will remember this is for demonstration purposes only.
 */
OraclePolicyAutomation.AddExtension({
	fullCustomInput: function (control, interview) {
		if (control.getProperty("name") == "xInput") {
			return {
				mount: function (el) {
					console.log("Starting customInput Mount");
					var div = document.createElement("input");
					div.id = "myInput";
					div.value = interview.getValue("my_flag");
div.setAttribute("style", "visibility: hidden");
el.appendChild(div);
console.log("Ending customInput Mount");
$(".opa-document").click(function(){
console.log("Clicked Link");
control.setValue(true);
});
},
update: function (el) {
console.log("Starting customInput Update");
 
console.log("Ending customInput Update");
},
validate: function (el) {
console.log("Starting customInput Validate");
 
console.log("Ending customInput Validate");
},
unmount: function (el) {
if (control.getProperty("name") == "xInput") {
console.log("Starting customInput UnMount");
 
interview.setInputValue("my_flag", $("#myInput").val());
var myInput = document.getElementById("myInput");
myInput.parentNode.removeChild(myInput);
console.log("Ending customInput UnMount");
}
}
}
}
}
})

So what’s going on here? Basically we are putting a click event on a PDF download. Notice line 17 : this adds a click event.  So as soon as the custom Input is loaded, an event is added to another control using jQuery. When the link is clicked, we update our flag to true. We use the style selector “.opa-document” to find the link. If you have more than one link, you will need a more precise method of finding it. Other than that, the custom input itself is invisible, and simply reads the current value of the flag into the control.

Button Extension

The other extension, for a nextButton, uses jQuery to display a dialog when you try and leave the screen before clicking on the link (the flag is false). Otherwise it lets you navigate without issues.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
OraclePolicyAutomation.AddExtension({
	customNextButton: function (interview) {
		let button,
		caption;
 
		return {
			mount: function (el) {
				const screen = interview.currentScreen();
 
				button = document.createElement("div");
				button.setAttribute("title", "Print Your PDF First");
				button.setAttribute("class", "opa-back");
				button.setAttribute("role", "button");
				button.setAttribute("style", "	text-overflow: ellipsis; white-space: nowrap; line-height: 1; cursor: pointer; padding: 0.7em 1.2em; border: none; text-decoration: none; -webkit-appearance: none; flex: 0 0 auto; text-align: center; color: rgb(255, 255, 255); border-radius: 6px; background: rgb(20, 116, 191); font-size: 16px; font-style: normal; font-weight: normal; margin-left: 6px; visibility: visible; outline: none;");
 
				caption = document.createTextNode(screen.getNextCaption());
				button.appendChild(caption);
 
				var dialog = document.createElement("div");
				dialog.setAttribute("id", "dialog");
				dialog.setAttribute("title", "Warning");
 
				var dialogtext = "Please download your document first.";
				el.appendChild(dialog);
 
 
				button.onclick = function (evt) {
					evt.preventDefault();
					if (interview.getValue("my_flag") == true) {
						interview.submit();
					} else {
						$("#dialog").dialog();
						$("#dialog").text(dialogtext);
						console.log("Not Yet ");
						console.log("Flag Value is " + $("#myInput").val());
					}
				}
 
				el.appendChild(button);
			},
			update: function (el) {
				const screen = interview.currentScreen();
 
				caption.textContent = screen.getNextCaption();
 
				if (screen.hasNextButton())
					button.removeAttribute("disabled");
				else
					button.setAttribute("disabled", "disabled");
			},
			unmount: function (el) {}
		}
	}
});

So what’s happening? The early part of the mount is simply painting a nice button on the screen. We could of course not display the button at all, but the User Experience might be better if we display it always, just prohibit using it in certain circumstances. Starting around line 19 we create the dialog and make it ready for use.

Line 27 includes the button click routine which either displays the dialog, complete with a message, or just lets you navigate as normal.

The other lines in the unmount are just taken from the example in the online help, where if this is the last Screen, no next button is available. But our business case is based on it not being the last.

Force PDF Download : Animated GIF

In the animated GIF above, you can see what it looks like.

The Project Zip is in the shop. Have fun!

Calendar Black Out Dates with Control Extensions

Calendar Black Out Dates with Control Extensions

The OPA Hub Website is always happy to hear from readers and learn about the things they are doing and trying to do. In this case, this article was inspired by our reader AF, from Adelaide. The question was; how can we implement a calendar control, to allow the users to select a date – but the calendar control must be able to black-out certain dates (public holidays, non-work days). It’s the sort of thing we probably can all relate to.

The Calendar control that Oracle Policy Automation uses is a very standard JavaScript dropdown, but there is little in the way of configuration in respect of the dates shown. We can style the calendar and we can offer two different ways to enter dates (either as the traditional calendar or the three-fields-in-a-row style that some applications use).

So it comes down to what can be done with an Extension. Regular reader will remember that we have spoken about calendar controls before, on the subject of Year-Only Selection. So that Extension will be the basis of this article.

Firstly, what are the tools we might need?

  • jQuery
  • JQuery UI, especially datepicker

The datepicker widget from jQuery supports a variety of user-related events, including one called BeforeShowDay, which is where we can come in a specify which days should not be clickable. They remain in the calendar display of course.

The basic concept therefore, for this demonstration is:

  1. The user can select a date from the control. Certain days are not available.
  2. The control must handle both adding a date when the date is not currently entered, as well as when the date is already entered and the user wants to correct it (for example, going back to a previous screen in the interview.
  3. The date must of course be saved to our chosen attribute.

As always this is without any warranty or guarantee of fitness for purpose. It’s a quick demonstration that you can then add to and correct yourselves.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
/**
 * Richard Napier The OPA Hub Website March 2019
 * Educational Example of Custom Date Control Extension
 * I will remember this is for demonstration purposes only
 */
OraclePolicyAutomation.AddExtension({
	customInput: function (control, interview) {
		if (control.getProperty("name") == "xDate") {
			return {
				mount: function (el) {
 
					var myDatePicker = document.createElement('input');
					myDatePicker.setAttribute("id", "dateselect");
					var mySessionDate = interview.getValue("dt_session");
 
 
					el.appendChild(myDatePicker);
 
 
					$('#dateselect').datepicker({
						dateFormat: "yy-mm-dd",
						onSelect: function (dateText) {
							var RecoveredDate = dateText;
 
							interview.setInputValue("dt_circ", RecoveredDate);
 
						},
						beforeShowDay: function (date) {
							var array = ["2019-03-14", "2019-03-15", "2019-03-16"]
							var string = jQuery.datepicker.formatDate('yy-mm-dd', date);
 
							return [array.indexOf(string) == -1]
						}
					});
 
					var mySelectedDate = "";
 
					if (interview.getValue("dt_circ") == null) {
 
						$('#dateselect').datepicker("setDate", mySessionDate);
						var RecoveredDate = mySessionDate;
 
						interview.setInputValue("dt_circ", RecoveredDate);
 
 
					} else {
 
						var myPreviouslySelectedDate = new
							Date(interview.getValue("dt_circ"));
 
 
						var myPreviouslySelectedDateAsDate = new
							Date(myPreviouslySelectedDate);
 
						var myDayPrefix = "";
						var myMonthPrefix = "";
						if (myPreviouslySelectedDateAsDate.getDate() < 10) {
							myDayPrefix = "0"
						}
						if (myPreviouslySelectedDateAsDate.getMonth() < 10) {
							myMonthPrefix = "0"
						}
						var myConvertedYear = myPreviouslySelectedDateAsDate.getFullYear();
						var myConvertedMonth = myPreviouslySelectedDateAsDate.getMonth() + 1;
						var myConvertedDay = myPreviouslySelectedDateAsDate.getDate();
						var myPreviouslySelectedDateOnly =
							myConvertedYear + "-" + myMonthPrefix + (myConvertedMonth) + "-" + myDayPrefix + myConvertedDay;
 
 
						mySelectedDate = myPreviouslySelectedDateOnly;
 
 
						$('#dateselect').datepicker("setDate", mySelectedDate);
 
 
						var RecoveredDate = $('#dateselect').datepicker("getDate");
 
						interview.setInputValue("dt_circ", new Date(RecoveredDate));
					}
				},
				update: function (el) {},
				unmount: function (el) {
					var RecoveredDate = $('#dateselect').datepicker("getDate");
 
					interview.setInputValue("dt_circ", new Date(RecoveredDate));
 
					var myPicker = $('#dateselect');
					myPicker.remove();
 
 
				}
			}
		}
	}
});

Calendar Black Out Dates with Control Extensions – About the Code

The first part of the Mount is basically setting up the jQuery datepicker to be able to hide some days. We also set the date format to the international YYYY-MM-DD that we all know. Of course a more sophisticated approach would check the region and apply the correct format.

Line 22 Sets up the Select Event and Line 29 the BeforeShowDay  Event.

We attempt to grab the value of our user-entered date (dt_circ) and place it in the date control. If that is unknown or null, then we will default to the current date.

When the user selects a valid date, we will of course copy it into the attribute again.
Finally, when the Unmount fires, we will clean up.

The End Result

 

In a later post we will look at using an entity to store the blackout dates. Stay tuned! For the time being the Project is in the OPA Hub Shop.

Modern CX 2019

Modern CX 2019 Las Vegas

Modern CX 2019 Las Vegas

I’ve been going to events like Modern CX 2019 and various predecessors for the best part of 20 years. Generally when going to these things, I am reminded of Shakespeare’s As You Like It :

“And then the whining school-boy, with his satchel and shining morning face, creeping like a snail unwillingly to school”

Some of the larger events can feel like one is going to school, or worse. But I have to be honest and say that Modern CX is not one of those. This year, back in Las Vegas Mandalay Bay Convention Center, the Modern CX 2019 event was definitely one of the best I have attended, all software houses combined.

What made Modern CX 2019 special?

  • Events that seemed designed to bring the right people together, like meetups, a great concept where customers could speak freely, chat with others, learn and share.
  • An advocacy platform, the CX Hero Hub, actually designed to help and develop the people and stories that define the brand.
  • Sessions that focussed on the customer stories; gone were the turgid exposés of new products that were little better than PDF handouts.
  • Keynotes that actually taught something. I particularly liked the presenters : Ann Handley, Rob Tarkoff and Mick Ebeling all stood out for me.
  • Of course, the general sessions are always packed and you can depend on Jeffrey Wartgow, George Jacob and the others to give a good show.

Oracle Policy Automation is growing in popularity and reach, and the visiting conference attendees were more eager than ever to find out about it. They were well served with some great presentations from the likes of Legal Aid Ontario, Kenya Revenue Authority, Beach Body and more.

What Lies Ahead?

I’m acutely aware however that we still, as a community, need to make our case for Oracle Policy Automation in a clear and concise way.

So I was very honored to be asked to help present one of the sessions and the OPA Meetup. It was fascinating to see how many “eyes were opened” as to the power of Oracle Policy Automation both in that session and the others organized and executed by the dream team of Davin Fifield, Heike Lorenz, and Harriet Franklin.

Here’s a photo of one of those moments I’ll never forget : spinning a wheel in Las Vegas with Heike.

See you there next year.

Modern CX 2019

Modern CX 2019 Las Vegas – Come Say Hi!

Modern CX 2019 Las Vegas – Come Say Hi!

As many of you will know, Modern CX 2019 is being held in March, 19-21 at the Mandalay Bay Convention Center in Las Vegas. It’s a bigger draw, in my humble opinion, for CX and CRM people, than Oracle OpenWorld in San Francisco. I attend both in general, and find that Modern CX is a much more focused and entertaining affair. I’m just sharing my 2 cents. I also enjoy OpenWorld because I get to see a host of very old friends and ex-colleagues but the “vibe” is different.

Anyway, you don’t care what I think. But I would love to meet up with some of you (or all of you, but I don’t think there would be enough space in the room – we broke the bar of 500 registered visitors a few weeks ago – and I wouldn’t be able to pay for a round of coffees or drinks) in Las Vegas.

Modern CX Las Vegas

I’m speaking at the following sessions:

Time to Innovate: Enhance the Customer Experiences You Can Provide [SPT2169]
In this Modern CX session learn how to create unique experiences that are dynamic and personalized for each individual. This session is perfect for businesses seeking to build customer loyalty to differentiate themselves from their competitors using intelligent advice powered by Oracle Policy Automation.

It should be a lot of fun, so send over your colleagues who struggle with finding out what OPA can do, what industries it applies to, and how others do it. Or if you just want to pop by and say “Hi” that would be great too.

I will also be hosting the following OPA Meetup at Modern CX 2019, which might be of interest to those of you who already use Oracle Policy Automation but you want to chat with other people and find out great ways other people are using it.

Oracle Policy Automation Meetup [TOP2625]
If you’re using Oracle Policy Automation, join this meetup to connect with other Policy Automation customers. Come prepared to discuss innovative use cases, best practices, tips and tricks. Richard Napier, who runs the OPA Hub Website, will be facilitating this meetup.
You can find both of them quickly with this search. I look forward to seeing you there, don’t hesitate to reach out to me on LinkedIn as well, if you cannot find me!

Excel as an OPA Data Connection #2

Hi There!


This content is accessible only to logged in users of the OPA Hub Website.

To Register takes only 10 seconds and uses LinkedIn for authentication. It does not take your contacts or use any other permission.

Once registered you can change your OPA Hub password and manage it independently of LinkedIn.

We recommend you keep different passwords for all your sites.

To register, click the Log in link in the menu at the top of your page.

Thanks, the OPA Hub Website.