通用查询中的大规模打印

时间:2018-02-09 20:30:20

标签: printing customization acumatica

我在Acumatica中创建了一个通用查询,返回打开的工单。我们知道可以应用打印操作,但是,我们要打印出多个工单的实例。所以我们不必单独打印它们。目前是否有大规模打印的解决方案,或者有人能指出我正确的方向可能是一个解决方案?我知道有一个群发动作打印所有可以找到的功能,但它没有做任何事情。

1 个答案:

答案 0 :(得分:0)

就像在将用户重定向到生成的报告的任何其他操作中一样,服务订单'打印服务订单按钮会抛出PXReportRequiredException以在新窗口中打开生成的报告:

public class ServiceOrderEntry : PXGraph<ServiceOrderEntry, FSServiceOrder>
{
    ...
    public PXAction<FSServiceOrder> printServiceOrder;

    [PXUIField]
    [PXButton]
    public virtual void PrintServiceOrder()
    {
        if (this.IsDirty) Actions.PressSave();
        if (ServiceOrderRecords.Current == null) return;

        Dictionary<string, string> serviceOrderParameters = 
            GetServiceOrderParameters(ServiceOrderRecords.Current, false);
        if (serviceOrderParameters.Count != 0)
        {
            throw new PXReportRequiredException(serviceOrderParameters, 
                "SD641000", PXBaseRedirectException.WindowMode.NewWindow, string.Empty);
        }
    }
    ...
}

如果您添加服务订单&#39;打印服务订单操作作为对通用查询的批量操作(如下面的屏幕截图所示),GI质量操作将仅为第一个选定的服务订单生成并打开服务订单报告表。由于PXReportRequiredException抛出显示为第一个服务订单生成的报告表单,因此无法处理任何后续服务订单。 enter image description here enter image description here

为了将为多个服务订单生成的服务订单报表单合并到一个报表中,您应创建自定义处理屏幕并在 PXReportRequiredException 上使用 AddSibling 方法实例。 AddSibling 方法会将为第二个+服务订单生成的报告附加到最初为第一个已处理的服务订单创建的 PXReportRequiredException 实例。处理完所有选定的服务订单后,将抛出一个PXReportRequiredException以将用户重定向到报告查看器,同时显示所有生成的报告。

public class PrintServiceOrderProcess : PXGraph<PrintServiceOrderProcess>
{
    public PXCancel<FSServiceOrder> Cancel;
    public PXProcessing<FSServiceOrder> ServiceOrderRecords;

    public PrintServiceOrderProcess()
    {
        ServiceOrderRecords.SetProcessDelegate(list => PrintServiceOrders(list));
    }

    public static void PrintServiceOrders(IEnumerable<FSServiceOrder> list)
    {
        PXReportRequiredException ex = null;
        foreach (var order in list)
        {
            Dictionary<string, string> parameters = new Dictionary<string, string>();
            string srvOrdType = SharedFunctions
                .GetFieldName<FSServiceOrder.srvOrdType>(true);
            string refNbr = SharedFunctions
                .GetFieldName<FSServiceOrder.refNbr>(true);
            parameters[srvOrdType] = order.SrvOrdType;
            parameters[refNbr] = order.RefNbr;

            if (ex == null)
            {
                ex = new PXReportRequiredException(parameters, "SD641000", "SD641000");
            }
            else
            {
                ex.AddSibling("SD641000", parameters, false);
            }
        }
        if (ex != null) throw ex;
    }
}