1 1

PeopleSoft PeopleSoft
Application Services Application Services
PeopleCode Events PeopleCode Events
2 2
PeopleTools PeopleTools
PeopleSoft applications are designed using the PeopleSoft applications are designed using the
powerful tools provided by PeopleSoft: powerful tools provided by PeopleSoft:
Application Designer Application Designer
PeopleCode PeopleCode
Application Engine Application Engine
PeopleCode is a 4CL and has a rich syntax and PeopleCode is a 4CL and has a rich syntax and
structure to develop S incorporate complex structure to develop S incorporate complex
application logic application logic
3 3
PeopleCode PeopleCode
PeopleCode is simple but yet high PeopleCode is simple but yet high··powered language to powered language to
satisfy complex business requirements within PeopleSoft. satisfy complex business requirements within PeopleSoft.
!t is used to incorporate sophisticated business rules !t is used to incorporate sophisticated business rules
into PeopleSoft Applications. into PeopleSoft Applications.
The language is designed specially to interact with the The language is designed specially to interact with the
application processor, giving the capability to application processor, giving the capability to enhance enhance
the application beyond the capability of the PeopleTools. the application beyond the capability of the PeopleTools.
Using PeopleCode virtually any edit or validation can be Using PeopleCode virtually any edit or validation can be
accomplished. accomplished.
4 4
PeopleCode Events PeopleCode Events
PeopleSoft uses ¨Events" to control the flow and PeopleSoft uses ¨Events" to control the flow and
functionality of the application functionality of the application
PeopleCode Programs are attached to the events supported PeopleCode Programs are attached to the events supported
by PeopleSoft by PeopleSoft
Here, we will be focusing only on PeopleCode Here, we will be focusing only on PeopleCode
Events, and how, why, where and when these Events, and how, why, where and when these
¨Events" could be used for developing Powerful ¨Events" could be used for developing Powerful
Applications. Applications.
5 5
MENU
SearchInit
SearchSave
RowSeIect
PreBuiId
FieIdDefauIt
FieIdFormuIa
RowInit
PostBuiId
Activate
Other Actions
FieIdEdit
FieIdChange
Popup Menu
NO
PrePopup
ItemSeIected
YES
RowInsert RowDeIete
SaveEdit
SavePrechange
WorkFIow
SavePostChange
Page DispIayed and
Waits for User
Action
Row Actions?
Insert
DeIete
Save Action
PeopleCode Events PeopleCode Events -- High Level Flow High Level Flow
6 6
MENU
SearchInit
SearchSave
RowSeIect
PreBuiId
FieIdDefauIt
FieIdFormuIa
RowInit
PostBuiId
Activate
Other Actions
FieIdEdit
FieIdChange
Popup Menu
NO
PrePopup
ItemSeIected
YES
RowInsert RowDeIete
SaveEdit
SavePrechange
WorkFIow
SavePostChange
Page DispIayed and
Waits for User
Action
RowActions?
Insert
DeIete
Save Action
PeopleCode Event PeopleCode Event ·· Search!nit Event Search!nit Event
7 7
PeopleCode Events PeopleCode Events
Search!nit Search!nit
When is it fired? When is it fired?
This event is generated just before search dialog, add This event is generated just before search dialog, add
dialog or data entry dialog box is displayed. dialog or data entry dialog box is displayed.
8 8
PeopleCode Events PeopleCode Events
Search!nit Search!nit
Where is it used? Where is it used?
Search!nit can be associated with record fields and Search!nit can be associated with record fields and
component search records. component search records.
9 9
PeopleCode Events PeopleCode Events
Search!nit Search!nit
What is it used for? What is it used for?
Search!nit event triggers associated PeopleCode in the Search!nit event triggers associated PeopleCode in the
search key fields of the search record. search key fields of the search record.
10 10
PeopleCode Events PeopleCode Events
Search!nit Search!nit
Restrictions Restrictions
Search!nit will not trigger if run from a component Search!nit will not trigger if run from a component
interface interface
Can't use functions like DoNodal, Can't use functions like DoNodal,
DoNodalComponent,Transfer,TransferPage in Search!nit DoNodalComponent,Transfer,TransferPage in Search!nit
event. event.
11 11
PeopleCode Events PeopleCode Events
Search!nit event Search!nit event
Example Example
This PeopleCode in Search!nit event on component search key This PeopleCode in Search!nit event on component search key
record field ENPL!D sets the search key page field to the user's record field ENPL!D sets the search key page field to the user's
employee !D, makes the page field unavailable for entry, and employee !D, makes the page field unavailable for entry, and
enables the user to modify the user's own data in the component. enables the user to modify the user's own data in the component.
ENPL!D=%Employee!d, ENPL!D=%Employee!d,
Cray (ENPL!D), Cray (ENPL!D),
AllowEmp1!dChg(true), AllowEmp1!dChg(true),
12 12
Search!nit Event Search!nit Event
This code is to directly go to the record where employee number is
10100
13 13
Search!nit Event Search!nit Event
14 14
Search!nit Event Search!nit Event
This code will displays the page which
contains the employee details of the
person whose Employee Number is
10010.
15 15
Search!nit Event Search!nit Event
16 16
PeopleCode Event PeopleCode Event ·· SearchSave Event SearchSave Event
MENU
SearchInit
SearchSave
RowSeIect
PreBuiId
FieIdDefauIt
FieIdFormuIa
RowInit
PostBuiId
Activate
Other Actions
FieIdEdit
FieIdChange
Popup Menu
NO
PrePopup
ItemSeIected
YES
RowInsert RowDeIete
SaveEdit
SavePrechange
WorkFIow
SavePostChange
Page DispIayed and
Waits for User
Action
RowActions?
Insert
DeIete
Save Action
17 17
PeopleCode Events PeopleCode Events
SearchSave SearchSave
When is it fired? When is it fired?
To control processing after search key values are To control processing after search key values are
entered, but before the search based on these keys is entered, but before the search based on these keys is
executed executed..
18 18
PeopleCode Events PeopleCode Events
SearchSave SearchSave
Where is it used? Where is it used?
SearchSave PeopleCode can be associated with record SearchSave PeopleCode can be associated with record
fields and component search records. fields and component search records.
SearchSave PeopleCode is executed for all search key SearchSave PeopleCode is executed for all search key
fields on a search dialog, add dialog, or data entry dialog fields on a search dialog, add dialog, or data entry dialog
box after the end box after the end··user clicks search. user clicks search.
19 19
PeopleCode Events PeopleCode Events
SearchSave SearchSave
What is it used for? What is it used for?
The typical use of this feature is to provide cross The typical use of this feature is to provide cross··field edits for field edits for
selecting a minimum set of key information. selecting a minimum set of key information.
!t is also used to force user to enter a value in at least one field, !t is also used to force user to enter a value in at least one field,
even if it's a partial value to help narrow a search for tables with even if it's a partial value to help narrow a search for tables with
many rows. many rows.
We can use Error and Warning statements in SearchSave We can use Error and Warning statements in SearchSave
PeopleCode to send the end PeopleCode to send the end··user back to the search dialog box if user back to the search dialog box if
the end the end··user entry doesn't pass validations implemented in the user entry doesn't pass validations implemented in the
PeopleCode. PeopleCode.
20 20
PeopleCode Events PeopleCode Events
SearchSave SearchSave
Restrictions Restrictions
SearchSave does not fire when values are selected from SearchSave does not fire when values are selected from
the search list. the search list.
This event, and all it's associated PeopleCode, will not This event, and all it's associated PeopleCode, will not
fire if run from a component interface. fire if run from a component interface.
21 21
SearchSave event SearchSave event
This code displays an error message
when the user leaves the employee
number field blank
22 22
SearchSave event SearchSave event
Employee number is blank
Error message displayed.
23 23
MENU
SearchInit
SearchSave
RowSeIect
PreBuiId
FieIdDefauIt
FieIdFormuIa
RowInit
PostBuiId
Activate
Other Actions
FieIdEdit
FieIdChange
Popup Menu
NO
PrePopup
ItemSeIected
YES
RowInsert RowDeIete
SaveEdit
SavePrechange
WorkFIow
SavePostChange
Page DispIayed and
Waits for User
Action
RowActions?
Insert
DeIete
Save Action
PeopleCode Event PeopleCode Event ·· RowSelect Event RowSelect Event
24 24
PeopleCode Events PeopleCode Events
RowSelect Event RowSelect Event
The RowSelect event fires at the beginning of the The RowSelect event fires at the beginning of the
Component Build process in any of the Update action Component Build process in any of the Update action
modes (Update, Update/Display All, Correction). modes (Update, Update/Display All, Correction).
RowSelect PeopleCode is used to filter out rows of RowSelect PeopleCode is used to filter out rows of
data as they are being read into the component buffer. data as they are being read into the component buffer.
This event also occurs after a ScrollSelect or related This event also occurs after a ScrollSelect or related
function is executed. function is executed.
25 25
PeopleCode Events PeopleCode Events
RowSelect RowSelect
When is it fired? When is it fired?
The RowSelect event fires at the beginning of the Component Build The RowSelect event fires at the beginning of the Component Build
process in any of the Update action modes (Update, Update/Display process in any of the Update action modes (Update, Update/Display
All, Correction). All, Correction).
26 26
PeopleCode Events PeopleCode Events
RowSelect RowSelect
Where is it used? Where is it used?
RowSelect PeopleCode is used to filter out rows of data RowSelect PeopleCode is used to filter out rows of data
as they are being read into the component buffer. as they are being read into the component buffer.
27 27
PeopleCode Events PeopleCode Events
RowSelect RowSelect
What is it used for? What is it used for?
A A iscardRow iscardRow function in RowSelect PeopleCode causes the function in RowSelect PeopleCode causes the
Component Processor to skip the current row of data and continue Component Processor to skip the current row of data and continue
to process other rows. to process other rows.
A A &topFetching &topFetching statement causes the Component Processor to statement causes the Component Processor to
accept the current row of data, then stop reading additional rows. !f accept the current row of data, then stop reading additional rows. !f
both statements are executed, the program skips the current row of both statements are executed, the program skips the current row of
data, then stops reading additional rows. data, then stops reading additional rows.
28 28
PeopleCode Events PeopleCode Events
RowSelect RowSelect
Restrictions Restrictions
!n RowSelect PeopleCode, you can refer to record fields !n RowSelect PeopleCode, you can refer to record fields
only on the record that is currently being processed only on the record that is currently being processed
This event, and all it's associated PeopleCode, will not This event, and all it's associated PeopleCode, will not
fire if run from a Component !nterface. fire if run from a Component !nterface.
29 29
PeopleCode Events PeopleCode Events
RowSelect RowSelect
Row Select Processing Row Select Processing
Row Select processing enables PeopleCode to filter out rows of data Row Select processing enables PeopleCode to filter out rows of data
after they have been retrieved from the database server using a after they have been retrieved from the database server using a
SOL Select statement and before they are copied to the component SOL Select statement and before they are copied to the component
buffers. buffers.
Row Select processing is a subprocess of component build Row Select processing is a subprocess of component build
processing in add modes. !t also occurs after a ScrollSelect or processing in add modes. !t also occurs after a ScrollSelect or
related function is executed. related function is executed.
30 30
RowSelect Event RowSelect Event
31 31
RowSelect Event RowSelect Event
e are selecting the record whose
employee number = 10020
32 32
RowSelect Event RowSelect Event
Record has been displayed
33 33
RowSelect Event RowSelect Event
This code discard the rows whose department ! = EPT1004
and the rows are not placed in the buffer
34 34
RowSelect Event RowSelect Event
Trying to discard the row whose
department !d is EPT1004 .
Here the Employee Number 10020 is
associated with EPT1004.
35 35
RowSelect Event RowSelect Event
&ince the row is not placed in the buffer
the details regarding the employee ! = 10020 are not displayed
36 36
MENU
SearchInit
SearchSave
RowSeIect
PreBuiId
FieIdDefauIt
FieIdFormuIa
RowInit
PostBuiId
Activate
Other Actions
FieIdEdit
FieIdChange
Popup Menu
NO
PrePopup
ItemSeIected
YES
RowInsert RowDeIete
SaveEdit
SavePrechange
WorkFIow
SavePostChange
Page DispIayed and
Waits for User
Action
RowActions?
Insert
DeIete
Save Action
PeopleCode Event PeopleCode Event ·· PreBuild Event PreBuild Event
37 37
PeopleCode Event PeopleCode Event
PreBuild Event PreBuild Event
This event is often used to hide or unhide pages. !t's This event is often used to hide or unhide pages. !t's
also used to set component variables also used to set component variables
38 38
PeopleCode Event PeopleCode Event
PreBuild Event PreBuild Event
When is it fired? When is it fired?
The PreBuild event fires before the rest of the The PreBuild event fires before the rest of the
component build events component build events
39 39
PeopleCode Event PeopleCode Event
PreBuild Event PreBuild Event
Where is it used? Where is it used?
PreBuild PeopleCode is only associated with PreBuild PeopleCode is only associated with
components. components.
40 40
PeopleCode Event PeopleCode Event
PreBuild Event PreBuild Event
What is it used for? What is it used for?
The PreBuild event is also used to validate The PreBuild event is also used to validate
data entered in the search dialog, after a data entered in the search dialog, after a
prompt list is displayed prompt list is displayed
!t is used to hide or unhide pages. !t is used to hide or unhide pages.
41 41
PreBuild Event PreBuild Event
Note that the eptPage tab is visible
which allow the user to navigate to that page
42 42
PreBuild Event PreBuild Event
This code hides the department page to the user = vP1
43 43
PreBuild Event PreBuild Event
&electing a record to view the data
44 44
PreBuild Event PreBuild Event
The eptPage Tab is not visible.
The eptpage cannot be viewed by the
user whose userid= vP1
45 45
MENU
SearchInit
SearchSave
RowSeIect
PreBuiId
FieIdDefauIt
FieIdFormuIa
RowInit
PostBuiId
Activate
Other Actions
FieIdEdit
FieIdChange
Popup Menu
NO
PrePopup
ItemSeIected
YES
RowInsert RowDeIete
SaveEdit
SavePrechange
WorkFIow
SavePostChange
Page DispIayed and
Waits for User
Action
RowActions?
Insert
DeIete
Save Action
PeopleCode Event PeopleCode Event ·· FieldDefault Event FieldDefault Event
46 46
PeopleCode Events PeopleCode Events
FieldDefault Event FieldDefault Event
The FieldDefault PeopleCode event enables you to The FieldDefault PeopleCode event enables you to
programmatically set default values to the fields when programmatically set default values to the fields when
they are initially displayed. they are initially displayed.
FieldDefault PeopleCode normally sets fields to FieldDefault PeopleCode normally sets fields to
default when new data is being added to the default when new data is being added to the
component, that is, in Add mode and when a new row component, that is, in Add mode and when a new row
is inserted into a scroll. is inserted into a scroll.
47 47
PeopleCode Events PeopleCode Events
FieldDefault FieldDefault
When is it fired? When is it fired?
This event is fired on all page fields as part of many different This event is fired on all page fields as part of many different
processes, however it triggers PeopleCode programs only when processes, however it triggers PeopleCode programs only when
the following conditions are all true: the following conditions are all true:
1. The page field is still blank after applying any default 1. The page field is still blank after applying any default
specified in the record field properties. (This will be true if there is specified in the record field properties. (This will be true if there is
no default specified, if a null value is specified, or if a 0 is no default specified, if a null value is specified, or if a 0 is
specified for a numeric field.) specified for a numeric field.)
2. The field has a FieldDefault PeopleCode program. 2. The field has a FieldDefault PeopleCode program.
48 48
PeopleCode Events PeopleCode Events
FieldDefault FieldDefault
Where is it used? Where is it used?
FieldDefault PeopleCode normally sets fields by default when new FieldDefault PeopleCode normally sets fields by default when new
data is being added to the component, that is, in Add mode and data is being added to the component, that is, in Add mode and
when a new row is inserted into a scroll. when a new row is inserted into a scroll.
49 49
PeopleCode Events PeopleCode Events
FieldDefault FieldDefault
What is it used for? What is it used for?
!f a field value is changed, whether through PeopleCode or by an !f a field value is changed, whether through PeopleCode or by an
end end··user, the user, the !sChanged !sChanged property for the row is set to True. The property for the row is set to True. The
exception to this is when a change is done in the FieldDefault or exception to this is when a change is done in the FieldDefault or
FieldFormula events, that is, if a value is set in FieldDefault or FieldFormula events, that is, if a value is set in FieldDefault or
FieldFormula, the row is not marked as changed FieldFormula, the row is not marked as changed
50 50
PeopleCode Events PeopleCode Events
Advantages of field default: Advantages of field default:
Data Entry becomes easy. Data Entry becomes easy.
Contains meaningful values in the field rather than just Contains meaningful values in the field rather than just
leaving the field blank leaving the field blank. .
51 51
PeopleCode Events PeopleCode Events
FieldDefault FieldDefault
Restrictions Restrictions
An Error or Warning issued from FieldDefault An Error or Warning issued from FieldDefault
PeopleCode will cause a runtime PeopleCode will cause a runtime error and force cancellation error and force cancellation
of the component. of the component.
52 52
FieldDefault Event FieldDefault Event
This code sets the default value of
employee salary field to 2S000
53 53
FieldDefault Event FieldDefault Event
The default value of
employee salary is
set to 2S000
54 54
MENU
SearchInit
SearchSave
RowSeIect
PreBuiId
FieIdDefauIt
FieIdFormuIa
RowInit
PostBuiId
Activate
Other Actions
FieIdEdit
FieIdChange
Popup Menu
NO
PrePopup
ItemSeIected
YES
RowInsert RowDeIete
SaveEdit
SavePrechange
WorkFIow
SavePostChange
Page DispIayed and
Waits for User
Action
RowActions?
Insert
DeIete
Save Action
PeopleCode Event PeopleCode Event ·· FieldFormula Event FieldFormula Event
55 55
PeopleCode PeopleCode Events Events
FieldFormula Event FieldFormula Event
The FieldFormula event is a vestige of much earlier The FieldFormula event is a vestige of much earlier
versions of PeopleTools, and is not used in recent versions of PeopleTools, and is not used in recent
applications, the Row!nit and FieldChange events are applications, the Row!nit and FieldChange events are
used rather than FieldFormula. used rather than FieldFormula.
FieldFormula is generally used for any type of FieldFormula is generally used for any type of
Calculations Calculations. .
56 56
PeopleCode Events PeopleCode Events
FieldFormula FieldFormula
When is it fired? When is it fired?
FieldFormula PeopleCode fires in many different FieldFormula PeopleCode fires in many different
contexts and triggers PeopleCode on every field on contexts and triggers PeopleCode on every field on
every row in the component buffer, it can seriously every row in the component buffer, it can seriously
degrade the performance of your application. degrade the performance of your application.
57 57
PeopleCode Events PeopleCode Events
FieldFormula FieldFormula
Where is it used? Where is it used?
As a matter of convention, FieldFormula is now often As a matter of convention, FieldFormula is now often
used in FUNCL!B_ (function library) record definitions to used in FUNCL!B_ (function library) record definitions to
store shared functions. store shared functions.
58 58
PeopleCode Events PeopleCode Events
FieldFormula FieldFormula
What is it use for? What is it use for?
FieldFormula is used for basic calculations. FieldFormula is used for basic calculations.
59 59
PeopleCode Events PeopleCode Events
FieldFormula FieldFormula
Restrictions Restrictions
Do not use FieldFormula PeopleCode in your Do not use FieldFormula PeopleCode in your
components. components.
Use it only to store external PeopleCode functions in FUNL!B_ Use it only to store external PeopleCode functions in FUNL!B_
record definitions. record definitions.
60 60
FieldFormula Event FieldFormula Event
!nitializing the default value to
2S000 in Fieldefault event
hen user enters a value
less than 2S000 it displays an
error message
61 61
FieldFormula Event FieldFormula Event
efault value is 2S000
62 62
FieldFormula Event FieldFormula Event
hen user tries to enter
employee salary
less than 2S000,
An error message is displayed.
63 63
MENU
SearchInit
SearchSave
RowSeIect
PreBuiId
FieIdDefauIt
FieIdFormuIa
RowInit
PostBuiId
Activate
Other Actions
FieIdEdit
FieIdChange
Popup Menu
NO
PrePopup
ItemSeIected
YES
RowInsert RowDeIete
SaveEdit
SavePrechange
WorkFIow
SavePostChange
Page DispIayed and
Waits for User
Action
RowActions?
Insert
DeIete
Save Action
PeopleCode Event PeopleCode Event ·· Row!nit Event Row!nit Event
64 64
PeopleCode Events PeopleCode Events
Row!nit Row!nit
When it is fired? When it is fired?
The Row!nit event fires the first time the component The Row!nit event fires the first time the component
Processor encounters a row of data. Processor encounters a row of data.
65 65
PeopleCode Events PeopleCode Events
Row!nit Row!nit
Where is it used? Where is it used?
!t is used for setting the initial state of Component Controls. !t is used for setting the initial state of Component Controls.
Row!nit is not field Row!nit is not field··specific, it triggers on all fields and on all rows in specific, it triggers on all fields and on all rows in
the component buffer. the component buffer.
This occurs during component build processing and row insert This occurs during component build processing and row insert
processing. processing.
!t also occurs after a !t also occurs after a &elect &elect or or &electAll &electAll Rowset method, or a Rowset method, or a
&croll&elect &croll&elect or related function is executed. or related function is executed.
66 66
PeopleCode Events PeopleCode Events
Row!nit Row!nit
What is it used for ? What is it used for ?
The Row!nit is used for setting the initial state of component The Row!nit is used for setting the initial state of component
controls. controls.
The purpose of Row!nit PeopleCode is to complete initialization The purpose of Row!nit PeopleCode is to complete initialization
of data on the row after it has been read from the database. of data on the row after it has been read from the database.
Row!nit not getting triggered isn't considered to be an error Row!nit not getting triggered isn't considered to be an error
67 67
PeopleCode Events PeopleCode Events
Row!nit Row!nit
Restrictions Restrictions
Do not use ¨ERROR" or ¨WARN!NC" statement in Row!nit Do not use ¨ERROR" or ¨WARN!NC" statement in Row!nit
PeopleCode, this causes a runtime error and forces the end PeopleCode, this causes a runtime error and forces the end··user user
to cancel the component. to cancel the component.
Code in FieldChange event would not be executed if Code in FieldChange event would not be executed if
The Record is at level 0. The Record is at level 0.
Every record field that is present in the data buffer is also Every record field that is present in the data buffer is also
present in the keys for the component. present in the keys for the component.
Every record field that is present in the data buffers is Every record field that is present in the data buffers is
display only. display only.
Row!nit is often paired with FieldChange PeopleCode . Row!nit is often paired with FieldChange PeopleCode .
The component processor runs Row!nit PeopleCode when it The component processor runs Row!nit PeopleCode when it
loads record from the database. However, in some cases, the loads record from the database. However, in some cases, the
record can be initialized entirely from the keys for the record can be initialized entirely from the keys for the
component. when this happens, Row!nit PeopleCode isn't component. when this happens, Row!nit PeopleCode isn't
executed. executed.
68 68
PeopleCode Events PeopleCode Events
Row!nit Row!nit
Example Example
Suppose you have a field called PRODUCT. Suppose you have a field called PRODUCT.
The value of PRODUCT is field A * field B. The value of PRODUCT is field A * field B.
When component is initialized or new row is inserted, we use When component is initialized or new row is inserted, we use
Row!nit PeopleCode to initialize PRODUCT equal to A*B . Row!nit PeopleCode to initialize PRODUCT equal to A*B .
We could then attach FieldChange PeopleCode programs to both We could then attach FieldChange PeopleCode programs to both
A and B which also set PRODUCT equal to A*B. A and B which also set PRODUCT equal to A*B.
Whenever end user changes the value of either A or B,PRODUCT Whenever end user changes the value of either A or B,PRODUCT
would be recalculated would be recalculated
69 69
Row!nit Event Row!nit Event
This code is used to generate employee number automatically
once the add button is clicked
70 70
Row!nit Event Row!nit Event
The user need not enter the Employee number.
!t is automatically generated and has been made
¨display only" , the user cannot change the value.
71 71
MENU
SearchInit
SearchSave
RowSeIect
PreBuiId
FieIdDefauIt
FieIdFormuIa
RowInit
PostBuiId
Activate
Other Actions
FieIdEdit
FieIdChange
Popup Menu
NO
PrePopup
ItemSeIected
YES
RowInsert RowDeIete
SaveEdit
SavePrechange
WorkFIow
SavePostChange
Page DispIayed and
Waits for User
Action
RowActions?
Insert
DeIete
Save Action
PeopleCode Event PeopleCode Event -- PostBuild Event PostBuild Event
72 72
PeopleCode Events PeopleCode Events
PostBuild Event PostBuild Event
The PostBuild event fires only after all the other The PostBuild event fires only after all the other
component build events have been fired component build events have been fired
This event is often used to hide or unhide pages. This event is often used to hide or unhide pages.
!t's also used to set component variables !t's also used to set component variables. .
73 73
PeopleCode Events PeopleCode Events
PostBuild PostBuild
When is it fired? When is it fired?
The PostBuild event fires after all the other component The PostBuild event fires after all the other component
build events have fired. build events have fired.
74 74
PeopleCode Events PeopleCode Events
PostBuild PostBuild
Where is it used? Where is it used?
This event is often used to hide or unhide pages. This event is often used to hide or unhide pages.
75 75
PeopleCode Events PeopleCode Events
PostBuild PostBuild
What is it used for? What is it used for?
!t's also used to set component variables. !t's also used to set component variables.
PostBuild PeopleCode is only associated with components. PostBuild PeopleCode is only associated with components.
76 76
PostBuild Event PostBuild Event
This code is for collecting the information of a record - who created
the record and when ?
77 77
PostBuild Event PostBuild Event
Now we are adding a record
&aving it. After saving the record
the required details are captured.
78 78
PostBuild Event PostBuild Event
These are the details regarding the record
79 79
MENU
SearchInit
SearchSave
RowSeIect
PreBuiId
FieIdDefauIt
FieIdFormuIa
RowInit
PostBuiId
Activate
Other Actions
FieIdEdit
FieIdChange
Popup Menu
NO
PrePopup
ItemSeIected
YES
RowInsert RowDeIete
SaveEdit
SavePrechange
WorkFIow
SavePostChange
Page DispIayed and
Waits for User
Action
RowActions?
Insert
DeIete
Save Action
PeopleCode Event PeopleCode Event -- Activate Event Activate Event
80 80
PeopleCode Event PeopleCode Event
Activate Event Activate Event
Activate event is to segregate the PeopleCode that is Activate event is to segregate the PeopleCode that is
related to a specific page from the rest of the related to a specific page from the rest of the
application's PeopleCode. application's PeopleCode.
Each page has its own Activate event Each page has its own Activate event. .
81 81
PeopleCode Event PeopleCode Event
Activate Event Activate Event
When it is fired? When it is fired?
The Activate event is fired each time the page gets The Activate event is fired each time the page gets
activated. activated.
82 82
PeopleCode Event PeopleCode Event
Activate Event Activate Event
Where is it used? Where is it used?
Activate PeopleCode can only be associated with Activate PeopleCode can only be associated with
pages. pages.
The Activate event triggers any Activate PeopleCode The Activate event triggers any Activate PeopleCode
associated with the page processing. associated with the page processing.
83 83
PeopleCode Event PeopleCode Event
Activate Event Activate Event
What is it used for? What is it used for?
The event used for security validation: such as, The event used for security validation: such as,
enabling a field or hiding a scroll , enabling user to enabling a field or hiding a scroll , enabling user to
programmatically control the display of that page programmatically control the display of that page
controls. controls.
This event is used for component Build Processing This event is used for component Build Processing - -
Add Node and Update Node Add Node and Update Node
84 84
PeopleCode Event PeopleCode Event
Activate Event Activate Event
Restriction Restriction
This event is valid only for pages that are defined as This event is valid only for pages that are defined as
¨Standard" or ¨Secondary". This event is not ¨Standard" or ¨Secondary". This event is not
supported for ¨Subpages" supported for ¨Subpages"
85 85
Activate Event Activate Event
The user is allowed to see the epartment page as isplay Only
86 86
Activate Event Activate Event
The fields are display only
87 87
MENU
SearchInit
SearchSave
RowSeIect
PreBuiId
FieIdDefauIt
FieIdFormuIa
RowInit
PostBuiId
Activate
Other Actions
FieIdEdit
FieIdChange
Popup Menu
NO
PrePopup
ItemSeIected
YES
RowInsert RowDeIete
SaveEdit
SavePrechange
WorkFIow
SavePostChange
Page DispIayed and
Waits for User
Action
RowActions?
Insert
DeIete
Save Action
PeopleCode Event PeopleCode Event -- FieldEdit Event FieldEdit Event
88 88
PeopleCode Events PeopleCode Events
FieldEdit FieldEdit
When is it fired? When is it fired?
The FieldEdit event fires on the specific field and row The FieldEdit event fires on the specific field and row
that has just changed. that has just changed.
89 89
PeopleCode Events PeopleCode Events
FieldEdit FieldEdit
Where it is used? Where it is used?
FieldEdit PeopleCode can be associated with record fields FieldEdit PeopleCode can be associated with record fields
and component record fields and component record fields..
FieldEdit PeopleCode is used to validate the contents of FieldEdit PeopleCode is used to validate the contents of
a field, supplementing the standard system edits a field, supplementing the standard system edits. .
90 90
PeopleCode Events PeopleCode Events
FieldEdit FieldEdit
What is it used for? What is it used for?
!f the data does not pass the validation, the PeopleCode !f the data does not pass the validation, the PeopleCode
program should display a message using the program should display a message using the Error Error
statement, which redisplays the page, displaying an statement, which redisplays the page, displaying an
error message and turning the field red. error message and turning the field red.
!f you want to execute the field edit, but just want to !f you want to execute the field edit, but just want to
alert the end alert the end··user to possible problem, use a user to possible problem, use a warning warning
statement instead of statement instead of ERROR ERROR..
91 91
PeopleCode Events PeopleCode Events
FieldEdit FieldEdit
Restrictions Restrictions
!f the validation must check the contents of more than !f the validation must check the contents of more than
one field, that is, if the validation is checking for one field, that is, if the validation is checking for
consistency across page fields, then SaveEdit consistency across page fields, then SaveEdit
PeopleCode can be used instead of FieldEdit. PeopleCode can be used instead of FieldEdit.
92 92
FieldEdit Event FieldEdit Event
This code is to check whether the
Employee name is a valid one or not .
The name should not contain
numbers or any special characters
Other than white space.
93 93
FieldEdit Event FieldEdit Event
ser is entering some special
character
in the Employee name field
hen the user tries to select the epartment !, a win message
will be displayed.
94 94
FieldEdit Event FieldEdit Event
essage Box has been displayed
!f the user clicks the ¨ok" button, the Emppage will be
displayed, allowing the user to edit the name field.
95 95
FieldEdit Event FieldEdit Event
This is people&oft
generated warning ,
explaining that name field
is not valid. ]ust click ok
button to edit the name
field.
96 96
FieldEdit Event FieldEdit Event
Here the user is
allowed to edit the
name field.
97 97
FieldEdit Event FieldEdit Event
Now the user is allowed to select the epartment !d.
98 98
MENU
SearchInit
SearchSave
RowSeIect
PreBuiId
FieIdDefauIt
FieIdFormuIa
RowInit
PostBuiId
Activate
Other Actions
FieIdEdit
FieIdChange
Popup Menu
NO
PrePopup
ItemSeIected
YES
RowInsert RowDeIete
SaveEdit
SavePrechange
WorkFIow
SavePostChange
Page DispIayed and
Waits for User
Action
RowActions?
Insert
DeIete
Save Action
PeopleCode Event PeopleCode Event -- FieldChange Event FieldChange Event
99 99
PeopleCode Events PeopleCode Events
FieldChange FieldChange
When is it fired? When is it fired?
FieldChange PeopleCode can be associated with record FieldChange PeopleCode can be associated with record
fields and component record fields fields and component record fields
The FieldChange event fires on the specific field and The FieldChange event fires on the specific field and
row that has just changed row that has just changed
100 100
PeopleCode Events PeopleCode Events
FieldChange FieldChange
Where is it used? Where is it used?
FieldChange PeopleCode is used to FieldChange PeopleCode is used to
Recalculate field values. Recalculate field values.
To change the appearance of page controls. To change the appearance of page controls.
To Process the result from FieldChange other To Process the result from FieldChange other
than the data validations. than the data validations.
101 101
PeopleCode Events PeopleCode Events
FieldChange FieldChange
What is it used for? What is it used for?
FieldChange PeopleCode is often paired with Row!nit FieldChange PeopleCode is often paired with Row!nit
PeopleCode. PeopleCode.
!n Row!nit / FieldChange, the Row!nit PeopleCode !n Row!nit / FieldChange, the Row!nit PeopleCode
check the values in the component and initializes the check the values in the component and initializes the
state or value of page controls accordingly. state or value of page controls accordingly.
FieldChange PeopleCode then rechecks the values in FieldChange PeopleCode then rechecks the values in
the component during execution and resets the state the component during execution and resets the state
or value of the page controls0 or value of the page controls0. .
102 102
PeopleCode Events PeopleCode Events
FieldChange FieldChange
Restrictions Restrictions
!t is not recommended to have !t is not recommended to have Error Error or or arning arning
statement in FieldChange PeopleCode. !t is suggested statement in FieldChange PeopleCode. !t is suggested
that all data validation should be performed in FieldEdit that all data validation should be performed in FieldEdit
103 103
PeopleCode Events PeopleCode Events
FieldChange event FieldChange event
Example Example
Suppose you have a field called PRODUCT. Suppose you have a field called PRODUCT.
The value of PRODUCT is field A * field B. The value of PRODUCT is field A * field B.
When component is initialized or new row is inserted, When component is initialized or new row is inserted,
user uses the Row!nit PeopleCode to initialize user uses the Row!nit PeopleCode to initialize
PRODUCT equal to A*B . PRODUCT equal to A*B .
User could then attach FieldChange PeopleCode User could then attach FieldChange PeopleCode
programs to both A and B which also set PRODUCT programs to both A and B which also set PRODUCT
equal to A*B. equal to A*B.
When ever user changes the value of either A or B, When ever user changes the value of either A or B,
PRODUCT would be recalculated. PRODUCT would be recalculated.
104 104
FieldChange Event FieldChange Event
This code automatically places the Employee name
once Employee number is selected.
105 105
FieldChange Event FieldChange Event
&elect the employee number
106 106
FieldChange Event FieldChange Event
Employee name will be displayed automatically
once the Employee number is selected.
107 107
MENU
SearchInit
SearchSave
RowSeIect
PreBuiId
FieIdDefauIt
FieIdFormuIa
RowInit
PostBuiId
Activate
Other Actions
FieIdEdit
FieIdChange
Popup Menu
NO
PrePopup
ItemSeIected
YES
RowInsert RowDeIete
SaveEdit
SavePrechange
WorkFIow
SavePostChange
Page DispIayed and
Waits for User
Action
RowActions?
Insert
DeIete
Save Action
PeopleCode Event PeopleCode Event -- PrePopup Event PrePopup Event
108 108
PeopleCode Event PeopleCode Event
PrePopup Event PrePopup Event
The PrePopup PeopleCode event enables you The PrePopup PeopleCode event enables you
to disable, check, or hide menu items in the to disable, check, or hide menu items in the
pop pop··up. up.
109 109
PeopleCode Event PeopleCode Event
PrePopup Event PrePopup Event
When is it fired? When is it fired?
The PrePopup event fires just before the display of a The PrePopup event fires just before the display of a
pop pop··up menu. up menu.
110 110
PeopleCode Event PeopleCode Event
PrePopup Event PrePopup Event
Where is it used? Where is it used?
PrePopup PeopleCode can be associated with record PrePopup PeopleCode can be associated with record
fields and component record fields . fields and component record fields .
PrePopup PeopleCode menu item operations (such as PrePopup PeopleCode menu item operations (such as
HideNenu!tem, EnableNenu!tem, and so on) work HideNenu!tem, EnableNenu!tem, and so on) work
with pop with pop··up menus attached to a grid, not a field in a up menus attached to a grid, not a field in a
grid grid
111 111
PeopleCode Event PeopleCode Event
PrePopup Event PrePopup Event
What is it used for? What is it used for?
The PrePopup PeopleCode is used to control the The PrePopup PeopleCode is used to control the
appearance of the Pop appearance of the Pop··up menu items. up menu items.
112 112
PeopleCode Event PeopleCode Event
PrePopup Event PrePopup Event
PrePopup Processing PrePopup Processing
113 113
PrePopup Event PrePopup Event
Three Nenu !tem Displayed before
the Event triggers.
114 114
PrePopup Event PrePopup Event
This code is used to hide the menu item
¨SAL" at the Run·Time.
115 115
PrePopup Event PrePopup Event
Pop·Up Nenu !con
116 116
PrePopup Event PrePopup Event
Selected Nenu·!tem is hidden
117 117
MENU
SearchInit
SearchSave
RowSeIect
PreBuiId
FieIdDefauIt
FieIdFormuIa
RowInit
PostBuiId
Activate
Other Actions
FieIdEdit
FieIdChange
Popup Menu
NO
PrePopup
ItemSeIected
YES
RowInsert RowDeIete
SaveEdit
SavePrechange
WorkFIow
SavePostChange
Page DispIayed and
Waits for User
Action
RowActions?
Insert
DeIete
Save Action
PeopleCode Event PeopleCode Event -- !temSelected Event !temSelected Event
118 118
PeopleCode Events PeopleCode Events
!temSelect Event !temSelect Event
The !temSelected event fires whenever the The !temSelected event fires whenever the
end end··user selects a menu item from a pop user selects a menu item from a pop··up up
menu. menu.
!n pop !n pop··up menus !temSelected PeopleCode up menus !temSelected PeopleCode
executes in the context of the page field from executes in the context of the page field from
where the pop where the pop··up menu is attached, which up menu is attached, which
means that you can freely reference and change means that you can freely reference and change
page fields, just as you could from a pushbutton. page fields, just as you could from a pushbutton.
119 119
PeopleCode PeopleCode Events Events
!temSelect !temSelect
When is it fired? When is it fired?
The !temSelected event fires whenever the end The !temSelected event fires whenever the end··user user
selects a menu item from a pop selects a menu item from a pop··up menu. up menu.
120 120
PeopleCode Events PeopleCode Events
!temSelect !temSelect
Where is it used? Where is it used?
!n pop !n pop··up menus !temSelected PeopleCode executes in up menus !temSelected PeopleCode executes in
the context of the page field from where the pop the context of the page field from where the pop··up up
menu is attached, which means that you can freely menu is attached, which means that you can freely
reference and change page fields, just as you could from reference and change page fields, just as you could from
a pushbutton. a pushbutton.
121 121
PeopleCode Events PeopleCode Events
!temSelect !temSelect
What is it used for? What is it used for?
!temSelected PeopleCode is only associated with pop !temSelected PeopleCode is only associated with pop··up up
menu items. menu items.
122 122
PeopleCode Events PeopleCode Events
!temSelect !temSelect
Restrictions Restrictions
This event, and all it's associated PeopleCode, does not This event, and all it's associated PeopleCode, does not
fire if run from a Component !nterface. fire if run from a Component !nterface.
123 123
!temSelected Processing !temSelected Processing
!temSelected processing occurs when a end !temSelected processing occurs when a end··user selects a menu item user selects a menu item
from a pop from a pop··up menu. This fires the !temSelected PeopleCode event, up menu. This fires the !temSelected PeopleCode event,
which is a menu PeopleCode event. which is a menu PeopleCode event.
124 124
!temSelect Event !temSelect Event
This code is used to transfer to a new page
by selecting the Nenu !tem.
125 125
!temSelect Event !temSelect Event
Popup Nenu !con.
126 126
!temSelect Event !temSelect Event
Nenu !tems
127 127
!temSelect Event !temSelect Event
Transferred to Emppage from Empsal
128 128
MENU
SearchInit
SearchSave
RowSeIect
PreBuiId
FieIdDefauIt
FieIdFormuIa
RowInit
PostBuiId
Activate
Other Actions
FieIdEdit
FieIdChange
Popup Menu
NO
PrePopup
ItemSeIected
YES
RowInsert RowDeIete
SaveEdit
SavePrechange
WorkFIow
SavePostChange
Page DispIayed and
Waits for User
Action
Row Actions?
Insert DeIete
Save Action
PeopleCode Event PeopleCode Event -- Row!nsert Event Row!nsert Event
129 129
PeopleCode Events PeopleCode Events
Row!nsert Row!nsert
When is it fired? When is it fired?
The Row!nsert triggers PeopleCode on any field on the The Row!nsert triggers PeopleCode on any field on the
inserted row of data. inserted row of data.
130 130
PeopleCode Events PeopleCode Events
Row!nsert Row!nsert
Where is it used? Where is it used?
Row!nsert PeopleCode can be associated with record Row!nsert PeopleCode can be associated with record
fields and component records. fields and component records.
Row!nsert PeopleCode is used for processing newly Row!nsert PeopleCode is used for processing newly
inserted rows. inserted rows.
131 131
PeopleCode Events PeopleCode Events
Row!nsert Row!nsert
What is it used for? What is it used for?
By selecting the ¨No Row !nsert" check box in the By selecting the ¨No Row !nsert" check box in the
scroll bar's ¨page field properties", the user is scroll bar's ¨page field properties", the user is
prevented from inserting rows into a scroll area. prevented from inserting rows into a scroll area.
However user cannot be prevented conditionally from However user cannot be prevented conditionally from
inserting new rows. inserting new rows.
132 132
PeopleCode Events PeopleCode Events
Row!nsert Row!nsert
Restrictions Restrictions
Do not put PeopleCode in Row!nsert that already exists Do not put PeopleCode in Row!nsert that already exists
in Row!nit, because Row!nit event always fires after the in Row!nit, because Row!nit event always fires after the
Row!nsert event, which will cause your code to be run Row!nsert event, which will cause your code to be run
twice. twice.
Do not use a warning or Error in Row!nsert, this will Do not use a warning or Error in Row!nsert, this will
cause a runtime error and force cancellation of the cause a runtime error and force cancellation of the
component. component.
133 133
Row!nsert Event Row!nsert Event
This code auto generates
the serial number when a
New record is added.
134 134
Row!nsert Event Row!nsert Event
The function defined in the previous slide is
called here as a function call.
135 135
Row!nsert Event Row!nsert Event
The serial number is generated
136 136
MENU
SearchInit
SearchSave
RowSeIect
PreBuiId
FieIdDefauIt
FieIdFormuIa
RowInit
PostBuiId
Activate
Other Actions
FieIdEdit
FieIdChange
Popup Menu
NO
PrePopup
ItemSeIected
YES
RowInsert RowDeIete
SaveEdit
SavePrechange
WorkFIow
SavePostChange
Page DispIayed and
Waits for User
Action
Row Actions?
Insert
DeIete
Save Action
PeopleCode Event PeopleCode Event -- RowDelete Event RowDelete Event
137 137
PeopleCode Event PeopleCode Event
RowDelete Event RowDelete Event
The RowDelete event fires whenever an end The RowDelete event fires whenever an end··user user
attempts to delete a row of data from a page scroll attempts to delete a row of data from a page scroll
The RowDelete event triggers PeopleCode on any The RowDelete event triggers PeopleCode on any
field on the row of data that is being flagged as field on the row of data that is being flagged as
deleted deleted
138 138
PeopleCode Event PeopleCode Event
RowDelete Event RowDelete Event
When is it fired? When is it fired?
Row Delete processing occurs when: Row Delete processing occurs when:
The end The end··user requests a row delete in a scroll by user requests a row delete in a scroll by
pressing ALT+F 8 then pressing ENTER, clicking pressing ALT+F 8 then pressing ENTER, clicking
the Delete Row button, or clicking the Delete the Delete Row button, or clicking the Delete
button. button.
A PeopleCode A PeopleCode Rowelete Rowelete function or a function or a
eleteRow eleteRow method requests a row delete. method requests a row delete.
139 139
PeopleCode Event PeopleCode Event
RowDelete Event RowDelete Event
Where is it used? Where is it used?
RowDelete PeopleCode is used to prevent the deletion RowDelete PeopleCode is used to prevent the deletion
of a row (using an of a row (using an Error Error or or arning arning statement) or statement) or
to perform any other processing contingent on row to perform any other processing contingent on row
deletion. deletion.
140 140
PeopleCode Event PeopleCode Event
RowDelete Event RowDelete Event
What is it used for? What is it used for?
When the RowDelete Event get triggered, the When the RowDelete Event get triggered, the
PeopleCode in the event is get executed PeopleCode in the event is get executed
RowDelete PeopleCode enables you to check for RowDelete PeopleCode enables you to check for
conditions and control whether the end conditions and control whether the end··user can user can
delete the row delete the row
141 141
PeopleCode Event PeopleCode Event
Restrictions: Restrictions:
RowDelete does not trigger programs on Derived/Work RowDelete does not trigger programs on Derived/Work
records records
142 142
PeopleCode Event PeopleCode Event
RowDelete Event Processing RowDelete Event Processing
The Component Processor: The Component Processor:
Fires the RowDelete PeopleCode event, which triggers RowDelete Fires the RowDelete PeopleCode event, which triggers RowDelete
PeopleCode associated with the record field or the component PeopleCode associated with the record field or the component
record. This event processes fields on the deleted row and any record. This event processes fields on the deleted row and any
dependent child scrolls. dependent child scrolls.
An An Error Error statement displays a message and prevents the statement displays a message and prevents the
end end··user from deleting the row. user from deleting the row.
A A arning arning statement displays a message alerting the statement displays a message alerting the
end end··user about possible consequences of the deletion, but user about possible consequences of the deletion, but
permits deletion of the row. permits deletion of the row.
143 143
PeopleCode Event PeopleCode Event
RowDelete Event RowDelete Event
Logic of row delete processing Logic of row delete processing
144 144
PeopleCode Event PeopleCode Event
RowDelete Event RowDelete Event
Errors and Warnings in RowDelete Errors and Warnings in RowDelete
When you delete a row of data (F 8), the system When you delete a row of data (F 8), the system
prompts you to confirm. !f you do confirm, RowDelete prompts you to confirm. !f you do confirm, RowDelete
PeopleCode takes place, Errors and warnings in PeopleCode takes place, Errors and warnings in
RowDelete display a message box. RowDelete display a message box.
A warning from RowDelete presents two choices A warning from RowDelete presents two choices--
accept the RowDelete (the OK pushbutton), or cancel accept the RowDelete (the OK pushbutton), or cancel
the RowDelete (the Cancel pushbutton). the RowDelete (the Cancel pushbutton).
An error from RowDelete PeopleCode prevents the An error from RowDelete PeopleCode prevents the
Component Processor from removing that row of data Component Processor from removing that row of data
from the page. from the page.
145 145
RowDelete Event RowDelete Event
The record with employee number 100S0 has been stored with the
&erial number 2
146 146
RowDelete Event RowDelete Event
when a record is deleted ,this code automatically
re·numbers the serial number of a remaining
Records in sequence.
147 147
RowDelete Event RowDelete Event
148 148
RowDelete Event RowDelete Event
The delete action will occur when the transaction get saved
149 149
RowDelete Event RowDelete Event
Now the records are renumbered in a sequence
150 150
MENU
SearchInit
SearchSave
RowSeIect
PreBuiId
FieIdDefauIt
FieIdFormuIa
RowInit
PostBuiId
Activate
Other Actions
FieIdEdit
FieIdChange
Popup Menu
NO
PrePopup
ItemSeIected
YES
RowInsert RowDeIete
SaveEdit
SavePrechange
WorkFIow
SavePostChange
Page DispIayed and
Waits for User
Action
RowActions?
Insert
DeIete
Save Action
PeopleCode Event PeopleCode Event -- SaveEdit Event SaveEdit Event
151 151
PeopleCode Event PeopleCode Event
SaveEdit Event SaveEdit Event
The SaveEdit event fires whenever the end The SaveEdit event fires whenever the end··user user
attempts to save the component. attempts to save the component.
SaveEdit is not field SaveEdit is not field··specific: it triggers associated specific: it triggers associated
PeopleCode on every row of data in the component PeopleCode on every row of data in the component
buffers, except rows flagged as deleted. buffers, except rows flagged as deleted.
152 152
PeopleCode Event PeopleCode Event
SaveEdit Event SaveEdit Event
When is it fired? When is it fired?
SaveEdit Event gets Fired when SaveEdit Event gets Fired when
The user directs the system to save a component The user directs the system to save a component
by clicking Save or by pressing ALT+F1, then by clicking Save or by pressing ALT+F1, then
ENTER. ENTER.
PeopleSoft also prompts the end PeopleSoft also prompts the end··user to save a user to save a
component when the Next or List button is component when the Next or List button is
selected, or when a new action or component is selected, or when a new action or component is
selected. selected.
153 153
PeopleCode Event PeopleCode Event
SaveEdit Event SaveEdit Event
Where is it used? Where is it used?
ou can use SaveEdit PeopleCode to validate the ou can use SaveEdit PeopleCode to validate the
consistency of data in component fields. consistency of data in component fields.
Whenever a validation involves more than one Whenever a validation involves more than one
component field, you should use SaveEdit component field, you should use SaveEdit
PeopleCode. PeopleCode.
154 154
PeopleCode Event PeopleCode Event
SaveEdit Event SaveEdit Event
What is it used for? What is it used for?
When the SaveEdit Event gets fired, the PeopleCode When the SaveEdit Event gets fired, the PeopleCode
in the event is get executed . in the event is get executed .
This enables you to cross This enables you to cross··validate the page fields validate the page fields
before saving, checking consistency among the page before saving, checking consistency among the page
field values. field values.
155 155
PeopleCode Event PeopleCode Event
SaveEdit Event Processing SaveEdit Event Processing
The Component Processor The Component Processor
Fires the SaveEdit PeopleCode event, which triggers Fires the SaveEdit PeopleCode event, which triggers
any SaveEdit PeopleCode associated with a record any SaveEdit PeopleCode associated with a record
field or a component record. field or a component record.
An An Error Error statement in SaveEdit PeopleCode displays a statement in SaveEdit PeopleCode displays a
message and then redisplays the page, stopping the save. message and then redisplays the page, stopping the save.
A A arning arning statement enables the end statement enables the end··user to cancel save user to cancel save
processing by clicking processing by clicking Cancel Cancel, or continue with save , or continue with save
processing by clicking OK. processing by clicking OK.
156 156
PeopleCode Event PeopleCode Event
This code displays an error message when
the user tries to add the record without
entering the employee name.
157 157
SaveEdit Event SaveEdit Event
This is how we can add
a record.
158 158
SaveEdit Event SaveEdit Event
ser is trying to save the record
without entering the employee
name.
159 159
MENU
SearchInit
SearchSave
RowSeIect
PreBuiId
FieIdDefauIt
FieIdFormuIa
RowInit
PostBuiId
Activate
Other Actions
FieIdEdit
FieIdChange
Popup Menu
NO
PrePopup
ItemSeIected
YES
RowInsert RowDeIete
SaveEdit
SavePrechange
WorkFIow
SavePostChange
Page DispIayed and
Waits for User
Action
RowActions?
Insert
DeIete
Save Action
PeopleCode Event PeopleCode Event -- SavePreChange Event SavePreChange Event
160 160
PeopleCode Event PeopleCode Event
Save Prechange Event Save Prechange Event
SavePreChange PeopleCode provides one final SavePreChange PeopleCode provides one final
opportunity to manipulate data before the system opportunity to manipulate data before the system
updates the database updates the database
SavePreChange PeopleCode can be associated with SavePreChange PeopleCode can be associated with
record fields, components, and component records. record fields, components, and component records.
161 161
PeopleCode Event PeopleCode Event
SavePreChange Event SavePreChange Event
When is it fired? When is it fired?
The SavePreChange event fires after SaveEdit The SavePreChange event fires after SaveEdit
completes without errors. completes without errors.
162 162
PeopleCode Event PeopleCode Event
SavePreChange Event SavePreChange Event
Where is it used? Where is it used?
SavePreChange PeopleCode can be associated SavePreChange PeopleCode can be associated
with record fields, components, and with record fields, components, and
component records. component records.
SavePreChange PeopleCode is not field SavePreChange PeopleCode is not field··
specific: it triggers PeopleCode on all fields specific: it triggers PeopleCode on all fields
and on all rows of data in the component and on all rows of data in the component
buffer. buffer.
163 163
PeopleCode Event PeopleCode Event
SavePreChange Event SavePreChange Event
What is it used for? What is it used for?
SavePreChange PeopleCode enables you to process SavePreChange PeopleCode enables you to process
data after validation and before the database is data after validation and before the database is
updated. updated.
164 164
SavePreChange Event SavePreChange Event
&$ Commit &$ Commit
165 165
SavePreChange Event SavePreChange Event
This code is to capture the details like
who modified the record and when was it modified
166 166
SavePreChange Event SavePreChange Event
This record has been modified.
The required details can be obtained by
Opening the secondary page
Push Button to open the
&econdary page
167 167
SavePreChange Event SavePreChange Event
The details like who
and when the record was modified
168 168
MENU
SearchInit
SearchSave
RowSeIect
PreBuiId
FieIdDefauIt
FieIdFormuIa
RowInit
PostBuiId
Activate
Other Actions
FieIdEdit
FieIdChange
Popup Menu
NO
PrePopup
ItemSeIected
YES
RowInsert RowDeIete
SaveEdit
SavePrechange
WorkFIow
SavePostChange
Page DispIayed and
Waits for User
Action
RowActions?
Insert
DeIete
Save Action
PeopleCode Event PeopleCode Event -- PostBuild Event PostBuild Event
169 169
PeopleCode Event PeopleCode Event
Workflow Event Workflow Event
The main purpose of the Workflow event is to The main purpose of the Workflow event is to
segregate PeopleCode related to Workflow from the segregate PeopleCode related to Workflow from the
rest of the application's PeopleCode rest of the application's PeopleCode
Workflow PeopleCode executes immediately after Workflow PeopleCode executes immediately after
SavePreChange and before the database update that SavePreChange and before the database update that
precedes SavePostChange precedes SavePostChange
170 170
PeopleCode Event PeopleCode Event
Workflow Event Workflow Event
When is it fired? When is it fired?
Workflow PeopleCode executes immediately after Workflow PeopleCode executes immediately after
SavePreChange and before the database update SavePreChange and before the database update
that precedes SavePostChange. that precedes SavePostChange.
The program should deal with Workflow only after The program should deal with Workflow only after
any SavePreChange processing is complete. any SavePreChange processing is complete.
171 171
PeopleCode Event PeopleCode Event
Workflow Event Workflow Event
Where is it used? Where is it used?
Workflow PeopleCode can be associated with Workflow PeopleCode can be associated with
record fields and components record fields and components
Workflow PeopleCode is not field Workflow PeopleCode is not field··specific: it specific: it
triggers PeopleCode on all fields and on all rows of triggers PeopleCode on all fields and on all rows of
data in the component buffer. data in the component buffer.
172 172
PeopleCode Event PeopleCode Event
Workflow event Workflow event
What is it used for? What is it used for?
The Workflow event, triggers any Workflow PeopleCode The Workflow event, triggers any Workflow PeopleCode
associated with a record field or a component. associated with a record field or a component.
Workflow PeopleCode should be used only for workflow Workflow PeopleCode should be used only for workflow··
related processing related processing
Updates the database with the changed component data, Updates the database with the changed component data,
performing any necessary SOL !nserts, Updates, and Deletes. performing any necessary SOL !nserts, Updates, and Deletes.
173 173
WorkFlow Event WorkFlow Event
%his code is to trigger the particuIar event in the activity. %his code is to trigger the particuIar event in the activity.
This code is to trigger the particular event in the activity.
174 174
dding a New Department
dding Department Name
Save it.
WorkFlow Event WorkFlow Event
175 175
lick on the Worklist tab
WorkFlow Event WorkFlow Event
176 176
The added department name has been displayed in the worklist
WorkFlow Event WorkFlow Event
177 177
MENU
SearchInit
SearchSave
RowSeIect
PreBuiId
FieIdDefauIt
FieIdFormuIa
RowInit
PostBuiId
Activate
Other Actions
FieIdEdit
FieIdChange
Popup Menu
NO
PrePopup
ItemSeIected
YES
RowInsert RowDeIete
SaveEdit
SavePrechange
WorkFIow
SavePostChange
Page DispIayed and
Waits for User
Action
RowActions?
Insert
DeIete
Save Action
PeopleCode Event PeopleCode Event -- SavePostChange Event SavePostChange Event
178 178
PeopleCode Event PeopleCode Event
SavePostChange Event SavePostChange Event
After the Component Processor updates the After the Component Processor updates the
database, it fires the SavePostChange event database, it fires the SavePostChange event
The system issues a SOL Commit after The system issues a SOL Commit after
SavePostChange PeopleCode completes SavePostChange PeopleCode completes
successfully. successfully.
179 179
PeopleCode Event PeopleCode Event
SavePostChange Event SavePostChange Event
When is it fired? When is it fired?
The SavePostChange Event is fired after the The SavePostChange Event is fired after the
Workflow Event is executed successfully. Workflow Event is executed successfully.
SavePostChange PeopleCode is not field SavePostChange PeopleCode is not field··specific: !t specific: !t
triggers PeopleCode on all fields and on all rows of triggers PeopleCode on all fields and on all rows of
data in the component buffer data in the component buffer
180 180
PeopleCode Event PeopleCode Event
SavePostChange Event SavePostChange Event
Where is it used? Where is it used?
SavePostChange PeopleCode can be associated SavePostChange PeopleCode can be associated
with record fields, components, and component with record fields, components, and component
records. records.
SavePostChange PeopleCode is used to update SavePostChange PeopleCode is used to update
tables which are not in user component with the tables which are not in user component with the
help of SOLExec built help of SOLExec built··in functions. in functions.
181 181
PeopleCode Event PeopleCode Event
SavePostChange Event SavePostChange Event
What is it used for? What is it used for?
The SavePostChange event, triggers any The SavePostChange event, triggers any
Workflow PeopleCode associated with a record Workflow PeopleCode associated with a record
field or a component. field or a component.
SavePostChange PeopleCode is for processing that SavePostChange PeopleCode is for processing that
must occur after the database update, such as must occur after the database update, such as
updates to other database tables not in the updates to other database tables not in the
component buffer. component buffer.
182 182
PeopleCode Event PeopleCode Event
SavePostChange Event SavePostChange Event
Restriction Restriction
An An Error Error or or arning arning in SavePostChange PeopleCode in SavePostChange PeopleCode
causes a runtime error, forcing the end causes a runtime error, forcing the end··user to cancel the user to cancel the
component without saving changes. Avoid component without saving changes. Avoid Errors Errors and and
arnings arnings in this event. in this event.
Never issue a SOL Commit or a Rollback manually from Never issue a SOL Commit or a Rollback manually from
within a within a &$Exec &$Exec function. Let the Component Processor function. Let the Component Processor
issue these SOL commands. issue these SOL commands.
183 183
SavePostChange Event SavePostChange Event
To see the value in
the salary field before
the &ave Post change
event fires.
184 184
SavePostChange Event SavePostChange Event
Note that the
value in
employee salary
is 1S000.
185 185
SavePostChange Event SavePostChange Event
PeopleCode to update the employee
salary of a particular record.
186 186
SavePostChange Event SavePostChange Event
Now note that the
employee salary is
updated to 10000 from
1S000.

