Forms 如何在两个表单之间传递多个记录?
我想在两个表单之间传递多个记录。用户打开表单A,选择多个记录,然后单击打开表单B的按钮。 在表格B中,有两个(或更多)Forms 如何在两个表单之间传递多个记录?,forms,axapta,x++,args,dynamics-ax-2012-r2,Forms,Axapta,X++,Args,Dynamics Ax 2012 R2,我想在两个表单之间传递多个记录。用户打开表单A,选择多个记录,然后单击打开表单B的按钮。 在表格B中,有两个(或更多)StringEdit控件,它们应该显示所选记录中的值 我知道如何只传递一条记录,为此,我在Form-B方法中使用以下代码: if (element.args().parmEnumType() == enumNum(NoYes) && element.args().parmEnum() == NoYes::Yes) { myTable = element
StringEdit
控件,它们应该显示所选记录中的值
我知道如何只传递一条记录,为此,我在Form-B方法中使用以下代码:
if (element.args().parmEnumType() == enumNum(NoYes)
&& element.args().parmEnum() == NoYes::Yes)
{
myTable = element.args().record();
stringEdit.text(myTable.Field);
}
如何更改代码,以便将另一个
StringEdit
控件的文本设置为用户选择的下一条记录的字段值?为此,您可以使用args
传递记录,您需要在表单-A中准备这些记录,如下所示(以SalesTable为例)
然后在表单B上,您需要重写init()
方法来读取您创建的参数
以便从中检索收件人中传递的参数。重写新表单的init()方法,如图所示
public void init()
{
container con;
int i;
super();
// string to container
con = str2con(element.args().parm(),'','');
// for sorting
for(i = 1;i<= conLen(con) ;i++)
{
salesTable_ds.query().dataSourceTable(Tablenum(SalesTable)).addRange(fieldNum(SalesTable,RecId)).value(SysQuery::value(conPeek(con,i)));
}
}
public void init()
{
集装箱集装箱;
int i;
超级();
//字符串到容器
con=str2con(element.args().parm(),'','');
//用于分类
对于(i=1;i,这通常意味着在Form-A
中循环选择的记录,并在Form-B
中更改查询
循环选择记录的惯用方法包括for
循环和数据源的getFirst
和getNext
方法:
SalesLine sl;
FormDataSourcs ds = _salesLine.dataSource();
for (sl = ds.getFirst(true) ? ds.getFirst(true) : ds.cursor(); sl; sl = ds.getNext())
{
//Do your thing, add a query range
}
类在这里可能很有用,因为它完成了以下任务:
public void init()
{
MultiSelectionHelper ms;
super();
if (element.args() && element.args().caller() && element.args().record())
{
this.query().dataSourceTable(tableNum(SalesLine)).clearDynalinks();
ms = MultiSelectionHelper::createFromCaller(element.args().caller());
ms.createQueryRanges(this.query().dataSourceTable(tablenum(SalesLine)), fieldstr(SalesLine, InventTransId));
}
}
感谢您的帮助Nadeem_MK,感谢您的帮助Nadeem_MK,我从(A)开始提供更多记录,但我在两个数据源中都有我的SalesTable?我有一个简单的问题,我必须在第二个表格(B)中填写stringEdit?我需要将代码放在第二个表格(B)中:stringEdit.text(SalesTable.field);谢谢。我不太理解这个问题,但如果您需要设置数据/操作记录,则需要将其本身放入循环中。在for(I=1;使用MultiSelectionHelper是一个更好的示例
public void init()
{
MultiSelectionHelper ms;
super();
if (element.args() && element.args().caller() && element.args().record())
{
this.query().dataSourceTable(tableNum(SalesLine)).clearDynalinks();
ms = MultiSelectionHelper::createFromCaller(element.args().caller());
ms.createQueryRanges(this.query().dataSourceTable(tablenum(SalesLine)), fieldstr(SalesLine, InventTransId));
}
}