如何在Dynamics AX 2012中调试或单元测试DataProvider类

时间:2013-01-18 14:25:21

标签: reporting-services axapta microsoft-dynamics dynamics-ax-2012 ax

有没有办法调试DataProvider类,一个从SRSReportDataProviderBase扩展的类,当我的AOS,我的客户端和我的SQL在不同的服务器中分开时?

或者有什么方法可以创建单元测试或作业,我可以执行DataProvider类吗?所以我可以调试它? // 此问题在下面的更新

上解决

我尝试创建一个作业,所以我可以调试它,但当然它们的依赖项没有被注入。 这是一个例子:

          static void Job2(Args _args)
          {
           JmgEmplSignedInDP empl;
           ;
            empl = new JmgEmplSignedInDP();
            empl.processReport();
          }

我得到了以下错误,因为它没有他们的依赖:

 JmgEmplSignedInContract object not initialized.
 Stack trace
 (S)\Classes\JmgEmplSignedInDP\processReport - line 12
 (C)\Jobs\Job2 - line 8

有什么方法可以构造一个DataProvider类,所以我可以调试它吗?


更新

我可以注入类依赖,所以现在我可以调试它。它几乎是一样的。 但最初的问题还没有出现:

  

有没有办法调试DataProvider类,这是一个扩展的类   来自SRSReportDataProviderBase,当我的AOS,我的客户端和我的SQL   在不同的服务器中分开?

注入DataProvider类的依赖项的代码:

    static void Job2(Args _args)
    {
        JmgEmplSignedInDP empl;
        JmgEmplSignedInContract con;
        Query q;
        ;


        empl = new JmgEmplSignedInDP();
        con = new JmgEmplSignedInContract();
        q = new Query(querystr(JmgEmplSignedInQuery));
        empl.parmQuery(q);
        empl.parmDataContract(con);

        empl.processReport();

    }

1 个答案:

答案 0 :(得分:1)

出于调试目的,您可能希望更改数据提供程序类以在客户端上运行(在这种情况下,JmgEmplSignedInDP类属性具有RunOn = Server)。

请记住在用户设置的“开发”选项卡中删除“在CIL中执行业务操作”选项。

您可以检查在作业中使用更多行生成的原始数据:

static void Job2(Args _args)
{
    JmgEmplSignedInDP empl;
    JmgEmplSignedInContract con;
    Query q;
    JmgTmpEmplSignedIn tmp;
    ;

    empl = new JmgEmplSignedInDP();
    con = new JmgEmplSignedInContract();
    q = new Query(querystr(JmgEmplSignedInQuery));
    empl.parmQuery(q);
    empl.parmDataContract(con);

    empl.processReport();
    tmp.setTmpData(empl.getJmgTmpEmplSignedIn());
    while select tmp
    {
        info(strFmt("%1", tmp.EmplName));
    }
}