/// <summary> /// Executes the workflow to deactivate a device. /// </summary> /// <param name="request">The deactivate device request.</param> /// <returns>The response.</returns> protected override NullResponse Process(DeactivateDeviceRequest request) { ThrowIf.Null(request, "request"); GetCurrentTerminalIdDataRequest dataRequest = new GetCurrentTerminalIdDataRequest(); string terminalId = this.Context.Execute <SingleEntityDataServiceResponse <string> >(dataRequest).Entity; // Slect all shifts. IList <Shift> shifts = ShiftDataDataServiceHelper.GetAllOpenedShiftsOnTerminal(this.Context, this.Context.GetPrincipal().ChannelId, terminalId, true); if (shifts.HasMultiple()) { throw new DataValidationException(DataValidationErrors.Microsoft_Dynamics_Commerce_Runtime_TerminalHasAnOpenShift); } var serviceRequest = new DeactivateDeviceServiceRequest(this.Context.GetPrincipal().DeviceNumber, terminalId, this.Context.GetPrincipal().UserId, this.Context.GetPrincipal().DeviceToken); DeactivateDeviceServiceResponse deactivationResponse = this.Context.Execute <DeactivateDeviceServiceResponse>(serviceRequest); if (!string.IsNullOrWhiteSpace(deactivationResponse.DeactivationResult.ErrorMessage)) { throw new DeviceAuthenticationException(SecurityErrors.Microsoft_Dynamics_Commerce_Runtime_DeviceDeactivationFailed, deactivationResponse.DeactivationResult.ErrorMessage); } // Log off the user. var userLogOffRequest = new UserLogOffRequest { StaffId = this.Context.GetPrincipal().UserId, LogOnConfiguration = this.Context.GetPrincipal().LogOnConfiguration }; AuthenticationHelper.LogOff(this.Context, userLogOffRequest); return(new NullResponse()); }
/// <summary> /// Performs a user logs off. /// </summary> /// <param name="context">The request context.</param> /// <param name="request">The request object.</param> internal static void LogOff(RequestContext context, UserLogOffRequest request) { ThrowIf.Null(context, "context"); ThrowIf.Null(request, "request"); var serviceRequest = new UserLogOffServiceRequest(request.LogOnConfiguration); context.Execute <Response>(serviceRequest); }