UI网格中未显示PXProcessing SetError

时间:2017-07-21 07:25:44

标签: acumatica

这是我的流程屏幕: enter image description here 正如你所看到的,它会引发错误,但它并不表示网格上的错误标记。 单击过程按钮后,它只取消选中记录中的复选框

我想网格是这样的(红色' x'标记):

enter image description here

这是我的图表:

public PXCancel<PayrollFilter> Cancel;

    public PXSetup<PayrollSetup> PayrollSetup;

    public PXFilter<PayrollFilter> Filter;

    [PXFilterable]
    public PXFilteredProcessingJoin<PayrollEmployeeProcess, PayrollFilter,
                                InnerJoin<EPEmployee,
                                    On<PayrollEmployee.employeeID, Equal<EPEmployee.bAccountID>>,
                                InnerJoin<Branch,
                                     On<EPEmployee.parentBAccountID, Equal<Branch.bAccountID>>>>,
                                Where<PayrollEmployee.payPeriodID, Equal<Current<PayrollFilter.payPeriodID>>,
                                And<Branch.branchID, Equal<Current<AccessInfo.branchID>>>>> EmployeePayrollProcess;



    #region Constructor
    public PayrollProcess()
    {
        PayrollSetup setup = PayrollSetup.Current;

        EmployeePayrollProcess.SetSelected<PayrollEmployeeProcess.selected>();

        EmployeePayrollProcess.SetProcessDelegate(delegate (List<PayrollEmployeeProcess> employees)
        {
            if (Filter.Current == null) return;

            var payPeriod = Filter.Current.PayPeriodID ?? 0;
            var payrollPeriod = Filter.Current.PayrollPeriodID ?? 0;

            if (payPeriod == 0 || payrollPeriod == 0) return;

            PXLongOperation.StartOperation(this, delegate ()
            {
                bool errorOccured = false;
                foreach (PayrollEmployeeProcess employee in employees)
                {

                    PayrollRegisterEntry graph = PXGraph.CreateInstance<PayrollRegisterEntry>();
                    try
                    {

                        graph.ProcessPayroll(employee, payPeriod, payrollPeriod);
                        PXProcessing<PayrollEmployeeProcess>.SetInfo("Employee processed");

                    }
                    catch (Exception ex)
                    {
                        errorOccured = true;
                        //employees.IndexOf(employee), 
                        PXProcessing<PayrollEmployeeProcess>.SetError(ex);
                    }
                    finally
                    {
                        graph.Clear();
                    }
                }
                if (errorOccured) throw new PXException("At least one employee was not processed.");
            });

        });
        // EmployeePayrollProcess.
    }`
任何人都可以帮助我吗?我使用的是Acumatica 6

1 个答案:

答案 0 :(得分:1)

在Acumatica中抛出异常会在标题中设置错误。要设置行或字段级别错误,您需要设置/提高它。有几种设置/引发错误的方法,它们的共同之处在于它们不使用'throw'关键字。

对于带过滤器的处理屏幕,请使用以下语法来引发错误:

PXFilteredProcessing<GridDetailDAC, GridFilterDAC>.SetError(rowIndex, new PXSetPropertyException("Error Message", PXErrorLevel.RowError));

不带过滤器的处理屏幕:

PXProcessing.SetError(rowIndex, new PXException("Error Message"));