表有一个日期字段。我有两个表单名称formA和formB,formA有文本框和按钮。 formB具有带日期字段的网格。
所以我的问题是如果我在文本框中输入日期并单击formA的按钮,则输入的日期应该在formB的网格中分配。我添加了两种表单的表数据源。请帮我解决这个问题。
答案 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);
}
}