在Powerbuilder中的OpenWithParm中传递多个参数

时间:2017-01-09 04:30:53

标签: powerbuilder

以下是在另一个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传递给客户余额窗口。

任何人

3 个答案:

答案 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
  • 2个参数检索示例,放在窗口的 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