以下是在另一个pb窗口对象中传递单个参数的代码。
在dw_header
点击的活动中
long ll_customer
datetime dt_from, dt_to
ll_customer = getitemnumber(1,"customer_id")
dt_from = datetime(date(f_today()),time('00:00:00'))
dt_to = datetime(date(f_today()),time('23:59:59.99'))
openwithparm(w_customer_balance,ll_customer)
在w_customer_balance
开放事件
long ll_id
datetime dt_from, dt_to
ll_id = message.doubleparm
dw_1.settransobject(sqlca)
dw_1.retrieve(ll_id)
通过单个参数完美地工作正常。 但我想将另外一个参数w {c传递给客户余额窗口。
任何人
答案 0 :(得分:1)
如果需要传递多个参数,可以使用以下方法:
结构变量的定义:lstr_declaredstr,包括你想要传递的参数:
变量类型变量名称:
ID Unsignedlong;姓名特征;电子邮件字符主页角色
......
调用脚本,使用以下代码:
openwithparm (w_wantparm, lstr_paramtotrans)
...
lstr_declaredstr lstr_getparm
integer li_getid
string ls_getname
string ls_getemail
string ls_gethomepage
lstr_getparm = message.powerobjectparm
li_getid = lstr_getparm.id
ls_getname = lstr_getparm.name
ls_geemail = lstr_getparm.email
ls_gethomepage = lstr_getparm.homepage
然后打开w_wantparm中的窗口打开案例,获取结构信息:
(0,127,0,100)
有关更多示例,请参阅此网站:web
答案 1 :(得分:1)
您还可以使用您设置的实例变量定义非可视对象,然后通过Openwithparm方法调用传递。被调用的窗口必须创建nvo(通常作为实例变量),然后接收'在open事件中通过powerobjectparm参数类型。
答案 2 :(得分:0)
正如Matt Balent所建议的那样,您可以创建一个传递给OpenWithParm()
的专用对象,而不是定义专门用于将某些参数传递给窗口的结构,并且可以在open()
中使用{ {1}}(因为您可以将任何powerobject传递给此方法)。
通过扩展,您可以创建一个通用对象类型,该类型可以接收message.powerobjectparm
类型的任意数量的命名参数,您可以通过any
事件中的名称以类似于结构体。一种穷人的字典。
以下是基于现有代码的示例:
open()
对象(如C&#39的变量参数类型) - 从对象"编辑源"中复制源。上下文菜单,重新创建对象,添加一个新的"自定义类"名为nv_va_arg
的对象,保存然后右键单击"编辑源"并粘贴以下代码:nv_va_args
forward
global type nv_va_args from nonvisualobject
end type
end forward
global type nv_va_args from nonvisualobject autoinstantiate
end type
type variables
private:
string _is_names[]
any _ia_items[]
end variables
forward prototypes
public subroutine add_item (string as_name, any aa_val)
private function integer search (string as_name)
public subroutine set_item (string as_name, any aa_val)
public function any get_item (string as_name)
private subroutine set_item (integer ai_index, string as_name, any aa_val)
public function integer size ()
public function string get_name (integer ai_index)
public function any get_item (integer ai_index)
end prototypes
public subroutine add_item (string as_name, any aa_val);
/* add a new item if not already present */
int idx
idx = search(as_name)
if idx = -1 then
idx = upperbound(_is_names) + 1
set_item(idx, as_name, aa_val)
end if
end subroutine
private function integer search (string as_name);
/* search for an item */
int i, n
n = upperbound(_is_names)
for i = 1 to n
if _is_names[i] = as_name then return i
next
return -1
end function
public subroutine set_item (string as_name, any aa_val);
/* public setter */
int idx
idx = search(as_name)
if idx =-1 then
idx = upperbound(_is_names) + 1
end if
set_item(idx, as_name, aa_val)
end subroutine
public function any get_item (string as_name);
/* get the named item */
int idx
any la_val
idx = search(as_name)
if idx > 0 then
la_val = _ia_items[idx]
end if
return la_val
end function
private subroutine set_item (integer ai_index, string as_name, any aa_val);
/* internal setter */
_is_names[ai_index] = as_name
_ia_items[ai_index] = aa_val
end subroutine
public function integer size ();
/* return the number of elements */
return upperbound(_is_names)
end function
public function string get_name (integer ai_index);
/* return the name of the nth item */
string ls_ret = ""
if ai_index > 0 and ai_index <= upperbound(_is_names) then
ls_ret = _is_names[ai_index]
end if
return ls_ret
end function
public function any get_item (integer ai_index);
/* get the named item */
any la_val
if ai_index > 0 and ai_index <= upperbound(_is_names) then
la_val = _ia_items[ai_index]
end if
return la_val
end function
on nv_va_args.create
call super::create
TriggerEvent( this, "constructor" )
end on
on nv_va_args.destroy
TriggerEvent( this, "destructor" )
call super::destroy
end on
对象的内部any
数组中的任何类型:nv_va_args
nv_va_args lva_args
//set some values
lva_args.add_item("arg_1", 42)
lva_args.add_item("arg_2", "foo bar")
//change a value
lva_args.set_item("arg_2", "foo baz")
openwithparm(w_test, lva_args)
事件中。请注意,从open()
对象检索对象必须在事件开始时完成,以免丢失其值(message
对象是一个可以快速覆盖的全局对象)。message