У меня есть сопутствующая таблица / DAC для элементов инвентаризации:
[Serializable]
public class InventoryItemCompanion : IBqlTable
{
[PXDBInt(IsKey = true)]
[PXParent(typeof(Select<InventoryItem,
Where<InventoryItem.inventoryID, Equal<Current<InventoryItemCompanion.inventoryID>>>>))]
[PXDBDefault(typeof(InventoryItem.inventoryID))]
public virtual int? InventoryID { get; set; }
public abstract class inventoryID : IBqlField { }
[PXDBInt]
[PXUIField(DisplayName = "Custom Data")]
public virtual int? CustomData { get; set; }
public abstract class customData : IBqlField { }
}
Затем у меня есть пользовательский экран Process, который будет работать с этими пользовательскими записями с помощью фильтра и производного класса, добавляющего поле Selection. На экране «Процесс» я присоединяюсь к записям «Запасы» для отображения соответствующей информации в сетке процесса.
[Serializable]
public class InventoryItemCompanionProcess : InventoryItemCompanion
{
[PXBool]
[PXUIField(DisplayName = "Select")]
public virtual bool? Selected { get; set; }
public abstract class selected : IBqlField { }
}
[Serializable]
public class TestFilter : IBqlTable
{
[PXDBInt]
[PXUIField(DisplayName = "Item Class")]
[PXDimensionSelector(INItemClass.Dimension,
typeof(Search<INItemClass.itemClassID>),
typeof(INItemClass.itemClassCD),
DescriptionField = typeof(INItemClass.descr))]
public virtual int? ItemClassID { get; set; }
public abstract class itemClassID : IBqlField { }
}
public class TestProcess : PXGraph<TestProcess>
{
public PXCancel<TestFilter> Cancel;
public PXFilter<TestFilter> Filter;
public PXFilteredProcessingJoin<
InventoryItemCompanionProcess, TestFilter,
InnerJoin<InventoryItem,
On<InventoryItem.inventoryID, Equal<InventoryItemCompanionProcess.inventoryID>>>,
Where<InventoryItem.itemClassID, Equal<Current<TestFilter.itemClassID>>,
Or<Current<TestFilter.itemClassID>, IsNull>>,
OrderBy<Asc<InventoryItem.inventoryCD>>
> Records;
public TestProcess()
{
Records.SetSelected<InventoryItemCompanionProcess.selected>();
Records.SetProcessDelegate(Process);
}
public static void Process(List<InventoryItemCompanionProcess> Records)
{
foreach(var rec in Records)
{
// Perform custom processing function
}
}
}
И на странице ASPX:
<%@ Page Language="C#" MasterPageFile="~/MasterPages/FormDetail.master" AutoEventWireup="true" ValidateRequest="false" CodeFile="XX501000.aspx.cs" Inherits="Page_XX501000" 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%" PrimaryView="Filter" TypeName="TestProcessing.TestProcess">
</px:PXDataSource>
</asp:Content>
<asp:Content ID="cont2" ContentPlaceHolderID="phF" Runat="Server">
<px:PXFormView ID="form" runat="server" DataSourceID="ds" Style="z-index: 100" Width="100%" DataMember="Filter" TabIndex="100">
<Template>
<px:PXLayoutRule runat="server" StartRow="True"/>
<px:PXSegmentMask ID="edItemClassID" runat="server" DataField="ItemClassID" />
</Template>
</px:PXFormView>
</asp:Content>
<asp:Content ID="cont3" ContentPlaceHolderID="phG" Runat="Server">
<px:PXGrid ID="grid" runat="server" DataSourceID="ds" Style="z-index: 100" Width="100%" Height="150px" SkinID="Details" TabIndex="900">
<Levels>
<px:PXGridLevel DataMember="Records">
<RowTemplate>
<px:PXCheckBox ID="edSelected" runat="server" AlreadyLocalized="False" DataField="Selected" Text="Select" />
<px:PXNumberEdit ID="edCustomData" runat="server" AlreadyLocalized="False" DataField="CustomData" />
<px:PXSegmentMask ID="edInventoryItem__InventoryCD" runat="server" DataField="InventoryItem__InventoryCD" />
<px:PXTextEdit ID="edInventoryItem__Descr" runat="server" AlreadyLocalized="False" DataField="InventoryItem__Descr" />
<px:PXSegmentMask ID="edInventoryItem__ItemClassID" runat="server" DataField="InventoryItem__ItemClassID" />
</RowTemplate>
<Columns>
<px:PXGridColumn AllowCheckAll="True" DataField="Selected" TextAlign="Center" Type="CheckBox" Width="60px" />
<px:PXGridColumn DataField="CustomData" TextAlign="Right" />
<px:PXGridColumn DataField="InventoryItem__InventoryCD" />
<px:PXGridColumn DataField="InventoryItem__Descr" Width="200px" />
<px:PXGridColumn DataField="InventoryItem__ItemClassID" Width="120px" />
</Columns>
</px:PXGridLevel>
</Levels>
<AutoSize Container="Window" Enabled="True" MinHeight="150" />
</px:PXGrid>
</asp:Content>
Процесс выполняется с нужными записями, но после этого поля в таблице из таблицы элементов объединенного запаса не отображаются.
Мне нужна информация об элементе для отображения в случае ошибок в обработке, требующих внимания пользователя.