具有多个连接的 Acumatica BQL
Acumatica BQL with multiple joins
我有一个自定义 table 存储对 Users.PKID
Guid 的引用并且需要通过 Acumatica 框架执行以下简单的 SQL 查询(BQL ).
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 或更多 table 吗?
请注意,数据应该合并而不是只读的,因为数据集也在 Selected
布尔值上过滤,允许用户 select 中的 1 个或多个项目网格视图。
BaseJoin
类型的所有实现都有一个重载,带有 'NextJoin' 泛型参数,例如InnerJoin<Table, On, NextJoin>
.
上面的 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;
由于此示例包含一个循环外键,因此需要从标准定义派生的额外数据访问 Class (DAC) 以生成正确的 SQL查询。在这种情况下,Manager
class 被定义为 Employee
的派生类型,必须覆盖在特定于此 class 的 BQL 中查询的任何字段(否则生成的 SQL 将引用基类型)。
[Serializable]
public class Manager : Employee
{
public new abstract class employeeId : IBqlField {}
public new abstract class userId : PX.Data.IBqlField {}
}
我有一个自定义 table 存储对 Users.PKID
Guid 的引用并且需要通过 Acumatica 框架执行以下简单的 SQL 查询(BQL ).
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 或更多 table 吗?
请注意,数据应该合并而不是只读的,因为数据集也在 Selected
布尔值上过滤,允许用户 select 中的 1 个或多个项目网格视图。
BaseJoin
类型的所有实现都有一个重载,带有 'NextJoin' 泛型参数,例如InnerJoin<Table, On, NextJoin>
.
上面的 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;
由于此示例包含一个循环外键,因此需要从标准定义派生的额外数据访问 Class (DAC) 以生成正确的 SQL查询。在这种情况下,Manager
class 被定义为 Employee
的派生类型,必须覆盖在特定于此 class 的 BQL 中查询的任何字段(否则生成的 SQL 将引用基类型)。
[Serializable]
public class Manager : Employee
{
public new abstract class employeeId : IBqlField {}
public new abstract class userId : PX.Data.IBqlField {}
}