I haven’t updated in a while, but I have really gotten to love my iPad. Went to this site yesterday, and found it nearly unnavigable. WordPress has added a theme for iPad users that really looks neat – animated swipes to move pages, etc. The problem was, it was slow and unusable. Butt-ugly, too. Fortunately, found I could go into the Dashboard under appearances, and uncheck the “special theme for iPad users”.
What I like about the iPad is it generally displays web pages in a normal format – no squinting, zooming, etc. necessary. This was kind of a cool idea, but poorly executed.
We picked up a few iPads at work to test out to see if they would be useful in our enterprise environment, could be used by executives for remote access, etc.
Fun device, easy-to-use. Mail looks a little better than on the iPhone, Calendar looks way better than on the iPhone – a 1-day view – something the iPhone still lacks. Still basically a bigger iPod Touch. Without 3G, not very useful away from networks.
Finally, the kicker – it won’t run java, so you can’t use Oracle Forms. Worthless!
In starting my new job, I’ve been really happy that my employer provides really decent equipment. I’ve got a beautiful, high-end 64 Windows 7 laptop. We are on Oracle Apps 11.5.10, using JInitiator, which unfortunately is not supported by Oracle on 64-bit Windows, and worse than not being supported, doesn’t work. Oracle has no plans to update JI at this point. We are going to migrate to the Sun JRE stack when we can, but in the interim, I needed to be able to access the Apps.
There is a workable solution on this blog that involves replacing some of the JI components with Sun JRE components. This works, but if I’m having issues, I’m not on a supported solution.
There is a basic workaround if you are on Windows 7 Professional, Ultimate, or Enterprise – you can use XP Mode. To do it, you need a machine that is capable of virtualization, enable that in the BIOS, and then follow the steps at Microsoft’s XP Mode download site. I’ve done this – it takes a while, especially because you need to download Windows updates for the virtual machine, but once up and running, it runs JI flawlessly.
Tim Bray (one of the fathers of XML) has a great post on enterprise computing “Doing it Wrong“. I’ve long been interested in reading about IT project failures and the reasons behind them. The more I’ve read, the more I’m convinced that the reasons for failure have not changed in more than 20 years.
Mr. Bray’s contentions are that you should buy, not build, except when you really need to build, and when you need to build, do it better.
He makes a (deserved) tweak at “blue suit” implementers trying to come up with Facebook, or Twitter, or any of the Web 2.0 apps. I’m not sure that’s fair, because they were starting with essentially nothing, and adding features. If you are developing a manufacturing system, a two-hour meeting will result in hundreds of requirements.
I think that’s why you buy and configure, rather than build. Even then, it takes some work to get your company’s processes right in the software. The most important part is to fight extension/customization except where it really makes sense. Some years ago, I bid on a government project where they specified “vanilla” Oracle Apps, with hundreds of customizations. One that jumped out was they wanted to be able to pay a single AP invoice from multiple bank accounts. That will break so many things, I don’t know where to begin, except to say: It’s AP – you never need to customize AP processes. You can use accounting entries and transfers to meet the real underlying requirements, but give up your old processes – life will be much better.
Another client (this was before Oracle had the intercompany account segment and just used the balancing segment) wanted to record intercompany entries, have each sub request cash from the parent, pay each other, then sweep the cash back to the parent. To summarize, all of the cash starts and ends in the same account – no real reason this can’t be done with accounting entries. They defended this so vigorously we gave in and made it happen. Of course, later this system was “too complex” and abandoned.
Meeting the needs of many customers requires enterprise software to balance between having broad capabilities and the ability to customize where necessary for real advantage.
I let this blog go dormant because I have been working in a different role at an airline, doing data architecture work. Some Oracle database, but other technologies as well. Much of what I’ve done didn’t seem directly applicable to the focus of this blog, but I was working to prepare them for an ERP implementation. (Some German ERP package no one’s ever heard of). I’m sure I’ll be able to mine the experience for relevant material eventually.
I’ve enjoyed the work and not having to travel every week, but an opportunity came up over the holidays to lead an Oracle Apps group for a local company. As this is what I’ve been doing for over a decade, and really love, I’m excited to be back in that role. I start Feb 1, and I’m pumped.
Even better was how this came about. I’ve been reading “Ask the Headhunter” for years, but always thought his advice on “auditioning” for a job (do the job to get the job) seemed impractical. In this case, a new CIO had come in, saw a lot of work going on, and wanted an outside opinion. I came in for a three day engagement (I was off for a few weeks over the holidays), interviewed the key stakeholders, staff, reviewed setups, documentation and code, as well as some other evaluations from outside consultants. Came up with recommendations, strategy and a staffing model, and ended up creating a job for myself. I got to work with my new boss, get the full lay of the land, and know what I’m getting into about as well as possible. And they got to know me.
It doesn’t start better than that.
I enjoy sharing solutions to issues that I run into. One of the frustrations of searching for a solution to a problem is links to forums where all you see is the question with no resolution (and all the comments are “has anyone solved this?”).
On the other hand, as this great forum on the Daily WTF goes into, there are a huge number of people who want too much – documentation, source code, etc.
This is especially prominent on Java forums, where there seems to be a large number of CS students trying to get others to do their homework assignments.
I’ve had several commenters request the templates and code for the XML Publisher AP Checks, which, due to client confidentiality, I can’t consider releasing. In general, I won’t post more than a few relevant snippets, as I don’t have time to go through everything and ensure there is not any compromise of security.
So, in general, I’m happy to address specific issues (how did you get around this problem, etc.), but not to post whole solutions, documentation, project plans, etc.
My hope is that what I share will point you in the right direction so that, if you know what you’re doing, you can solve a similar problem. If you’re wanting to cut and paste an entire solution, you really should be in another line of work. Some of this stuff is hard – no getting around it.
XML Publisher Issues
This last section on AP Check Printing in R12 is about the XML Publisher issues. These issues were greatly complicated by:
- Not being able to get a good XML data file from the system as documented in Part II
- Overflow check printing not working as discussed in Part III
- General instability in Oracle Payments, especially prior to 12.0.4
Coming onto the project, the client had a very inadequate check template in place, and the prior developers had given up and rolled off as they could not make it work. Checks were misaligned, and overflow checks did not work, and were not numbered correctly. In hindsight, some of this was not the developers fault – the system was not handling overflow checks correctly.
After patching up in 12.0.3, the system would show overflow checks, but the template, maddeningly, would not handle them. As it turned out, this was because they were all numbered the same as the negotiable check in the XML output, as noted in Part III. However, being unable to see the XML output, I could not see that.
There were 3 significant development issues for a good check template that were not handled by Oracle’s seeded sample template:
- The number of invoices would vary, depending on how many were being paid – this affects the alignment down
- We specified a limited number of invoices per check – 12, as configured in the apps, and more required an overflow check
- Getting the check portion of the output to print in the same place, regardless of what was above
My interim solution was to copy Darshan Bhavsar’s solution on Anil Passi’s blog. (Incidentally, this blog has moved to http://apps2fusion.com, and it is an excellent resource for Oracle Apps developers). Briefly, this solution creates a variable for the number of invoices, has an inner loop and countdown function (with a recursive subtemplate to fill the blank lines needed). Darshan came up with a great solution to the problem of padding with blank lines. In a regular computer language you could use a for loop to easily add blank lines, but XSL is not a procedural language, so this is a challenge.
Darshan’s solution also enabled us to handle pagination as well. Even though the overflow and negotiable checks were showing as the same check number in the XML (unknown to us at the time), we were forcing them to page break (the template sorts by check number) and getting something out that was acceptable to the bank.
The other issue was getting the check output to print at the bottom, and to have the overflow checks say “***VOID****” on the signature and other areas, with the negotiable check having the check amount, the amount in words, and a blank line for the signature. Word does not really seem to offer an option to align objects with the bottom of the page in a way that worked in an RTF-based template. I found an interesting solution at the Functional DBA Blog, which necessitated copying down all of the XML Publisher classes from the server, creating a JDeveloper program to generate the XSL-FO output, and modifying that. (For those who are not that technical, the RTF template is transformed into XSL – Formatted Output before the final output is generated). The XSL-FO output is incredibly verbose, and I did not find this a workable solution in our case, but it would probably be necessary had we done the MICR encoding, rather than using pre-printed checks, as MICR encoding must be done to very precise tolerances. For our check portion, this was just too much text to force into a footer, and maintaining the XSL-FO directly (it can be uploaded, rather than an RTF template in XML Publisher) would be too complex for the client to maintain.
Rather than trying to create a huge footer, my solution was to use another subtemplate with a “last-page-first” tag:
This makes the check subtemplate print on the last page, even if there is only one page.
This worked great, until additional patching broke it.
Finally, we patched to a level where I could get the XML output (from a 12.0.6 test instance), and found a patch to make the overflow check output have the actual overflow check document number, and was able to remove the forced pagination, and the last-page-first solution, and use:
for the overflow checks and
for the negotiable check. This is very much like the seeded template, and finally works smoothly and efficiently.
A little tweaking for alignment, and we were home free. One issue, still unresolved is that there is sometimes a blank line inserted at the top of the invoice list, but I was able to get the alignment within tolerances acceptable to the bank.
As a wrap-up, if you are doing AP checks for R12, I highly recommend being at 12.0.6, with patch 7388882 before beginning development. Had all this been in place, development would have been a lot faster, and avoided a lot of the issues above.