Tuesday, October 13, 2009

How the new MetaLink saved my life

You have been there, debugging, trying a fix something and you are just lost in the code or debug logs. That happened to me today, but thanks to the new MetaLink site, I was saved.

We change a parent dll on several of the business functions and we discovered that the COK (Call Object Kernal) was still looking at the old parent dll for the code. Well this obviously wasn't what we wanted, so we rebooted and built and rebooted and cleared cached and rebooted, you get the idea. Well, I did notice that there were changes announced to MetaLink and I decided to take stab, WOW! One search box for everything, one, I didn't have to dig through three screens and guess what THEY called their platforms and then try to decipher where in the world the answer might be...bugs, archives, documentation oh my! No, I simply entered some key words and it told me, ME where the answer might be. Absolutely amazing. I will be going there more often.

Take a look through MetaLink now, it is pretty cool and a very big help. I don't think I will search anywhere else first. I do need to post this on JDEList, this was just too helpful.

I do want to include the resolution to the problem that was solved just in case anyone needs to have it. The article ID is ID 626421.1. It describes the process of synchronizing the OL table (F9860) with the blobs in the Record information (F98762). The system always assumes that the information is in synch and that it doesn't change (which is a pretty good assumption.) The blob in the F98762 contains information on the location or address of where the COK can execute the method on the DLL. It gets generated only once I assume so you need to regenerate that information if you ever change the parent DLL name on the business function.

Here are the steps from the document (626421.1),

The process to synchronize the JDEBLC for a specific object is detailed below.

1. First checkout the object in OMW on a workstation.
2. Launch Busbuild (it needs to be standalone) on the workstation.
3. Choose the Tools|Synchronize JDEBLC menu option.
4. Checkin the function through OMW
5. Build and deploy an update package for the clients and server.


Thursday, October 8, 2009

Z-Table Processing and WHY THE HECK THEY DON'T WORK!!

There are several Z-Processes within JDE and for what they do they are worth their weight in gold...if you can figure them out. Many of them don't have any ouput and if they have output it only tells you it failed and nothing else. Many of them don't have interactive apps so you are pretty much flying blind....pretty much unless you know about the F0113XX tables...

There are a set of tables in the F0113 series that are actually logging tables. For most of the z-processes out there they actually contain errors and information of the z-process. The F0113 is the header table and the rest F0113(1. M. T. 2. 3, ...) are all detail tables from one process or another. They are worth looking at when running processes to see what might be happening behind the scenes. These tables hold varying amounts of detail.

The other option is to set UBE logging at Level 6 and calling your significant other and telling them you will be late for dinner...

Transaction Processing and Button Clicked Event

So after much discussion I finally sat down and had to figure out the transaction processing on interactive applications.

A little over two years ago we were working on a project and I had to make sure everything, i.e., Business Functions and Table I/O were included or failed as one transaction. We were on Tools Release 8.96 at the time and it was as simple as setting the Transaction form property and then putting everything inside the Ok button events.

We moved to 8.98.x at the first of 2009 and some developers were complaining that they couldn't get the stuff to work. My reply was always..check APPL X, it works there. I guess I probably sounded like some old guy, 'it worked when I was a kid!' Today it came to a head and one of the developers was finally calling me out, it doesn' work on APPL X. I didn't believe him, of course it worked, I built it myself. Well he turned out to be right, the transaction boundary had changed. Now the only place you can call Cancel User Transaction is within the Post Button Clicked event. Things have changed since the good ol' days of 8.96, forward progress.

The process we used to test,

1. Create a Fix/Inspect or Power Edit.
2. Check Transaction on the form property.
3. Open Ok button Event Rules
4. Select Post-Button Clicked Event
5. Open Table clicking Advanced button selecting the Include in transactions.
6. Perform Table I/O.
7. Check for SV File_IO_status errors.
8. If there are errors call system function Cancel User Transaction.
9. Close all tables.

It really is that easy and if you want to include any business functions, all you need to do is make sure that you are including them in the transaction as well.

Hope this help as it was a mystery for some time and I finally had a moment to solve it.

Monday, September 21, 2009

The Path of JDeveloper

Java IDEs have come a long way and have made development so much easier in that last 5 years it is mind boggling.

I started experimenting about 5 years ago when I started working with my current employer. Java was still new, at least to me, and object oriented programming was even newer.The IDEs were either exremely expensive or extremely free. I opted for extremenly free. I had the hardest time getting used to the complexity of Java and didn't make much progress.I had a crutch called Microsoft. They build tools that could take guys like me and make us believe we knew what we were doing. The going was a little rough and it kept me from really immersing myself in Java and all its flexibility.

Fast forward 5 years and now I am a fan of Java. I am a student of design patterns and the stufy of algorithms. To what end you might ask? I became designer and architect of sorts. I discovered there was method to the madnes and it came down to good OO principles and patterns. What power and flexibility. Patterns cross all platforms and languages. They even worked on old VB 6. These studies have led me to more robust and mature JDeveloper.

Friday, May 22, 2009

Employee Daily Time Entry

I got a call from one of our CNCs, he was helping a client troubleshoot an applications issue on P051127 - Employee Daily Time Entry. The client is currently running applications 8.12 and have upgraded to TR 8.98.1 from 8.97.x. The fix to the issue was documented in SAR 8809488. The summary -- the
tags were showing up in the column headings. This is caused by a rewrite of the rendering engine that does not pass down HTML tags anymore, mostly because the the tag could be referencing an image that is a virus, it poses a security risk. The HTML code used in Text Block controls is still passed through, but the HTML must follow the XHTML Strict guidelines.

If you are still running 8.12 and can't upgrade to 9.0 you won't be getting the fix anytime soon. To correct the issue will take a manual patching of the code, a developer will be needed. The fix is simple and wouldn't take a developer more than just a few minutes, but it will require it.

The simplest description of of how to fix the problem is to replace the
tags in the Post-Dialog-Is-Initialized event with three blank spaces. That is the simple fix. The fixes start at line 263 to line 368.

The fact is that 8.12 was built for the older rendering engine which is part of the 8.98.x release. 9.0 was retrofitted, mostly, to handle the changes. 8.12 is not getting retrofitted, infact many of the support personnel don't know it is a problem because the 9.0 is fixed. It is a combination of 8.1x apps and 8.98.x TRs

Just change the code as seen here and you will be on your way. Note: There are about 14 lines that need to be updated.

Tuesday, May 19, 2009

Forms Development - How to use the OK button

So the events in the OK button were a mystery for some time, why both click a post click? A senior developer clued me in on the whole thing. The click button is where all the standard, automatic validation happens, you should do the same. Put all your validation code there. The post button clicked event is the place to do all your table IO and other events because you know that every thing is ready to go.
tatements it will.