代码之家  ›  专栏  ›  技术社区  ›  Joseph Caruana

分析子帐户以获取单个段

  •  1
  • Joseph Caruana  · 技术社区  · 6 年前

    我想以编程方式访问子帐户的各个部分。假设我有一个特定的子帐户设置为ABC-123,我希望能够在代码中分别访问ABC和123,以便实现特定的业务需求。

    我知道子科目保存在子表中,作为一个字符串示例ABC123。链接到此表的子帐户字段将基于ID(子表的整数-PK)进行链接。当然,我可以从这个表中读取内容,然后相应地拆分(取前3个字符和后3个字符)。但是,我希望这是动态的,这样定制将为不同的客户和客户可能有不同的长度段工作。因此,我不能硬编码值3。我可以使用SegmentValues表来相应地检索每个段的长度。

    然而,由于Acumatica已经以某种方式执行了这种解析(UI中的示例),因此是否有一个API,Acumatica在其中处理这种逻辑,并可以将子帐户作为字符串数组提供。我试图查看SubAccountAttribute、PXDimensionSelectorAttribute和SubAccountProvider,但找不到提供此功能的任何内容。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Hugues Beauséjour    6 年前

    我相信用于分隔段的一些逻辑是在受保护的 定义 班级。分离的段位于 尺寸 收藏 定义 班级。您可以在派生自的属性中访问它 PXDimensionAttribute属性 但自从 定义 类受保护您不能在图形中访问它,因为PXGraph/PXGraphExtension不是从它派生的。

    enter image description here enter image description here

    using PX.Data;
    using PX.Objects.AR;
    using PX.Objects.CS;
    using PX.Objects.GL;
    
    namespace PX.Objects.SO
    {
      public class ARInvoiceEntry_Extension : PXGraphExtension<ARInvoiceEntry>
      {
          public void ARTran_RowSelected(PXCache cache, PXRowSelectedEventArgs e)
          {
              ARTran tran = e.Row as ARTran;
    
              if (tran != null && tran.SubID.HasValue)
              {
                    Sub sub = SubAccountAttribute.GetSubaccount(Base, tran.SubID.Value);
    
                    if (sub != null && sub.SubCD != null)
                    {
                        short segmentStartIndex = 0;
    
                        foreach (Segment segment in PXSelect<Segment,
                                                    Where<Segment.dimensionID, Equal<Required<Segment.dimensionID>>>,
                                                    OrderBy<Asc<Segment.segmentID>>>.Select(Base, "SUBACCOUNT"))
                        {
                            if (segment.SegmentID.HasValue && segment.Length.HasValue)
                            {
                                PXTrace.WriteInformation(string.Format("Segment {0}: {1}",
                                                                       segment.SegmentID,
                                                                       sub.SubCD.Substring(segmentStartIndex, segment.Length.Value)));
    
                                segmentStartIndex += segment.Length.Value;
                            }
                        }
                    }
              }
          }
      }
    }
    

    跟踪结果: enter image description here