如何在ax 2012中将参数从一种形式传递到另一种形式

时间:2016-03-22 09:12:15

标签: axapta

表有一个日期字段。我有两个表单名称formA和formB,formA有文本框和按钮。 formB具有带日期字段的网格。

所以我的问题是如果我在文本框中输入日期并单击formA的按钮,则输入的日期应该在formB的网格中分配。我添加了两种表单的表数据源。请帮我解决这个问题。

2 个答案:

答案 0 :(得分:1)

尽管您所描述的行为似乎在AX方面并不那么标准,但我建议您使用对话框形式作为FormA(而不是常规形式)。这样您就可以更轻松地实现最佳实践和理想行为。

使用日期字段创建扩展RunBase类的类:

class FormADialog extends RunBase
{
    DialogField fieldDate; 
    TransDate   transDate;
}

以下是我们构建表单控件的方法:

protected Object Dialog()
{
    Dialog dialog = super();
    fieldDate = dialog.addField(extendedTypeStr(TransDate), 'Date');
    return dialog;
}

以下方法将从Dialog中检索值:

public boolean getFromDialog()
{
    transDate = fieldDate.value();
    return super();
}

处理逻辑在这里:

public void run()
{
    FormBTable formBTable;

    ttsbegin;

    select firstOnly forUpdate formBTable;
    formBTable.Date = transDate;
    formBTable.write();

    ttscommit;
}

唯一缺少的是对话框类的入口点(代表FormA):

public static void main(Args _args)
{        
    FormADialog     formADialog = new FormADialog();
    FormDataSource  formDataSource;

    if (formADialog.prompt())
    {
        formADialog.run();

        // FormB should contain menu item for dialog class for the following code
        if (args && args.record() && args.record().dataSource())
        {
            formDataSource =  args.record().dataSource();
            formDataSource.research();
        }
    }
}

现在点击对话框按钮将更新网格。

如果您坚持使用两种常规形式的方法。我将在第二种形式的数据源中考虑linkActive()方法。看一眼 Tutorial Form Dynalink。父表单中的记录更改通知子表单,使其调用linkActive方法,该方法又调用子表数据源中的executeQuery方法。

答案 1 :(得分:0)

另一种方法如下:

为了将参数从一种形式传递到另一种形式,通常使用特殊的类 Args

启动器表单在按钮控件的clicked()方法中准备传输数据:

void clicked() 
{
   Args            args;
   FormRun         formRun;

   args = new Args();
   args.parm(dateField.text());       
   args.name(formStr(FormB));

   formRun = classFactory.formRunClass(args);
   formRun.init();
   formRun.run();
   formRun.wait();

   super();
}

接收端点应该监听FormB的init()方法:

public void init() 
{
   Date passedValue;

   super();              

   // check presence
   if (element.args())
   {
       passedValue = str2Date(element.args().parm(), 123);
   }
} 

Take a look at axaptapedia.com article to see how we can pass complex set of parameters within custom made class.