Basic Steps to Create an Application Engine
in PeopleSoft
In reviewing my statistics, I found
that one common search was “basics steps to create an appengine in PeopleSoft”.
I hope the person(s) found what they were looking for on my blog.
Nonetheless, that gave me the idea to write a simple overview on creating
a new Application Engine program.
This post can’t cover everything but
I do plan to cover:
·
Creating
a new Application Engine definition
·
Setting
program properties
·
Understanding
program flow
·
Inserting
new sections, steps, and actions
·
Loops/logic
·
State
records
·
Adding
programs to projects
·
Where
to go from here
Creating a new
Application Engine Definition
Application Engine programs are
definitions that are created and edited within Application Designer. So,
open Application Designer and log in. Next, either use the File > New
menu, press Ctrl + N, or click on the “New” icon on the toolbar.
File > New / Ctrl + N:
New icon on the toolbar:
After you do that, you should get a
New dialog. There is where you tell Application Designer what type of new
object you want to create. From here, you will want to choose the “App
Engine Program” object type.
This should give you a new
Application Engine program window:
You probably want to save your
program as you go. You can use File > Save or Ctrl + S or the Save
icon on the toolbar. The first save will prompt you for a name for your
new program:
Settings Program
Properties
The first thing you need to do is set
your properties. If nothing else, you need to check the “Disable Restart”
button. So, click on the properties button on the toolbar.
On the first tab of the properties,
you should enter a general description of your program. In the comments
area, you want to describe in more detail what your program does. You
should also enter the date, author, and description of changes to the program
throughout it’s lifetime.
Read on for more information about
State Records later, but the State Records tab is where you connect the state
record with your program.
This is the most important property
to set. On the fourth tab, make sure to check the disable restart option.
In my opinion, this should be default. I don’t have room to go into
all of the reasons, but let’s just say that in order to make a program restartable,
you need to make several design decisions first. If you want your program
restartable, get it running first, check that your design is restartable, and
then, come back here and uncheck the disable restart option.
Understanding Program Flow
The first that you need to understand
is what the parts mean and how it runs each piece. So, here are the
parts:
·
Program:
a complete application (or a library of functions)
·
Section:
like a function in a regular language
·
Step:
a single task; like a line of code in a regular language
·
Action:
a single action; like a clause in a regular language
The
most important thing to understand is that the program starts at the first step
in the “MAIN” section. It runs to the last step of the MAIN section in
sequence. At the last step, the program is done. The other sections
do not run unless they are explicitly called with a “Call Section”
action.
Don’t let the names of the steps
confuse you. The name can be anything. The step sequence number
(circled below) is what controls the order of the steps. If you’re not
careful, the step names can confuse you. In the following example, step02
runs first before step01.
Also, you can’t control the order of
the actions. You should have only one action per step unless you are
doing looping. If you do insert two actions into the same step, you can
hit the refresh button on the toolbar and it will rearrange the actions in the
order in which they will execute.
Inserting New Sections, Steps, and Actions
These three buttons on the toolbar
insert new sections, steps, and actions (respectively). You can also use
the insert menu.
The part of the program you have
selected is significant when inserting a new part. When inserting a
section, you used to have to select the previous section. Also, the order
of the sections does not matter, so once you hit the Refresh button it will
alphabetize them by their name. (Remember sections run in the order they
are called from MAIN.)
To insert a step, select the step
before, and it will insert the new step after what you have selected. The
program will never change the order of the steps. If you want to reorder
them, you have to cut and paste them in the new location.
To insert an action, select the
action or step before, and it will insert the new action afterward.
Again, remember that you can’t control the order of the actions.
After you insert the action, you will need to change the type in the drop
down:
For most of the actions, you will
want to double click on the grey area of the action and open the PeopleCode or
SQL editor. This is what defines exactly what the action does.
Loops/Logic
Complex logic is best done inside of
PeopleCode steps. Note that you can have an App Engine program with a
single PeopleCode step/action. The PeopleCode can do all of the work for
you.
That being said, you can do some
logic flow with looping and such in the App Engine itself. This is accomplished
with the following action types:
·
Do
Select: like a for loop, loops through a set of rows
·
Do
While: like a while loop
·
Do
When: like an if statement
·
Call
Section: branches to another section
First, let’s talk about Do Select.
It is compared to a “for” loop in other programming languages.
Really, it is looping through a result set of rows returned by a select
statement.
So, you’ll define a SQL statement for the Do Select action. The
program will execute the statement and execute the following actions in the step for each row returned.
Keep in mind that you can only have one of each action
type with each step. If you need to execute two SQL statements for each
row, you will have to create a new section with those SQL actions and use a Call Section with your Do
Select.
Next, the Do While loop will go until no rows are
returned. It is similar
to the Do Select except that it executes the SQL statement every iteration.
The actions following it are executed when the SQL statement returns 1 or
more rows. Also, note that the actions are executed once for each time
the select statement is run no matter how many rows are returned.
Now, the Do When action is like an If statement. Basically, if the
select statement returns a row, that’s true. If no rows result, it’s
false. So, if the Do When select statement returns a row or more, it
executes the action. If no rows are returned, it moves on to the next
Step without running any more actions in the current step.
Finally, the Call Section action is simple: it just runs all
the steps in the selected section and comes back to the next step.
State Records
Now, you have the program flow mastered, but you
need to know how to pass information between the steps. The State Record
is your tool. If you are familiar with COBOL, the state record is like
the working storage area on a COBOL program. Or, you could say that the state record is the variables
for the App Engine program.
So, to create a state record, you just need to
create a new record with a name that ends with “AET”. You can create a
new record the same way as you created the App Engine definition.
In your new record, you need to add at least three
fields: PROCESS_INSTANCE, RUN_CNTRL_ID, and OPRID. You can use the Insert
> Fields menu to add fields. The PROCESS_INSTANCE should be a key.
Next, on the record type tab, you should either
select Derived/Work or you should select SQL Table. If you choose SQL
Table, you will need to go through the Build process when you create and each
time you change the record.
If you use Derived/Work, you may loose the information in the state
record when the program commits (which is no problem if the only commit
you have is at the end).
Now, when you save it, make sure that you add the
“AET” to the end of the name. You will not be able to select it on the
State Record screen unless it is named appropriately.
Once you have the state record saved, you need to
connect it to the App Engine program. To do so, open the App Engine
properties and go to the State Record tab. Enter the name of the state
record in the search box, click the “Get List” button, select the record in the
“Record List”, and finally click the “Add” button.
Finally, we can use our state record in our
program. With SQL statements, we can use two different meta-sql commands:
·
%Select:
loads a value selected from the database into the state record
·
%Bind:
places a value from the state record into a SQL statement
For
example, the %Select in this statement will read the EMPLID returned by
the select statement and place it in the state record. Because this is a
Do Select, it will fetch each row and run the rest of the actions in the step
for each row. When the action runs the first time, the EMPLID field in
the state record will have the EMPLID from the first row as the actions run.
The state record will have the EMPLID from row 2 as the actions run the
second time, and so on.
This
next example uses %Bind to pull the value from the state record and insert
it into a staging table.
Also, in PeopleCode steps, you can refer to the
state record with the Record.Field syntax. If you are familiar with
PeopleCode on a page, you understand the buffer. The buffer for a
PeopleCode program in App Engine is your state record, and you access them as
if they were in the buffer.
Running/Testing
The easiest, quickest way to test your new program
is to run it from Application Designer. When you have the main App Engine
window active, you can click the Run button. You can also use the Edit
> Run Program… menu.
This opens the Run Dialog window. You want to
make sure that you select Output Log to File. If you don’t, the window
will close and you won’t be able to see any of the output. I also uncheck
the Run Minimized option so that I can see the window open and close more
easily. Pay attention to the Log File Name because the first thing you
want to do when it is done is view the output.
You will eventually want to set most programs up to
run online from a Run Control. Creating a run control is outside of the
scope of this post, but here are some thoughts that might help you toward that
direction:
·
You will need to create a page with
the process scheduler sub page on it and a component containing the page.
·
You will need to create a Process
definition where the Process Type is application engine and the name is the
same name as your program.
·
You will need to enter the new
component name on the Process Definition and select a Process Group that you
have access to.
·
When your program starts, PeopleTools
will automatically populate the Process Instance, Operator ID, and Run Control
ID fields for you.
·
One of the first steps in your
program will be to select the parameters from your run control page into your
state record. You will use the Run Control ID and Operator ID that is
pre-populated to get the correct values.
Adding Programs to Projects
As you create your program, you should be adding it
to a project. This ensures that once you have it working, you can easily
migrate it to your test environment and eventually to production. The
catch is that the program has different parts that must be inserted
individually. The program as a whole must be in the project. Each
section must go into the project, as well as each individual SQL or PeopleCode
program.
You run into problems when you miss a part.
App Designer cannot migrate a child definition if the parent definition
does not exist in the target. For example, you can’t migrate any sections
if the parent App Engine program does not exist in your target environment.
You can’t migrate a Do Select SQL statement if the section with the
parent step/action does not exist in the target.
As you go, I recommend using the F7 key to insert
everything your create or change as you do it. This ensures you don’t
forget anything. When you create a new section, you can right click on
the section and insert it into the project:
Assuming you want all of the program and its parts
in your project, you can use the insert related definitions option.
Remember, you only want to do this when you created the program by
yourself. If you only modified some of the parts, you only want the parts
in your project that you actually changed. To, use the option, press Ctrl
+ F7 or use the Insert > Definitions Into Project. Before you insert
the program into the project, highlight all of the Related Definitions.
No comments:
Post a Comment