Friday 15 January 2016

reverse engineer forms for mobile development

Okay, things are going to get fairly technical here, but that’s what this blog is all about.

We are writing a lot of mobile applications for JD Edwards at the moment.  We have our apps integrating with GPS, doing google map overlays (wait – post coming) and more.

In this journey we are looking for better ways to write the applications, better ways of determining all of the control IDs, so that when we import these into the mobile development – they can be flexible and dynamic.  i.e. we want to kind of create a UO of a form which only exposes the cut down version that we want on our mobile device (that type of thing).  This is like creating a runtime environment which will read an XML document, and based upon this (at runtime) display the various JDE screens and functionality.  Now, this is the end game – but there are some cool intermediate steps we can go through.

Firstly, we have a massive grid and want to be able to choose any field on the grid for QBE.  Then I want to also see the DD information for the item, to determine the default lookup screen.  This default lookup screen and default values will be great for our custom app to do things at runtime.

The problem is that you cannot get the ID’s of all the internal items from the HTML or scripts in JDE.  You can’t view source and see all of this additioinal information.  You cannot view the BLOB in F98751 to see what the code is doing (because of byte order which is the same in the F983051)…  You cannot print out the values from FDA either, which is a pain.

But, you can save your application as a par file, rename it to a zip file and then start looking around:

image

Above shows from OMW, hit save and choose zip file.

image

And then looking into specs.zip

image

Then in the fdaspec folder:

image

So for every object on the form, you have a nice, neat separate XML document.  extract these to a directory:

Open one of the controls that you know is in the grid, for example:

<?xml version="1.0" encoding="UTF-8"?>
<FDA ApplicationName="P55WOSF" xmlns:et="http://peoplesoft.com/e1/metadata/v1.0/erptypes" xmlns="http://peoplesoft.com/e1/metadata/v1.0">

<FDARecord>

<FDAColumn FormName="W55WOSFA" GridID="1" SequenceNumber="34" ObjectID="50" ColumnTitleId="2036" NumberOfTextChar="15" Visible="true" InputCapable="true" SortOrder="A" Flags="14336">

<et:Dbref szTable="F1201" szDict="DADS"/>

<et:DdOverrides/>

</FDAColumn>

</FDARecord>

</FDA>

The great thing about the above is it maps the ObjectID to the Table and DD item, therefore we can do a lookup on the F9210 for the DD defaults to get Alpha Text and also the default lokup information.  Nice.

We’ve built a custom table that indexes all of this information, we read this JD Edwards table at runtime to dynamically display the text that we want to display and also proper lookup values when doing data selection.

No comments: