一、不同菜单带参数调用同一个FORM,实现不同内容的界面。
- 界面里创建两个菜单,EnumTypeParameter都选【InventTransType】,Object都指向同一个Form【InventQuarantineOrder】。
- 菜单A的EnumParameter选择【Purch】,菜单B的EnumParameter选择【Production】。
- 也可以两个菜单分别指定不同的【Parameters】参数来代替【EnumTypeParameter】+【EnumParameter】组合值,把这个参数传给Form来实现。
- 被调用的Form,可以在form.init()中取参数,也可以在DataSource.init()中取参数。下面的代码写在DataSource.init()中取得参数,根据不同的参数值过滤数据,同时并改变子表DataSource的LinkType值。
void init()
{
QueryBuildRange _qbrType;
;
super();
this.query().dataSourceTable(tablenum(InventQuarantineOrder)).addSortField(fieldnum(InventQuarantineOrder,QuarantineId));
_qbrType = this.query().dataSourceTable(TableNum(InventQuarantineOrder)).addRange(FieldNum(InventQuarantineOrder,TransType));
if (element.args().parmEnumType())
{
if (element.args().parmEnum() == InventTransType::Purch)
{
_qbrType.value(ENum2Str(InventTransType::Purch));
VendPackingSlipJour_ds.linkType(3);
}
else
{
_qbrType.value(Enum2Str(InventTransType::Production));
VendPackingSlipJour_ds.linkType(1);
}
}
}
二、Button控件携带参数调用Form。
- 主界面创建一个Button控件,在其.Clicked()中写调用代码。
- 被调界面的.init()中取参数并根据参数值显示数据。
//主界面呼叫按钮的Clicked()代码
void clicked()
{
args _args;
FormRun _formRun;
str _sParam;
;
super();
_args = new Args(formstr(SPL_WoItemAudit));
_sParam = SPL_cmTable.ProdPoolId + ',SPL_cmTable';
_args.parm(_sParam);
_formRun= classFactory.formRunClass(_args);
_formRun.init();
_formRun.run();
_formRun.detach();
}
//被调界面的init()代码
public void init()
{
str m_param,m_prodPoolId,m_SO;
int _postion,_length;
;
super();
if(element.args().parm())
{
m_param = element.args().parm();
_length = strlen(m_param);
_postion = strFind(m_param,',',1,_length);
m_prodPoolId= subStr(m_param,1,_postion-1);
m_SO = subStr(m_param,_postion+1,_length-_postion);
if(m_SO == 'SPL_cmTable')
{
SPL_NotIntersected.value(NoYes::Yes);
txt_prodPoolId.text(m_prodPoolId);
txt_SalesId.text('');
}
else
{
SPL_NotIntersected.value(NoYes::No);
txt_prodPoolId.text(m_prodPoolId);
txt_SalesId.text(m_SO);
}
}
}
三、Button控件携带Record作参数调用Form。
//主表呼叫按钮的Clicked()代码
void clicked()
{
args _args;
FormRun _formRun;
HelpTable _helpTable;
;
super();
select firstonly _helpTable where _helpTable.FormName == element.name();
if(_helpTable)
{
_args = new Args(formstr(HelpView));
_args.record(_helpTable);
_formRun= classFactory.formRunClass(_args);
_formRun.init();
_formRun.run();
_formRun.detach();
}
}
//被调用Form.init()的代码
public void init()
{
HelpTable _helpTable;
;
super();
if(element.args().record())
{
_helpTable = element.args().record();
seFormName.text(_helpTable.FormName);
seFormDesc.text(_helpTable.FormDesc);
seHelp.text(_helpTable.FormHelp);
}
}
四、在被调界面中呼叫主界面中的某个方法执行。下面代码表示:被调界面完成工作后,让主界面中的 SPL_Dorefresh的方法执行一次,以刷新主界面的数据源,然后自我关闭被调界面。
super();
element.args().caller().SPL_Dorefresh();
element.close();
五、在被调界中引用主界面里的函数。下面被调Form.init()中的代码表示:如果主叫界面是“SPL_QueryForProdBom”,则被调界面的 ItemId 变量用主界面中的函数getItemID() 取值。
if( element.Args().caller().name() == formStr(SPL_QueryForProdBom) )
itemid = element.args().caller().getItemID();
