Previous Topic: Program Exits OverviewNext Topic: Basic Structure of Program Exits


Ordering of Program Exit Invocations

A single request processed by the Provisioning Server may make multiple program exit invocations. The order in which these program exits are invoked depends on:

Each program exit type identifies a place in the Provisioning Server’s control flow where that particular type of program exits gets a chance to affect the Provisioning Server’s behavior. Therefore, to understand the order in which different program exit types are invoked requires understanding how requests are processed.

For instance, a single request to the Provisioning Server might change a global user password and then propagate that password to one or more of that user’s accounts. The processing of this request is done as a high-level global user operation that spawns separate account operations.

This results in invoking the program exits in the following order:

  1. PRE_CHANGE_GLOBAL_USER_PWD
  2. PRE_CHANGE_ACCOUNT_PASSWORD
  3. POST_CHANGE_ACCOUNT_PASSWORD
  4. PRE_CHANGE_ACCOUNT_PASSWORD
  5. POST_CHANGE_ACCOUNT_PASSWORD
  6. POST_CHANGE_GLOBAL_USER_PWD

In some cases, multiple program exit types apply to the same object class (PRE_CHANGE_GLOBAL_USER_PWD and PRE_MODIFY_GLOBAL_USER) and could potentially be applicable to the same request (a single global user modification that changes both the password and full name, say). In such a case, all exits of one of these exit types will be called before all exits of another of these exit types. But the order is unspecified and you shouldn’t assume that the ordering will remain unchanged in future versions of the Provisioning Server.

For a single exit type, sometimes you have a choice as to the class of object on which you define the program exit reference. In particular, references to some exit types that affect global users can be defined on a provisioning role (affecting only users in that role) or on the common configuration object (affecting all users in the domain). If you define exit references on both kinds of objects, then the Provisioning Server invokes the ones defined on the provisioning roles before invoking the ones that are defined on the common configuration object.

Similarly, references to some exit types that affect accounts can be defined on an account template (affecting only accounts assigned to that account template) or on the endpoint (affecting all accounts in the endpoint). If you define exit references on both kinds of objects, then the Provisioning Server invokes the ones defined on the account templates before invoking the ones that are defined on the endpoint.

Finally, exit references of the same type and defined on the same class of object are invoked in priority order using the priority number you assigned when you created the program exit reference, such as priority 1 first, priority 2 second, and so on. Two program exit references of the same priority are invoked in unspecified order.