| 
 |  | 
When making an object call you should always check for errors. Generally an object call will return a single BMIP response. Here is an example of processing a single BMIP response from an object get call and handling any errors:
   set objcall [list ObjectGet {sco user} \
       {{{systemId colossus} charlesf}} pw_dir]
   
   set bmipResponse [SaMakeObjectCall $objcall]
   
   set firstBmip [lindex $bmipResponse 0]
   set errStack [BmipResponseErrorStack firstBmip]
   
   if { ![lempty $errStack] } {
       ErrorPush errStack 1 SCO_GUIERR_ERR_GET_PWD
   } else {
       set attrs [BmipResponseAttrValList firstBmip]
       set pwd [keylget attrs pw_dir]
   }
Here is a similar example, but when multiple BMIP
responses are expected:
   set objcall [list ObjectGet -scope 1 {sco user} \
       {{{systemId colossus} charlesf}} pw_dir]
   
   set bmipResponse [SaMakeObjectCall $objcall]
   
   foreach bmip $bmipResponse {
       set errStack [BmipResponseErrorStack bmip]
       if { ![lempty $errStack] } {
               ErrorPush errStack 1 SCO_GUIAPP_ERR_GET_USERS
       } else {
   		set object [BmipResponseObjectInstance bmip]
               set attrs [BmipResponseAttrValList bmip]
     		keylset userlist $object [keylget attrs pw_name]
       }
   }
Here is an example of an action object call with no expected
BMIP response if the action is successful:
   set objcall [list ObjectAction {sco user} \
       {{{systemId colossus} charlesf}} setPassword $passwd]
   
   set bmipResponse [SaMakeObjectCall $objcall]
   
   set firstBmip [lindex $bmipResponse 0]
   set errStack [BmipResponseErrorStack firstBmip]
   
   if { ![lempty $errStack] } {
       ErrorPush errStack 1 SCO_GUIERR_ERR_CHANGE_PASSWORD
   }