Wednesday, 24 May 2017

while I’m monitoring performance, this is a bug I think…

Don’t worry about this one either…

This is either the standard JDE interface, or going to WSJ:




You see that the session has not been “hung up” properly from the client.

The duration is 15 minutes, but .4s on the database




You can also see from above that the database is waiting for a message from the client…  interestingly the object is the user overrides index, so this might need to be looked at in more detail.  Logging out of JDE still leaves this hanging.

Again, not to sorry – but a shame it looks like it’s causing problems – when it is not.


If you come across this situation, clicking on the SQL ID will not help, click on the user and look into that information.

Easy to ignore when you know what is going on.

A little help with interpreting oracle performance and JDE batch jobs (UBEs)

Example 1: Logic bound

If you see something like this, it’s not necessarily bad.


You’ll notice that the duration is 20m, but the database time is 8.8 seconds.  This is NOT causing the database grief, and it probably only in a loop in the UBE.


This means that the UBE is in the main loop and might be crunching some logic or perhaps some smaller sub queries based upon the main query.

Example 2: Database busy

But, if we look at another statement, we can see that the database time and the execution time are about the same.  So this one is hurting the DB, and I bet that the UBE is doing nothing but waiting.  We can also see that the blue is IO and the green is CPU, so this is doing a lot of disk I/O.


We can see that this is a runbatch process on bear, and we need to drill down to get the PID

Drilling down on the user session give us:


Great, so now I know the OS process id, and will look into this on bear – but it’s not at the top of top.  remember our theory that it’ll be waiting.


ps –ef |grep 15928

When we find it, we can see that it’d hiding…

jde900   15928  9313  0 16:05 pts/1    00:00:00 runbatch JDE pgAAAAQDAgEBAAAAvAIAAAAAAAAsAAAABABTaGRyAk4Acwg4AC4AMQAwABSBWpC+uTe3+KbaUoYl6eW/UPqPT2YAAAAFAFNkYXRhWnicHYpBDkAwFEQfGqew6AVIFWFLiESErV0P4XoOZ9qfzJuXzH8BU+RZpv5y0pUHKxvGYqkCOyc3C7P6ksUtKA+9x9EyUqsH0dMn72jkQ6IT4xo/J+38q3ML4A== PY900 *ALL 12481590 /u01/jdedwards/e900/PrintQueue/R56120_F5004_12481590_PDF

Interestingly this process is doing nothing, so it is waiting on the SQL

Some really cool information you can see when drilling down into the session is:


That’s all the SQL that it’s run from inception, as a batch process is a new process.  Note that this does not have any of the system or security statments, as they go to a different instance.

This is a really nice way of being able to track back what the UBE / SQL is doing and who is waiting on what.


Example 3: Logic bound

once again, this is a job that has a long duration, but only 21 seconds of database time…  So really, I’m not worried about it.  It does give me a good chance to explain a number of aspects about it.


As I suspected, this is doing a lot of work at the UBE server end.


We can use the process ID field in WSJ to find the batch job we are dealing with… easy…


Now we can look at execution detail to see the main select loop.


We see that this has not executed a single loop (not too sure about that)


Wow, Enterprise Manager tells us the same SQL is running, that is handy.


We can also see when we look at the detail of the session, that it’s also running some updates and selects on other tables within the main loop.  This is what we do not see in JDE execution detail.  We can also see that this is the update that seems to be taking the time.


We can see that this is probably a loop over the F0150 and then processing updates to the F03B11.

You can find this under session details –> activity tab


Despite that this is taking the main lions share of the inner activity, it’s not doing that much in the scheme of things:


So I do not mind about this either.

Thursday, 18 May 2017

Let’s expand on AIS and JDE–; meet Eddie the JDE bot!

Team innovation at fusion5 have been working overtime to come up with a very cool (cool is a subjective term, as we all know) for communicating with JD Edwards.  Let’s use a slack bot that is hooked into JDE via AIS and

I know that this seems complicated, but there is not lots of code to it, we’ve done all of this (this week)…  You can see my conversation below:


