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:

image

or

image

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

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

image

 

image

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.

image

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.

image

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.

image

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.

image

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:

image

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.

image

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:

image

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.

image

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

image

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

image

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

image

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

image

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

image

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.

image

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

image

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

image

So I do not mind about this either.

Thursday 18 May 2017

Let’s expand on AIS and JDE–api.ai; 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 api.ai.

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:

image

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]
Sup

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]
cool


API.AI Bot APP [4:14 PM]
Rad!

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]
wow


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

shannonm [4:14 PM]
approve


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:

Screenshot_2017-05-18-16-21-33

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:

image

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.

googlehome

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 (myriad-it.com to fusion5.com) 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 https://www.slipstick.com/outlook/email/understanding-outlooks-autocomplete-cache-nk2/ 

C:\Users\username\AppData\Local\Microsoft\Outlook\RoamCache

Some more googling found this:  https://support.microsoft.com/en-us/help/2199226

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

https://github.com/stephenegriffin/mfcmapi/releases/tag/17.0.17099.01

image

Run it

image

Session-Logon

image

Double click your mailbox

image

Right click inbox under the IPM_SUBTREE

image

Locate auto complete in the subject, choose export message

image

image

Name it

image

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

file–>options

image

The choose mail

image

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

image

image

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) https://support.google.com/analytics/answer/1034324?hl=en

image

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:

image

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

But I want to see unique users.

image

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

image

Select my environment again

image

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

image

We change the date range

image

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.

image

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)

Testing

•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:  https://s3-ap-southeast-2.amazonaws.com/erpanalytics/index.html 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

image

Slowest users

image

Slowest apps

image

Most time spent on page

image

 

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

take a look at what is possible https://s3-ap-southeast-2.amazonaws.com/erpanalytics/documentation.html

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:

https://myais.myriad-it.com:9090 that is cool, so if you use your browser – and goto:

https://myais.myriad-it.com:9090/jderest/defaultconfig you’ll see something like:

image

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: https://e92demo.myriad-it.com/ 

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

image

Cool, let’s log in

I have a chrome extension called “Simple REST Client”

image

Now I can set a payload and run

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

{
    "deviceName":"MyDevice",
    "username":"JDE",
    "password":"xxxxx"
}
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"}

image

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

 

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

image

help about for the form details

Now, help about for the AIS control ID

Activate item help

image

 

image

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

image

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!