#673'663:
#673&6;.7730.;65:.91:51:5; 7693;663:79611/#673&6; 
7730.;65:59 #67361 7730.;6555

#67361:..51.:.90:5;..51 :;90;9;61367 5069769.;06473 .7730.;65360 

#67361
#67361::473/;;

.. #67361::473/.

. ..#673'663: :5#673619.5#673&6.0.6 :.7.0..6...65069769.76913.9.69.33.65:  '3.::1.7..31.1/:5::93: 5.657960::69 5..6#673&6..6 5.:06473/:5::98945.:.5/ .0.:1:51:70..65.7730. ..33./3.7730.../3.:67:.65/651.5.5..7730.650.50 .006473:1  .51.0.

.::7769.515.:.#673615.51 50..  9 33/60:565365#67361 5.:0631/:16913675#693 7730.1 /#673&6.6.6065...6.3.: #673&6.65 #67361#969..01.9.7730..65.: 5.36.516  9.::5.963.65:  .5.4:.: .

9.9438 !45:503: 474 $.#673615..0!70.: #673615.90/ #439 #4.0/.: 336 & .7.90 !..39 $0.9 0/.0/9 $0..0!489..7.943 $.943 0//9 #4$00.085.30 $.3/ .0.. 902$00..0 $.:9 !70!45:5 0/472:.30  .$..98147&807 .9438 !489:/ 38079 #438079 0090 #40090  907.30 !70:/ $ 0/01.