Our slack bot authenticates to JDE using oauth or SAML3 – so this is a nice easy way of making sure that things are secure. 

Okay, so this is really cool.  In our particular example we are able to approve, reject and list all of our purchase orders in JDE.  This is for the user that is currently logged in.  We can do this in natural language and have a conversation with the bot, like here:

API.AI Bot APP [4:13 PM]

shannonm [4:14 PM]
any PO's today?

API.AI Bot APP [4:14 PM]
You have 3 purchase orders awaiting approval.

shannonm [4:14 PM]

API.AI Bot APP [4:14 PM]

shannonm [4:14 PM]
show me the first PO

API.AI Bot APP [4:14 PM]
The 1st is for 3003.74 USD, added by SYED ALTHAF GAFFAR. It is for order 658, and requested on Thursday, 2nd of February.

shannonm [4:14 PM]

API.AI Bot APP [4:14 PM]
You are easily impressed

shannonm [4:14 PM]

API.AI Bot APP [4:14 PM]
Please enter your reason for approving this Purchase Order

shannonm [4:14 PM]
I think that seems like a good use of company funds

API.AI Bot APP [4:14 PM]
(Mock) The purchase order has been approved using I think that seems like a good use of company funds

shannonm [4:20 PM]
Any po s for approval

API.AI Bot APP [4:20 PM]
You have 3 purchase orders awaiting approval.

shannonm [4:21 PM]
About purchase order number one

API.AI Bot APP [4:21 PM]
The 1st is for 3003.74 USD, added by SYED ALTHAF GAFFAR. It is for order 658, and requested on Thursday, 2nd of February.

Great, but it just get’s better and better.  The power of slack means that I can also just run this on my phone:


So wait, I’ve just created a mobile application on my phone that will approve my purchase orders this simply?  Yes.  You can also use voice for this, as every device has a built in voice keyboard – yes. 

Of course it’s just as easy to use microsoft teams for a more professional conversation:


Wow, so you can have a conversion with your mobile phone (driving to work), and do all of your PO approvals.

We can even ask the bot (by voice) to send us the PO attachments as an email, as you might want to verify them – no problems – this is what the bot will do!

We’ve also got this bot working with google home – a virtual assistant.


IT just talks to you about anything JDE that your heart desires.  There is an easy extension to any customer service type applications, a website bot for example.  Your customers could log in and ask about the progress of an order, the bot could ask a few questions and tell them exactly what is going on.  This is a very simple way of giving more to your clients with less.

There are some really cool applications for voice control and JD Edwards.  Think about all of the dirty hands data entry scenarios…  Meter readings for example.  We also have a bot that will tell you meter readings for an asset and allow you to update them with voice.  This is an amazingly pragmatic use case for voice and JDE, as when you are wearing gloves – you don’t want to enter data on a mobile keyboard.  WOW.

Imagine the logical extension, as we’re also working with estimote beacons. 

Image result for estimote

Imagine that your  fleet had beacons…  Imagine that your mobile JD Edwards application listened for beacons because you were running your “fixed assets” mobile application.  Therefore your mobile device knows the asset that you are working on.  You could ask it “what maintenance needs to be done today?”, perform meter readings, record time worked – everything done because of your proximity to a beacon.  This makes the data entry process much more efficient and less prone to error.

You have a beacon that runs for 5 years on it’s own battery.  Can tell you light, barometric conditions, temperature and more…  This beacon transmits this information to your mobile device.  You’re mobile device then transmits this data “IoT” style to your data warehouse in the cloud for analytics and insights.

Tuesday, 16 May 2017

Outlook, I don’t have contacts I have type ahead!

