2016-03-22 18 views
0

テーブルには、1つの日付フィールドがあります。 formAとformBの2つのフォーム名があり、formAにはテキストボックスとボタンがあります。 formBには、日付フィールドを持つグリッドがあります。ax 2012のフォームから別のフォームに引数を渡す方法

私はテキストボックスに日付を入力し、formAのボタンをクリックすると、入力した日付をformBのグリッドに割り当てる必要があります。私は両方のフォームのテーブルデータソースを追加しました。これで私を助けてください。

+0

シェア

イニシエータフォームは、ボタンコントロールの)(クリックメソッド内で転送するデータを準備しますあなたのコードはこちら – Mangesh

+0

[Axaptaの2つのフォームの間でパラメータを渡す方法は?](http://stackoverflow.com/questions/11258375/how-to-pas) s-a-parameter-two-forms-in-axapta) – zadorski

答えて

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; 
} 

次のメソッドは、ダイアログから値を取得します:

public boolean getFromDialog() 
{ 
    transDate = fieldDate.value(); 
    return super(); 
} 

処理ロジックはここにあります:

public void run() 
{ 
    FormBTable formBTable; 

    ttsbegin; 

    select firstOnly forUpdate formBTable; 
    formBTable.Date = transDate; 
    formBTable.write(); 

    ttscommit; 
} 

唯一欠けているものは、ダイアログクラスのエントリポイントは、(フォームAを表します)です:

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(); 
     } 
    } 
} 

今すぐダイアログボタンをクリックすると、グリッドを更新します。

2つの正規形でアプローチを使用することを主張する場合。私はlinkActive()メソッドを2番目のフォームのデータソースで考えると思います。 Tutorial Form Dynalinkをご覧ください。親フォームのレコードの変更により子フォームに通知され、linkActiveメソッドが呼び出され、子テーブルのデータソースでexecuteQueryメソッドが呼び出されます。

0

次のような別の方法があります。

ある形式から別の形式にパラメータを渡す場合は、特別なクラスArgが通常使用されます。 FormBの初期化に耳を傾けなければならないエンドポイントを受け取る

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(); 
} 

()メソッド:

public void init() 
{ 
    Date passedValue; 

    super();    

    // check presence 
    if (element.args()) 
    { 
     passedValue = str2Date(element.args().parm(), 123); 
    } 
} 

Take a look at axaptapedia.com article to see how we can pass complex set of parameters within custom made class.

関連する問題