如何在Axapta中的两个表单之间传递参数?

sti*_*ghy 6 axapta dynamics-ax-2009

如何在axapta中的表单之间传递单个参数?我想从表单A中的单击按钮事件运行表单B并传递...例如客户ID?我如何在目标表单中读取它,也许在init方法中?谢谢

vuk*_*kis 13

1方法

最简单的方法是通过当前记录.如果CustTable位于当前Form数据源中,只需将Example控件的DataSource值更改为CustTable.然后在目标表单init方法:

public void init()
{
    CustTable cTable;
    ;
    super();

    // Check for passed arguments
    if( element.args() )
    {
        // get record parameter
        if( element.args().record() && element.args().record().TableId == TableNum( CustTable ) )
        {
            cTable =  element.args().record();            
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

2方法

如果您仍然需要传递一个值.parm()(或更复杂的对象.parmObject()),您可以通过重写源表单的按钮控件单击方法来执行此操作:

void clicked()
{
    // Args class is usually used in Axapta for passing parameters between forms
    Args            args;
    FormRun         formRun;
    ;

    args = new args();

    // Our values which we want to pass to FormB
    // If we want pass just simple string we can use 'parm' method of 'Args' class
    args.parm( "anyStringValue" );

    // Run FormB
    args.name( formstr( FormB ) );
    formRun = classFactory.formRunClass( Args );
    formRun.init();
    formrun.run();
    formrun.wait();

    super();
}
Run Code Online (Sandbox Code Playgroud)

然后在目标表单init中:

public void init()
{
    str             anyStringValueFromCaller;
    ;
    super();

    // Check for passed arguments
    if( element.args() )
    {
        // get string parameter
        anyStringValueFromCaller = element.args().parm();

    }
}
Run Code Online (Sandbox Code Playgroud)

我绝对应该只使用第一种方法,并且只有在特殊情况下才会使用#2方法来覆盖按钮单击方法,因为这是在表单之间传递值的默认模式之一.AxaptaPedia.com提供了更复杂的示例.在表单之间传递值