This article describes how - in PeopleCode (Release PeopleTools 8.50) - to enable a grid without enabling each static column, using a dynamic Application Class.
The goal is to disable the following grid with three columns “Effort Date”, ”Effort Amount” and “Charge Back” , when the Check Box “Finished with task” is selected , without referencing each static column; this PeopleCode could be used dynamically with any grid.
If the check box “Finished with task” is cleared, the content of the grid columns is editable (and the buttons “+” and “-“ are available):
So, you create an Application Package “CLASS_EXTENSIONS” that contains an Application Class “EWK_ROWSET”.
This Application Class is defined with Class extends “ Rowset” and you add two news properties “Enabled” and “Visible”:
After creating this Application Class, you use it in two PeopleCode Events : Rowinit and FieldChange :
This code is very ‘simple’, you write only one command : ” &ERS2.Enabled = False” → and the entire grid is “Enabled”… and you can use this code with any Grid!
So, the complete PeopleCode to create the Application Package is (with explanation in [….]) :
******Package CLASS_EXTENSIONS : [Name of the Package: CLASS_EXTENSIONS]
--Beginning of the declaration part------------------------------------------------------------------------------
class EWK_ROWSET extends Rowset; [Definition Class EWK_ROWSET as a
subclass of Class Rowset]
method EWK_ROWSET(&RS As Rowset); [Constructor is the Method with the
same name of the Class]
property boolean Visible get set;
property boolean Enabled get set; [Definition of the property
“Enabled” in read/write]
private [Before the word “private”,
all the declarations are publics]
method SetDisplay(&DisplaySW As boolean, &PropName As string,
&ChildSW As boolean);
instance boolean &EnSW;
instance boolean &VisSW;
instance Rowset &NextChildRS;
instance Row &NextRow;
instance Record &NextRec;
instance Field &NextFld;
instance integer &RowCnt, &RecCnt, &FldCnt, &ChildRSCnt;
instance integer &i, &j, &k;
instance CLASS_EXTENSIONS:EWK_ROWSET &ERSChild; [For recursion]
Constant &VisibleProperty = "VISIBLE";
Constant &EnabledProperty = "ENABLED";
end-class;
--End of the declaration part------------------------------------------------------------------------------
method EWK_ROWSET [The Constructor]
/+ &RS as Rowset +/
%Super = &RS;
end-method;
get Enabled
/+ Returns Boolean +/;
Return &EnSW;
end-get;
set Enabled
/+ &NewValue as Boolean +/;
&EnSW = &NewValue;
%This.InsertEnabled=&EnSW;
%This.DeleteEnabled=&EnSW;
%This.SetDisplay(&EnSW, &EnabledProperty, False); [This method is called when
you set this property]
end-set;
get Visible
/+ Returns Boolean +/;
Return &VisSW;
end-get;
set Visible
/+ &NewValue as Boolean +/;
&VisSW = &NewValue;
%This.SetDisplay(&VisSW, &VisibleProperty, False);
end-set;
method SetDisplay [The most important PeopleCode Method]
/+ &DisplaySW as Boolean, +/
/+ &PropName as String, +/
/+ &ChildSW as Boolean +/ [Not used in our example]
&RowCnt = %This.ActiveRowCount;
&NextRow = %This.GetRow(1); [To know the structure of a line ]
&RecCnt = &NextRow.RecordCount;
For &i = 1 To &RowCnt [Loop for each Line]
&NextRow = %This.GetRow(&i);
For &j = 1 To &RecCnt [Loop for each Record]
&NextRec = &NextRow.GetRecord(&j);
&FldCnt = &NextRec.FieldCount;
For &k = 1 To &FldCnt [Loop for each Field/Record]
&NextFld = &NextRec.GetField(&k);
Evaluate Upper(&PropName)
When = &VisibleProperty
&NextFld.Visible = &DisplaySW;
Break;
When = &EnabledProperty;
&NextFld.Enabled = &DisplaySW; [Enable each Field/Record]
Break;
When-Other
Error "Invalid display property; Must be either VISIBLE or ENABLED"
End-Evaluate;
End-For;
End-For;
If &ChildSW = True Then [If recursion]
&ChildRSCnt = &NextRow.ChildCount;
For &j = 1 To &ChildRSCnt [Loop for each Rowset child]
&NextChildRS = &NextRow.GetRowset(&j);
&ERSChild = create CLASS_EXTENSIONS:EWK_ROWSET(&NextChildRS);
&ERSChild.SetDisplay(&DisplaySW, &PropName, &ChildSW);
[For each Rowset child, call Method SetDisplay with the same parameters used
with the Rowset parent]
End-For;
End-If;
End-For;
end-method;
******End of the Package CLASS_EXTENSIONS:[Name of the Package: CLASS_EXTENSIONS]
About the Author:
Pascal Thaler joined Oracle University in 2005 where he is a Senior Instructor. His area of expertise is Oracle Peoplesoft Technology and he delivers the following courses:
For Developers: PeopleTools Overview, PeopleTools I &II, Batch Application Engine, Language Oriented Object PeopleCode, Administration Security
For Administrators : Server Administration & Installation, Database Upgrade & Data Management Tools
For Interface Users: Integration Broker (Web Service)