VISTA Auto Signon
VISTA Auto Sign-on that doesn't rely on CCOW can be accomplished as follows:
You need to have the RPC Client Agent running on your machine. You can get this from this set-up program here: https://downloads.va.gov/files/vista/Software/VISTA_FOIA_RELEASES_BEFORE_2008/RPC%20Broker%20-%20XWB/PROGRAMS/XWB1_1WS.EXE or in the BDK folder of the CPRS Source Code.
The other thing you need to do is enable Auto-Sign on either at the user level or the Kernel Level.
DEFAULT AUTO SIGN-ON in KERNEL SYSTEM PARAMETERS
or
AUTO SIGN-ON in NEW PERSON
Once you run clagent.exe, you will see a little satellite in your system tray.
Once you sign-on (first sign-on is required) using roll and scroll or any client, the satellite lights up. It means that you are signed into VISTA. Any subsequent sign-on in a client that supports it (not Scheduling or PIM GUI at the moment) will auto-sign you in.
In order to auto-sign on a user, you need to call XUS SIGNON SETUP, and check the return value of subscript 5 and see if it is 1. If it is, then Auto-Sign on succeeded.
Here is the Delphi Code from RpcSLogin.pas:
{: This function is used to initiate a silent login with the RPCBroker. It uses the information stored in the Login property of the TRPCBroker to make the connection. } function SilentLogIn(SLBroker: TRPCBroker): boolean; begin Result := False; //determine if signon is needed try with SLBroker do begin RemoteProcedure := 'XUS SIGNON SETUP'; Call; SLBroker.Login.IsProductionAccount := False; SLBroker.Login.DomainName := ''; if SLBroker.Results.Count > 7 then begin SLBroker.Login.DomainName := SLBroker.Results[6]; if SLBroker.Results[7] = '1' then SLBroker.Login.IsProductionAccount := True; end; if Results.Count > 5 then //Server sent auto signon info. if SLBroker.Results[5] = '1' then //User already logged in begin Result := True; GetUserInfo(SLBroker); exit; end; if Login.Mode = lmAVCodes then //Access & Verify codes authentication if ValidAVCodes(SLBroker) then Result := True; if Login.Mode = lmAppHandle then if ValidAppHandle(SLBroker)then Result := True; if Login.Mode = lmNTToken then if ValidNTToken(SLBroker) then Result := True; if Result and (not (SLBroker is TCCOWRPCBroker)) then begin //determine if user is multidivisional - makes calls to Seldiv. LogIn.MultiDivision := MultDiv(SLBroker); if not LogIn.MultiDivision then begin Result := True; exit; end; if LogIn.PromptDivision then Result := SelectDivision(LogIn.DivList, SLBroker) else if Login.Division <> '' then Result := SetDiv(Login.Division, SLBroker) else begin Result := False; Login.ErrorText := 'No Division Selected'; end; if not Result then exit; end; if Result then GetUserInfo(SLBroker); end; except exit; end; end; procedure GetUserInfo(ConnectedBroker: TRPCBroker); //get info for TVistaUser; begin with ConnectedBroker do begin try RemoteProcedure := 'XUS GET USER INFO'; Call; if Results.Count > 0 then with ConnectedBroker.User do begin DUZ := Results[0]; Name := Results[1]; StandardName := Results[2]; Division := Results[3]; Title := Results[4]; ServiceSection := Results[5]; Language := Results[6]; DTime := Results[7]; if Results.Count > 8 then Vpid := Results[8] else Vpid := ''; end; except end; end; end;