/// <summary> /// Creates or Updates the retail device. /// </summary> /// <param name="request">The data service request.</param> /// <returns>The data service response.</returns> private NullResponse CreateOrUpdateDevice(CreateOrUpdateDeviceDataRequest request) { ThrowIf.Null(request.Device, "request.Device"); using (SqlServerDatabaseContext databaseContext = new SqlServerDatabaseContext(request.RequestContext)) { ParameterSet parameters = new ParameterSet(); parameters["@dt_ActivatedDateTime"] = request.Device.ActivatedDateTime; parameters["@i_ActivationStatus"] = request.Device.ActivationStatus; parameters["@nvc_DeactivateComments"] = request.Device.DeactivateComments; parameters["@dt_DeactivatedDateTime"] = request.Device.DeactivatedDateTime; parameters["@nvc_Description"] = request.Device.Description; parameters["@nvc_DeviceId"] = request.Device.DeviceNumber; parameters["@nvc_Terminal"] = request.Device.TerminalId; parameters["@bi_TypeRecordId"] = request.Device.DeviceTypeRecordId; parameters["@nvc_DeviceTokenData"] = request.Device.TokenData; parameters["@nvc_DeviceTokenSalt"] = request.Device.TokenSalt; parameters["@nvc_DeviceTokenAlgorithm"] = request.Device.TokenAlgorithm; parameters["@dt_DeviceTokenIssueTime"] = request.Device.TokenIssueTime; parameters["@i_UseInMemoryDeviceDataStorage"] = request.Device.UseInMemoryDeviceDataStorage; parameters["@bi_RecordId"] = request.Device.RecordId; databaseContext.ExecuteStoredProcedureNonQuery(CreateUpdateDeviceSprocName, parameters); } DeviceL2CacheDataStoreAccessor levelL2CacheDataAccessor = this.GetDeviceL2CacheDataStoreAccessor(request.RequestContext); levelL2CacheDataAccessor.ClearCacheDeviceById(request.Device.DeviceNumber); return(new NullResponse()); }
/// <summary> /// Deactivates the device. /// </summary> /// <param name="request">The device deactivation request.</param> /// <returns>The device deactivation response.</returns> private static DeactivateDeviceServiceResponse DeactivateDevice(DeactivateDeviceServiceRequest request) { Device device = ConstructDeviceFromToken(request.DeviceToken); DeactivateDeviceRealtimeRequest realtimeRequest = new DeactivateDeviceRealtimeRequest(request.DeviceNumber, request.TerminalId, request.StaffId, device.TokenData); DeactivateDeviceRealtimeResponse realtimeResponse = request.RequestContext.Execute <DeactivateDeviceRealtimeResponse>(realtimeRequest); // Updating the activated device in the channel db. if (realtimeResponse.DeactivationResult.Device != null) { CreateOrUpdateDeviceDataRequest createOrUpdateDeviceDataRequest = new CreateOrUpdateDeviceDataRequest(realtimeResponse.DeactivationResult.Device); request.RequestContext.Execute <NullResponse>(createOrUpdateDeviceDataRequest); } return(new DeactivateDeviceServiceResponse(realtimeResponse.DeactivationResult)); }
/// <summary> /// Activates the device and updates the activated device in the channel database. /// </summary> /// <param name="request">The device activation request.</param> /// <returns>The device activation response.</returns> private static ActivateDeviceServiceResponse ActivateDevice(ActivateDeviceServiceRequest request) { ActivateDeviceRealtimeRequest realtimeRequest = new ActivateDeviceRealtimeRequest(request.DeviceNumber, request.TerminalId, request.StaffId, request.DeviceId, request.ForceActivation, request.DeviceType); ActivateDeviceRealtimeResponse realtimeResponse = request.RequestContext.Execute <ActivateDeviceRealtimeResponse>(realtimeRequest); if (realtimeResponse.DeviceActivationResult.Device != null) { realtimeResponse.DeviceActivationResult.Device.Token = GenerateDeviceToken(realtimeResponse.DeviceActivationResult.Device); } // Creating or updating the activated device in the channel db. CreateOrUpdateDeviceDataRequest createOrUpdateDeviceDataRequest = new CreateOrUpdateDeviceDataRequest(realtimeResponse.DeviceActivationResult.Device); request.RequestContext.Execute <NullResponse>(createOrUpdateDeviceDataRequest); return(new ActivateDeviceServiceResponse(realtimeResponse.DeviceActivationResult)); }
/// <summary> /// Authenticates the device. /// </summary> /// <param name="request">The device authentication request.</param> /// <returns>The response.</returns> private static AuthenticateDeviceServiceResponse AuthenticateDevice(AuthenticateDeviceServiceRequest request) { Device device = new Device(); if (string.IsNullOrWhiteSpace(request.Token)) { throw new ArgumentException("request.Token is not set", "request"); } device = ConstructDeviceFromToken(request.Token); try { // Try to validate the device token using the channel database device = ValidateDeviceTokenLocally(device.DeviceNumber, device.TokenData, request.Token, request.RequestContext); } catch (DeviceAuthenticationException deviceAuthenticationException) { RetailLogger.Log.CrtServicesDeviceManagementServiceDeviceAuthenticationInChannelDbFailure(device.ToString(), deviceAuthenticationException); try { // If local authentication failed then try to contact AX for activation and refresh local data. AuthenticateDeviceRealtimeRequest realtimeRequest = new AuthenticateDeviceRealtimeRequest(device); device = request.RequestContext.Execute <AuthenticateDeviceRealtimeResponse>(realtimeRequest).Device; } catch (HeadquarterTransactionServiceException ex) { RetailLogger.Log.CrtServicesDeviceManagementServiceDeviceAuthenticationInAxFailure(device.ToString(), ex); throw new DeviceAuthenticationException(SecurityErrors.Microsoft_Dynamics_Commerce_Runtime_HeadquarterTransactionServiceMethodCallFailure, ex, ex.Message) { LocalizedMessage = ex.LocalizedMessage }; } // Creating or updating the authenticated device in the channel db. CreateOrUpdateDeviceDataRequest createOrUpdateDeviceDataRequest = new CreateOrUpdateDeviceDataRequest(device); request.RequestContext.Execute <NullResponse>(createOrUpdateDeviceDataRequest); } return(new AuthenticateDeviceServiceResponse(device)); }