如何将select查询绑定为报表中的数据源?

时间:2017-08-01 09:55:29

标签: axapta microsoft-dynamics x++ dynamics-ax-2009

我有一个select语句,我想在报告中绑定为数据源 我还没有找到一种方法来设计合适的AOT查询。

这就是它在X ++中的样子

public void insertData(date data = today())
{
    BHNEmployeesOnDay       ins;
    EmplTable               tbl;
    CompanyInfo             info;
    BHNEmplAgreements       Agreemnt;
    BHNEmplAgreements       Agreemnt2;
    BHNEMPLHISTORYCOMPANY   history;
    BHNEMPLHISTORYCOMPANY   history_test;
    BHNDIVISIONTABLE        division;
    BHNPOSITIONTABLE        position;

    SysCompanyUserInfo      sys1;
    SysUserInfo             sys2;
    UserInfo                usrInfo;
    Date                    infinity = mkdate(1,1,1900);
    ; 

    delete_from ins;
    while select * from tbl
        join Info   where info.dataAreaId == tbl.dataAreaId && info.BLX_companyForDW == 1
        join sys1   where sys1.EmplId==tbl.EmplId && sys1.dataAreaId == tbl.dataAreaId
        join sys2   where sys1.UserId==sys2.Id
        join usrInfo where usrInfo.id==sys1.UserId
        exists join history_test
                        where history_test.EmplId==tbl.EmplId && history_test.dataAreaId==tbl.dataAreaId
        join Agreemnt   where Agreemnt.HistoryId==history_test.HistoryId
                        && (agreemnt.DateTo >= data || agreemnt.DateTo==infinity)

    {
        select firstonly *
        from history  order by history.DateFrom desc, Agreemnt2.DateFrom desc
                        where history.EmplId==tbl.EmplId                && history.dataAreaId==tbl.dataAreaId
        join Agreemnt2   where Agreemnt2.HistoryId==history.HistoryId
                        &&  Agreemnt2.DateFrom<=data && (Agreemnt2.DateTo >= data || Agreemnt2.DateTo==infinity)
        join division   where division.DivisionId==agreemnt.DivisionId
        join position   where position.PositionId==agreemnt.PositionId;


        ins.adddRecord(tbl.EmplId, tbl.Name_BHN, tbl.BirthDate, division.Name, position.FullName);

    }
}

目前,我将数据生成到[在报告的run()方法期间]的表中,然后只需从该表中进行选择。到目前为止只有一个人使用这个报告所以这不是问题,但如果两个人同时运行同一个报告,我会得到脏读。

我知道这是不好的方法,但我没有想法。我想在T-SQL端创建一个View并尝试从中进行选择 - 但我被告知在导出期间可能无法检测到或者根本没有将其转移到我们AX的其他实例,因此必须在AX端完成

我该如何解决这个问题?

以防这是T-SQL SQL query on pastebin

中的查询

1 个答案:

答案 0 :(得分:3)

您可以覆盖报告的fetch方法,只需按原样使用X ++代码获取记录,然后使用报告的send方法来处理它们。

有关示例,请参阅here 该示例使用query对象,但您可以轻松地将其与您自己的X ++代码交换 - 您最终必须为要由报告处理的记录调用send

更新:

例如,您只需抓取SalesTable的任何记录并致电send 在此示例中,假定使用成员变量salesTable,以便您可以在需要时以显示方法访问当前记录。

public boolean fetch()
{
    boolean ret;
    //ret = super();
    ;

    select firstOnly salesTable;

    this.send(salesTable);

    return true;
}