February 14, 2017 Leave a comment
I’ve been re-engineering an overly complicated page for the last year. It has multiple grids on it – and it suffers hugely from the software anti-patterns Shotgun Surgery and Feature Creep to name a few.
For this first go-around of re-engineering / refactoring I’ve been pushing code into an App Package. The page is maxed out regarding the ability to add objects – I don’t know if there’s a Christmas Tree design anti-pattern out there but if there is the page would be the poster child for it.
And the business wants more information.
I’ve designed it to use a secondary page for input, and all the code including the page activate code to be written into the App Package.
The page is going to be very basic – a grid plus the delivered secondary page OK and Cancel buttons. It’s the grid that’s been fun to deal with.
I need to relabel the grid columns, set columns to be editable or not – and hide columns based on data values. A perfect candidate for using the Grid Class SetProperties method, right? Based on the documentation:
Use this method to set multiple properties (column enabled, column visibility, and column label) for one or more columns in a grid.
Here’s the problem with PeopleSoft documentation. Let me show you the example supplied:
Grid Class Methods
&ARProp= CreateArrayRept(CreateArrayRept("", 4), 0); &ARProp.Push(CreateArray("JOB_DETAIL", "Y", "Y", "Job Detail")); &ARProp.Push(CreateArray("JOB_TIME", "Y", "Y", "Job Time")); &mygrid.SetProperties(&ARProp);
Uhm. I’m using this in an App Package class. I have to declare all my variables. This method of the Grid class requires a four-dimensional array.
Okay – so a two dimensional array is declared:
array of array of <some type> <array name>
I figured a four dimensional array is declared:
array of array of array of array of <some type> <array name>
Tried it – and it worked… I could declare it, create it, push data into it.
Grid.SetProperties threw an error every time I tried to use that array.
Left it alone for a couple of days – did some other things – circled back. Looked for examples where it’s used. And found my perfect example in HRS_COMMON.HRS_CONTENT.UI.ContentGridLayout:
Local array of array of string &ARProps;
&ARProps = CreateArrayRept(CreateArrayRept(“”, 4), 0);
&ARProps.Push(CreateArray(Column Name, Column Enabled Y N, Column Visible Y N, Column Label));
If &ARProps.Len > 0 Then
Uhm. Okay – so that array declaration looks… like it’s not what I’m expecting. My C experience makes me not trust what I’m seeing – I’ve declared a two dimensional array, right?
It’s the CreateArrayRept method that looks to be the secret sauce here. It’s created four sub-arrays in the second dimension of &ARProps. And if arrays tend to give you a headache, thinking of that likely brings on a migraine.
So I refactored my code – made changes based on the above example – it works.