わかりました、これを試すのに時間がかかりました。解決策が 2 つあります。
- バインドされていないコントロールを使用してそれを行い、選択したレコードを渡すことができます
- または、ウィザード フォームでデータソースを使用して、選択した値をフィルター処理することもできます。
まず、単純なバインドされていないコントロールを使用して試してみましょう。CustTable メンバ変数とパラメータ メソッドをウィザード クラスに追加することから始めます。
public class MyTestWizardWizard extends SysWizard
{
CustTable mySelectedCustomer;
}
public CustTable parmMySelectedCustomer(CustTable _mySelectedCustomer = mySelectedCustomer)
{
;
mySelectedCustomer = _mySelectedCustomer;
return mySelectedCustomer;
}
次に、フォームで init メソッドを上書きして、次の操作を実行できます。
void init()
{
int controlid;
FormStringControl fsControl;
;
super();
if (element.Args().caller())
{
sysWizard = element.Args().caller();
// Get the control id of the CustomerId control
controlid = element.controlId(formControlStr(MyTestWizardWizard, CustomerId));
// Check if we actually have a form string control
if(element.control(controlid) is FormStringControl)
{
// Cast to the FormStringControl type
fsControl = element.control(controlid) as FormStringControl;
// Now fill in the field value
fsControl.text(sysWizard.parmMySelectedCustomer().AccountNum);
}
}
else
{
MyTestWizardWizard::main(new args());
element.closeCancel();
}
}
したがって、ここで実際に行うことは、ウィザード クラスに格納されている選択されたレコードを取得することです。次に、値を割り当てたいコントロールが実際に値を入れるのに適切なコントロールであるかどうかを確認します。
これは機能していますが、2番目の方法をお勧めします。それは、フォームでデータソースを使用し、このように選択したレコードに範囲を設定することです。CustTable をデータソースとしてフォームに配置し、通常どおりにコントロールを配置するだけです。
次に、init メソッドが下部で super() 呼び出しを実行していることを確認して、データソース メソッドを呼び出す前に初期化が完了していることを確認します。
void init()
{
;
// make sure the sysWizard is already initialized before the super to make sure the init on the datasource has an instance of sysWizard
if (element.Args().caller())
{
sysWizard = element.Args().caller();
}
else
{
MyTestWizardWizard::main(new args());
element.closeCancel();
}
super();
}
次に、データソースの init メソッドを上書きして、custTable の recId フィールドに範囲を設定します。ExecuteQuery メソッドで範囲の値を割り当てることができることに注意してください。ただし、この場合はここで行います。
public void init()
{
;
super();
SysQuery::findOrCreateRange(this.query().dataSourceTable(tableNum(CustTable)), fieldNum(CustTable, RecId)).value(queryValue(SysWizard.parmMySelectedCustomer().RecId));
}
ウィザードが実行されると、args はレコードをウィザード クラスに渡し、フォームはデータソースの init でそれを取得し、選択したレコードに範囲を設定します。残りのすべての魔法は、バインドされたデータ コントロールを使用した通常の Axe の動作です。
だから私はこれがあなたが必要としていたものであることを願っています. ご不明な点がございましたら、お気軽にお問い合わせください。