#673615..

. #673615.

5.3/ ..9438 !489:/ 38079 #438079 0090 #40090  907 .30  .905.7.0/9 $0.30 $..30 !70:/ $ 0/01.9438 !45:5 03: 474 $.9.90/ #439 #4 .90 !.:9 !70!45:5 0/472:.7. 902$00.9 0/.0 85.0!489..0 . & .943 0//9 #4$00.0!70..0 $.98 147 &807 . &.$..39 $0.0/ ...943 $.

91 ':5.36/6:1:73.36691.5.1  .#673615..:59.36 ..905.1:.901.: &.91../69:. 5:.11 1.

0..905.9090691:  .905.5/.::60. 9:.1.#673615.9069131:.: &.:1 &.:.51 0647655.

9090691  .: &.905. :.99:.90231:6.#673615.1#673615.5..905. ..::60..:169 &.:.:.

0647655.3356.65: &. %:.5&.9.9995964.#673615.: &.905.90. '9. 5.3  6 61.:50.5:9 '9.5.3647655.. 5.5:9#.905.  .0 .905.65:326 61.

.6.9 .: &.5.905.:9.  # 47361 9.7.6461.:.902 9069131 #:.:.9   ..0647655./3:.473 ':#673615&.3./3695.:9: 4736 4.650647655.#673615.5.315..31.9027.  #  336471 ..2:.:.905.:9:651.5.51 5.

