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