OFEvaluateOperation -- perform BMIP request


#include <scoAdmin/osaStdDef.h>

bmipResponse_pt OFEvaluateOperation(errStatusPtr, handleId, object)


This routine performs the operation indicated by the the string in the BMIP request on the object identified by object. It will return a pointer to a BMIP response which must be freed after it is handled in the function ofReturnBmipResponse.

This routine can be called repeatedly during the BMIP request and multiple bmipResponse_pt may be accumulated. This is the case when multiple objects are forwarded in the bmipRequest_t.objectInstance_pt, or the bmipRequest_t.scopePtr guides a transformation of the named object instance into many object identifiers.

If the user wants to perform atomic synchronization with a request (either all or nothing), they should store up all the responses and only return them if no errors are found (and if errors are found, implement some procedure to undo those that succeeded and then return and empty response).


bmipResponse_pt bmipResponsePtr
This is the BMIP response structure that will be forwarded to the ofReturnBmipResponse routine.

errStatus_cl *errStatusPtr
A pointer to the error stack data structure. If an error occurs in retrieving the data, the appropriate error will be placed in the error stack. This data can be referenced using the library functions associated with the error stack.

int handleId
The handle identifier that was passed to the request processor by the SCOadmin services library (or generated by a call to ofGenerateHandleId).

objectInstance_pt object
A char * to the string representing the object identifier of the current class. This is the object that the work/operation will be performed on.

Error messages

The execution of the operation was halted because of an error in running the operation's execution procedure.

The handleId named does not correspond to an existing class in the Server APIs internal lookup table.

One of the attributes given in the BMIP request did not have a value associated with in on a request to perform an operation other than get or replace-with-default.

The action requested by the BMIP request represented by the handleId is not listed in that BMIP request's class's CDT.

The attribute list (or some portion of it) contained in the BMIP request represented by the handleId is not parseable by the Server API.

One of the attributes contained in the BMIP request represented by the handleId is not listed in the request's class's CDT.

The operation contained in the BMIP request represented by the handleId is not listed in the CDT as being able to be performed on one of the attributes listed in the BMIP request.

One of the attributes listed in the BMIP request represented by the handleId is a group attribute and it has been associated with a value. Or, one of the values associated with an attribute is unparseable or a set of values is being assigned to a single value-typed attribute.


ObjectRequestProcessor(errStatus_cl       *errStatusPtr,
                       int                 handleId,
                       bmipRequest_pt      bmipRequestPtr,
                       void *)
     * Generate a list of all the objects to be evaluated
    objectName_pt *objectList;
    int            objectCount;

. . .

/* Implementation to turn bmipRequestPtr->objectInstancePtr into * object. */

. . . for (int loop = 0; loop < objectCount; ++loop) { bmipResponse_t *bmipResponsePtr; bmipResponsePtr = OFEvaluateOperation(errStatusPtr, handleId, objectList[loop]); OFReturnBmipResponse(errStatusPtr, handleId, bmipResponsePtr, (loop + 1 == objectCount) ? FALSE : TRUE ); }

See also

OFReturnBmipResponse(S_ADM), OFEvaluateFilter(S_ADM).
© 2005 The SCO Group, Inc. All rights reserved.
SCO OpenServer Release 6.0.0 -- 03 June 2005