Acumatica BQL具有多个连接

时间:2016-06-28 09:03:05

标签: sql acumatica

我有一个自定义表,用于存储对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个或多个项目。

1 个答案:

答案 0 :(得分:1)

InnerJoin<Table, On, NextJoin>类型的所有实施都存在超载,其中包含&#39; NextJoin&#39;通用参数例如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;

上面的sql示例用:

表示
Manager

由于此示例包含循环外键,因此需要从标准定义派生的其他数据访问类( DAC )以生成正确的SQL查询。在这种情况下,Employee类被定义为[Serializable] public class Manager : Employee { public new abstract class employeeId : IBqlField {} public new abstract class userId : PX.Data.IBqlField {} } 的派生类型,必须覆盖在特定于此类的BQL中查询的任何字段(否则生成的SQL将引用基类型)。

<api:objects> 
<api:nextObject xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance "xsi:type="api:Lead"> 
<api:Custom> 
<api:DisbursedAmount_L>25000</api:DisbursedAmount_L> 
<api:HoldingNo_L>GL010022016</api:HoldingNo_L>
<api:TransactionalStatus_L>Success</api:TransactionalStatus_L>
<api:DateofPurchase_L>02/10/2016</api:DateofPurchase_L> 
</api:Custom> 
<api:LeadKey>2279</api:LeadKey> 
<api:StatusCodeKey>100010</api:StatusCodeKey>
</api:nextObject> 
</api:objects>