906919473654/9:   . ':061:.36.&.6190.6.905.5.

&.  .5.905.

 79:656:4736!4/9:   .47361.5...7.905.&.0 065. ':061331:73.3:6.:.5:.

905.&.  .5.

#673615..

. #673615.

0/9 $0.30  .39 $0.90/ #439 #4 .0!489. 902$00.3/ ...0 85.30 !70:/ $ 0/01.5.90&. &.98 147 &807 .0 ..9438 !489:/ 38079 #438079 0090 #40090  907 .9 0/.30 $.0 $. & .9.943 0//9 #4$00.:9 !70!45:5 0/472:..7.943 $.0/ .9438 !45:5 03: 474 $.90 !..$.0!70..7..

:2:: 0.91 '6065.: &.1  . 5:.9 5.91 /.902.90/./69.:165.3:.9:.90&..:.#673615.9637960::5.

90&.1.:.90&.9.5.510647655.902 31:65.: &.36 691..33:.#673615.#673610.5/.90&.:1 &.. 9:.111..91.169.9090691: &.:.901.36 ..#67361:0.::60.51.90691 31:.36 /6.

51.. /6.9.

:90302::.90  .

67961096::.: &.:.3:6.9:..70.#673615.:.:169 '. ..90&.

3:6.9:.70..:.67961096::. '.

45.6:51..:5&..51.:.6690:9.:69 :30.4544:. 4.65.90&.51.996.. #67361..35.625694.3.311.3..3..65 .5.9.9069.3:6:1..955:.:.:.:.6531  5./3:.9.6375.5:9969.7.596: 0.

51. #67361.6:51.

901.6.:.:9/.02.36/6 .51.

.51.

31.::.7.916:5.:95..65:47345. #67361  .15.

.:.90&. %:.9. ':5.0647655.95.33.::60.51. .65: &. 995964.: &.#673615.1#67361 3356.1964 .:.0  .90&.9:30.5.16:56.903:.90.3:.

:.5.90&.52  . ':0611:73. 5.&.:93.:.4736 54/931/3.599694::.

1  .&.1:73.52 99694::.90&.5. 473654/9:/3.

#673615..

. #673615.

90 !..5.9 0/.7.0 ..943 0//9 #4$00..0!489.0 $.30  .:9 !70!45:5 0/472:.9438 !45:5 03: 474 $. & .943 $. 902$00.0!70.3/ .90/ #439 #4 .0/ .0 85.9438 !489:/ 38079 #438079 0090 #40090  907 .$.0/9 $0... %6&30.39 $0..9.7..30 !70:/ $ 0/01.30 $.98 147 &807 .

