在开发过程中,我们往往会遇到传值问题!以下是关于我在这方面的工作总结,以后会更新!希望大家关注!
//可以从Form的MenuItem中的单击事件中传批量参数至Report或者Class
A ) Form
void clicked()
{
Container cData;
ContainerClass cClass;
Formrun formRun;
Args args = new Args();
str st1;//可以是数据源中的值
int int1;//也可以是传控件的值
boolean boolean1;
;
cData = [st1,int1,boolean1];//container内容
cClass = new ContainerClass(cData);//创建ContainerClass
args.parmObject(cClass);//ContainerClass作为一个对象传过去
new MenuFunction('YAM_D_InvoicesRepExportToExcel',MenuItemtype::Output).run(args);//Report
new MenuFunction('YAM_D_InvoicesRepExportToExcel',MenuItemtype::Action).run(args);//Class
super();//调用MenuItem(Report or Class)
}
/************************************/
B ) Report(init())
//报表中初始化接收从from中传过来的参数
public void init() //对Class取值并返回
{
ContainerClass _ContainerClass;
container containerData;
;
super();
if(element.args() && element.args().parmObject())
{
_ContainerClass = element.args().parmObject();//取得对象
containerData = _ContainerClass.value();//取得class中的数据为container类型,用时直接从container中取即可
}
}
C ) Class (Main())
//报表中初始化接收从from中传过来的参数
static void main(Args args)
{
YAM_Label YAM_Label = new YAM_Label();
int StartTime,TakeTime;
;
print args.parm();//接收从Form从传来的值
if (YAM_Label.prompt())
{
StartTime = timenow();
YAM_Label.run();
TakeTime = timeNow() - StartTime;
info(strfmt("Take it time to %1 Hour %2 Minute %3 Second",TakeTime div 3600,TakeTime mod 3600 div 60,TakeTime mod 3600 mod 60));
YAM_Label.initSomething(args);
}
}
---------------------------------------------------------------------
2009 - 09 - 02 增加 以下部分
传递数据源当前记录值到class
我们经常遇到这个问题;
如:一个Form有很多记录,当选中某一条是,如何将这个记录传递给一个class呢?
A ) 在MenuItem中 选择数据源
form有一个menuitem,menuitemtype是active,menuitemname就是class name
B ) 在Class中的Main方法中获取
通过args这个参数。在menuItemButton的datasopurce属性中设置你要传递的table。在class的main方法中通过args获得。
static void main(Args args)
{
custtable t;//假定我的datasource是custtable
;
t = args.record();
info( t.Address);
}