我在Acumatica中创建了一个通用查询,返回打开的工单。我们知道可以应用打印操作,但是,我们要打印出多个工单的实例。所以我们不必单独打印它们。目前是否有大规模打印的解决方案,或者有人能指出我正确的方向可能是一个解决方案?我知道有一个群发动作打印所有可以找到的功能,但它没有做任何事情。
答案 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
抛出显示为第一个服务订单生成的报告表单,因此无法处理任何后续服务订单。
为了将为多个服务订单生成的服务订单报表单合并到一个报表中,您应创建自定义处理屏幕并在 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;
}
}