覆盖dataview委托方法

时间:2017-06-28 00:29:37

标签: acumatica

我想在PX.Objects.AR.ARStatementPrint图上覆盖详细信息委托方法。

HEre是方法

protected virtual IEnumerable details()
{
    ARSetup setup = ARSetup.Current;

    PrintParameters header = Filter.Current;
    List<DetailsResult> result = new List<DetailsResult>();
    if (header == null)
        yield break;

    GL.Company company = PXSelect<GL.Company>.Select(this);
    foreach (PXResult<ARStatement, Customer> it in PXSelectJoin<ARStatement,
            InnerJoin<Customer, On<Customer.bAccountID, Equal<ARStatement.statementCustomerID>>>,
            Where<ARStatement.statementDate, Equal<Required<ARStatement.statementDate>>,
                And<ARStatement.statementCycleId, Equal<Required<ARStatement.statementCycleId>>>>,
            OrderBy<Asc<ARStatement.statementCustomerID, Asc<ARStatement.curyID>>>>
            .Select(this, header.StatementDate, header.StatementCycleId))
    {
        DetailsResult res = new DetailsResult();
        ARStatement st = it;
        Customer cust = it;
        res.Copy(st, cust);

        if (setup?.ConsolidatedStatement != true && st.BranchID != header.BranchID)
                continue;

        if (Filter.Current.Action == 0 &&
            header.ShowAll != true &&
            (st.DontPrint == true || st.Printed == true))
                continue;

        if ((Filter.Current.Action == 1 || Filter.Current.Action == 2) &&
            header.ShowAll != true &&
            (st.DontEmail == true || st.Emailed == true))
                continue;

        if (cust.PrintCuryStatements == true)
        {
            if (Filter.Current.CuryStatements != true)
                continue;

            DetailsResult last = result.Count > 0 ? result[result.Count - 1] : null;
            if (last?.CustomerID == res.CustomerID && last?.CuryID == res.CuryID)
            {
                last.Append(res);
            }
            else
            {
                result.Add(res);
            }
        }
        else
        {
            if (Filter.Current.CuryStatements == true)
                continue;

            res.ResetToBaseCury(company.BaseCuryID);

            DetailsResult last = result.Count > 0 ? result[result.Count - 1] : null;
            if (last?.CustomerID == res.CustomerID)
            {
                last.Append(res);
            }
            else
            {
                result.Add(res);
            }
        }
    }

    foreach (var item in result)
    {
        var located = Details.Cache.Locate(item);
        if (located != null)
        {
            yield return located;
        }
        else
        {
            Details.Cache.SetStatus(item, PXEntryStatus.Held);
            yield return item;
        }
    }

    Details.Cache.IsDirty = false;
}

我特意想改变foreach select语句,以便它由另一个字段排序。

foreach (PXResult<ARStatement, Customer> it in PXSelectJoin<ARStatement,
        InnerJoin<Customer, On<Customer.bAccountID, Equal<ARStatement.statementCustomerID>>>,
        Where<ARStatement.statementDate, Equal<Required<ARStatement.statementDate>>,
            And<ARStatement.statementCycleId, Equal<Required<ARStatement.statementCycleId>>>>,
        OrderBy<Asc<ARStatement.statementCustomerID, Asc<ARStatement.curyID>>>>
        .Select(this, header.StatementDate, header.StatementCycleId))
{

我试过了 [PXOverride]

受保护的虚拟IEnumerable详细信息()
{

但没有运气,是否可以覆盖此方法?

1 个答案:

答案 0 :(得分:2)

我认为对于这样的覆盖,即使基本图形方法受到保护,也需要公开覆盖方法。请尝试以下方法......

[PXOverride]
public virtual IEnumerable details()
{
   //override code here...
}