【问题标题】:Joining table using PXSelectJoin using cast in BQL statement在 BQL 语句中使用强制转换使用 PXSelectJoin 连接表
【发布时间】:2018-11-14 06:57:48
【问题描述】:

我需要为以下 SQL 查询编写 BQL 语句

 SELECT * FROM CSATTRIBUTEGROUP INNER JOIN INVENTORYITEM ON CSATTRIBUTEGROUP.ENTITYCLASSID=CAST(INVENTORYITEM.ITEMCLASSID AS NVARCHAR(10))
  LEFT JOIN CSANSWERS ON INVENTORYITEM.NOTEID=CSANSWERS.REFNOTEID WHERE INVENTORYCD='CPU'

CSAttribute 中的EntityClassID 和库存中的ItemClassID 是不同的类型。如何使用 BQL 连接表。

【问题讨论】:

    标签: acumatica


    【解决方案1】:

    人们很想创建一个自定义视图来表示带有 ITEMCLASSID 类型的 INVENTORYITEM 表。但是不建议使用自定义视图。而是尝试创建一个 PXProjection 来将 INVENTORYITEM 表表示为 usrINVENTORYITEM。然后使用 PXString 来转换 Int?到一个字符串。一旦暴露,您就可以计算出您的 BQL,如下所示。

    #region InventoryItem - projection
    [PXProjection(typeof(Select<InventoryItem>), Persistent = false)]
    public partial class usrInventoryItem : InventoryItem
    {
    
        #region ItemClassIDStr
        [PXString(10, IsUnicode = true)]
        [PXUIField(DisplayName = "ItemClassIDStr", Visibility = PXUIVisibility.SelectorVisible)]
        public virtual string ItemClassIDStr
        {
            get
            {
                return $"{ItemClassID}";
            }
            set
            {
                this.ItemClassIDStr = value;
            }
        }
        public abstract class itemClassIDStr : IBqlField { }
        #endregion
    }
    #endregion
    

    然后是 BQL 语句:

    // basic example of your join.
     public PXSelectJoin<CSAttributeGroup, LeftJoin<usrInventoryItem,
                On<usrInventoryItem.itemClassIDStr, Equal<CSAttributeGroup.entityClassID>>>> ExampleJoin;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-13
      • 2012-07-06
      • 2020-03-11
      • 1970-01-01
      相关资源
      最近更新 更多