检索多个客户的销售订单
尝试使用选择器中的多个值过滤某些记录时。首先,你必须在 aspx 页面中使用 px:PXMultiSelector 而不是普通的 px:PXSelector。然后,你必须创建一个包含至少三个视图和一个视图委托的图表。你还需要至少一个基本的未绑定 DAC。
这是一个带有 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>
以下是包含视图和委托的示例图。
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;
}
}
为此我们添加了 DAC,其中包含 MultiSelector 中使用的字段的定义,以及仅用于选择客户帐户的常量。
[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") { } }
这个例子的结果可能是这样的: https://i.stack.imgur.com/h7Ryc.jpg