.63.71..3:66009:.5. '%6&30.0647655..15.5.96..1  .9:.:.#67361::1..1 50...6993.. 71.&09633&30.: %6&30.0. 647655.56.9/59..65 461: 71.33 6990.65 %6&30.9.65:0..317960::5.:73..96:6 1./9 ':5...6./5556.#673615.

 71.56.91 '%6&30.31 7960::5.647655..0.65461: 71.9:.71.#673615.. 33 6990..65  .:73./5556. 5:..5.: %6&30...

63.6.15. .9/59.#67361::1.0647655.#673615..: %6&30.96.:1 %6&30.96:61. 9:.:.../9  .

90.396:  /6. ..:..4:27:.0995.15..45.11..647655.05 .1 .:.91%6 647655.. .5:..#673615..65.45.7969.15.::.5 ..966 1. :0.91%6 50..396:  .6 &.:169 :0. .51065.9661.0.5:.0995.65..996:  &.6:27.67960::6.::.67.:.#960::69.679..#673610..67..05 :.67:9.655%6&30.007.#960::69.9661.0995.11.: %6&30.

:0995.9.647655.::60..1#67361 3356..#67361 60. . %:.5.#673615.51.3/57960::1 ':5. 995964.65: 5%6&30.599.90691.: %6&30.33.69069131: 65365.90.0  .:..

%6&30.90671..#673615...51/69..69 93.96.:.96:61. /9:  %6&30.7960::55.#960::5 %6&30./.9.65:0. .&09633&30.1..::99:5. &$&30./3:#67361..63.0647655.6..91964..../59.1  .7960::5:.11461: .:/7960::60647655.45./31 7960::55.150..: %6&30.9..3:66009:..

5.  .%6&30.

906916: 473654/9  .9:30. .5.5.%6&30.

1  .:/51:73. %0691.5.%6&30.

73.5.96:.9.956.91.45.96:6:17.%6&30./9  .51. ':0611:0.015.#' .

.#'   . '95.1:#' 9.966: 17.45.61:0.5.4736!4/9: .%6&30.1.91.9.::60.

&50.1.%6&30.015.915.1  .956.1:73.3:9.5.4736.96:56./9 ..73.

.#673615.

. #673615.

.0!70.90/ #439 #4 .$. 902$00.0/ .9438 !489:/ 38079 #438079 0090 #40090  907 .943 0//9 #4$00. #9315..0/9 $0.30  ..3/ ..7. & ..0 85.98 147 &807 .0 $.90 !.0 .0!489.943 $.9 0/.9.30 $.7..39 $0.30 !70:/ $ 0/01.:9 !70!45:5 0/472:..9438 !45:5 03: 474 $.

/3:  .#673615. ':5.0647655.6:.5:1.3:6:1.9.6169517.: .:6.. #9315.: .

9:.:  .9:/69.6. 5:. 0647655.#673615.91 '#9315./315. #9315.

 0647655.::60. 9:.:1 #931#67361:653.1.#673615. #9315..:   .

:169 '#9315.31.::1.6169517. #9315.#673615. .1 .:  .3:6:1. 79647.5.9...:.:. 1..901.:1:73..3:.915.6..:.36 .

.. !6...  ./::/3 0.7...#..#9315....:9.65.6.7..336.

6.7.17.:9#  ..#9315.9.45. ':0611:.

 .1...90691.6. &30.5.#9315.

/1/. '7.556.7.#9315.:/3 '7.#./:56.0.'. :96::91#  .

.#673615.

. #673615.

0/9 $0.7.9.0!489. & .98 147 &807 . 902$00.943 0//9 #4$00.39 $0. 31.0 85..7.0 $...943 $..30 $..0!70..90/ #439 #4 .:9 !70!45:5 0/472:.9438 !489:/ 38079 #438079 0090 #40090  907 .9 0/.$.3/ .90 !.0/ .30  ..0 .9438 !45:5 03: 474 $.5.30 !70:/ $ 0/01.3.

.#673615.6..6.3.111.3.: 511461..31:5 .515.33:.1 31.5.6 7969.:09633  .6.3:.3..95.. '31.#673615. 0647655.1.6 1.44.: 31.3....:/5.596 :5:9./3:6.33:.:31:.551.331:73..#673615694.5.0.15.3.

65:.51.9.3.99:#673617969.:701 .33/3.3.9.:.33. :7015.64.:7.533.9.3::701 69.3.: :70169.52.4:6535 .:  ':33/.91 ':5.#673617969.4  .3.633650651.549031  '31.9.31:.337.. 7960:::69. 5:.906913179679.31::.9  '7..5195.7735.:9165.#673615.9: 561.31.: 31.

:09633  . 9:.6.#673615.3.33:.51 5.#673615694..:1 31.:31:/1.:/5.3.3.: 511461.6.596:5:9..111.55 1.: 31.15...0647655..

31.#673615.9.96#6736169/.:.:169 .51 .3:0.3.: 31.5 51. ..

:9 .:.51 51.

::5.3. .6'9 ' 07.: .51 79679.4.96::..51  .69 316943.3.921.5:1655.3::..96:56.69.:9 .531.0.6..: .:0.65.31..69 316943.5.:.

319.5..3.#673615.5..9/064:..: 1.5:.52  . 3.553... .: 65.5:4.31/3..9.3:5.5.:6311.

5033.955::196431.65 6.90.#673615.516900. #67361330.4 9969.  .65: 5996969.3.:.3..95.0647655. %:.: 31.

1.3.:.31..5.6  .36 4736:.3.3. ':061:.931.

5.3.9: :.3.6  .3...31.36 4736:. '1.

.#673615.

. #673615.

30 !70:/ $ 0/01.90 !.30 $.9.9438 !489:/ 38079 #438079 0090 #40090  907 ... & .9 0/.$.0!70.0/ . 902$00.943 0//9 #4$00.30  .7.0 85..:9 !70!45:5 0/472:.5.943 $.7.39 $0..0 $.0!489.0 ..9438 !45:5 03: 474 $. 316943..3/ .0/9 $0..98 147 &807 .90/ #439 #4 .

.640.303.7730.:59.55. '316943.76 .33:169.: 316943. 316943.5316943.9.5131.9 :19..51:56.65:   .5.65: ..5.:.5.%65.939 9:65:6#673'663: .:.. ..:.:15905.#67361 5.

65   .5195.7730.#673619:54.:..79694.50669.0. 065.99:#673616593165 9965. 5:.1.51.0647655./9 .: 316943.5:96:3 19..91 316943.#673615.

.65 316943.65:  .6 :.:1 :. 9:.960655.9 9069115..: 316943.:566.5 :15!.9150. 50.#673615.653/9.65:.4.69:.

:..303.::169/. .#673615..:69 316943.: 316943.:00.65:  .

:316943.6:.:  :. %:.65: 656. 9069115.653.90.69.#673615.3#6736150.#67361569 0647655.: 316943.95.65:  .65:5!.

.35..5 99694::.1.316943.3.:.  .5.3 3::.1:73.5.5..3.3.6 531. 5:95.9:.. 5.

.3.5. .3:  .316943.

.316943.65.1  .9 3::.5.9:. 5:9.9 4736:.3.5 599694::.:1:73.

.#673615.

#673615..

0!489.9.39 $0.0 85.90/ #439 #4 .9 0/.943 $.98 147 &807 .3/ .943 0//9 #4$00.30 $.9438 !489:/ 38079 #438079 0090 #40090  907 ..0/ ..$.30  .9438 !45:5 03: 474 $. & .. %65....0 $.7.0/9 $0.5.7. 902$00.90 !.0 .30 !70:/ $ 0/01..0!70.:9 !70!45:5 0/472:.

9:.9:..#673615.5..9661.  . #960::695065.0647655.: %65. 5.4.9:.:91 '%65..

::169:. 9:.3:..6647655.5.65..5.:56.: %65.:1 ..#673615.31.963: %65..

:56.31. %65.

