| | | |  | | | | | |  | April 2006 |  | | | | | | | | In this issue:
1. Guest Spot: A ProcessFlow Case Study
2. Sliding Doors
3. Worthwhile Reading
4. Lawson Tips & Tricks The LawsonGuru Letter is a free periodic newsletter providing provocative commentary on issues important to the Lawson Software community. The LawsonGuru Letter is published by—and is solely the opinion of—John Henley of Decision Analytics. Visit Decision Analytics at http://www.danalytics.com. For subscription information, see the bottom of this message. The LawsonGuru Letter is not affiliated with Lawson Software. This month I turn the Guest Spot over to David Williams from Paradigm ERP. Once again David shares his knowledge and some great "real-life" experiences with Lawson ProcessFlow, Ready to share your story? Drop me a line at
. | | | | | | | | | | 1. Guest Spot: A ProcessFlow Case Study |  | | | | (by David Williams, Paradigm ERP) | | | | | | | | | | Recently, Cobb Energy Management Corporation reviewed their options for requisition approval. Tom Denison, Associate Vice President Supply, was impressed with the new feature(s) available in Lawson 8.1 and elected to approve requisitions by line. This presented some interesting challenges – the first of which was how was this to be done?
Requesting Location and Requestor setup screens give the user requisition approval options. New to Lawson 8.1 was the option to approve requisitions by line:

RQ04.1 Requesters
With line-level approvals, there is also a new Service Definition for ProcessFlow:

This Service creates an initial Work Unit when the requisition is released and is linked to a flow file which, in turn, creates Work Units for each line of the requisition by using a Work Object to push the requisition lines to their respective Service.
Lawson provides two different line-level Services based upon whether or not Grant Management is being utilized. These services have different Criteria and Variables associated to them. The non-Grant Management Service, ReqLineApproval, happens to be used by most companies.

Each requisition line at this point will be associated to its own Work Unit in the Approver’s Inbasket.

Since that means that each line goes to a UserAction node the Approver would receive an email notification for every line. Being a conscientious consultant, I didn’t like the idea of telling the client that they would receive individual email notifications for each line and then be required to work each line individually by Work Unit.
So the next challenge was coming up with a solution that would utilize the functionality of ProcessFlow but not overwhelm the Approver with emails and require the approver to point and click his mouse 4 times for every line (select the Work Unit, click the Action, confirm the Action, acknowledge the Action).
The first problem was the easier of the two to resolve. We used two UserAction nodes, one with Notify checked on and other with Notify not checked:

If the Work Unit was associated with the last line of the requisition (determined with a Query) the flow would Branch to the “Notify” UserAction node, otherwise it would go to the “Don’t Notify” UserAction node. This way the Approver only received one email notice:

We then toyed with different approval options – Approve Line, Approve All, Unrelease Line, Unrelease All, Reject Line, Reject All – but finally settled upon a more realistic approach. Approvers would have the option to Unrelease or Reject individual lines and then to Approve All remaining lines:

The Unrelease Line and Reject Line actions were straightforward AGS calls to RQ13.2. Once these actions were performed the Work Units would close, the Metrics would be logged and all would be well. What I needed was a way to Approve All of the remaining lines, close their associated Work Units and log their Metrics.
Using a Query, we find all of the open lines on the requisition (Status =1) and then send an AGS call to Approve each line to RQ13.2:

Having approved the requisition lines we now needed to close the Work Units and update the Metrics (Cobb uses this information in a Crystal Report to check the requisition’s approval status).
After using a Query to find all of the “In Process” Work Units the flow then sent an AGS call to WF20 to update the status to 4 – Completed. It then found the Metrics for the Work Unit processed, assigned the current date in AGS format to a variable, found the other associated Work Units without Metrics and updated the Metrics with an AGS call to WF25.2:

Since these steps can take a minute to process (depending on the number of Work Units associated to the requisition) the Inbasket pending tasks may not update quickly enough to clear out of the display screen and will need to be refreshed to reflect the completed status.
Approval Levels
Cobb EMC allows up to four requisition approval levels depending on the department for which the requisition is created. Each of these departments also has a different paradigm for their approval values. For example, one department may have three approval levels ($500, $1000, $5000) but another department may have only two approval levels ($2500, $5000).
We first began building logic into the flow by using a Branch and several if-then combinations (if department = A and dollar = $$ then) but this would have required the flow to be revised for each change.
We decided instead to use the requisition Approval Codes already provided within Lawson (but meant to be used for non-ProcessFlow approvals). This allows for easy updates and new departments can be added without revising the flow files.

