Acumatica 处理屏幕中的数据消失

Acumatica 处理屏幕中的数据消失,acumatica,Acumatica,我有一个自定义处理页面。数据视图的主DAC是ARRegister,但有数据视图委托。查看和委派都将ARCashSale和ARInvoice加入主DAC,原因是…一些记录是现金销售,其他记录是发票、过期费用等。其中包括一些网格列,用于显示特定于现金销售的数据。我在流程图中调用一个静态方法来分配流程委托。该方法运行时没有错误 在数据视图委托中,我检查从BQL返回的每条记录的文档类型。 如果是现金销售,那么 产生并返回新的PXResult(登记、现金销售) 其他的 返回新的PXResult(寄存器)

我有一个自定义处理页面。数据视图的主DAC是ARRegister,但有数据视图委托。查看和委派都将ARCashSaleARInvoice加入主DAC,原因是…一些记录是现金销售,其他记录是发票、过期费用等。其中包括一些网格列,用于显示特定于现金销售的数据。我在流程图中调用一个静态方法来分配流程委托。该方法运行时没有错误

在数据视图委托中,我检查从BQL返回的每条记录的文档类型。
如果是现金销售,那么
产生并返回新的PXResult(登记、现金销售)
其他的
返回新的PXResult(寄存器)

委托人的原因是检查一些无法使用标准BQL确定的其他条件。我注意到,在用户选择“全部处理”后,现金销售特定列中的数据消失。我无法确定原因。检查其他人是否经历过这种情况

数据视图

public PXProcessingJoin<ARRegister,
        LeftJoin<cs.ARCashSale, On<ARRegister.docType, Equal<cs.ARCashSale.docType>, And<ARRegister.refNbr, Equal<cs.ARCashSale.refNbr>>>,
        LeftJoin<ARInvoice, On<ARRegister.docType, Equal<ARInvoice.docType>, And<ARRegister.refNbr, Equal<ARInvoice.refNbr>>>,
            InnerJoin<Customer,On<ARRegister.customerID,Equal<Customer.bAccountID>>>>>,
        Where2<Where<ARRegister.released, Equal<True>, And<ARRegister.branchID, Equal<Current<AccessInfo.branchID>>>>,
            And<Where<Customer.finChargeApply,Equal<True>>>>> Registers;
公共PXProcessingJoin寄存器;

您是否在页面网格上使用了MatrixMode和/或SyncPosition?您可能需要SyncPosition=“True”
另外,如果不使用process all,是否会出现问题?(进程1或2行)

这是一个较老的问题,但我有一个类似的问题

您需要向要处理的DAC添加一个名为“Selected”的布尔字段

我解决这个问题的方法是使用本地DAC。 您可以使其从ARRegister继承,只需添加所需字段

在我的例子中,我使用了从主DAC继承的PXProjection,并从连接的DAC中添加了所需的字段。请注意,您需要将
BqlField=typeof(DAC.field)
属性添加到这些字段的type属性,以将它们映射到正确的DAC

然后在
PXProcessing
视图中,您只需使用本地DAC即可


此外,在对BQL进行故障排除时,尝试请求探查器屏幕(SM205070)非常有用。

基本上,在处理屏幕子DAC(视图中的主DAC除外)时,一旦处理完成,字段值将不会持续存在

在这种情况下,PXProjection将帮助我们即使在处理屏幕中的行/记录的处理完成之后仍然保持这些值

请在下面找到示例投影视图和DAC

    [PXProjection(typeof(Select2<SOShipment, InnerJoin<SOOrderShipment,
                                            On<SOOrderShipment.shipmentNbr, Equal<SOShipment.shipmentNbr>,
                                            And<SOShipment.status, Equal<SOShipmentStatus.confirmed>>>,
                                            InnerJoin<SOOrder, On<SOOrderShipment.orderType, Equal<SOOrder.orderType>,
                                            And<SOOrderShipment.orderNbr, Equal<SOOrder.orderNbr>>>>>>))]


Projection DAC:

    [Serializable]
public class ProjectionShipmentDAC : IBqlTable
{
       #region Selected
       public abstract class selected : IBqlField
       {
       }
       protected bool? _Selected = false;
       [PXBool]
       [PXDefault(false, PersistingCheck = PXPersistingCheck.Nothing)]
       [PXUIField(DisplayName = "Selected")]
       public virtual bool? Selected
       {
           get
           {
               return _Selected;
           }
           set
           {
               _Selected = value;
           }
       }
       #endregion

       #region Status
       [PXDBString(1, IsFixed = true, BqlField = typeof(SOShipment.status))]
       [PXUIField(DisplayName = "Status")]
       [SOShipmentStatus.List()]
       public virtual string Status { get; set; }
       public abstract class status : IBqlField { }
       #endregion

