在从 SysWizard 类调用的向导窗体上启用/禁用完成按钮的最简单方法是使用 FormControlId 从 FormRun 对象中检索 FormControl 对象,然后根据您的测试条件设置 Enabled 属性,例如是否另一个 FormControl包含一个值。有很多方法可以实现这一点。我将提供两个例子。
在第一个示例中,所有修改都在向导窗体上完成。使用的 FormControl 可以像 AutoDeclaration 属性设置为 Yes 的任何 FormControl 一样被调用。在第二个示例中,我将覆盖我的 Wizard 类的 finishEnabled() 方法,因此它的行为方式符合预期。
在每个示例中,使用将控件的标签文本(“完成”)作为参数的 FormControlId 找到了 formControl。我通过在代码编辑器中的“完成”上执行“查找标签/文本”找到了正确的标签 ID,然后在标签的描述中选择了带有“向导中完成按钮的标签”的 SYS 标签。
示例 1: Wizard Form 上的 FormControl 对象:
在 Form classDeclaration 中添加以下内容:
class FormRun extends ObjectRun
{
//FormControl objects used to get SysWizard Finish Button
FormControlId finishButtonId;
FormControl finishButton;
}
在顶层 Form init() 方法中初始化新的 FormControl:
void init()
{
super();
if (element.Args().caller())
{
sysWizard = element.Args().caller();
}
finishButtonId = sysWizard.formRun().controlId("@SYS302811");
finishButton = sysWizard.formRun().control(finishButtonId);
finishButton.enabled(false);
}
现在您可以像使用任何其他表单控件一样使用该控件。在这种情况下,我使用 WizardForm 中名为 IsFinished 的复选框控件的状态作为测试条件,并从 IsFinished.clicked() 方法更新 FormControl 状态:
public void clicked()
{
super();
//set FormControl state based on the current value of the checkbox
finishButton.enabled(this.checked());
}
*示例 2: *重写 Wizard 类中的 finishEnabled() 方法:
请注意,您需要为方法参数设置默认值,否则 AX 将抛出编译错误,因为它与基类的签名不匹配。出于某种原因,AX 没有正确创建方法签名。摆脱对 super 的默认调用并将其替换为以下代码:
public boolean finishEnabled(boolean _enabled = false,
int _idx = this.curTab(),
boolean _setfocus = false)
{
return this.formRun().control(this.formRun().controlId("@SYS302811")).enabled(_enabled);
}
在 Form init() 方法中初始化控件值:
void init()
{
super();
if (element.Args().caller())
{
sysWizard = element.Args().caller();
}
sysWizard.finishEnabled();
}
更新控件时调用类方法:
public void clicked()
{
super();
//set FormControl state based on the current value of the checkbox
sysWizard.finishEnabled(this.checked());
}