8

axaptaのフォーム間で単一のパラメーターを渡すにはどうすればよいですか?フォームAのクリックされたボタンイベントからフォームBを実行し、渡す...たとえば顧客ID?宛先フォームで、おそらくinitメソッドでそれを読み取るにはどうすればよいですか?ありがとう

4

1 に答える 1

14

1方法

最も簡単な方法は、現在のレコードを渡すことです。CustTableが現在のフォームデータソースにある場合は、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();            
        }
    }
}

2方法

それでも1つの値.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();
}

次に、宛先形式のinitで:

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

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

    }
}

私は間違いなく最初の方法のみを使用する必要があり、特別な状況でのみ、ボタンクリック方法をオーバーライドする#2方法を使用します。これは、フォーム間で値を渡すためのデフォルトパターンの1つだからです。より複雑な例は、AxaptaPedia.comで入手できます。フォーム間で値を渡す

于 2012-06-29T11:12:32.880 に答える