Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Oracle
Approvals
Management
RELEASE 11i
May 2004
Oracle Approvals Management Release R11i
Copyright © 2001, 2002, 2003, 2004 Oracle Corporation. All
rights reserved.
Contributors: Geoff Nelson, Todd Morley, Alison Chambers, Bill Kerr
The Programs (which include both the software and documentation)
contain proprietary information of Oracle Corporation; they are
provided under a license agreement containing restrictions on use and
disclosure and are also protected by copyright, patent and other
intellectual property law. Reverse engineering, disassembly or
decompilation of the Programs, except to the extent required to obtain
interoperability with other independently created software or as
specified by law, is prohibited.
Program Documentation is licensed for use solely to support the
deployment of the Programs and not for any other purpose.
The information contained in this document is subject to change without
notice. If you find any problems in the documentation, please report
them to us in writing. Oracle Corporation does not warrant that this
document is error free. Except as may be expressly permitted in your
license agreement for these Programs, no part of these Programs may be
reproduced or transmitted in any form or by any means, electronic or
mechanical, for any purpose, without the express written permission of
Oracle Corporation.
If the Programs are delivered to the US Government or anyone licensing
or using the Programs on behalf of the US Government, the following
notice is applicable:
RESTRICTED RIGHTS NOTICE
Programs delivered subject to the DOD FAR Supplement are
”commercial computer software” and use, duplication and disclosure of
the Programs, including documentation, shall be subject to the licensing
restrictions set forth in the applicable Oracle license agreement.
Otherwise, Programs delivered subject to the Federal Acquisition
Regulations are ”restricted computer software” and use, duplication,
and disclosure of the Programs shall be subject to the restrictions in FAR
52.227-19, Commercial Computer Software - Restricted Rights (June,
1987). Oracle Corporation, 500 Oracle Parkway, Redwood City, CA
94065.
The Programs are not intended for use in any nuclear, aviation, mass
transit, medical, or other inherently dangerous applications. It shall be
licensee’s responsibility to take all appropriate fail-safe, back up,
redundancy and other measures to ensure the safe use of such
applications if the Programs are used for such purposes, and Oracle
disclaims liability for any damages caused by such use of the Programs.
The Programs may provide links to Web sites and access to content,
products, and services from third parties. Oracle is not responsible for
the availability of, or any content provided on, third-party Web sites.
You bear all risks associated with the use of such content. If you choose
to purchase any products or services from a third party, the relationship
is directly between you and the third party. Oracle is not responsible
for: (a) the quality of third-party products or services; or (b) fulfilling
any of the terms of the agreement with the third party, including
delivery of products or services and warranty obligation related to
purchased products or services. Oracle is not responsible for any loss or
damage of any sort that you may incur from dealing with any third
party.
Oracle is a registered trademark and ConText, Enabling the Information
Age, Oracle7, Oracle8, Oracle8i, Oracle Access, Oracle Application
Object Library, Oracle HRMS, Oracle Discoverer, Oracle Web
Customers, Oracle Web Employees, Oracle Workflow, Oracle Work in
How can you ensure that the rules you create are valid?
AME has built-in testing features that enable you to confirm the
behavior of new or edited business rules before live execution.
My customer does not have Oracle HR, but has licensed the financials suite and
wants to use AME. Can they?
Approval Rules
Once you have defined a set of rules for a transaction type, and
the application associated with the transaction type is configured
to use AME, the application communicates directly with AME to
manage the transaction type’s approval processes. Typically the
application communicates with AME when a transaction is
initiated in the application, and then each time an approver
responds to the application’s request for approval of the
transaction, until all approvers have approved the transaction.
The reason why AME recalculates the approver list each time an
approver responds is to account for several possible
circumstances that can affect a transaction’s approver list:
• An attribute value changes, thereby affecting which
conditions are true and so which rules apply to the
transaction.
• A condition or rule is added, changed, or deleted, again
affecting which rules apply to the transaction.
• A change occurs in the organizational hierarchy used by
the transaction type’s set of rules, thereby changing the
membership of the applicable chain of authority.
• Currency exchange rates change, thereby affecting which
conditions on currency attributes are true and so which
rules apply to the transaction.
13
Implementing Oracle Approvals Management
Implementing Oracle Approvals Management
To implement AME, you need to carry out the following steps:
14
Implementing Oracle Approvals Management
Unless otherwise stated, users with General Business and
Limited Business responsibilities can access all of the
functionality.
Create Conditions
15
Implementing Oracle Approvals Management
the hierarchy; and an approval specifies where the chain starts
and ends. If your organization wishes to require approvals from
an organizational hierarchy that none of AME’s seeded approval
types ascend, you need to use a custom approval type. The
procedure to create a custom approval type is detailed elsewhere
in this guide.
16
Implementing Oracle Approvals Management
using the Test tab to view the approver list for real transactions,
and to create test transactions having combinations of attribute
values that represent diverse business cases.
17
Implementing Oracle Approvals Management
3
Attributes
19
Attributes
Attributes
Attribute Types
Attribute Usages
20
Attributes
at run time (an attribute usage). This makes it possible for several
transaction types to share conditions and rules, so that an
organization can define a single set of rules that applies to
several transaction types (a uniform approvals policy). It also
means that an attribute name can be defined in AME, while a
given transaction type may not have yet defined a usage for the
attribute. A transaction type only has access to conditions
defined on attributes for which the transaction type has defined
usages. Only users with the System Administrator responsibility
can create and edit attribute usages (using the Attributes tab).
21
Attributes
amount,code,type
where code is a valid currency code and type is a valid
currency-conversion type. There should be no space
characters other than those in the code and type values. The
amount should use a period, not a comma, as a decimal
point (if any). For example:
5000.00,USD,Corporate
is a valid currency value.
7. Static usages may be null. To create a null static usage, leave
the usage field empty on the Create an Attribute, Edit an
Attribute, or Mandatory Attribute Query Entry page.
22
Attributes
attribute’s dynamic usage converts the attribute’s date value
using this format model, because AME stores the date as a
varchar2, and attempts to convert the stored value back to a
date using the same format model. For example:
Select
ame_util.versionDateToString(sysdate) from
dual
is a correct dynamic usage for a date attribute.
6. Queries for number and currency attributes must select the
number or currency amount converted to a varchar2 by:
fnd_number.number_to_canonical.
7. Queries for header-level attributes may (but are not required
to) contain the transaction-ID placeholder
ame_util.transactionIdPlaceholder, which is ’:transactionId’.
The transaction-ID placeholder is a true dynamic PL/SQL
bind variable. That is, at run time, AME binds a transaction-
ID value to this variable before dynamically executing the
query. A condition of a where clause referencing this bind
variable must have the form:
transaction ID = :transactionId
where transaction ID is a column that contains the transaction
ID passed to AME at run time by the application whose
transaction type uses the query. Queries for line-item-level
attributes may also (but are not required to) contain the line-
item-ID placeholder ame_util. lineItemIdPlaceholder, which
is ’:lineItemIdList’. The line-item-ID placeholder is not a true
bind variable; it is merely a placeholder for which AME
substitutes a line-item-ID list such as ”(‘1’, ‘2’, ‘3’)”, before
parsing the query. A condition of a where clause referencing
this placeholder must have the form:
line-item ID in :lineItemIdList
where line-item ID is a column that contains the transaction
type’s line-item IDs. If a query includes the line-item-ID
placeholder, it must also include an order-by clause of the
form:
order by line-item ID
(That is, the query must order the attribute values in
ascending order of the associated line-item IDs.) AME will
not let you save a query referencing the line-item-ID
placeholder that does not contain an order-by clause. If your
order-by clause does not reference the same (line-item-ID)
column as the where-clause condition that references the
line-item-ID placeholder, AME will raise an exception at run
time.
23
Attributes
from some_app_line_items
where
header_id = :transactionId and
line_item_id in :lineItemIdList
order by line_item_id
Attribute Classifications
Mandatory Attributes
ALLOW_DELETING_RULE_GENERATED_APPROVERS
ALLOW_REQUESTOR_APPROVAL
AT_LEAST_ONE_RULE_MUST_APPLY
EFFECTIVE_RULE_DATE
This is the date that determines which rules are active for a given
transaction, in the following sense. When AME begins to process
a transaction, it first determines which rules have start dates that
precede the effective date; and that have end dates which are
either null or which follow the effective date. These rules are
active for the transaction. AME then evaluates each active rule’s
24
Attributes
conditions to see whether the rule actually applies to the
transaction.
EVALUATE_PRIORITIES_PER_LINE_ITEM
TRANSACTION_DATE
This is the date a transaction was first submitted. Note that AME
always fetches a transaction’s current attribute values, and then
applies the appropriate transaction type’s rules active as of
EFFECTIVE_RULE_DATE, to (re)generate the transaction’s
approver list. It does not use the attribute values or rules existing
at the transaction date. You may however wish to sort your
transactions according to, for example, the financial-reporting
period in which they originate, in your rules. This attribute gives
you a convenient way to do so.
TRANSACTION_GROUP_ID
TRANSACTION_ORG_ID
25
Attributes
at run time. AME uses this attribute to evaluate rule constraints
at run time (see Constraints: page - 133).
TRANSACTION_REQUESTOR_PERSON_ID
TRANSACTION_REQUESTOR_USER_ID
TRANSACTION_SET_OF_BOOKS_ID
USE_RESTRICTIVE_LINE_ITEM_EVALUATION
WORKFLOW_ITEM_KEY
26
Attributes
WORKFLOW_ITEM_TYPE
Required Attributes
Active Attributes
Attribute Levels
27
Attributes
How does AME use Attributes?
28
Attributes
Maintaining Attributes
You can view, create, edit and delete attributes using the
Attributes tab. This tab is available only to users with the
Application Administrator responsibility.
Note: If the transaction type does not have a line item ID query
string defined, references to attribute level in the following text
should be ignored.
” To create an attribute:
1. Display the list of attributes.
2. Choose the Add Attribute button. This starts the Create an
Attribute wizard.
3. Select the attribute’s level (header or line-item) if the
transaction type has enabled line-item attributes.
4. Select a pre-existing attribute name, or enter a new attribute
name. If you plan to create one or more rules referencing the
attribute, and to share the rule(s) across several transaction
types, you just need to create the attribute’s name for the first
transaction type, and then select it from the list of shareable
attribute names for all remaining transaction types. (You
must enter a distinct usage for the attribute name, for each
transaction type.)
All attribute names, including those you create, are
shareable; so make sure that your attribute name’s degree of
generality reflects your intentions. For example, if you want
to create an attribute specific to the Web Expenses
transaction type, you might begin your attribute name with
the prefix ’WEB_EXPENSES_’.
Note: If you enter an attribute name in lower or mixed case,
AME changes it to all upper case when it saves your work.
The names of attributes whose values will be person IDs or
user IDs should end in ’PERSON_ID’ or ’USER_ID’,
29
Attributes
respectively; for example, ’HR_MANAGER_PERSON_ID’
and ’EMPLOYEE_STOCK_ANALYST_USER_ID’. This
convention signals the Test tab’s test-transaction
functionality to let the end user query for persons and users
by name, and then to display a user-friendly description of
the person or account selected by the end user.
5. Select an attribute type. Remember to use the currency type
for attributes reflecting monetary values.
6. Select the radio button indicating the type of attribute usage
you want to use.
7. Enter the attribute usage. (See Attribute Usages: page 75 for
details of the syntax rules for attribute usages.)
8. Choose the Create Attribute button.
” To edit an attribute:
1. Display the list of attributes.
2. Select the name of the attribute that you want to edit.
3. Make your changes on the Edit an Attribute page.
4. Choose the Submit Changes button to save your changes.
When you are satisfied with your changes, you can choose the
Quit button to return to the attribute list.
If you change an attribute’s type, make sure you also change its
usage (for every transaction type that uses the attribute name) to
provide data of the appropriate type. If you change a usage’s
type from static to dynamic, make sure you change the usage
accordingly.
30
Attributes
” To delete an attribute:
1. Display the list of attributes.
2. Select the check box next to the attribute name, in the Delete
column.
3. Choose the Delete Checked Attributes button.
4. Confirm the deletion when prompted.
For example:
31
Attributes
4
Conditions
33
Conditions
Conditions
Condition Types
When you create or edit a condition of the first form, you decide
whether to include each equals sign in the condition by selecting
the appropriate values for the Include Lower Limit and Include
Upper Limit radio buttons. If you create a set of conditions of
this form on the same attribute, and the conditions have
successive ranges of values, you generally should only include
the value between each successive pair in one of the pair. For
example, the conditions:
34
Conditions
1,000 <= TRANSACTION_AMOUNT < 2,000
2,000 <= TRANSACTION_AMOUNT < 3,000
35
Conditions
Maintaining Conditions
You can view, create, edit and delete conditions using the
Conditions tab.
” To create a condition:
1. Display the list of conditions.
2. Choose the Add a Condition button. This starts the Create a
Condition wizard. This wizard guides you through the
following steps, for ordinary and exception conditions:
3. Select a condition type. If the transaction type has enabled
line-item attributes, you must select whether to create an
ordinary or exception condition on a header-level or line-
item-level attribute. Most of the time, you will create an
ordinary condition (or an ordinary condition on a header-
level attribute). Make sure you understand how the rule
types (see Rule Types: page - 129) use different condition
types, before deciding which type of condition to create.
4. Select the condition’s attribute.
36
Conditions
7. Select whether to include each limit in the range of values
making the condition true. (Including a limit is equivalent to
including an equals sign, as discussed above.)
8. For conditions on currency attributes, select the currency
code representing the denomination of the lower and upper
limits. (See How does the Euro Affect Conditions on
Currency Attributes?: page 89 to make sure you avoid using
certain pre-euro currency codes.)
You can now choose the Quit button to return to the conditions
list. Your new condition will appear in the appropriate sub list of
the conditions list.
” To edit a condition:
1. Display the list of conditions.
2. Select the condition you want to edit. The condition-editing
wizards closely parallel the condition-creation wizards
described above.
” To delete a condition:
1. Display the list of conditions, ensuring that you select a
transaction type that has defined a usage for the attribute
used by the condition you want to delete.
2. Select the check box next to the condition, in the Delete
column.
3. Choose the Delete Checked Conditions button.
4. Confirm the deletion when prompted.
37
Conditions
5
Approvals
39
Approvals
Approvals
Approval Parameters
Approval Descriptions
Approval Types
40
Approvals
AME includes a set of seeded approval types, many of which
enable you to ascend commonly used organizational hierarchies.
If none of the seeded approval types meets your organization’s
requirements, you need a custom approval type. (The most
common reason to create a custom approval type is to represent
a particular organizational hierarchy.) An AME user with the
Application Administrator responsibility must use the
Approvals tab to define a new approval type. (See How to Create
a Custom Approval Type: page - 140 for the technical details.)
Required Attributes
41
Approvals
By default, the ascent starts with the supervisor of the
transaction’s requestor, whom the mandatory attribute:
TRANSACTION_REQUESTOR_PERSON_ID
has a non-null value at run time, the ascent starts instead with
the person whom this attribute identifies. You can instead cause
the ascent sometimes to start with someone besides the
transaction requestor. To do this, compile a function that returns
a non-null person ID only for the desired set of transactions, and
null otherwise. Then have the above attribute’s (dynamic) usage
select the function from dual.
42
Approvals
n{+,-}
Required attributes:
JOB_LEVEL_NON_DEFAULT_STARTING_POINT_PERSON_I
D
43
Approvals
Required attributes: INCLUDE_ALL_JOB_LEVEL_APPROVERS,
JOB_LEVEL_NON_DEFAULT_STARTING_POINT_PERSON_I
D
Required attributes:
INCLUDE_ALL_JOB_LEVEL_APPROVALS,
LINE_ITEM_STARTING_POINT_PERSON_ID
Supervisory Level
Required attributes:
SUPERVISORY_NON_DEFAULT_STARTING_POINT_PERSON
_ID, TOP_SUPERVISOR_PERSON_ID
44
Approvals
Dual Chains of Authority
Rule G
If
TRANSACTION_CATEGORY in {TRANSFER}
then
Require approvals at most 3 levels up in
the first chain
Rule H
If
TRANSACTION_CATEGORY in {TRANSFER}
then
Require approvals at least 2 levels up in
the second chain.
You may include several rules for each subchain. When you do,
AME determines which has the most stringent requirement for
that subchain, and enforces that requirement.
45
Approvals
{1,2}{A,R}n{+,-}
Non-Final Authority
Final Authority
46
Approvals
You can use the final-authority approval to grant signing
authority to both persons and user accounts, as long as the
application that owns the transaction type that in turn owns the
rules can include user accounts in its approver lists. (All
applications support person approvers, but not all applications
support user-account approvers. Web Expenses, for example,
currently does not.)
Substitution
For example:
’user_id:123’ and ’person_id:123’
47
Approvals
Approval Types for Approval-Group Rules
Pre-Chain-of-Authority Approvals
Post-Chain-of-Authority Approvals
48
Approvals
run time. This approval type has no seeded approvals; you must
create them before using the approval type.
49
Approvals
Maintaining Approvals
You can now choose the Quit button to return to the list of
approval types.
Note: You never need to add approvals to the pre- and post-
chain-of-authority approval types. When you create an
approval group, the corresponding pre- and post-chain-of-
authority approvals are automatically created.
50
Approvals
” To edit an approval type:
1. Choose the Approvals tab.
2. Select the name of the approval type you want to edit.
3. Make your changes.
4. Choose the Submit Changes button.
You can now choose the Quit button to return to the list of
approval types.
Note: You cannot edit seeded approval types.
” To edit an approval:
1. Choose the Approvals tab.
2. Select the name of the approval type whose approval you
want to edit.
3. Select the description of the approval you want to edit.
4. Make your changes.
5. Choose the Update Approval button.
You can now choose the Quit button to return to the edit-an-
approval-type page.
Note: You cannot edit seeded approvals, or pre- and post-
chain-of-authority approvals. Pre- and post-chain-of-
authority approvals are automatically updated when the
corresponding approval group is updated.
51
Approvals
approvals are automatically deleted when the corresponding
approval group is deleted.
52
Approvals
6
Approval Groups
53
Approval Groups
Approval Groups
When you create an approval group, AME creates for you the
corresponding approvals of the pre- and post-approval approval
types automatically. These approvals are available to all
transaction types.
B = {1, 2}
54
Approval Groups
C = {3, 4, B}
A = {B, C} = {{1, 2}, {3, 4, B}} = {{1, 2}, {3, 4, {1, 2}}} = {1, 2, 3, 4}
If ITEM_CATEGORY in {COMPUTER_HARDWARE}
and ITEM_AMOUNT <= 1,000 USD
then require post-approval from the COMP_APP_1 group.
If ITEM_CATEGORY in {COMPUTER_HARDWARE}
and 1,000 USD < ITEM_AMOUNT <= 10,000 USD
then require post-approval from the COMP _APP_2 group.
If ITEM_CATEGORY in {COMPUTER_HARDWARE}
and 10,000 USD < ITEM_AMOUNT
then require post-approval from the COMP_APP_3 group.
55
Approval Groups
The rules for the syntax and semantics of the query's results are
simple. If the query is null, the group has no members when the
radio button selects the value dynamic. (This lets you "switch
off" a group without deleting its static members.) Otherwise, the
query must select rows of the form approver_type:id, where
approver_type is one of the strings 'person_id' and 'user_id', and id
is a valid ID of the type specified by approver_type. For example,
person_id:502 and user_id:205 are syntactically correct values.
The query can reference the transaction-ID placeholder
:transactionId. The query should select approvers in the order
that you want them to appear in a transaction's approver list.
You can toggle the Active List button's values without deleting
either the static list or the query string. The radio button's value
merely determines which list the engine uses at run time.
There is a new required boolean attribute for the pre- and post-
chain-of-authority approval types,
ALLOW_EMPTY_APPROVAL_GROUPS. When this attribute
has the value 'true', AME allows an approval group not to have
any members. When the attribute has the value 'false', AME
raises an exception if an approval group does not have any
members.
56
Approval Groups
Maintaining Approval Groups
You view, create, edit and delete approval groups using the
Groups tab.
You can now choose the Quit button to return to the list of
approval groups.
57
Approval Groups
You can now choose the Quit button to return to the list of
approval groups.
58
Approval Groups
” To add members to an approval group:
1. Choose the Groups tab.
2. Select the name of the approval group to which you want to
add a member.
3. Choose the Add Member button or Add Nested Group.
4. Either use the approver-query wizard to find the person or
user account you want to add or select the required approval
group.
5. Select the order number to insert the member/group at.
5. Repeat steps 3-5 until you have added all of the
members/groups that you require.
You can now choose the Quit button to return to the list of
approval groups.
The group members now appear in the new order. You can now
choose the Quit button to return to the list of approval groups.
You can now choose the Quit button to return to the list of
approval groups.
59
Approval Groups
You can delete several approval groups at once.
60
Approval Groups
7
Rules
61
Approval Rules
Approval Rules
Rule Types
Rule Priorities
62
Approval Rules
Rule Usages
List-Creation Rules
63
Approval Rules
Rule A
If
TRANSACTION_AMOUNT < 1000 USD
then
require approvals up to at least job level
2.
List-Creation Exceptions
64
Approval Rules
cases than a list-creation rule. Third, it is sometimes desirable to
adjust the scope of either the exception or the list-creation rule(s)
that it suppresses, without simultaneously adjusting the scope of
the other(s).
Rule B
If
TRANSACTION_AMOUNT < 500 USD and
Exception: COST_CENTER is in {0743}
Then
require approvals up to at least job level
1.
List-Modification Rules
65
Approval Rules
Here are some examples of list-modification rules that illustrate
the possibilities:
Rule C
If
PURCHASE_TYPE is in {OFFICE FURNISHINGS,
OFFICE
SUPPLIES} and
Any approver is: Kathy Mawson
then
Grant the approver final authority.
Rule D
If
TRANSACTION_AMOUNT > 1000 USD and
The final approver is: Kathy Mawson
then
Require approvals at least one level up.
Substitutions
Rule E
If
TRANSACTION_AMOUNT < 500 USD and
CATEGORY in {MISCELLANEOUS OFFICE EXENSES}
and
Any approver is: John Doe
66
Approval Rules
then
Substitute Jane Smith for the approver.
Rule F
If
TRANSACTION_AMOUNT < 1000 USD and
CATEGORY_NAME in {Marketing Event}
then
Require pre-approval from Marketing
Approvals Group.
67
Approval Rules
AME here assumes that the approver should approve at the
earliest opportunity.
Example Rule
68
Approval Rules
1. The pre-existing list-creation rule for the normal case would
already have required a TRANSACTION_AMOUNT
currency attribute, and a condition defined on that attribute.
However, the Purchase Requisition transaction type might
not include a suitable seeded attribute for a transaction’s
category. Supposing it does not, create a string attribute
named (say) ’CATEGORY’. (If the attribute name already
exists, share the attribute name. If not, create it with a
sufficiently generic description for other transaction types to
share the name, because the attribute name itself is
sufficiently generic for several transaction types to want to
use it.) Enter for the attribute a (dynamic) usage that selects a
Purchase Requisition’s category from the appropriate tables
or views.
2. Create an exception condition on the CATEGORY attribute
having only one allowed value, (say) ’COMPUTER
EQUIPMENT’.
You can now create the rule itself:
3. Enter the description ’computer equipment up to 5000 USD’.
4. Select the list-creation exception rule type.
5. Let the start date default to today.
6. Leave the end date blank, so the rule is in force indefinitely.
7. Select the absolute-job-level approval type.
8. Select the approval, ’Require approvals up to at least job
level 4.’.
9. Select the ordinary-condition attribute
TRANSACTION_AMOUNT.
10. Select the ordinary condition, ’0 <=
TRANSACTION_AMOUNT < 5000’.
11. Select the exception-condition attribute CATEGORY.
12. Select the exception condition, ’COMPUTER EQUIPMENT’.
69
Approval Rules
Maintaining Rules
You can view, create, edit and delete rules using the Rules tab.
The transaction type’s rules list appears. You add, edit, and
delete rules from the rules list.
There are two versions of the rules list: short and long. The short
list displays only the descriptions of the rules. The long list also
displays the conditions, actions, and active attributes for each
rule. The short list is displayed by default. To view the long list,
choose the Display Long List button. (To return to the short list,
choose the Display Short List button).
” To create a rule:
1. Display the list of rules.
2. Choose the Add a Rule button.
3. Enter a description for the rule. Make sure the description
uniquely identifies the rule, and that it communicates the
business case to which the rule applies.
4. Select a rule type. See Rule Types: page 129 for explanations
of the rule types.
5. (Optional) Enter a start date. The start date defaults to today,
but you can enter a future start date. You cannot enter a start
date before today. Note that start dates always start at
midnight; that is, a rule starts being in force at the beginning
of its start date.
6. (Optional) Enter an end date. The end-date field is blank by
default. If you leave the end date blank, the rule is in force
indefinitely, once its start date arrives. End dates, like start
dates, start at midnight; that is, a rule stops being in force at
the beginning of its start date.
7. Select an approval type.
8. Select a specific approval of the type you selected in the
previous step. For example, if you selected the absolute-job-
level approval type, you must now select the absolute-job-
level approval that reflects the job level you want the rule to
require, and whether the rule should require at most or at
least this job level.
9. If priority handling has been set, enter the priority for this
rule. Please review the Administration chapter for further
information.
10. Select the attributes used by the ordinary conditions that you
want to include in the rule.
70
Approval Rules
11. Select the ordinary conditions that you want to include in the
rule.
12. If the rule is an exception, select the attributes used by the
exception conditions that you want to include in the rule.
13. If the rule is an exception, select the exception conditions that
you want to include in the rule.
14. If the rule is a list-modification or substitution rule, select the
rule’s list-modification condition.
” To edit a rule:
1. Display the list of rules.
2. Select the description of the rule you want to edit.
3. Select the item you want to edit.
4. Edit the item, or select a replacement for it (depending on
which item you selected in the previous step).
” To delete a rule:
1. Display the list of rules.
2. Select the check box next to the description of the rule you
want to delete, in the Delete column.
3. Choose the Delete Checked Rules button.
4. Confirm the deletion when prompted.
71
Approval Rules
8
Testing
73
Testing
Testing Rules and Transactions
These features enable you to view how AME processes real and
fictitious transactions, without producing any notifications or
otherwise interacting with another application.
74
Testing
Fetching a Transaction’s Attribute Values
75
Testing
Viewing a Transaction’s Approvals
To view the list of rules that apply to a real transaction, and the
resulting approver list:
1. Choose the Test tab.
2. Select a transaction type.
3. Select the View a transaction’s approvals radio button, then
choose the Continue button.
4. Enter the ID of the transaction whose approval process you
want to view, then choose the View Approval Process
button.
5. The list of applicable rules appears. To view the resulting
approver list, choose the View Approver List button at the
bottom of the rule list.
76
Testing
Creating a Test Transaction
77
Testing
9
Administration
79
Administration
Administration
Configuration Variables
adminApprover
currencyConversionWindow
80
Administration
distributedEnvironment
AME has its own exception log, and in most cases it logs runtime
transactions to that log. If the application that owns a given
transaction type calls AME from within a workflow, AME also
logs exceptions to Workflow (see Runtime Exceptions: page 116
for details); and it uses an autonomous transaction to commit
exception data to its own log, to avoid interfering with
Workflow’s transaction management.
forwardingBehaviors
AME will seeds default values that are expected to be the normal
usage for each forward type. Oracle Application teams seeding
transaction types can override these defaults to ones more
suitable for the particular business process.
81
Administration
There are a number of different types of forwarding scenario that
might occur during the approval process. For each of the listed
scenario below, the AME engine can be instructed to amend the
approver list in a pre-defined way. Not all possible outcomes are
applicable for each forwarding scenario, these all indicated
below.
Remand
All approvers starting with the forwardee up to but not
including the forwarder are added to the approval list.
Ignore forwarding
The forwarding is not executed. If the forwarder
forwards without approval the chain of authority will
be extended past the forwarder to the next person in
the hierarchy.
Repeat Forwarder
The forwarder is included again in the same chain of
authority.
Skip Forwarder
The forwarder is skipped when the chain of authority is
extended from the forwardee.
82
Administration
Previous approver, same chain of authority
The forwardee appears in the approver list but is not within the
same hierarchy as the forwarder. This may be the case if the
forwardee is a pre-approver or is included within a different
chain of authority or is included within a group that has been
inserted into the chain of authority.
83
Administration
The forwarder forwards without approval
The allowable outcomes are: Remand, Forward to
forwardee and forwarder, Forward to forwardee only
(default), Ignore forwarding
Ad-Hoc Forwarder
helpPath
(port numbers are only required for ports other than the default
port 80). For example:
http://myAppsServer/helpFiles/
84
Administration
is a syntactically valid helpPath value. A transaction type cannot
override this variable’s default value.
htmlPath
imagePath
portalUrl
purgeFrequency
85
Administration
repeatedApprovers
rulePriorityModes
Disabled
Priority processing is disabled for the rule type
Absolute
Used to exclude rules that have a rule priority value
numerically greater than that of the threshold. This
mode can be used to remove rules from temporary use.
Relative
Used to preserve the top ‘n’ rules where ‘n’ is the threshold
value. For example if AME were to determine that 5 rules
were satisfied by a transaction and the threshold was set to 3
then the first three rules, in order of priority, would be
include and the rest discarded.
Threshold
The threshold value for either Absolute or Relative
priority rule processing. The threshold value is a
positive integer and defines the point where rules are
included in rule processing. The effect of this threshold
86
Administration
is described above in the settings for Absolute and
Relative processing.
useWorkflow
Transaction Types
Transaction-Type Descriptions
87
Administration
A custom application may use AME to manage its approval
process. Such an application would presumably not have an
fnd_application.application_id value, so it would have to pass an
unassigned integer (such as a negative integer) to AME’s API.
See The AME API: page - 160 for details.
Line-Item-ID Query
Runtime Exceptions
88
Administration
2. logs each exception to its internal exception log (where
possible), and to Workflow (when the AME API was called
from a workflow in another application).
3. (if AME was responding to a request from another
application) identifies as the next required approver the
person or user account identified by the appropriate value of
the adminApprover configuration variable, and sets the
approval status of this approver to ame_util.exceptionStatus.
(This is the only circumstance where AME uses this
approval-status value.)
The requesting application may or may not notice that AME has
identified an administrative approver as the next required
approver, or that AME has set the approver’s status to indicate
that an exception has occurred. If it does, it typically will respond
by stopping the transaction’s workflow and notifying a
Workflow system administrator. In this case, the person or user
identified by the adminApprover configuration variable will not
at this time receive a notification regarding this transaction
(unless that person happens to be the Workflow system
administrator as well). The application may elect instead merely
to send a notification to the administrative approver identified
by AME, indicating that an exception has occurred for the
transaction.
89
Administration
5. Clear the transaction’s exception log in AME (see Clear a
Transaction’s Exception Log: page 122 for details).
90
Administration
Updating Configuration-Variable Values
The Admin tab’s first radio button enables you to set default
values for AME’s configuration variables. To edit a configuration
variable’s default value:
1. Choose the Admin tab.
2. The Update default configuration-variable values radio
button is selected by default. Choose the Continue button.
3. Select the name or description of the variable whose value
you want to change.
4. Edit the value.
5. Choose the Submit Changes button.
The Admin tab’s second radio button enables you to set values
for certain configuration variables, for a given transaction type.
The values you set here will override the default values, for the
transaction type. To edit a transaction type’s configuration-
variable values:
1. Choose the Admin tab.
2. Select the Update transaction-type configuration-variable
values radio button, and choose the Continue button.
3. Select a transaction type.
4. The Edit Transaction Type Configuration Variables page
appears. It asks you several questions whose answers
determine the values of the useWorkflow, purgeFrequency,
adminApprover, etc. configuration variables. Edit the
answers to those questions to your satisfaction, and choose
the Continue button. (AME saves the changes related to the
useWorkflow and purgeFrequency variables when you
submit this page.)
5. If you selected ”a new business owner” as your answer to
the final question, the business-owner-query wizard starts.
Use the wizard to search for the person or account that you
want to be the administrative approver for the transaction
type. (AME saves the new adminApprover value when you
complete this wizard.)
The Admin tab’s third radio button enables you to edit existing
transaction types and add new ones. All transaction types must
91
Administration
be registered with AME, before they will appear on AME’s pop-
down transaction-type lists. Generally you do not need to use
this radio button to register new transaction types; Oracle
Application patches and upgrades will generally do it for you.
You may want to register a transaction type for a custom or
third-party application. In this case, you will need to use this
radio button.
92
Administration
” To delete a transaction type:
93
Administration
” To view the Web interface’s exception log:
In the unlikely event that the Web interface raises one or more
exceptions, you should clear the Web interface’s exception log
only after solving the problem that occasioned the exceptions,
probably with the help of Oracle Support. To clear the log:
94
Administration
1. Choose the Admin tab.
2. Select the Clear the Web interface’s exception log radio
button, and choose the Continue button.
3. Confirm the action when prompted.
95
Administration
Appendix A
How AME Processes
its Rules at Run Time
97
How to Create a Custom Approval Type
How AME Processes Rules at Run Time
98
How to Create a Custom Approval Type
is true. (AME keeps a record of such dynamic approver
deletions between calls to its API, so the deleted approvers
are removed from the approver list each time AME
calculates the list. For details about AME’s dynamic-
approver-deletion capabilities, see The AME API: page 163.)
7. Compare the current approver list with AME’s approver-
status history to identify the first approver on the current list
that has not approved the transaction. If such an approver
exists, return this approver’s identity to the requesting
application. Otherwise, return null to the requesting
application to indicate that the transaction’s approval
process is complete.
99
How to Create a Custom Approval Type
AME processes list-modification, substitution, pre-approval, and
post-approval rules in much the same way that is processes list-
creation and exception rules. In each case, AME sorts the rules by
approval type, and processes all rules of a given approval type
together. The appropriate approval type’s handler performs each
of the approvals required by the rules using that type.
100
How to Create a Custom Approval Type
Appendix B
How To Create A
Custom Approval
Type
101
How to Create a Custom Approval Type
How to Create a Custom Approval Type
102
How to Create a Custom Approval Type
organization’s business rules. Finally, you should write a custom
approval-group handler if your organization wants to include
nonstandard approval-group functionality in its approval
processes—for example, selecting a random subset (of fixed size)
of an approval group to pre- or post-approve a transaction, or
implementing approval groups with hierarchical structure.
List-Creation-Handler Efficiency
Caution
103
How to Create a Custom Approval Type
ame_api routines
tempTransactionTypeId varchar2(50) possibly null transaction-type identifier;
value of transactionTypeIn input
argument in ame_api routines;
combination of an FND application ID
and a transaction-type ID corresponds to a
unique AME application ID in
ame_calling_apps
tempApproverList ame_util.approversTable approver list for current transaction;
modified directly by list-modification and
approval-group handlers, but not by
authority handlers; kept compact
The values of the first four variables in Table 2 are set before the
engine calls a handler. A handler should only read them, and
never modify them.
Warning: ?Modifying these values will result in engine
exceptions at run time.
104
How to Create a Custom Approval Type
Whenever practical, such decision variables should be
represented within AME as attributes. Then, when you create the
approval type, AME will prompt you to select the attributes that
your new approval type requires. Thereafter AME will require
all applications using your approval type to first provide AME
with usages for these attributes, before the applications can use
your approval type in their rules. This approach makes it
possible for several transaction types to share your handler
safely.
Identifying Approvers
If your handler can only process one type of ID, and it receives
an input argument containing only the other type of ID, your
handler should call one of the ame_engine conversion routines
getPersonId and getUserId (as appropriate) to convert the ID to
the other type. The getPersonId function returns the (possibly
null) fnd_user.employee_id value corresponding to the user_id
userIdIn, or null if it finds no rows with user_id value userIdIn.
The getUserIds procedure fetches the fnd_user.user_id values of
all rows having employee_id value personIdIn, and returns the
user_id values in userIdsOut. If getUserIds finds no matching
rows, it returns ame_util.emptyIdList (which is just an empty
PL/SQL table). If your code calls getUserIds, it should use the
user_id in the first row of userIdsOut, unless your code includes
logic to sort through the user_ids in userIdsOut and determine
which of them to use, according to rules specific to your
approval type.
If your handler requires one type of ID, it receives only the other
type of ID as an input argument, and the appropriate
ame_engine conversion routine fails to convert the ID to the
other type, your code should raise an exception according to the
instructions under Raising Exceptions: page 145.
105
How to Create a Custom Approval Type
(De)serializing Handler Arguments
106
How to Create a Custom Approval Type
authority varchar2(1),
approval_status varchar2(50));
Raising Exceptions
ame_engine.tempAmeApplicationID,
localErrorIn => false);
raise;
107
How to Create a Custom Approval Type
routineNameIn => ’[routine
name]’,
exceptionNumberIn =>
errorCode,
exceptionStringIn =>
sqlerrm),
transactionIdIn =>
ame_engine.tempTransactionID
applicationIdIn =>
ame_engine.tempAmeApplicationID,
localErrorIn => false);
raise_application_error(errorCode,
errorMessage);
Ultimately, you must define the syntax and semantics rules for
the parameters of your handler’s approvals. Make sure you
define these rules in a way that lets your handler code sort,
aggregate, and interpret a set of parameters efficiently, because
the AME engine always passes a handler all of the parameter’s of
the approvals of a given approval type as a set.
108
How to Create a Custom Approval Type
Sample handler code
Package-Naming Conventions
Package Specification
Common Arguments
109
How to Create a Custom Approval Type
getFirstApprover Functionality
getNextApprover Functionality
hasFinalAuthority Functionality
getSurrogate Functionality
110
How to Create a Custom Approval Type
ame_util.approverRecord approverIn. When an application calls
ame_api.updateApprovalStatus or
ame_api.updateApprovalStatus to update the approval_status
value of a given approver to ame_util.noResponseStatus, the
AME engine calls the appropriate handler’s getSurrogate
procedure to identify a surrogate for the unresponsive approver.
Often the surrogate will merely be the unresponsive approver’s
superior in the appropriate hierarchy, and will already be the
next approver; and in this case, the engine will not modify the
chain of authority. Otherwise, it will insert the surrogate into the
chain of authority right after the unresponsive approver.
Procedure Syntax
In this case, you should enter the package and procedure name
in package.procedure format, when you use the Approvals tab to
register the handler. In either case, modType represents the type
of list modification that the handler implements. For example, a
standalone list-modification handler that implements standard
111
How to Create a Custom Approval Type
delegations within the military chain of command might be
named ’ame_std_del_lm_handler’, and the packaged version
might be named ’ame_custom_lm_handlers.std_del_handler’.
Functionality
112
How to Create a Custom Approval Type
Sample handler code
Procedure Syntax
Functionality
113
How to Create a Custom Approval Type
interface for maintaining both kinds of handler state. The
programming interface lets a handler maintain one per-
transaction handler state per transaction (naturally), and
arbitrarily many kinds of handler state per handler. State values
are case-sensitive, so for example the state ’first approver’ differs
from the state ’First Approver’.
AB
ABC
ABCD
ABCDE
A B C D E null
A setState
getState B setState
getState C setState
getState D setState
getState E setState
Handler-State Routines
114
How to Create a Custom Approval Type
Here are some notes about the data types and values for these
routines’ arguments:
1. handlerNameIn is the name of the actual handler package, is
case-insensitive, and can be at most 50 characters in length. It
is a required argument in all cases but one
(clearHandlerTransState).
2. parameterIn is a varchar2(100). It is absent in the per-
transaction interface, and optional in the per-handler
interface. If a handler wishes to maintain only one kind of
transaction-independent handler state, parameterIn should
always be null. Otherwise, parameterIn should have a
unique (case-sensitive) value corresponding to each kind of
transaction-independent handler state.
3. stateIn is a varchar2(100). It defaults to null in both
interfaces. This variable’s value represents the actual state.
115
How to Create a Custom Approval Type
Sets (creates or updates) the per-handler handler state for the
handler named handlerNameIn and the (possibly null) parameter
parameterIn, for the current transaction type.
Handler-State Aging
116
How to Create a Custom Approval Type
purgeFrequency: page 114 for details). It is not possible to avoid
this purging, because to do so would make it possible for
handler-state data to accrue without limit. Therefore, handlers
should in general avoid the assumption that a handler state will
always exist, and should account for the possibility of a null state
when attempting to fetch a state.
117
How to Create a Custom Approval Type
Creating an Approval Type
118
How to Create a Custom Approval Type
Appendix C
The AME API
119
The AME API
The AME API
Types of Approvers
In AME, an approver list has three sub-lists. They are (in order of
occurrence):
• Pre-approvers
• Authority approvers
• Post-approvers
Authority Approvers
Chain-of-Authority Approvers
Pre-Approvers
Post-Approvers
120
The AME API
Data Types
The user_id field may contain any valid value from the
fnd_user.user_id column. It may also contain the constant
ame_util.multipleUserIds. This constant means that AME found
several user_id values corresponding to the person_id value in
the approverRecord. Finally, the user_id field may be null.
The person_id field may contain any valid value from the
per_all_people_f.person_id column, or it may be null.
121
The AME API
chain nevertheless continues past the ad hoc approver to the next
approver in the relevant hierarchy.
The authority field may contain any of three constants. Here are
brief descriptions of the constants’ semantics:
122
The AME API
A null approval_status means the approver has not yet
responded to any request for approval of the transaction
(possibly because the application that owns the transaction has
not yet sent the approver such a request), but that the approver
still has time to respond to such a request.
123
The AME API
The order_type and parameter Fields
The order field contains a string indicating the order relation that
AME uses to determine the insertion’s location in an
approverList, each time AME calculates the approver list. The
parameter field contains a value that indicates a specific instance
of the order relation. Here are brief explanations of each possible
value for the order_type field, with accompanying syntax and
semantics rules for the parameter field:
124
The AME API
The api_insertion Field
This field has the same allowed values and semantics as the
api_insertion field of the ame_util.approverRecord data type. See
The api_insertion Field under The ame_util.approverRecord
Type: page 160 for details.
This field has the same allowed values and semantics as the
authority field of the ame_util.approverRecord data type. See
The authority Field under The ame_util.approverRecord Type:
page 160 for details.
The allowed values and semantics for each field in this type are
the same as those of the ame_util.insertionRecord Type. See The
ame_util.insertionRecord Type: page 162 for details.
125
The AME API
The table is always indexed by consecutive ascending integers
starting at one.
Arguments
126
The AME API
Deletes all approvers from a transaction’s approver list,
including inserted approvers.
procedure clearDeletion(approverIn in
ame_util.approverRecord,
applicationIdIn in integer,
transactionIdIn in varchar2,
transactionTypeIn in varchar2 default null);
procedure clearInsertion(approverIn in
ame_util.approverRecord,
applicationIdIn in integer,
transactionIdIn in varchar2,
transactionTypeIn in varchar2 default null);
127
The AME API
transactionTypeIn in varchar2 default
null);
128
The AME API
Typical use: one way an application can check whether AME has
encountered an exception while processing a call to
getNextApprover or getAllApprovers is to compare the routine’s
return value to getAdminApprover’s return value. It is easier
simply to check whether the return value of getNextApprover or
getAllApprovers has the approval_status value
ame_util.exceptionStatus.
Typical uses:
1. To display the entire approval list to an end user (either for
information or to allow insertions and deletions).
2. To analyze a transaction’s overall approval status.
procedure getAndRecordAllApprovers(applicationIdIn in
integer,
transactionIdIn in varchar2,
transactionTypeIn in varchar2 default null,
approversOut out
ame_util.approversTable);
129
The AME API
transactionTypeIn in varchar2 default null,
ruleIdsOut out ame_util.idList);
130
The AME API
See also getRuleDetails[1-3], getApproversAndRule2 and 3
ame_util.insertionsTable);
131
The AME API
See also insertApprover and setFirstAuthorityApprover.
procedure getAvailableOrders(applicationIdIn in integer,
transactionIdIn in varchar2,
positionIn in integer,
transactionTypeIn in varchar2
default null,
availableOrdersOut out
ame_util.ordersTable);
Returns the approver list that AME calculated the last time such
a calculation was necessary to respond to a call to AME’s API.
This “old” approver list is not necessarily the transaction’s
current list, which is what getAllApprovers returns. The old list
may very well differ from the current list (that is, be incorrect!),
so getOldApprovers is a deprecated routine. See What Happens
at Run Time: page 67 to learn what circumstances can change a
transaction’s approver list between calls to AME’s API.
132
The AME API
Typical use: none. Oracle strongly encourages applications to
rely instead on getAllApprovers.
procedure initializeApprovalProcess(applicationIdIn in
integer,
transactionIdIn in varchar2,
transactionType in varchar2 default
null,
recordApproverListIn in boolean default false);
133
The AME API
initializeApprovalProcess (with or without recording the
approver list, it doesn't matter) before it calls any other ame_api
routine.
134
The AME API
Typical use: to insert dynamically an approver selected by an
end user.
ame_util.approverRecord,
transactionTypeIn in
varchar2
default null);
135
The AME API
See also updateApprovalStatus2.
procedure updateApprovalStatus2(applicationIdIn in integer,
transactionIdIn in varchar2,
approvalStatusIn in
varchar2,
approverPersonIdIn in
integer
default null,
approverUserIdIn in integer
default null,
transactionTypeIn in
varchar2
default null,
forwardeeIn in
ame_util.approverRecord
default
ame_util.emptyApproverRecord);
136
The AME API
6. When Workflow communicates to your application the
approver’s response to the request for approval in step 5,
translate the response into one of the allowed
approval_status values for the ame_util.approverRecord
data type. (Use the ame_util constants, not their values.) If
the response from Workflow does not translate to one of
these allowed values, handle this error condition and go to
step 5.
7. If the response from Workflow amounts to
ame_util.rejectStatus, handle the rejection and either go to
step 5 when the rejection has been handled, or stop.
8. Call ame_api.updateApprovalStatus to pass to AME the
approval status from step 6. If the status is either
ame_util.approveAndForwardStatus or
ame_util.forwardStatus, identify the forwardee (make sure
you set all of the appropriate fields in the forwardee’s
ame_util.approverRecord) in the forwardeeIn argument.
If Workflow indicates that a request for approval has timed
out, you may wish to move on to the next approver without
waiting further. To do so, call
ame_api.updateApprovalStatus, passing in approverIn an
ame_util.approverRecord identifying the unresponsive
approver, and having the approval_status value
ame_util.noResponseStatus. Do not pass an
ame_util.approverRecord in forwardeeIn; let it default to
ame_util.emptyApproverRecord.
If the unresponsive approver is not the final approver, the
AME engine will generally skip the approver (because their
surrogate is generally the next approver, in the case of chain-
of-authority approvers), marking them as unresponsive. If
the unresponsive approver’s surrogate is not already in the
approver list—for example, if the unresponsive approver is
the final chain-of-authority approver, and their surrogate is
their supervisor—AME will insert the surrogate into the
approver list immediately after the unresponsive approver.
9. Go to step 3.
137
The AME API
ame_api.updateApprovalStatus, passing it
ame_util.emptyApproverRecord for the erroring transaction,
but with its approval_status field set to
ame_util.clearExceptionsStatus. This will only clear the
transaction’s AME-internal exception log. If the
administrative approver who resets the workflow happens
to be one of the erroring transaction’s approvers, it will not
change that approver’s status. The administrative approver
should receive and respond to a normal notification
requesting their approval of the transaction.
5. The algorithm only uses Workflow to process notifications--
requests for approval, and responses to them. It does not use
Workflow to determine which approver has “final” authority
(in any sense). AME determines final authority on your
application’s behalf. Your code knows that a transaction has
been approved when (at step 4) getNextApprover returns an
ame_util.emptyApproverRecord.
6. More generally, your application does not make any
decisions about the approver list’s membership; it leaves all
such decisions to AME, so that the logic governing a
transaction type’s approval processes resides in a single
place (the transaction type’s set of rules in AME).
138
The AME API
when the additional approvers are inserted.
139
The AME API
avoiding variations in approvals functionality across
applications.
5. AME can insert a surrogate approver into a transaction’s
approver list, if an approver does not respond to a request
for approval in a timely fashion. But using the surrogate-
approver functionality requires that the application use the
basic algorithm, to make sure the surrogate appears in the
proper location in the approver list.
How do I force a chain of authority generated by one rule to come before another
chain generated by a second rule?
See How AME Sorts Rules at Run Time: page 134 for a
discussion of the problems of rule and approval-type order.
140
The AME API
141
The AME API
Administration ..................................83 getFirstApprover.........................115
API ..................................................127 getNextApprover ........................115
API routine......................................133 getSurrogate................................115
Approval descriptions .......................39 hasFinalAuthority .......................115
Approval groups................................55 package-naming conventions......114
Approval parameters .........................39 sample handler ............................116
Approval rules.....................................8 sample handler code ...................114
Approval types ..................................40 syntax..........................................116
absolute job level ..........................40 Condition types .................................33
approval-group rules .....................47 Conditions.....................................33
approvers.....................................110 Conditions.........................................33
categories ....................................107 maintaining ...................................35
caution.........................................108 Configuration variables
deserializing ................................111 adminApprover .......................83, 84
dual chains of authority.................44 distributedEnvironment ................84
final approver only........................42 helpPath ........................................87
list-creation-handler efficiency ...108 htmlPath........................................88
list-modification rules ...................45 portalUrl........................................88
manager then final approver .........42 purgeFrequency ............................88
parameters ...................................113 useWorkflow...........................89, 90
relative job level......................42, 43 Configuring variables
required values ............................109 administration ...............................83
substitution rules ...........................46 70
supervisory level ...........................43 Create a test transaction ....................80
values ..........................................111 Creating an approval type...............123
Approval-Group handler.................117 Custom approval type
Approval-group rules ........................47 create...........................................107
Approval-Group rules Data types .......................................128
dynamic post-approver..................48 ame_util.approverRecord Type ..128
dynamic pre-approver ...................48 Descriptions
post-chain of authority approvals..47 approvals.......................................39
pre-chain of authority approvals ...47 Dynamic attribute usages..................21
Approvals..........................................39 Example rule.....................................71
Approvers Handler state
authority ......................................127 maintain ......................................118
post-approvers.............................127 Handler-State routines ....................119
pre-approvers ..............................127 Implement AME ...............................13
types ............................................127 List-Modification rules .....................45
Attribute classifications ....................23 final authority................................45
mandatory attributes......................23 non-final authority ........................45
Attribute levels..................................26 Maintaining approval groups............58
Attribute types...................................19 Maintaining approvals ......................49
Attributes...........................................19 Maintaining rules ..............................73
dynamic attribute usages...............21 Mandatory attributes .........................23
maintaining ...................................28 AME
required .........................................40 advanages of using..........................6
static attribute usages ....................20 Parameters
Authority handler ............................113 approvals.......................................39
arguments....................................114 Process Rules
143
The AME API
run time .......................................101 Runtime exceptions ..........................91
Required attributes ............................40 configuration
Rule default .......................................94
example .........................................71 transaction type.........................94
Rule types..........................................65 how do I edit
list-creation exceptions .................67 transaction type.........................95
list-creation rules...........................66 how do I register
list-modification rules ...................68 transaction type.........................95
pre- and post-approval group rules how to respond..............................92
...................................................70 what happens ................................91
substitutions ..................................69 Static attribute usages .......................20
Rules .................................................65 Substitution rules ..............................46
approval...........................................8 Test transaction
rule types.......................................65 create.............................................80
sorts ...............................................71 Transaction Types.............................90
Rules and transactions descriptions ...................................90
fetch attribute values .....................78 IDs.................................................90
testing............................................77 view all exceptions .......................96
view...............................................79 Types
Run time..............................................8 data..............................................128
process rules................................101 transaction.....................................90
rules Workflow
sorts ...........................................71 AME API ....................................143
144
The AME API