【问题标题】:Acumatica BQL with multiple joins具有多个连接的 Acumatica BQL
【发布时间】:2016-10-30 12:18:40
【问题描述】:

我有一个自定义表,其中存储了对 Users.PKID Guid 的引用,并且需要通过 Acumatica 框架 (BQL) 执行以下简单的 SQL 查询。

SELECT 
    -- *
    L.LeaveTransactionId,
    L.EmployeeId,
    E.Name AS EmployeeName,
    E.ManagerId,
    M.Name AS ManagerName,
    M.UserId AS ManagerUserId
FROM LeaveTransaction AS L

INNER JOIN Employee AS E
    ON L.EmployeeId = E.EmployeeId

INNER JOIN Employee AS M
    ON E.ManagerId = M.EmployeeId

WHERE M.UserId = '...'

我有一个如下的连接,但看不到任何指定多个连接的方法。

public PXProcessingJoin<LeaveTransaction,
            InnerJoin<DAC.Employee, On<DAC.Employee.employeeId, Equal<DAC.LeaveTransaction.employeeId>>>> LeaveTransactions;

有什么方法可以扩展 BQL 以加入 2 个或更多表?

请注意,数据应该被合并而不是只读的,因为数据集也在 Selected bool 上过滤,允许用户在网格视图中选择 1 个或多个项目。 p>

【问题讨论】:

    标签: sql acumatica


    【解决方案1】:

    BaseJoin 类型的所有实现都有一个带有“NextJoin”泛型参数的重载,例如InnerJoin&lt;Table, On, NextJoin&gt;.

    上面的sql例子用:

    public PXProcessingJoin<LeaveTransaction,
                InnerJoin<DAC.Employee, On<DAC.Employee.employeeId, Equal<DAC.LeaveTransaction.employeeId>>,
                InnerJoin<DAC.Manager, On<Manager.employeeId, Equal<DAC.Employee.managerId>>>>,
                Where<LeaveTransaction.status, Equal<LeaveStatus.submitted>,
                    And<Manager.userId, Equal<Current<AccessInfo.userID>>>>> LeaveTransactions;
    

    由于此示例包含循环外键,因此需要从标准定义派生的附加数据访问类 (DAC) 以生成正确的 SQL 查询。在这种情况下,Manager 类被定义为Employee 的派生类型,在 BQL 中查询的特定于该类的任何字段都必须被覆盖(否则生成的 SQL 将引用基类型)。

    [Serializable]
    public class Manager : Employee
    {
        public new abstract class employeeId : IBqlField {}
        public new abstract class userId : PX.Data.IBqlField {}
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-11
      • 1970-01-01
      • 1970-01-01
      • 2016-05-23
      • 1970-01-01
      • 2022-12-15
      • 2015-01-20
      相关资源
      最近更新 更多