Соединение таблицы с использованием PXSelectJoin с использованием приведения в выражении BQL - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть требование написать оператор BQL для запроса ниже SQL

 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'

EntityClassID в CSAttribute & ItemClassID в инвентаризации другого типа.Как присоединиться к столу с помощью BQL.

1 Ответ

0 голосов
/ 14 ноября 2018

Можно было бы создать пользовательское представление, представляющее таблицу INVENTORYITEM с приведением ITEMCLASSID. Однако пользовательские представления не рекомендуются. Вместо этого попробуйте создать 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;
...