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