69&30.33%6:.3:66009:..5165.9./317960::5..150..1  .4. 7960::5 .9. &09633&30./9 ':6009:1950647655.6993.61 69.33%6:.150.1 &09633&30.65:0.51965:9.0647655.6993.:700 . .4.3396:5 ..61 69.&30.65:0...3:66009:.&30.99:65..69&30.3331:.

60647655..5.991:5.59969  .5.:....::169:.6/. .606473.....#673615.1.963: '7976:6%65.#67361:...: %65. 065.3:..065:191./.96.:/59.5.56.65 61.5.:169 '%65..: %65.1964.65..9...3.

51.65: 656.:%%"%69%!!:.#673615.49969.: %65.::.51690:. #67361 .:0.45.95..90.5%65. %:..

#67361 .51.51690:.95.::.:0.49969.

:.1:90691964./9:.:79:5.315.:: .5.31.1  .5/5..#67361:5.:79:5.1./0..1 '%0691:.2:69..: 69 5:640.. 5...5.55.57./9:: 1:73.503.#673615.. 0.:9 .. 906910. 99069131..0647655./.33 99069131..3:6 79:5.5#67361 '0647655.0647655.2:69.775: %65.:6.1.5.93964. 0647655..91.1.653 %65.60.7960::6995:%65.63156. 36.. 61531.

969 #%"' 631/90. .1  . ..3:6:.3169596:5:9.5.65.:5..6/6.#673615.510.4:.3#%"'8..3.1 : %65.6  5951:90.303.36#%"':31 31 50647655.310.#%"'8...473 &776:6.: %65.#67361.6  0631.36..3.331#%"' '..5:.5#673617969.031..

0.473654/9.5.65:03021  .%65.64..33 650..11/.659. ':061::1....

%65.:90.5.64.556.653¾ . ':95156.3359.0.3  ....5.473654/9 .1.5.9.:/54.1 1:73..0.51.:.

30  ..0/9 $0..$..3/ .315. 902$00.9 0/.90/ #439 #4 .0 $.90 !.943 0//9 #4$00.0 .39 $0.30 $.9438 !489:/ 38079 #438079 0090 #40090  907 .98 147 &807 .30 !70:/ $ 0/01.9. & .0!70.0!489.:9 !70!45:5 0/472:.0/ .7.7.9438 !45:5 03: 474 $. #673615...#673615.0 85..943 $.. #6:.

3:6:1.#673615.: .315.:.6169517.:6.: #6:.33.6.9./3:  .315.9.9 0647655.6:./315.5:1.0647655./591 ':5.9:653...:. '#6:.

315.: #6:.9.31 5:.33.91 '#6:.9:. /315.6.90647655.#673615.:.91  ..

:1 ':5.6169517.31 9:.5:1.: #6:.:  .:6.#673615.

1.3:6:1..:.::60..9.0647655./3: #6:.0647655.6:.31#67361:653.#673615..31 .:  .:169 .:.: #6:.

90691..315. ':061:6906330.5694.90691 609.5.656.515  .#6:..1 .

98911.9:.9. !6. .91  .315.90.90691 .7.3:.5.#6:.115.90691 &..5.

90691  .9.1.#6:.315..915. ':.3:9.

9.9438 !489:/ 38079 #438079 0090 #40090  907 . 0... 902$00.39 $0..0/.30 $.9438 !45:5 03: 474 $.0/9 $0.5.0!70.7.0 $.$.30  ..7.90/ #439 #4 . #673615.:9 !70!45:5 0/472:..#673615.9 0/.0!489.085..98147&807 ...943 0//9 #4$00.30 !70:/ $ 0/01.90 !.3/ ..943 $.0 . & .

#673615.65:#67361  ...5..6. .: 93. 0.07..   ....5.6.9:.:650...:. 0.:7007.1.5..:.7730..964.#67361.6:9...

#673615; 
0;.;5; 5;:91
'0;.;5;:91.0;4;7.;: .0;.;1 

#673615; 
0;.;5; 9:;:1 
0;.;#673610.5653/.::60.;1; 7.: '0;.;5;;99:.50;.;#67361 .::60.;1;;7.7960::5  

#673615; 
0;.;5; .;:;:169
'5;:169:09;.31.;65:0.:  5./35.316915.:09633 5./35:9;6 7969.44.;0.33065;963;1:73.6;.;7. 065;963:  ':5;::1690647655;31#960::5 ':5;::1690647655;31#960::5 11 61.5171.; 61 

%:.51.31653697.9 ':5.90.:56...9151..:.:  .169&/7.. 0.:.#673615.: &. :7769..65 ':5.9169&0651..5.

':9:.0.45.::73.5.."53  .7.6:..9.7..3361.

.5.653  . '31:.91:73..0.

#673615; #673615; 311;5; 
& .9;,90 !,0 85,0/ ,3/ ,98 147 &807 .943 $,;0 .943 0//9 #4$00.9 0/,30 !70:/ $ 0/01,:9 !70!45:5 0/472:, 902$00.90/ #439 #4 .9438 !489:/ 38079 #438079 0090 #40090  907 .9438 !45:5 03: 474 $,;0!70.,30 $,;0/9 $0,7.39

$0,7.$,;0

$,;0!489,30 

#673615;: 
311; 5:;91
'311;5;9:65;:70031.5196 ;.;.::;0.51 

#673615;: 
311; 9;::1 
311;#673610.5/.::60.;1;9069131: .510647655;9069131: .510647655;9069131: 311;#67361::1;6.31.;;065;5;:6 .31 :77345;5;:;.51.91::;41;: 

65 ..4::.16:56.: 311.9969 :.:169 .39.3191 6..:5....60. 091:73.:.....::.#67361 7969..311.31.51.5.4:6311:73.4::.51. 1:73...#673615..5 99694::. .7..9969 7969.:5.4:6311:73.5.6 .45.:.:.7.5.1.955. /..

51.676::/3796/34 :.39...955 .:9.

.16%%"%  .45.955 :..16%%"% :.45..:9...676::/3796/34 :..5:..5:.

65: .....654:.5&..31.50.16311.: .31: .90.. %:.096::7.1.5 6531 .65:002569 065::.002. #673610.065.31.#673615..:6469.: 311.5/:15:.  ..5.

0  .5.0.:7.065.311. ':061:. '5.9...5:70.9.4:63156..4:.5 54/9:69.31656956.9: ".5. 47365.6002.30.9.

9.7. 33/1:73.9. .54::.:9.431 5.3 0.9 5..311.6:30.47365.95:64:70.9:.1  . :9:5.5.0.45.

477..65 .1 .5.:/51:73.1 .33/ 1:73.:9..62¾/.:90302:.61.431  .6.3365. ::.5.311.

.61.65.311.431 :56..5.955  73.4 31  . '::7673&6.55.030262 /.5.5... 59...31 :.1.

311;5; 

9;:9: .3361;61;; 5.431 

311;5;

!6;:9:.3361;6:30;;7.9;45;1 

#673615; #673615; 31.55; 
& .9;,90 !,0 85,0/ ,3/ ,98 147 &807 .943 $,;0 .943 0//9 #4$00.9 0/,30 !70:/ $ 0/01,:9 !70!45:5 0/472:, 902$00.90/ #439 #4 .9438 !489:/ 38079 #438079 0090 #40090  907 .9438 !45:5 03: 474 $,;0!70.,30 $,;0/9 $0,7.39

$0,7.$,;0

$,;0!489,30 

: 31.0.5/.1.91 31..:70031.5 5:.#673615.::.510647655.9069131: '31..9:65.55.90691 31:.51 96...5#673610.::60.51  .

5 9:.31.3: '60.65:  ....303.5067.56.6 %0.5.065.5#67361::1.5.: 31.9 .963: '6#960::.#673615..1...31.77..96431.9.9:3.:1 31.

.065.963:.:169 31.3:..1950.065.:.5#67361.69..59002:.#67361 002.5 .. 69.5 .367.0647655.0069153 31. #67361 5%65..3:5 .91.#673615.%65.:.7.963:   ..57.0647655.65.: 31..:.3:5.5#67361:6. :.519:.%65.515.31..36..

..331.#673615.9969 69.955 :.31.5#67361 ..: 31.9969 69.531.90...65:631/7969415311..45.955 .   .:56.6.90644511..1 ..90644511.:::.:56.5 %:..65: .6.

.36#%"':31 31 50647655.36.#673615.3.510..6  59:90.#67361.031.6  :90631.1  :9::.969  #%"'631/90.%65.: 31...5#67361 7969..5:.3 #%"'8..473 &776:6.:5.303.3169596:5:9.#%"' 8.3.65..310.3:6:.55.1   . .4:.331#%"' '.6/6..5..

55.64. ':061.0.0:.4 650473654/9::30.3373.47365.31..1   ..

&30..55.31.473654/9   .

64..33 650.31. 47365.433/1:73.1   .55..1.473654/9::30.0.

7.0/ .90/ #439 #4 .98 147 &807 .3/ ..30 !70:/ $ 0/01. 902$00.943 $.30   ..30 $.#673615..9438 !489:/ 38079 #438079 0090 #40090  907 .$.9 0/. #9#6775.9438 !45:503: 474 $.0 85.9.:9 !70!45:5 0/472:..90 !..0!489. & . #673615.39 $0...0!70.0 .943 0//9 #4$00.0/9 $0.0 $.7.

'#9#677#673615. #9#6775./3:6 .#673615.5. 767.61:./3 002 69145.4:5.

767.

7   .

 767.#673615.6.1:73./69. #9#6775.9::.91 '#9#6775. 5:.

767.

745   .

4679.65: :0. 9:.767.90691 31:.: 1 5.4 .1. #9#6775.#673615.5/.:1 #9#677#673610.../3 5.510647655.9069131: #9#677#6736145.4 5.::60.51:665 692 .

.767.

.745:.6..315...91 56.01. 91  .

 .:.:169 '#9#677#67361::1.6065.#673615.#67..77. . #9#6775.9.506.963.

9.77.#67.506. .

745.4:  .

#9#6775.#673615. #9#677#960::5  .

1/69 .5.99:  . '9 5.4:73.#9#6775..

.4 &. ':061::1.45.61..#9#6775.%5.

'4  .

#9#6775. #67.

7 5065  .

&30.1 5.#9#6775.

4:115  ..

.3/ .90 !.7. #673615.0 85.39 $0.30 !70:/ $ 0/01.9438 !489:/ 38079 #438079 0090 #40090  907 .0/9 $0.943 $.0!70.15.7.30 $.943 0//9 #4$00.:9 !70!45:5 0/472:.0/ .0 $.4&30.0 .0!489.#673615.9 0/....9438 !45:503: 474 $.98 147 &807 . ..30  . & . 902$00.$.90/ #439 #4 ...9.

'.15.: .4&30. 51.4&30.9:59.#673615.5.

:.:9:30.45.4964.767.

51.

4964.:.767.45.:9:30.

7 45 5767.

5767.

1#67361 0.4&30.6.767.:5.745:..7.31964 9.065.

767. 9.

.5:..:60631964..7:/.5 7.5939950.01 0 4.60..31: :.745:.510..65  ...

: .4&30.15.#67361 5.4&30. 5:.51.9:59.91 '.

15.9:59.51.4&30. '.

4964.:.:9 :30.45.767.

:. :30.767.4964.45.

745  .

:1 5767.4&30.: . 9:.#673615.

5767.

745:;4&30;1#673610;:5 ;065;;6;7.319649;767

;065;;6;7.319649;767

7 45:.;;.01 04.5:;.;60.593 9950.510.57.31: :;.:60631964 .7:/;;65 

767. .: .::60.1#67361:653.1.4&30..:169 .#673615..4&30.:.

1#67361:653.1. .767..::60.4&30.

7 45.4:  .

33..::60.0  .1#67361 16:56.65: ':5.90.4&30.647655.:.: .9. 995964.51.#673615.5. . %:.

51..4&30.4&30.17960::56009:5.1#960::5 .

17960::56009:5.51. .4&30.

4 964.:9:30.767.:.45.

767. 964.

4&30.745 ':9:.45#673615.  0:.1#673615..  .

57.4  .4&30.5:9. 5.9.5.5. ':061::1. /:30.6..6.

.5.4&30. #677 5065  .

.4:  .4&30.5. 5.

4&30.3  ..5.5:991.96447:.6477. '9.

