acumatica
Filtrering med flera värden med endast en väljare
Sök…
Introduktion
Här är ett sätt att ha flera värden inuti en väljare för att filtrera ett rutnät.
Hämtar försäljningsorder för multilple-kunder
När du försöker filtrera en post med flera värden i en väljare. Först måste du använda px: PXMultiSelector på aspx-sidan istället för den normala px: PXSelector. Sedan måste du skapa dig en graf som innehåller minst tre vyer och en visadelegat. du behöver också minst en grundläggande obundet DAC.
Här är en exempelsida med px: PXMultiSelector:
<%@ Page Language="C#" MasterPageFile="~/MasterPages/FormDetail.master" AutoEventWireup="true" ValidateRequest="false" CodeFile="TT000000.aspx.cs" Inherits="Page_TT000000" Title="Untitled Page" %>
<%@ MasterType VirtualPath="~/MasterPages/FormDetail.master" %>
<asp:Content ID="cont1" ContentPlaceHolderID="phDS" runat="Server">
<px:PXDataSource ID="ds" runat="server" Visible="True" Width="100%"
TypeName="MultiSelector.MultiInquiry"
PrimaryView="MasterView">
<CallbackCommands>
</CallbackCommands>
</px:PXDataSource>
</asp:Content>
<asp:Content ID="cont2" ContentPlaceHolderID="phF" runat="Server">
<px:PXFormView ID="form" runat="server" DataSourceID="ds" DataMember="MasterView" Width="100%" Height="100px" AllowAutoHide="false">
<Template>
<px:PXMultiSelector ID="edInventoryID" runat="server" Width="100%" DataSourceID="ds" DataField="Customer" CommitChanges="True"></px:PXMultiSelector>
</Template>
</px:PXFormView>
</asp:Content>
<asp:Content ID="cont3" ContentPlaceHolderID="phG" runat="Server">
<px:PXGrid ID="grid" runat="server" DataSourceID="ds" Width="100%" Height="150px" SkinID="Details" AllowAutoHide="false">
<Levels>
<px:PXGridLevel DataMember="DetailsView">
<Columns>
<px:PXGridColumn DataField="OrderType" Width="70"></px:PXGridColumn>
<px:PXGridColumn DataField="OrderNbr" Width="200"></px:PXGridColumn>
<px:PXGridColumn DataField="OrderDesc" Width="100"></px:PXGridColumn>
<px:PXGridColumn DataField="CustomerOrderNbr" Width="100"></px:PXGridColumn>
<px:PXGridColumn DataField="Status" Width="100"></px:PXGridColumn>
<px:PXGridColumn DataField="RequestDate" Width="100"></px:PXGridColumn>
<px:PXGridColumn DataField="ShipDate" Width="100"></px:PXGridColumn>
<px:PXGridColumn DataField="CustomerID" Width="100"></px:PXGridColumn>
</Columns>
</px:PXGridLevel>
</Levels>
<AutoSize Container="Window" Enabled="True" MinHeight="150" />
<ActionBar>
</ActionBar>
</px:PXGrid>
</asp:Content>
Här är exempeldiagrammet med vyerna och delegaten.
public class MultiInquiry : PXGraph<MultiInquiry>
{
public PXCancel<MasterTable> Cancel;
public PXFilter<MasterTable> MasterView;
public PXSelect<SOOrder> DetailsView;
public PXSelectJoin<SOOrder, LeftJoin<BAccount, On<SOOrder.customerID, Equal<BAccount.bAccountID>>>, Where<BAccount.acctCD, In<Required<BAccount.acctCD>>>> Orders2;
protected virtual IEnumerable detailsView()
{
var list = new List<SOOrder>();
var customers = MasterView.Current.Customer;
if (customers != null)
{
List<string> customerList = new List<string>();
customerList.AddRange(customers.Split(new string[] { "; " }, StringSplitOptions.None));
object[] val = new object[] { customerList.ToArray() };
foreach (PXResult<SOOrder> res in Orders2.Select(val))
{
SOOrder order = res;
list.Add(order);
}
}
return list;
}
}
Till detta lägger vi till DAC som innehåller definitionen för fältet som används i MultiSelector och konstanten för att bara välja kundkonton.
[Serializable]
public class MasterTable : IBqlTable
{
#region InventoryID
public abstract class customer : IBqlField { }
[PXString()]
[PXUIField(DisplayName = "Customer")]
[PXSelector(typeof(Search<BAccount.acctCD, Where<BAccount.type, Equal<CustomerType>>>), ValidateValue = false)]
public virtual string Customer { get; set; }
#endregion
}
public class CustomerType : Constant<string> { public CustomerType() : base("CU") { } }
Och resultatet för detta exempel kan vara något liknande:
Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow