acumatica
複数の値を1つのセレクタでフィルタリングする
サーチ…
前書き
これは、グリッドをフィルタリングするためにセレクタの内部に複数の値を持つ方法です。
マルチプレース顧客の受注の取得
セレクタで複数の値を使ってレコードをフィルタリングしようとしているとき。まず、通常のpx:PXSelectorの代わりにaspxページでpx:PXMultiSelectorを使用する必要があります。その後、少なくとも3つのビューとビューデリゲートを含むグラフを作成する必要があります。少なくとも基本的な非結合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;
}
}
これに、MultiSelectorで使用されるフィールドの定義を含むDACと顧客アカウントを選択するための定数を追加します。
[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") { } }
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow