Acumatica - 在现场添加多个跟踪号
Acumatica - Adding Multiple Tracking Numbers in Field
我正在将 SOPackageDetail 中的跟踪编号数据字段添加到货运详细信息选项卡上的发票屏幕 (SO303000)。我知道它只显示一个 ShipmentNbr,这就是我用来连接两个表的内容,但我想要所有的跟踪号码,因为每个发货号码可以有多个,显示在现场而不是仅仅显示一。它们可以在字段值中用逗号分隔。这是我的代码,它只适用于一个跟踪号码。
图:
public class SOInvoiceEntry_Extension : PXGraphExtension<SOInvoiceEntry>
{
#region Event Handlers
protected void SOFreightDetail_RowSelecting(PXCache cache, PXRowSelectingEventArgs e, PXRowSelecting del)
{
if (del != null)
del(cache, e);
var row = (SOFreightDetail)e.Row;
if (row == null) return;
using (new PXConnectionScope())
{
SOPackageDetail track = PXSelect<SOPackageDetail, Where<SOPackageDetail.shipmentNbr, Equal<Required<SOFreightDetail.shipmentNbr>>>>.Select(Base, row.ShipmentNbr);
if(track != null){
SOFreightDetailExt invoiceExt = row.GetExtension<SOFreightDetailExt>();
if (invoiceExt != null){
invoiceExt.TrackNumber = track.TrackNumber;
}
}
}
}
#endregion
}
DAC 扩展:
public class SOFreightDetailExt : PXCacheExtension<PX.Objects.SO.SOFreightDetail>
{
#region TrackNumber
public abstract class trackNumber : PX.Data.IBqlField
{
}
protected string _TrackNumber;
[PXString()]
[PXDefault()]
[PXUIField(DisplayName = "Tracking Number", IsReadOnly = true)]
public virtual string TrackNumber
{
get
{
return this._TrackNumber;
}
set
{
this._TrackNumber = value;
}
}
#endregion
}
我希望在此字段中显示与 Shipment Nbr 关联的所有跟踪编号,现在它只显示一个。仅当一个货件号有多个包裹时才会发生这种情况。
您需要在 foreach 中循环记录 (PXSelect)。然后您需要将每个字符串值添加到您的 tracknumber 字段。像这样的东西应该有用...
SOFreightDetailExt invoiceExt = row.GetExtension<SOFreightDetailExt>();
if(invoiceExt == null)
return;
foreach(SOPackageDetail track in PXSelect<SOPackageDetail, Where<SOPackageDetail.shipmentNbr, Equal<Required<SOFreightDetail.shipmentNbr>>>>.Select(Base, row.ShipmentNbr))
{
invoiceExt.TrackNumber = $"{invoiceExt.TrackNumber}, {track.TrackNumber}";
}
此外,不需要 PXConnectionScope。你可以删除它。
我正在将 SOPackageDetail 中的跟踪编号数据字段添加到货运详细信息选项卡上的发票屏幕 (SO303000)。我知道它只显示一个 ShipmentNbr,这就是我用来连接两个表的内容,但我想要所有的跟踪号码,因为每个发货号码可以有多个,显示在现场而不是仅仅显示一。它们可以在字段值中用逗号分隔。这是我的代码,它只适用于一个跟踪号码。 图:
public class SOInvoiceEntry_Extension : PXGraphExtension<SOInvoiceEntry>
{
#region Event Handlers
protected void SOFreightDetail_RowSelecting(PXCache cache, PXRowSelectingEventArgs e, PXRowSelecting del)
{
if (del != null)
del(cache, e);
var row = (SOFreightDetail)e.Row;
if (row == null) return;
using (new PXConnectionScope())
{
SOPackageDetail track = PXSelect<SOPackageDetail, Where<SOPackageDetail.shipmentNbr, Equal<Required<SOFreightDetail.shipmentNbr>>>>.Select(Base, row.ShipmentNbr);
if(track != null){
SOFreightDetailExt invoiceExt = row.GetExtension<SOFreightDetailExt>();
if (invoiceExt != null){
invoiceExt.TrackNumber = track.TrackNumber;
}
}
}
}
#endregion
}
DAC 扩展:
public class SOFreightDetailExt : PXCacheExtension<PX.Objects.SO.SOFreightDetail>
{
#region TrackNumber
public abstract class trackNumber : PX.Data.IBqlField
{
}
protected string _TrackNumber;
[PXString()]
[PXDefault()]
[PXUIField(DisplayName = "Tracking Number", IsReadOnly = true)]
public virtual string TrackNumber
{
get
{
return this._TrackNumber;
}
set
{
this._TrackNumber = value;
}
}
#endregion
}
我希望在此字段中显示与 Shipment Nbr 关联的所有跟踪编号,现在它只显示一个。仅当一个货件号有多个包裹时才会发生这种情况。
您需要在 foreach 中循环记录 (PXSelect)。然后您需要将每个字符串值添加到您的 tracknumber 字段。像这样的东西应该有用...
SOFreightDetailExt invoiceExt = row.GetExtension<SOFreightDetailExt>();
if(invoiceExt == null)
return;
foreach(SOPackageDetail track in PXSelect<SOPackageDetail, Where<SOPackageDetail.shipmentNbr, Equal<Required<SOFreightDetail.shipmentNbr>>>>.Select(Base, row.ShipmentNbr))
{
invoiceExt.TrackNumber = $"{invoiceExt.TrackNumber}, {track.TrackNumber}";
}
此外,不需要 PXConnectionScope。你可以删除它。