Acumatica 阅读3个不同的事件,而不是将其全部塞进最初打算启动检查的保留事件复选框中。该行为最终与最初的预期略有不同,但结果更为用户友好,并实现了相同的目标。在数量字段上是否有提交更改?此外,激发的场的顺序通常是DAC中的放置顺序。(在DAC中的“数量”之前列出“保留

Acumatica 阅读3个不同的事件,而不是将其全部塞进最初打算启动检查的保留事件复选框中。该行为最终与最初的预期略有不同,但结果更为用户友好,并实现了相同的目标。在数量字段上是否有提交更改?此外,激发的场的顺序通常是DAC中的放置顺序。(在DAC中的“数量”之前列出“保留,acumatica,Acumatica,阅读3个不同的事件,而不是将其全部塞进最初打算启动检查的保留事件复选框中。该行为最终与最初的预期略有不同,但结果更为用户友好,并实现了相同的目标。在数量字段上是否有提交更改?此外,激发的场的顺序通常是DAC中的放置顺序。(在DAC中的“数量”之前列出“保留”)尝试交换位置,这有时会有所帮助。我会这样做,这就是为什么我必须在选中“保留”框之前离开该字段,这让我感到惊讶。如果我在“数量”字段中并单击“保留”框,则不会从该字段触发“提交更改”。此外,它们不在同一DAC中。我想这是我不太了解的复杂问题。


阅读3个不同的事件,而不是将其全部塞进最初打算启动检查的保留事件复选框中。该行为最终与最初的预期略有不同,但结果更为用户友好,并实现了相同的目标。

在数量字段上是否有提交更改?此外,激发的场的顺序通常是DAC中的放置顺序。(在DAC中的“数量”之前列出“保留”)尝试交换位置,这有时会有所帮助。我会这样做,这就是为什么我必须在选中“保留”框之前离开该字段,这让我感到惊讶。如果我在“数量”字段中并单击“保留”框,则不会从该字段触发“提交更改”。此外,它们不在同一DAC中。我想这是我不太了解的复杂问题。屏幕是一个表格网格。hold字段是表单(think SOOrder),quantity字段是网格(think SOLine)。我的目标是在停止整个请求时完成请求行的最终验证。最初,我没有验证字段本身,因为我希望用户能够在不包含数量的情况下生成请求。但是,该数量必须大于0,才能解除搁置并启动审批流程。这允许将请求创建为常用项目的模板,例如汽车上的换油总是需要机油和过滤器,但不总是需要一套新的抹布。通过在验证字段时发出警告而不是错误,用户可以保存该行。取消保留并再次验证行持久化允许抛出异常来停止它。
        List<SSRQLine> list = new List<SSRQLine>();

        foreach (SSRQLine line in Caches[typeof(SSRQLine)].Updated)
        {
            AddWithoutDuplicates(list, line);
        }

        foreach (SSRQLine line in Caches[typeof(SSRQLine)].Inserted)
        {
            AddWithoutDuplicates(list, line);
        }

        foreach (SSRQLine line in Lines.Select())
        {
            AddWithoutDuplicates(list, line);
        }

        foreach (SSRQLine line in list)
        ...
#region SSRQLine_OrderQty_FieldVerifying
protected virtual void _(Events.FieldVerifying<SSRQLine.orderQty> e)
{
    SSRQLine row = (SSRQLine) e.Row;
    if((decimal?)e.NewValue == 0)
    {
        e.Cache.RaiseExceptionHandling<SSRQLine.orderQty>(e.Row, row.OrderQty, new PXSetPropertyException(Messages.InvalidQuantity, PXErrorLevel.Warning));
    }
}
#endregion
#region SSRQRequisition_RowPersisting
protected void _(Events.RowPersisting<SSRQRequisition> e)
{
    SSRQRequisition row = e.Row;
    if (e.Operation != PXDBOperation.Delete && row?.Hold == false)
    {
        ValidateConsignment();
    }
}
#endregion
#region ValidateConsignment
protected virtual void ValidateConsignment()
{

    int lineCounter = 0;

    SSRQRequisition req = Requisitions.Current;

    List<SSRQLine> list = new List<SSRQLine>();

    foreach (SSRQLine line in Caches[typeof(SSRQLine)].Updated)
    {
        AddWithoutDuplicates(list, line);
    }

    foreach (SSRQLine line in Caches[typeof(SSRQLine)].Inserted)
    {
        AddWithoutDuplicates(list, line);
    }

    foreach (SSRQLine line in Lines.Select())
    {
        AddWithoutDuplicates(list, line);
    }

    foreach (SSRQLine line in list)
    {
        lineCounter++;

        if (line.SiteID == null)
        {
            throw new PXSetPropertyException(Messages.NoWhse, PXErrorLevel.Error);
        }

        if (line.OrderQty == null || line.OrderQty == 0)
        {
            this.Lines.Cache.RaiseExceptionHandling<SSRQLine.orderQty>(line, line.OrderQty, new PXSetPropertyException(Messages.InvalidQuantity, PXErrorLevel.Error));
            throw new PXSetPropertyException(Messages.InvalidQuantity, PXErrorLevel.Error);
        }

    }
    if (lineCounter == 0)
    {
        this.Lines.Cache.RaiseExceptionHandling<SSRQRequisition.hold>(req, req.Hold, new PXSetPropertyException(Messages.NoLines, PXErrorLevel.Error));
        throw new PXSetPropertyException(Messages.NoLines, PXErrorLevel.Error);
    }

}
#endregion