Forms 如何在两个表单之间传递多个记录?

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

我想在两个表单之间传递多个记录。用户打开表单A,选择多个记录,然后单击打开表单B的按钮。 在表格B中,有两个(或更多)
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));
    }
}