我想以编程方式访问子帐户的各个细分。假设我有一个特定的子帐户设置为ABC-123,我希望能够用代码分别访问ABC和123,这样我就可以实现特定的业务需求。
我知道SubAccounts作为一个字符串示例ABC123保存在Sub表中。然后,链接到该表的子帐户字段将基于ID(子表的整数-PK)进行链接。我当然可以从该表中读取内容,然后进行相应的拆分(采用前3个字符和后3个字符)。但是,我希望这是动态的,以便自定义将适用于不同的客户端,并且客户端的段长度可能不同。因此,我无法对值3进行硬编码。我可以利用SegmentValues表来相应地检索每个Segment的长度。
但是,由于Acumatica已经以某种方式执行了该解析(UI中的示例),因此存在一个API,Acumatica可以在该API中处理此逻辑并可以将子帐户提供为字符串数组。我试图研究SubAccountAttribute,PXDimensionSelectorAttribute和SubAccountProvider,但找不到能提供此功能的任何东西。
Acumatica是否提供一种将子帐户拆分为字符串数组的方法,还是应该通过从细分值中识别长度来手动完成此操作?
答案 0 :(得分:2)
我认为,用于分隔细分受众群的某些逻辑位于受保护的 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;
}
}
}
}
}
}
}