具有复合替换键的 PXSelector
Posted
技术标签:
【中文标题】具有复合替换键的 PXSelector【英文标题】:PXSelector with composite Substitute Key 【发布时间】:2022-01-22 22:18:40 【问题描述】:我将 SegmentID 作为标识列以及 SegmentCD 和带有 IsKey=True 的 Revision Defiend。
现在在区域页面上,我们有与 AreaSegment DAC 链接的网格,用户可以在其中选择段 - 为此我们需要显示 列中的 SegmentCD-Revision 而不是 SegmentID 为了实现这一点,我们在 Segment DAC 上创建了 DisplaySegmentKey,它返回值 SegementCd-Revision 在我们设计的 AreaSegment DAC 上 带有搜索和描述字段的 PXSelector 的 SegmentID - DisplaySegmentKey 一切正常。
但是在我们使用值系统的导入导出时,它不会将其转换为 SegmentID 并为 Segment 字段提供空值错误。
我们还尝试将 DisplaySegmentKey 设为 DB 字段,并将其值设置为 Segment Graph 上 RevisionID 的 Field Updated,而不是 Description 字段,将其用作替代键,但仍然面临同样的问题
【问题讨论】:
如果您共享 DAC 的代码、区域页面图中的视图和网格定义,它会有所帮助。还有一个您尝试导入的文件示例,以查看正在使用哪些列。您在选择器中使用的字段需要一种映射回 ID 的方法。当您使用关键字段时,Acumatica 可以直接执行此操作。如果您的 SegmentCD 和 Revision 字段没有自动生成,您可以尝试将 DisplaySegmentKey DB 字段设置为 IsKey=true 而不是其他两个字段。 【参考方案1】:据我了解,我建议您将SegmentID
设置为SubstituteKey
为DisplaySegmentKey
,这样可以从DisplaySegementKey
字段中获取SegmentID
。
【讨论】:
嗨 Vidhya,SegmentID 不能用作替代键,因为选择器用于替代键,并且在 PXSelector 中显示用户友好的值替代键用作 DisplaySegmentID。 你好@Shaj,你能解释一下有DisplaySegmentID
字段的原因吗,因为DisplaySegmentKey
仅用于显示,SegmentID
是关键字段对吗?【参考方案2】:
我不确定您为什么需要这个串联字段。您可以为 SegmentId(Cd) 和 RevisionId 设置 2 个不同的选择器,以 AMBOMItem 作为模板
[PXSelector(typeof(Search2<AMBomItem.bOMID,
InnerJoin<AMBomItemBomAggregate,
On<AMBomItem.bOMID, Equal<AMBomItemBomAggregate.bOMID>,
And<AMBomItem.revisionID, Equal<AMBomItemBomAggregate.revisionID>>>>>))]
public virtual string BOMID
[PXSelector(typeof(Search<AMBomItem.revisionID,
Where<AMBomItem.bOMID, Equal<Optional<AMBomItem.bOMID>>,
Or<AMBomItem.bOMID, Equal<Current<AMBomItem.bOMID>>>>>),
typeof(AMBomItem.revisionID),
...)]
public virtual string RevisionID
[PXProjection(typeof(Select4<AMBomItem,
Aggregate<
GroupBy<AMBomItem.bOMID>>>), Persistent = false)]
public class AMBomItemBomAggregate : IBqlTable
对于 SegmentId 字段的选择器,可以指定 SegmentCD 为 SubstituteKey。仅当需要显示唯一的段 ID(例如,使用最新版本)时才需要使用“聚合”投影进行连接。
【讨论】:
以上是关于具有复合替换键的 PXSelector的主要内容,如果未能解决你的问题,请参考以下文章