处理屏幕网格空白处理

时间:2019-10-21 15:57:12

标签: acumatica

我有一个伴随表/库存商品的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 { }
}

然后,我有了一个自定义“处理”屏幕,该屏幕将在这些自定义记录上进行操作,并在“过滤器”和派生类中添加“选择”字段。在“流程”屏幕中,我加入了“库存物料”记录,以在流程网格中显示相关信息。

[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>

enter image description here

该过程确实在所需的记录上运行,但是这样做之后,“加入的库存项目”表中网格内的字段将被清空。

enter image description here

在需要用户注意的处理错误的情况下,我仍需要显示项目信息。

1 个答案:

答案 0 :(得分:1)

请考虑将InventoryItemCompanion(或派生类)更改为PXProjection,将每个字段映射到所需的特定DAC字段。 (可选)尝试使用IsKey = true标记显示的字段(如Descr),例如:

    [PXProjection(typeof(
        Select2<InventoryItemCompanion,
            InnerJoin<InventoryItem, On<InventoryItemCompanion.inventoryID,
                Equal<InventoryItem.inventoryID>>>>),
       new Type[] { typeof(InventoryItemCompanion) }, Persistent = true)]
    public class InventoryItemCompanion : PX.Data.IBqlTable
    { 

        [PXDBInt(IsKey = true, 
             BqlField=typeof(InventoryItemCompanion.inventoryID))]
        [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 { }

        [PXDBString(256, IsKey = true, 
             BqlField=typeof(InventoryItem.descr))]
        [PXUIField(DisplayName="Description", Enabled=false))]
        public virtual String Descr{ get; set; 
        public abstract class descr: IBqlField { }

    }

例如,视图将是PXFilteredProcessing而不是PXFilteredProcessingJoin,并且ASPX标记将直接分配DataField =“ Descr”而不是InventoryItem__Descr。