Each Requester is assigned an Approval Code which is built to identify the number of approval levels and the approval dollar base for each approval level.
All requisitions are reviewed by a Level 1 Approver and if the value of the requisition (excluding the Unreleased or Rejected lines) exceeds the Lower Limit (the maximum value the Approver is authorized for) the flow Branches to the next approval level:

Each approval level has its own flow file and the requisition lines are passed to the next flow file via a Work Object. The last stage all requisitions go through is the Buyer flow (note that the requisition is approved before being passed to the Buyer).
The Buyer has the option to send a Line to Quote or all remaining lines Send to PO:

When the Line to Quote action is selected the flow uses an AGS call to create a PO16 Bid and then adds the requisition line to that bid. The Branch checks the item type and only sends I or N type items to the bid. (We submitted an enhancement request to Lawson to allow X type items to be added to bids. It is being “considered for future”.)

If a bid was already created by a previous line the Create Bid AGS call would return a “Bid already exists” message but since that wouldn’t cause a problem I decided not to add the additional step to check for this first.

Using Design Studio, we modified PO16 to include a link to open a Crystal Report bid form to send to vendors. The link also passes the parameters to Crystal so the report defaults to the bid currently displayed.
The Buyer uses PO23 to assign the items to the vendor of choice from the returned bids.
When the Lines To PO action is selected, the flow file goes through the following steps: - A Query is used to find the requisition line vendor for an open Work Unit
- A Branch bypasses the requisition line if no vendor is assigned
- An AGS call creates a PO Header via PO20
- An Email is send to the Buyer with the PO #
- A Query finds all requisition lines assigned to the vendor
- A Query checks to see if that line has already been pushed to Bid
- A Branch bypasses adding the line to a PO if it’s on Bid
- The Work Unit for the requisition line is closed via an AGS call
- The requisition line is added to the PO via an AGS call
- This loop continues until all open Work Units are processed
Requisition lines that do not have a vendor are emailed to the Buyer letting him/her know to process these lines via PO23.
For the sake of brevity some of the process steps (like using the MsgBuilder) were excluded. I also couldn’t list all of the revisions we made to get to the process now in place. Ideas that seemed to make sense in the design stage weren’t practical in production and were quickly revised.
I appreciate Tom Denison and Cobb EMC for allowing me to publish this case study. | | | | | | | | | | 2. Sliding Doors |  | | | | | | | | | A few years ago there was a movie by the name of “Sliding Doors” (see http://www.amazon.com/gp/product/6305210411/002-1493439-0644836), of which I remember very little except that the concept was pretty unique; it’s essentially the same plot line running in parallel with itself, where in one of the plot lines certain things happen which don’t happen in the other (and vice versa). In the end, there are—of course—two different endings. To stretch this just a bit (OK, a lot), sometimes I feel like I’m live a parallel life when it comes to Lawson. This has really just become abundantly clear to me recently.
You see, several years ago I worked for another software company. Now remember, I don’t work for Lawson, but I’m close enough to them and to the Lawson client base that I sometimes feel like I do. Let me tell you about some of the specific parallels.
It was the late 1980’s and there were two fellows, whose last names started with ‘L’—in this case, Lupfer & Long—or L&L for short. Now they were not brothers like Richard and Bill Lawson, but that’s were the comparison begins.
At L&L, the software products were business applications. There was Accounts Payable, General Ledger, and Payroll. The payroll product even interfaced with a certain tax calculation product—called—that’s right—BSI—just like Lawson!
After you peeled back the layers of the L&L product, which was wrapped in a scripting language, the applications themselves were written primarily in COBOL, just like Lawson. No surprise of course, since, after all, both are business applications.
One of the underlying themes at L&L was portability. The software ran on the Digital VAX/VMS platform as well as Prime’s PrimOS. Both were workhorse servers (we called them midranges way back when). The interesting thing about portability is that we had to deal with some of the same “least common denominator” issues that Lawson still deals with. Like form layouts. L&L had a program called “fmread” to provide platform-specific screen handling. We had to deal with user complaints about things like the lack of scrolling on detail lines (you had to use PF1 key combinations—by the way, anyone remember PFx keys?) Starting to sound familiar?
Another portability concept we used was that of “I/O primitives”—just like Lawson’s database APIs, we used them to decouple the applications from the datastore.
L&L “bet the company” a couple of times on third-party products, in particular a quirky database called INFO/DB+, which had some great features that were ahead of their time. Too bad the company was even less stable than the software. Again, the parallels continue: Who in the Lawson community remembers the embracing of Select Enterprise? How about Continuus and ezUpdate?
L&L also tried to re-write their software code base a couple of times. Kinda like Landmark, but hopefully this one ends better.
So, whatever happened to L&L? Well, there were some bad sales deals, along with the requisite over-promising to the prospects. The company teetered at the risk of insolvency for a while, before being swallowed up by a big fish in the software pond. And there—I hope—is where the parallels end. While the rumors continue about a buyout of Lawson by another big fish—some say Oracle, some say IBM—I think it would be just great if they survived.
By the way, if you ever used the L&L software (also known as COUNT and CIFS), send me an email at
. I’d love to talk about how things have changed. Or maybe not. | | | | | | | | | | 3. Worthwhile Reading |  | | | | | | | | | Standard Reports: Basics for Business Users
- QUOTE OF THE ISSUE –
“Everything should be made as simple as possible,
but not simpler.”
-- Albert Einstein
How to plan, prioritize and design the primary vehicle for delivering business intelligence. Intelligent Enterprise, February 2006 http://www.intelligententerprise.com/showArticle.jhtml?articleID=177103011
Pay-per-view ERP
Is on-demand transaction software ready for prime time? CFO Magazine, February 2006 http://www.cfo.com/article.cfm/5435396/c_5461573
Nestlé Pieces Together Its Global Supply Chain
More than five years ago, the world's largest food maker set out to standardize how it operates around the world. GLOBE, or the Global Business Excellence program, is aimed at getting far-flung operations to use a single system to predict demand, purchase supplies, collect payments from customers and market its products. Getting more than 40 managers to buy into the global standardization project was no easy sell. Baseline Magazine, January 2006 http://www.baselinemag.com/article2/0,1540,1912057,00.asp
Whipping IT data into shape
Enterprises are tackling the ugly problem of reconciling widely distributed data, driven in part by the move to service-oriented architecture. Infoworld, February 6, 2006 http://www.infoworld.com/article/06/02/02/74665_06FEmdm_1.html?s=feature
| | | | | | | | | | 4. Lawson Tips & Tricks |  | | | | | | | | | Share your tips. Send them to
.
You can view Tips & Tricks from past issues on the Tips & Tricks page on LawsonGuru.com Adding custom Lawson library code If you are making Lawson customizations and have properly designed and organized your code, you will probably find that you want to take advantage of Lawson's common library features (i.e. "pdlib" and "wslib"). That way you can isolate common code to one place and avoid repeating it within a customization. The way to do this is to put it in a common library. The problem is in understanding how to create the library and put your code into it. The answer, of course, is libdef, Lawson's library definition utility. Normally when you create a new program, you use pgmdef first to create the program, and then write your code. However, with a library, if you try to create the library first, you'll be forever staring at the entry in libdef and nothing will be happening: 
What you need to do is create the program code/file first in the pdlib directory, and then enter the library name into libdef: 
Your library code will be scanned for SECTION names correlating to routines, and if valid, you can then add the library. At this point, your custom programs can then PERFORM the routines stored in your own custom library. Also, remember that beginning with 8.1 Applications, "pdlib" and "wslib" are no longer "global" to a product line, but are now specific to each system code. | | | | | | | | | | © Copyright 2006, Decision Analytics. All rights reserved. | | |
| | Please share The LawsonGuru Letter in whole or in part as long as copyright and attribution are always included. | | | Decision Analytics is an independent consultancy, focusing on Lawson technical projects, and specializing in reporting, customization/modification, data conversion, and integration/interfaces. Please visit http://www.danalytics.com for more information. |
|
|