Wow, I find that I treat type ahead like my personal address book.  Recently we changed domain ( to and found that my type ahead seriously did not know what was going on.

The information is stored in a binary file here for 2010 and above, thanks 


Some more googling found this:

download this cool app to actually turn the binary file into something that is readable.


Run it




Double click your mailbox


Right click inbox under the IPM_SUBTREE


Locate auto complete in the subject, choose export message



Name it


The open a command line:

cat the xml file through findstr and you’ll get a list – job done.  All of the email addresses in type ahead.  Now delete your cache.

or  type TypeAhead.xml | findstr /c:"szEmail" > emails.txt

To delete the cache in modern outlook



The choose mail


Empty type ahead!

Monday, 15 May 2017

Worried about oracle license usage or audit in JDE? LMS

Your JD Edwards licenses are generally limited by a named user.  So when you look at your agreements, how can you be confident that you only have 25 users logging using Accounts Payable for example?

This is easy when using ERP analytics.  We can configure report to tell you the number of unique usernames that have used certain system codes in the last X days / weeks / months.

I’m going to create a new report for this purpose



There is a lot going on above, but let me explain the bigger pieces.

  • This is a new report for any date range, the user specifies this
  • I’m choosing to report on pageviews, as I do not really care about performance or engagement for this report
  • I’m choosing drilldown dimensions of Environment (as I only want to look at prod)
  • My secondary dimension is app name, note that I’m using the application analysis view, which contains app name
  • I’ve then applied a regex filter to ensure that I only get apps that contain ^P04 (starting with P04)


This is cool, I see that my filter is applied from the beginning, so this is ONLY the data that has been used from system code “04” for my current date range.  I can then drill down to my production environment:


Okay, so I can see the programs and how often they are loaded, this is nice.

But I want to see unique users.


I create a new tab, I like to report using this method – it’s reusable.  So I create my users tab and select the “user” dimension for drilldown.

Save and run


Select my environment again


So I can quickly see my applications and unique list of users that have used them in the last week, 62

Let’s see for the last 2 months


We change the date range


Great, we can see that there are 135 unique AP users over the last 3 months.  We know the busiest users and we know the busiest applications.  We can do this for any system code that we like.

This information is VERY easy to acquire and is the only true way of knowing the unique user counts of your JD Edwards applications.

Friday, 12 May 2017

Rapid adoption of continuous delivery

We are in the throws of putting together a framework for assisting our clients adopt continuous delivery – we are facilitating this with a number of core offerings.

First and foremost (as you are aware) ERP analytics allows us to identify what is being used, and at the end of the day, retire technical debt.  We can tell you what is being used and by whom.  So armed with this knowledge you can fine tune your retrofit – and you will need to do this!

Secondly we have some software that actually shows the controls that have changed between environments.  It can run over any number of environments and tell you exactly what is different on a form by form and control by control basis.  Therefore, if a row exit is missing, or a field has changed it’s name – we can quickly tell you.  This is going to assist in lowering the amount of testing that you have to do and improve the maturity of what you are releasing to the business for testing.  This is like an advanced impact analysis tool.

Thirdly we implement a blue/green deployment model, as you need to become more agile.  I hear you saying, we are “old school ERP”, we are waterfall…  We don’t make mistakes because we spend months in regression testing. You cannot do this anymore!  You need to be more efficient with your releases and with your testing.  It’s critical to be agile with mod deployment and do an element of “production testing”.  This can be controlled easily and the benefits are huge!

These three simple initiatives combined with project management which is modification centric (based from ERP analytics) allows you to define your “continuous delivery” project.  The process can be summarised as below.


I recommend implementing a 3 month / 4 month cycle – planned for the entire year with all of your release dates with the following high level steps:

Search for ESU’s monthly – change assistant

•Apply them to DV920 no matter what

•Impact analysis based upon ERP analytics

•Change documentation automatically generated

Apply to PY920

•Automatically request retrofit – create projects, add objects, workflow development!

•Retrofit needs to be very modular

•Perhaps look at retrofit more carefully (or completely bespoke)


•Automated regression testing

•Ensure mods are tested, check with ERP analytics

Release to production

•If problems, regress and fix

•Regression can be a package deployment away!


It really is important that we start to treat our ERP a little differently.  Its critical and it’s generally a single source of truth, but we must continue to deliver improvements to our businesses with agility.  Oracle are giving us the ability to do this, we need to embrace it.  I like to think of delivering to clients as if it were SaaS.

Thursday, 11 May 2017

ERP analytics is now self service

Gone is the old days of exchanging tools releases for ERP analytics enablement, now you can self service the entire process…  Billing also!

We’ve been working on a completely digital process, where subscribers can implement ERP analytics themselves.

you can start here: and follow the bouncing ball.

Once you enter your subscription details, the process will allow you to upload your tools and will automatically patch it.

Also, after you are subscribed, you can patch any tools release, any time.

So, if you what to know who’s doing what


Slowest users


Slowest apps


Most time spent on page



And have this carved up by browser, city, state, day or date – you can.

take a look at what is possible

It’s also important to remember, that if you are a partner and see value in this information for your clients (which you should), then you can join our growing channel program.  We are providing these insights to many clients around the world.  You get access to all of our self service patching routines and detailed reports.

Testing AIS, I mean really testing AIS

I’ve said it before and I’ll say it again, you must start using AIS for your integrations with JD Edwards.  It’s light and easy, I want to show you how you can test that things are working, even more than the traditional defaultconfig.

Firstly, myriad-it and now fusion5 generously provide an up-to-date AIS server for you to poke around with: that is cool, so if you use your browser – and goto: you’ll see something like:


So that is cool, but really, tests nothing!

So let’s test a bit more, like logging into JDE

Remember, if you don’t have an account to the demo site – get one here: 

I’m going to do things locally now, check server manager for the rest end point:


Cool, let’s log in

I have a chrome extension called “Simple REST Client”


Now I can set a payload and run

URL:  http://e1ent-dnt.mits.local:9090/jderest/tokenrequest

Content-Type: application/json

operation: post

reply – 200!

{"username":"JDE","environment":"JPY910","role":"*ALL","jasserver":"http://e1ent-dnt.mits.local:9081","userInfo":{"token":"044KpVeur4yjmrAm+i9TWBUAMeli2Vpe7yU3X5uz9MUtKc=MDIwMDA4LTI3MzNDA3OTY2ODQ4OTU0MDhNeURldmljZTE0OTQ0NjMzODgzMDQ=","langPref":"  ","locale":"en","dateFormat":"DMY","dateSeperator":"/","simpleDateFormat":"dd/MM/yy","decimalFormat":".","addressNumber":1001,"alphaName":"M Dynamax","appsRelease":"E910"},"userAuthorized":false,"version":null,"poStringJSON":null,"altPoStringJSON":null,"aisSessionCookie":"pr1mZTzc5Hn1v3r5z2j63SKlH2qr2xzdXdV0vHXjnQzsnlxPc6!-1457766052!1494463388319"}


Cool…  So now we can start to actually do something.


Now let’s do something decent, how many waiting jobs are in the system:


help about for the form details

Now, help about for the AIS control ID

Activate item help




Great, let’s see the column for status too.


Okay, we have this.. now let’s create a query

we call http://e1ent-dnt.mits.local:9191/jdrest/formservice with the following

Note that you need to copy and paste the token from your tokenrequest into this payload.

    "token": "044yU/fNj6Fx1YGDjAteYZHlfGxfu3XEXeqtFxjpZoEtE=MDIwMDA4LTI0MjU0NzM0Mjk0NzAzNzQ1NTFNeURldmljZTE0OTQ0NjU0OTE1NjI=",
    "version": "ZJDE0001",
    "formActions": [
            "command": "SetQBEValue",
            "value": "D",
            "controlID": "1[7]"
            "command": "SetControlValue",
            "value": "*",
            "controlID": "29"
            "command": "DoAction",
            "controlID": "23"
    "deviceName": "MyDevice",
    "formName": "P986110B_W986110BA_ZJDE0001"

Wow, this gives you  a JSON representation of the form data after the find has been pressed.

So really, you’ve just tested everything about your AIS installation.  You know that you can login and you know that the formservice is working.  Now you can hook up some mobile apps with confidence.  Oh, you also know how to identify controls on a form and set controls and QBE Values and also perform actions.  Nice!