        #region ShipmentNbr
       [PXDBString(15, IsKey = true, IsUnicode = true, BqlField = typeof(SOShipment.shipmentNbr))]
       [PXUIField(DisplayName = "Shipment Nbr.")]
       public virtual string ShipmentNbr { get; set; }
       public abstract class shipmentNbr : IBqlField { }
       #endregion

       #region ShipDate
       [PXDBDate(BqlField = typeof(SOShipment.shipDate))]
       [PXUIField(DisplayName = "Shipment Date")]
       public virtual DateTime? ShipDate { get; set; }
       public abstract class shipDate : IBqlField { }
       #endregion

       #region CustomerID
       [PXDBInt(BqlField = typeof(SOShipment.customerID))]
       [PXUIField(DisplayName = "Customer")]
       [PXSelector(typeof(Customer.bAccountID), new Type[] { typeof(Customer.acctCD), typeof(Customer.acctName) },
           SubstituteKey = typeof(Customer.acctCD), DescriptionField = typeof(BAccount.acctName))]
       public virtual int? CustomerID { get; set; }
       public abstract class customerID : IBqlField { }
       #endregion

       #region Shipped Quantity
       [PXDBDecimal(BqlField = typeof(SOShipment.shipmentQty))]
       [PXUIField(DisplayName = "Shipped Quantity")]
       public virtual decimal? ShipmentQty { get; set; }
       public abstract class shipmentQty : IBqlField { }
       #endregion
}
[PXProjection(typeof(Select2))]
投影DAC:
[可序列化]
公共类ProjectionShipmentDAC:IBqlTable
{
#选定区域
已选择公共抽象类:IBqlField
{
}
受保护的布尔?\u选择=假;
[PXBool]
[PXDefault(false,PersistingCheck=PXPersistingCheck.Nothing)]
[PXUIField(DisplayName=“Selected”)]
已选择公共虚拟布尔值
{
得到
{
返回(已选择);;
}
设置
{
_所选=值;
}
}
#端区
#地区地位
[PXDBString(1,IsFixed=true,BqlField=typeof(soshipping.status))]
[PXUIField(DisplayName=“Status”)]
[SOShipmentStatus.List()]
公共虚拟字符串状态{get;set;}
公共抽象类状态:IBqlField{}
#端区
#地区发货编号
[PXDBString(15,IsKey=true,IsUnicode=true,BqlField=typeof(soshipping.shipmentNbr))]
[PXUIField(DisplayName=“装运编号”)]
公共虚拟字符串ShipmentNbr{get;set;}
公共抽象类shipmentNbr:IBqlField{}
#端区
#地区发货日期
[PXDBDate(BqlField=typeof(soshipping.shipDate))]
[PXUIField(DisplayName=“装运日期”)]
公共虚拟日期时间?ShipDate{get;set;}
公共抽象类shipDate:IBqlField{}
#端区
#区域客户ID
[PXDBInt(BqlField=typeof(soshipping.customerID))]
[PXUIField(DisplayName=“Customer”)]
[PXSelector(typeof(Customer.bAccountID),新类型[]{typeof(Customer.accctcd),typeof(Customer.acctName)},
SubstituteKey=typeof(Customer.acctCD),DescriptionField=typeof(BAccount.acctName))]
公共虚拟int?CustomerID{get;set;}
公共抽象类customerID:IBqlField{}
#端区
#地区发货数量
[PXDBDecimal(BqlField=typeof(soshipping.shipmentQty))]
[PXUIField(DisplayName=“发货数量”)]
公共虚拟小数?ShipmentQty{get;set;}
公共抽象类shipmentQty:IBqlField{}
#端区
}

我也有类似的问题,他们单击“流程”按钮后,关联列中的信息消失。我面临同样的问题,流程记录、网格记录消失后,我必须强制刷新以显示保留的记录。SyncPosition=“True”在我的网格中设置。@Brandan,我犯了一个错误,现在我的问题已经解决,但网格只显示已处理的记录,现在显示所有记录。假设我从5条记录中选择了要处理的单个记录,然后在处理后,仅显示已处理的记录,我需要强制刷新以显示所有记录,如何根据应用的筛选器显示所有记录?这就是处理页面的工作方式(最后显示运行的结果)。您可以尝试一些刷新技术,如操作后按取消或查看刷新,但不确定工作是否会面临相同的消失问题,如果列值来自联接表,是否有必要使用投影DAC来解决该问题?另外,我的已处理对话框未显示垂直滚动,行被隐藏,当我单击“刷新”时,页面显示已启用,行转到第2页如何解决此问题?