Currently we have a package exit which forces the Quorum size of a particular approver group matching a certain criteria for both stage and environment, to 1, as it would normally be 0.
The exit however has a minor flaw, if the package which has been cast has multiple approver groups meeting criteria it will only change the quorum of one of them.
I have modified the exit and had some success in updating different approver groups matching the criteria in the package, however when I call the API multiple times, once per approver group it seems to set the quorum back to 0 of the previous approver group when the API is called for the next group, meaning I can only update either the first or last matching approver group.
Having looked through the documentation and API copy books I believe that I can only send one approver group request to the API at a time through the following request block:
10 ALAGR-RQ-AGRNAME PIC X(16) VALUE SPACES.
I have also noted that the PACKAGE-EXIT-APPROVER-MAP can only contain one approver group at a time.
Release : 18.0
Component : Endevor Software Change Manager
As far as we know, this exit is a before-cast exit that retrieves the package SCL from endevor using the 'requests for data' functionality (PACKAGE-EXIT-SCL-BLOCK and PECB-REQ-SCL-RECORDS flag) and uses the information to build approver group records (PACKAGE-EXIT-APPROVER-MAP) using flag PECB-USENDING-APP-GRPS.
It is correct to do so but the exit must take into account the sequence of calls to the exit.
When the exit requests for SCL records, endevor calls it repeatedly passing a SCL record each time and does nothing about approver group records.
Once the exit has stopped asking for SCL records (normally as Endevor has indicated that they are over), endevor checks whether the exit wants to provide approver group records. If so, it calls the exit repeatedly to get a single approver group from the exit at each call until the exit indicates that no more approver groups are to be added.
Given this logic, it follows that, when the exit examines an SCL statement and decides to add an approver group because of that statement, it must keep this information in order to pass it later to endevor, when it is time to pass the approver groups.
Keeping information across calls to an endevor user exit is not easy, mainly because we have a main assembler program (endevor) calling a COBOL user exit. The LE (language environment) will rebuild the execution environment at each call, including the working storage, which obviously cannot be used to keep information between calls.
Endevor provides field PECB-UEXIT-HOLD-FIELD which the exit may use to hold 4 bytes of data that endevor will pass at each subsequent call. The normal use of this field is to store a pointer to a block of data used by the exit. What may be problematic for a COBOL exit is to acquire and release the block of storage when needed.