我已经在Acumatica中创建了一个通用查询,它返回打开的工作单。我们知道可以应用打印操作,但是,我们希望打印出工作订单的多个实例。因此,我们不必单独打印它们。目前是否有批量打印的解决方案,或者是否有人可以为我指明正确的工作方向?我知道有一个可以找到的批量操作打印所有功能,但是,它没有做任何事情。
发布于 2018-02-22 12:36:42
与将用户重定向至生成的报表的任何其它操作一样,服务订单的打印服务订单按钮将抛出一个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);
}
}
...
}
如果您将服务订单的打印服务订单活动作为批量活动添加至一般查询(如以下屏幕截图所示),则GI批量活动将仅为第一个选定的服务订单生成并打开服务订单报表表单。由于抛出PXReportRequiredException
以显示为第一个服务订单生成的报告表单,因此无法处理任何后续服务订单。
为了将为多个服务订单生成的服务订单报告表单合并到单个报告中,您应该创建自定义处理屏幕,并在PXReportRequiredException实例上使用AddSibling方法。AddSibling方法会将为2nd+服务订单生成的报告附加到最初为第一个已处理服务订单创建的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;
}
}
https://stackoverflow.com/questions/48713650
复制相似问题