Filtering Parameters: To Add a Filter for an Inquiry Form
The following activity will walk you through the process of implementing custom filtering parameters for an inquiry form.
Story
Suppose that you need to add custom filtering parameters to the Open Payment Summary (RS401000) inquiry form, which you created in the PhoneRepairShop customization project, so that users can filter the repair work orders listed in the table on the inquiry form.
The form will contain filtering UI elements in the Selection area, which can be used to filter the list of repair work orders by the customer and service type, and to filter the list of sales orders by the customer. You will define filtering parameters for these UI elements.
Process Overview
- Defining the DAC with only unbound fields that will be used as filtering parameters
- Configuring the PXFilter data view and the PXCancel action as graph members used for filtering data for an inquiry form
- Adding the Selection area to the ASPX page of the inquiry form by using the px:PXFormView container control and configuring the filtering elements
System Preparation
Before you begin performing the steps of this activity, do the following:
- Configure your instance by performing the Test Instance for Customization: To Deploy an Instance for Developing Inquiry Forms prerequisite activity.
- Complete the steps described in the Inquiry Forms: To Set Up an Inquiry Form prerequisite activity.
Step 1: Defining a DAC with Filtering Parameters for the Inquiry Form
In this step, you will define the RSSVWorkOrderToPayFilter
DAC,
which will be used to display the selection criteria (filtering parameters) on the
Open Payment Summary (RS401000) form. The DAC will contain two fields
(CustomerID
and ServiceID
) that correspond to
the filtering parameters. To define the DAC with filtering parameters, do the
following:
- In the
RSSVPaymentPlanInq
graph, define theRSSVWorkOrderToPayFilter
data access class by using the following code.[PXHidden] public class RSSVWorkOrderToPayFilter : PXBqlTable, IBqlTable { #region ServiceID [PXInt()] [PXUIField(DisplayName = "Service")] [PXSelector( typeof(Search<RSSVRepairService.serviceID>), typeof(RSSVRepairService.serviceCD), typeof(RSSVRepairService.description), DescriptionField = typeof(RSSVRepairService.description), SelectorMode = PXSelectorMode.DisplayModeText)] public virtual int? ServiceID { get; set; } public abstract class serviceID : PX.Data.BQL.BqlInt.Field<serviceID> { } #endregion #region CustomerID [CustomerActive(DisplayName = "Customer ID")] public virtual int? CustomerID { get; set; } public abstract class customerID : PX.Data.BQL.BqlInt.Field<customerID> { } #endregion }
- For the filtering parameters to be used in a BQL query, add the
serviceID
andcustomerID
fields to theRSSVWorkOrderToPay
DAC by using the following code.public new abstract class serviceID : PX.Data.BQL.BqlInt.Field<serviceID> { } public new abstract class customerID : PX.Data.BQL.BqlInt.Field<customerID> { }
Tip: If you have generated theRSSVPaymentPlanInq
graph by using the Screen Editor, in this step, you can also remove the MasterView data view because the RS401000.aspx file has no more references to the MasterView data view. You have removed those references with the Content element in Step 4: Configuring the ASPX Page of the Form of the Inquiry Forms: To Set Up an Inquiry Form activity. You can also remove the Save and Cancel actions, which were generated automatically. - Build the project.
Step 2: Configuring the Graph Members Used for Filtering Data on the Inquiry Form
In this step, you will prepare the graph members that are used for filtering data on
the form. To define the graph members, in the RSSVPaymentPlanInq
graph, do the following:
- Define a PXFilter data view (as shown in the following code),
which provides filtering parameters for the inquiry
form.
public PXFilter<RSSVWorkOrderToPayFilter> Filter;
- Define the
PXCancel
action, which adds the Cancel button to the form toolbar, as shown in the following code. The action clears the filter.public PXCancel<RSSVWorkOrderToPayFilter> Cancel;
- Replace the definition of the
DetailsView
data view with the following code, which not only selects repair work orders that do not have the Paid status but also matches the filtering criteria based on the values of theserviceID
andcustomerID
fields.[PXFilterable] public SelectFrom<RSSVWorkOrderToPay>. InnerJoin<ARInvoice>.On<ARInvoice.refNbr.IsEqual< RSSVWorkOrderToPay.invoiceNbr>>. Where<RSSVWorkOrderToPay.status.IsNotEqual< RSSVWorkOrderWorkflow.States.paid>. And<RSSVWorkOrderToPayFilter.customerID.FromCurrent.IsNull. Or<RSSVWorkOrderToPay.customerID.IsEqual< RSSVWorkOrderToPayFilter.customerID.FromCurrent>>>. And<RSSVWorkOrderToPayFilter.serviceID.FromCurrent.IsNull. Or<RSSVWorkOrderToPay.serviceID.IsEqual< RSSVWorkOrderToPayFilter.serviceID.FromCurrent>>>>. View.ReadOnly DetailsView;
- Override the
IsDirty
property of the graph, as the following code shows.public override bool IsDirty => false;
- Build the project.
Step 3: Adjusting the ASPX Page to Add Filtering Elements for the Inquiry Form
In this step, you will add the Selection area, which has the elements to be used for filtering, to the RS401000.aspx page. To make this addition to the ASPX page, do the following:
- Open the RS401000.aspx file.
- In the PrimaryView property of the
PXDataSource control, specify the Filter data
view, as shown in the following
code.
<px:PXDataSource ID="ds" runat="server" Visible="True" Width="100%" TypeName="PhoneRepairShop.RSSVPaymentPlanInq" PrimaryView="Filter" >
- Add the following code to define the Selection area of the form.Tip: You can define the Selection area of the form in the Screen Editor without entering the code manually.
<asp:Content ID="cont2" ContentPlaceHolderID="phF" Runat="Server"> <px:PXFormView runat="server" ID="CstFormView1" DataSourceID="ds" DataMember="Filter" Width="100%" > <Template> <px:PXLayoutRule LabelsWidth="XM" runat="server" ID="CstPXLayoutRule3" StartColumn="True" ></px:PXLayoutRule> <px:PXSegmentMask CommitChanges="True" runat="server" ID="CstPXSegmentMask1" DataField="CustomerID" ></px:PXSegmentMask> <px:PXSelector CommitChanges="True" runat="server" ID="CstPXSelector2" DataField="ServiceID" ></px:PXSelector> </Template> </px:PXFormView> </asp:Content>
The Selection area is defined by the PXFormView container control. For the DataMember property of the PXFormView control, you specify the Filter view. Inside the PXFormView control, you add a PXSegmentMask control to select a customer, and a PXSelector object to select a service.
- Save your changes.