/// <summary> /// Activates the device. /// </summary> /// <param name="request">The device activation request.</param> /// <returns>The device activation response.</returns> private static ActivateDeviceRealtimeResponse ActivateDevice(ActivateDeviceRealtimeRequest request) { var getDeviceRequest = new GetDeviceDataRequest(request.DeviceNumber, isActivatedOnly: false); Device device = request.RequestContext.Runtime.Execute <SingleEntityDataServiceResponse <Device> >(getDeviceRequest, request.RequestContext).Entity; device.ActivatedDateTime = device.ActivatedDateTime ?? DateTimeOffset.UtcNow; device.DeactivateComments = device.DeactivateComments ?? string.Empty; device.DeactivatedDateTime = device.DeactivatedDateTime ?? DateTimeOffset.MinValue; device.TokenIssueTime = device.TokenIssueTime ?? DateTimeOffset.UtcNow; var result = new DeviceActivationResult(); if (device == null) { // Device is not found, throws exception. string message = string.Format("The input device number '{0}' does not exist in demo database.", request.DeviceNumber); throw new ConfigurationException(ConfigurationErrors.Microsoft_Dynamics_Commerce_Runtime_DeviceConfigurationNotFound, message); } else if (string.IsNullOrWhiteSpace(device.TerminalId)) { // If device is found but the terminal associated with the device is not found, try to find the terminal using input terminal id. var columnSet = new ColumnSet(Terminal.RecordIdColumn, Terminal.TerminalIdColumn, Terminal.ChannelIdColumn); var settings = new QueryResultSettings(columnSet, PagingInfo.AllRecords); var getTerminalRequest = new GetTerminalDataRequest(request.TerminalId, settings); Terminal terminal = request.RequestContext.Runtime.Execute <SingleEntityDataServiceResponse <Terminal> >(getTerminalRequest, request.RequestContext).Entity; if (terminal == null) { string message = string.Format("The input device number '{0}' and terminal identifier '{1}' do not exist in demo database.", request.DeviceNumber, request.TerminalId); throw new ConfigurationException(ConfigurationErrors.Microsoft_Dynamics_Commerce_Runtime_DeviceConfigurationNotFound, message); } result.Device = new Device { DeviceId = request.DeviceId, DeviceNumber = request.DeviceNumber, TerminalRecordId = terminal.RecordId, TerminalId = terminal.TerminalId, ChannelId = terminal.ChannelId, DeviceTypeRecordId = device.DeviceTypeRecordId, ActivatedDateTime = device.ActivatedDateTime, TokenIssueTime = device.TokenIssueTime, DeactivatedDateTime = device.DeactivatedDateTime, DeactivateComments = device.DeactivateComments, TokenData = device.TokenData, TokenSalt = device.TokenSalt }; } else { // Both the device and associated terminal are found. device.DeviceNumber = request.DeviceNumber; device.DeviceId = request.DeviceId; result.Device = device; } var response = new ActivateDeviceRealtimeResponse(result); return(response); }
/// <summary> /// Gets terminal entity by record identifier or terminal identifier. /// </summary> /// <param name="request">The data service request.</param> /// <returns>The data service response.</returns> private SingleEntityDataServiceResponse <Terminal> GetTerminalByCriteria(GetTerminalDataRequest request) { TerminalDataManager terminalDataManager = this.GetDataManagerInstance(request.RequestContext); Terminal terminal = null; if (string.IsNullOrWhiteSpace(request.TerminalId)) { // Retrieves the terminal by record identifier terminal = terminalDataManager.GetTerminalByRecordId(request.TerminalRecordId, request.QueryResultSettings); } else { terminal = this.GetTerminalById(request.RequestContext, request.TerminalId, request.QueryResultSettings); } return(new SingleEntityDataServiceResponse <Terminal>(terminal)); }
/// <summary> /// Gets the terminal by identifier and sets it on the context. /// </summary> /// <param name="context">The context.</param> private static void PopulateContextWithTerminal(RequestContext context) { long terminalId = context.GetPrincipal().TerminalId; GetTerminalDataRequest getTerminalDataRequest = new GetTerminalDataRequest(terminalId, QueryResultSettings.AllRecords); Terminal terminal = context.Runtime.Execute <SingleEntityDataServiceResponse <Terminal> >(getTerminalDataRequest, context, skipRequestTriggers: true).Entity; if (terminal == null) { RetailLogger.Instance.CrtWorkflowPipelineRequestHandlerPopulateTerminalOnContextTerminalNotFound(terminalId); throw new DataValidationException(DataValidationErrors.Microsoft_Dynamics_Commerce_Runtime_TerminalNotFound, "Could not find the terminal associated with the request context."); } if (terminal.ChannelId != context.GetPrincipal().ChannelId) { RetailLogger.Instance.CrtWorkflowPipelineRequestHandlerPopulateTerminalOnContextChannelMismatch(terminalId, terminal.ChannelId, context.GetPrincipal().ChannelId); throw new DataValidationException(DataValidationErrors.Microsoft_Dynamics_Commerce_Runtime_TerminalNotFound, "The provided terminal record identifier does not belong to the channel associated to the principal."); } context.SetTerminal(terminal); }