5.39 $0...90 !.7.0/ .:9 !70!45:5 0/472:. %65:9.30 !70:/ $ 0/01. & .0 .98 147 &807 ...0 85. 902$00.90/ #439 #4.7.9438 !45:5 03: 474 $.0!70..0!489.943 $.0/9 $0...943 0//9 #4$00.#673615.30 $.9 0/.0 $.$.3/ .30  . #673615.9.9438 !489:/ 38079 #438079 0090 #40090  907.

5:. 5:9.19661...: %65:9.99:#6736165..  .91 '%65:9.53165.#673615.

:1 %65:9.1.90691: %65:9.#673610.: %65:9.::60. 9:.#673615..90691 31:.5/.196:  .#67361::1697960::553 5:9.510647655.

65./795.#673615.556.: .5596:  .:169 :30.33964 5:9.!6%65:9.9:7.9.002/65.:09633.3179679.:9: 795.19645:9.: %65:9.:. 69:90..6. .596:5.5.10651. :09633/.

90.5. %:.7. 0647655.39.. %65:9.#673615%65:9.:69061.: 5%65.3.:.9.5..1:... /0.:%65.49969..:9:.  .#673615.:..65: 656.0 656. 0330.5033..656.: %65:9.9556999695%65:9.:33 0.95..516900.6/95 . .

%65:9.111  .354/95...659. !90691:.5. ':061.:9.: .

796::31: 0.651515.50.5.3319. '50.%65:9.33  .650.:.

':9.5..354/9:59.1  .%65:9.

9 0/. %63.#673615.30 !70:/ $ 0/01..0!70..30 $.9438 !489:/ 38079 #438079 0090 #40090  907.90 !.0 $.943 $.0/ . & .$..39 $0.0/9 $0.98 147 &807 .3/ .:9 !70!45:5 0/472:..0 ..943 0//9 #4$00.7.7.0!489. #673615..0 85..9.9438 !45:5 03: 474 $. 902$00.5.30  .90/ #439 #4.

551.9:59.5.5.#673615. %63. '%63.

551.5. '%63.9:59.

.7.5 3165..99:#6736165.47.:...613.5.1..: 13.9661...:9 ...9661..1  .964.:09633 '%63.:/53..

5.#673615.7960::56009:5 '51. %63. 5:.91 %63.

'51.

:.. 50.:.6569.6198:.3.:. 3.3.%64.65 6903025.:09633/ 79::5' . /.9613.%6/.  .5.65 #67361%63.6198:. 3.579::5!'% 03025 .9613..%64.:998:.9613. #67361%63.

56.55..59969 69.6795. 9:.96 :5.65   .955 6.97960::5065.679694.5.13. %63.#673615.65 :5.59969 69.45..#67361::1.6596 13. 69 .955 :..:1 %63.

#673615. %63.5..:.#673615... .:169 5.5.991 .0.:.600269 0651./3:6.%63.963.65:.51065.1 %63. #673615.5.51.9.

51065.65:.5 0651.9.963.51.:90.

13.96  ..

4:6591692 90691:  .16:56.65: %63.#673615. %:..997969.90.

45.906913169..0647655..5 17515.#673615.031:09633:  59969 59969 :.#960::69 9:.196.::60.#960::5 '647655.51795.:.%63..1. 51.1:73.7960:::31:65.#673615. %63.5.:.13. 0..99:%63.51.4::.. #67361. 90691 ':5.

51.

955 :.5. .45..955 51.39.:996413.5.:.96  .1:73...4::.

51.

/6.656.76::/3065:850:6.13.65 /.:13.96   . 794.:9.

%63.5.7960::5  . 6069613.#673615.

. 9969:.51.65  59969964%63.007. 647655. %63.6060: .#673615.#67361795..503 .. 5613.955:5 %63./6  ..5.:. .2:73.9661.0 9969:.7.65 690.4 79647.4::.606594 61606594 %63...  .51.955964%63. 964... ..:6..#960::699649465.955964%63.79:5."7:/.:..::.6060: .1:73. #67361..5037:/.  .79:5.955:5%63..%63.%63.:.9661.

:/5:.%63. &9. '90691.354/9  .691.5..473654/9.

%63.:061.5...33 9. 5.90691:13.64.1 .0.

94.55 %0691:5:850  .354/96.54/9:.:9.

 .5.%63.

:.653360095..65.5.0.1  .0. '13.%63..5:.9.

:850  . !6.90691:.9954/915.5.%63.

90 !.1.39 $0...30 !70:/ $ 0/01.0.30 $.#673615.9438 !489:/ 38079 #438079 0090 #40090  907 . & .0 $.9.$.7.0 85.90/ #439 #4 ...98 147 &807 ..5.0/9 $0.943 0//9 #4$00.0!489..0!70..:9 !70!45:5 0/472:.943 $.9438 !45:5 03: 474 $.0/ .9 0/. &. 902$00. #673615.30  .3/ .7.

51.5. &.5. '&.#673615.1.9:59.1.

51.1.9:59. '&.5.

0647655.  &..:.6:.1.:56..47..31.:9 .

:56. &.31.1.

96:3..:700.:13.5..99:.1 #673616599661.::60.1  . /9: 07.0647655...1.

5.3:679647.. 5:.6:.5.1.1.69/79::5'  .:915 ':9190.0647655.#673615.:..5 !'%  #673&6.::.91 &..4. /03025&.51.:. &.

51.:..3:679647. #673&6.

: :30.65690647655.!..69:.0.:9.5.5.1   ./.1 695.65: :30.6:. 0647655..

. &.565 0647655.31: 59.1..31.1.65563:469.31. 9:..#67361.. #67361   .5.:1 60..5061.6..1.50647655.31 6:631:&.#673615.5:&. 065::..

/3:6.1.5.6096::.&.:.5.:91 .1.:169 5.5..:.#67361 5.#673615. &. .0..1 ':5.

/3:6. ':5.6096::.

.7. 31.7.3:  .465.5 0025065::.31: /69:.31.50...

.::60. 0.99: .. 4::.45../3:.5.51..591:73.#960::69 9:.#673611:73.:..5&.1.90691  59969 59969 :.:.  .1.6775.:..#960::5 '647655.45.1.1.5&.5.51..#673615.&. &.90691 3169.955 :.0647655.1.7. :.#673615.#67361.

.:9.51.45.955 :. .503:.60../3:.5.

:. 7960::5/03025.:.5.503 69065.503 69065. 7960::5/03025. 7960::5/03025"  .5.

#673615.6.47365. ':0611:73.4  .90691.:.11.9:.:9.95. 5.599694::.6.5 .

'::60.1.&.5.11 .5.90691  .

95..&.95.4736 5.90691 .5.6.6:.4  . :9:.5.1.

0 $.9438 !489:/ 38079 #438079 0090 #40090  907 .. 902$00.0/ .3/ .9 0/.98 147 &807 .0 85.9.7.. & ..90 !..$.943 $..:9 !70!45:5 0/472:.90/ #439 #4 .0!70.0/9 $0.30 !70:/ $ 0/01. #673615.30 $.9438 !45:5 03: 474 $.0!489.39 $0. &..#673615.#9.7..55.30  .0.943 0//9 #4$00.

&.64.573.#9./.4 71.1..5#673610. &.5/.55.3 67769.1..#673615.: ..::.: &.510647655.90691:  .5.1.#90...#9..::60.5#673617961:655. 9069131: 0647655..:../69.

.91 '&.1.9:.#9.55.6.#9. 5:.9969:  . 06473. &.#673615.9&.55.:.

.:1 &.#673615.1 .5/.#9.#9.51 0647655.: .#9.5#673610.::60. &. 9:.31.90691: &.9069131: 0647655.5#67361:56.55.

5#67361:56.#9.31. &.

3396:61. /9  .5165. :700.3331: .5...0647655.99:#6736165..

5#673615.#9...#673615. .:.9.1  . &.1..:169 &...55.#9.31.67960:: 1./../3:6...51/69..:: 71.65.

55.#9.  . &$644.&.

4611  .7.#9.9.&.:..55.60. ':061:.3:32 64611.515.1.90691.

#9. #:.5/6/. &0651.:0651.55...  .6675.:/54611 '98911.65.51/ "755.3:0.97.97. ':90691.&..

#9.515.:4611  .3:326 .&..55. '1.90691.

7.0 85.943 $.0 $.315..98 147 &807 .0!70.90/ #439 #4 ..9.0/ .0!489.:9 !70!45:5 0/472:.30  .30 $.9 0/.9438 !45:5 03: 474 $.3/ ...39 $0.943 0//9 #4$00...#673615.$..9438 !489:/ 38079 #438079 0090 #40090  907 .0.30 !70:/ $ 0/01.90 !. #673615.7. #6:. & .0/9 $0. 902$00.

.6.1.7730..65:#67361 69236#673610.692365.:71. 7901:&.5.:441...6 :9.#6736193.1.:..../.669236964. '4...#9.9 &.#673615. 9:.51/69.5  ..3... 692365.#6:..57976:6.

.#9.4:6311.5.1.5  '7969.:441. 5:.5&.#673615. 692365.91 69236#673610.9 ....51/69.:71.9 &.#9.3../.#6:.57960::5:06473..69236653.7901:&...   . .3..

1. 9:. 692365.: 69236#67361:56.#673615.31..510647655.:1 69236#673610.5/. 9069131:.::60.

69236#67361:56.31.

 .5165.5.99:#6736165...3396:6 1.3331:.0647655.:700./9  .

99:. 692365.  69236#67361:631/:16536969236..::60.1.:169 '692365.906913169.569236#67361 ..:.. . .#673615.0647655.

69236#67361:631/:16536969236.

.: 71..: .1..550::. 93.9&$5:9.:  .  796945..17960::5 71...0...1.513.:.:./.510647655.

039390.70.9  .039390.70.9.692365.9.79.4/08949707905. %8.9 %8...79.4/08949707905.:.:.

09  .792039..692365. //3.005.792039 //305.20 $.

439047899.-  . .692365.

%0.7920393.20.//0//05.8-003/85.692365.0/3904789  .

$.9.0.943 0//9 #4$00.98147&807 .:9 !70!45:5 0/472:.#673615. 902$00.7.0!489...0/..9438 !489:/ 38079 #438079 0090 #40090  907 .0/9 $0.55.3/ ..90/ #439 #4 ..943 $.30  . &..39 $0.90 !..7.9 0/.#6:.30 !70:/ $ 0/01..0!70. & . #673615.085.0 $.30 $.9438 !45:5 03: 474 $.

: .9:.#6:.5#6736106473.: :00::33  ....55./.#960::6971.&$644.&. .9 &..55.647655. &.4:::.. 1..#6:.#6:.9. '::.#673615.:...

#673615. 5:.9.55.1:00::33 &.:91.55..31.#6:.#6:..91 '&.:0.. &..#6:.5#67361:56. 692365.

#6:. &..31.5#67361:56.

0647655.3331:.5165.5.3396:6 1. ./9  ..:700.99:#6736165..

5:90647655. .510647655.55.5#673610.671.. 90691: &. &..5#67361::1..5/..1 .9069131: 0647655..::60..#6:..:1 &.. 9:.#6:.956.#6:.#673615./3:0. 376&$0/3.: .

376&$0/3.

65:  .550.

. ..:.5#67361:697960::5. 4:. &.#673615..9...90691 3169. 0647655.../.1..0647655..99:..::60.5./3:56. :0.#6:.55..:169 '&. &..91..6009.1..#6:.66.: 71.:.:71.5 69236#67361././9  ..:. .55..#6:.

.#6:..65 59969 69.5#67361 0.955 59969 69.955 5&.#6:. &.::.#673615.51.95.90. %:.55.49969 6905.

95.51.49969 6905. 0.::.

51:  .6.60.:&$0644.&$0 50.51 .503..:.6.  !9::..5: 619969: .33964 .647655.#960::69 ::.5: 619969: 0647655.69. 0647655.&$0 .50.65 ..:5.:9.&$644.024.5.:.955: 5.5.5.%633/.50.

:..#6:.931/69 .5 5.0.55. '6:..9:  .&.35 .3.#6:.&.

35 4736:..55..9 :  .. !6.#6:.. ..&.3.

7.03.96.&..4736 :.9.#6:...3. #67361.990691  .55.671.

.6964   .&. !656..#6:.1. 4736:.55....9: 71..3.

Sign up to vote on this title
UsefulNot useful