【问题标题】:Parse SubAccount to get individual segments解析子帐户以获取各个细分市场
【发布时间】:2018-10-11 03:18:22
【问题描述】:

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

我知道 SubAccounts 作为一个字符串示例 ABC123 保存在 Sub 表中。然后,链接到该表的子帐户字段将根据 ID(整数 - 子表的 PK)进行链接。我当然可以从这张表中读取,然后进行相应的拆分(通过取前 3 个字符和后 3 个字符)。但是,我希望这是动态的,以便自定义适用于不同的客户,并且客户可能有不同的段长度。因此我不能硬编码值 3。我可以利用 SegmentValues 表来相应地检索每个 Segment 的长度。

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

Acumatica 是否提供了一种将子帐户拆分为字符串数组的方法,还是我应该通过识别分段值的长度来手动执行此操作?

【问题讨论】:

    标签: acumatica


    【解决方案1】:

    我相信用于分隔段的一些逻辑位于受保护的 Definition 类中。分开的段位于 Definition 类的 Dimensions 集合中。您可以在派生自 PXDimensionAttribute 类的属性中访问它,但由于 Definition 类受到保护,因此您无法在图形中访问它,因为 PXGraph/PXGraphExtension 不是从它派生的.

    无法从 Dimension 中提取很多内容,因为大多数属性都受到保护: 您可以通过阅读分段键的分段来滚动自己:

    以下示例在发票和备忘录屏幕的跟踪中写入交易子帐户的段值:

    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;
                            }
                        }
                    }
              }
          }
      }
    }
    

    跟踪结果:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-15
      • 2021-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多