首页 > 解决方案 > 如何使用 Coalesce 和 PXProjection 的示例?

问题描述

(简短的)故事:

有一个现有的设置记录出于业务原因,现在需要选择在站点级别覆盖设置设置所以,有第二个表,具有相同的字段(除了差异,无关紧要),定义了键作为“站点ID”

问题 - 现在想要一个我可以随时使用的合并视图,为特定站点加载正确的值 这将允许我搜索“原始”单个设置的所有用途,并根据需要进行替换

因此,由于不应该使用 SQL 视图,因此尝试通过 PXProjection 创建新的 DAC,并带有以下标头:

[PXProjection(typeof(Select2<INSite,
    LeftJoin<MQMJINSiteDefaults,On<MQMJINSiteDefaults.siteID,Equal<INSite.siteID>>,
    CrossJoin<MQMJSetup>>>))]
[PXBreakInheritance]
[Serializable()]
[PXCacheName(Messages.CacheMQMJINSiteDefaults)]
public class MQMJINSiteSetup : IBqlTable

表用法:

SQL 确实返回了所需的值(通过 Profiler 跟踪)左连接有效,交叉连接有效

但是使用通用查询,没有得到价值

尝试过的许多事情包括:

[PXSelector(typeof(Search<Numbering.numberingID>), DescriptionField = typeof(Numbering.descr))]
[PXUIField(DisplayName = "Additional Lab Results ID")]
[PXDependsOnFields(typeof(MQMJINSiteDefaults.addLabResultsNumberingID), typeof(MQMJSetup.addLabResultsNumberingID))]
// Ran for single value, get either the Site level or main Setup
//[PXDBString(10, IsUnicode = true, BqlField = typeof(MQMJSetup.addLabResultsNumberingID))]
// [PXDBString(10, IsUnicode = true, BqlField = typeof(MQMJINSiteDefaults.addLabResultsNumberingID))]

// Nothing below seems to work (e.g. No values)
//     [PXDBString(10, IsUnicode = true, BqlField = typeof(IsNull<Selector<MQMJINSiteDefaults.addLabResultsNumberingID, MQMJSetup.addLabResultsNumberingID>, MQMJINSiteDefaults.addLabResultsNumberingID>))]
 [PXString(10, IsUnicode = true)]
//[PXUnboundDefault(typeof(  IsNull<Selector<MQMJINSiteDefaults.addLabResultsNumberingID, MQMJSetup.addLabResultsNumberingID>, MQMJINSiteDefaults.addLabResultsNumberingID>
//    ), PersistingCheck = PXPersistingCheck.Nothing)]
//[PXUnboundDefault(typeof(Coalesce<
//            Search<MQMJINSiteDefaults.addLabResultsNumberingID, Where<MQMJINSiteDefaults.addLabResultsNumberingID,IsNotNull>>,
//            Search<MQMJSetup.addLabResultsNumberingID>>
//    ))]
[PXUnboundDefault(typeof(Switch<
                Case<
            Where<Current2<MQMJINSiteDefaults.addLabResultsNumberingID>, IsNotNull>, Current2<MQMJINSiteDefaults.addLabResultsNumberingID>>,
          Current2<MQMJSetup.addLabResultsNumberingID>>), PersistingCheck = PXPersistingCheck.Nothing)]
public virtual string AddLabResultsNumberingID { get; set; }

关键成功需求:

尝试搜索样本,没有找到太多,这就是我在这里问的原因。在 SQL 中,简单 - IsNull 或 Coalesce,取决于值的数量

任何有用的建议或建议

标签: acumatica

解决方案


推荐阅读