/// <summary> /// Gets all button grids. /// </summary> /// <param name="request">Request instance.</param> /// <returns>Response instance.</returns> private static GetButtonGridsServiceResponse GetButtonGrids(GetButtonGridsServiceRequest request) { // resolves the layout based on the principal (user, terminal, channel) and get the button grid ids for those var getTillLayoutRequest = new GetTillLayoutDataRequest(); TillLayout layout = request.RequestContext.Execute <SingleEntityDataServiceResponse <TillLayout> >(getTillLayoutRequest).Entity; if (layout == null) { throw new ConfigurationException(ConfigurationErrors.Microsoft_Dynamics_Commerce_Runtime_LayoutNotFound, "Could not find layout associated with the request."); } // get all button grids var getButtonGridDataRequest = new GetButtonGridsDataRequest(QueryResultSettings.AllRecords); PagedResult <ButtonGrid> buttonGrids = request.RequestContext.Runtime.Execute <EntityDataServiceResponse <ButtonGrid> >(getButtonGridDataRequest, request.RequestContext).PagedEntityCollection; // get all button grids that participate on the layout (top level) var topLevelButtonGridIdsPertainingToLayout = layout.ButtonGridZones.Select(buttonGridZone => buttonGridZone.ButtonGridId); // get filter only button grids pertaining to the layout var layoutFilteredButtonGrids = new ButtonGridFilter(topLevelButtonGridIdsPertainingToLayout, buttonGrids.Results).GetButtonGrids(); // paginate result according to client settings PagedResult <ButtonGrid> buttonGridPagedResult = new PagedResult <ButtonGrid>( layoutFilteredButtonGrids, request.QueryResultSettings.Paging, layoutFilteredButtonGrids.Count); return(new GetButtonGridsServiceResponse(buttonGridPagedResult)); }
/// <summary> /// Gets button grids by identifiers. /// </summary> /// <param name="request">Request instance.</param> /// <returns>Response instance.</returns> private static GetButtonGridsByIdsServiceResponse GetButtonGridByIds(GetButtonGridsByIdsServiceRequest request) { var getButtonGridDataRequest = new GetButtonGridsDataRequest(request.ButtonGridIds, request.QueryResultSettings); PagedResult <ButtonGrid> buttonGrids = request.RequestContext.Runtime.Execute <EntityDataServiceResponse <ButtonGrid> >(getButtonGridDataRequest, request.RequestContext).PagedEntityCollection; return(new GetButtonGridsByIdsServiceResponse(buttonGrids)); }
/// <summary> /// Gets a button grid. /// </summary> /// <param name="request">Request instance.</param> /// <returns>Response instance.</returns> private static GetButtonGridByIdServiceResponse GetButtonGridById(GetButtonGridByIdServiceRequest request) { var butonGridIds = new List <string> { request.ButtonGridId }; var getButtonGridDataRequest = new GetButtonGridsDataRequest(butonGridIds, request.QueryResultSettings); ButtonGrid buttonGrid = request.RequestContext.Runtime.Execute <EntityDataServiceResponse <ButtonGrid> >(getButtonGridDataRequest, request.RequestContext).PagedEntityCollection.FirstOrDefault(); return(new GetButtonGridByIdServiceResponse(buttonGrid)); }
/// <summary> /// Gets a button grids by identifiers. /// </summary> /// <param name="request">The get button grids data request.</param> /// <returns> /// Collection of matching button grids. /// </returns> private EntityDataServiceResponse <ButtonGrid> GetButtonsGrids(GetButtonGridsDataRequest request) { ThrowIf.Null(request, "request"); ThrowIf.Null(request.ButtonGridIds, "request.ButtonGridIds"); ThrowIf.Null(request.QueryResultSettings, "request.QueryResultSettings"); PagedResult <ButtonGrid> buttonGrids = null; // Default query to retrieve all the button grids. var query = new SqlPagedQuery(request.QueryResultSettings) { From = ButtonGridsView, OrderBy = ButtonGrid.ButtonGridIdColumn }; // Update query when only one button grid is retrieved. if (request.ButtonGridIds.Count() == 1) { query.Where = string.Format("{0} = @{0}", ButtonGrid.ButtonGridIdColumn); query.Parameters[string.Format("@{0}", ButtonGrid.ButtonGridIdColumn)] = request.ButtonGridIds.FirstOrDefault(); } // Update query for retrieving multiple button grids. if (request.ButtonGridIds.HasMultiple()) { using (StringIdTableType buttonGridIdTableType = new StringIdTableType(request.ButtonGridIds, ButtonGrid.ButtonGridIdColumn)) { query.Parameters[ButtonGridIdTableTypeParameterName] = buttonGridIdTableType; // Query execution for retrieving multiple button grids. buttonGrids = this.ExecuteQuery <ButtonGrid>(query, request.RequestContext); } } else { // Query execution for retrieving one or all the button grids. buttonGrids = this.ExecuteQuery <ButtonGrid>(query, request.RequestContext); } // Get the button grid buttons. if (buttonGrids != null && buttonGrids.Results != null) { var buttonGridIds = buttonGrids.Results.Select(b => b.Id); ReadOnlyCollection <ButtonGridButton> buttons = this.GetButtonGridButtons(buttonGridIds, request.RequestContext).Results; foreach (var buttonGrid in buttonGrids.Results) { buttonGrid.Buttons = buttons.Where(b => string.Equals(b.ButtonGridId, buttonGrid.Id, StringComparison.OrdinalIgnoreCase)); } } return(new EntityDataServiceResponse <ButtonGrid>(buttonGrids)); }