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

Axapta 在ax 2012中如何将参数从一种形式传递到另一种形式,axapta,Axapta,表有一个日期字段。我有两个表单名为formA和formB,formA有文本框和按钮。formB具有带有日期字段的网格 所以我的问题是,如果我在文本框中输入日期并单击formA的按钮,输入的日期应该分配到formB的网格中。我添加了两种形式的表数据源。请帮我解决这个问题。尽管您描述的行为在AX方面似乎不太标准,但我建议您使用对话框形式作为形式(而不是常规形式)。这样,您就更容易尊重最佳实践和期望的行为 使用日期字段创建扩展RunBase类的类: class FormADialog extends

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


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

尽管您描述的行为在AX方面似乎不太标准,但我建议您使用对话框形式作为形式(而不是常规形式)。这样,您就更容易尊重最佳实践和期望的行为

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

class FormADialog extends RunBase
{
    DialogField fieldDate; 
    TransDate   transDate;
}
下面是我们如何构造表单控件:

protected Object Dialog()
{
    Dialog dialog = super();
    fieldDate = dialog.addField(extendedTypeStr(TransDate), 'Date');
    return 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;
}
唯一缺少的是dialog类的入口点(表示形式):

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

如果你坚持使用两种正则形式的方法。我将考虑第二个表单的数据源中的
linkActive()
方法。看看
. 父窗体中的记录更改会通知子窗体,使其调用linkActive方法,而linkActive方法又会调用子表数据源中的executeQuery方法。

另一种方法可能如下所示

为了将参数从一种形式传递到另一种形式,通常使用一个特殊的类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);
   }
} 

在此处共享您的代码可能与
public void init() 
{
   Date passedValue;

   super();              

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