|
3#
楼主 |
发表于 2011-7-20 17:57:48
|
只看该作者
本帖最后由 dingding2011 于 2011-7-20 17:59 编辑
最后弄明白了,所有《链接的缺陷》 这个模块的主表,其实是上级的的模块主表来的,如我现在从需求模块进入《链接的缺陷模块》,它当前识别的主表就是需求表。所以利用这个特点,我就给需求主表增加了一个字段,用于标识当前打开的对话框是哪一个,然后再利用Requirements_DialogBox(DialogBoxName, IsOpen) 这个事件在在链接的缺陷中打开缺陷详情时根据当前标志值来触发缺陷模块中写入的控制。如。
(1)在对应action执行时打标志值
Function Requirements_ActionCanExecute(ActionName)
On Error Resume Next
'当点击需求详情时将标志打为1,代表当前的打开的窗口是需求窗口。RQ_USER_14是需求表中新增的字段。
If ActionName= "actReqDetails" Then
Req_Fields.Field("RQ_USER_14").Value = 1
End If
'当在链接的需求中点击缺陷详情时将标志打为2,代表当前的打开的窗口是缺陷详情的窗口。
If ActionName= "actOpenDefectDetails" Then
Req_Fields.Field("RQ_USER_14").Value = 2
End If
On Error Goto 0
End Function
(2)再到对话框打开时进行控制,由于该事件的特点是一打开对话框就会触发所有动作,而我是希望它是在打开跟关闭时触发不同的逻辑,所以我得依靠标志位来识别不同的时点,在适合的时点下去调用不同的控制逻辑。如:
Sub Requirements_DialogBox(DialogBoxName, IsOpen)
On Error Resume Next
'获得当前的标志值,以判断当前打开的是需求对话框 ,还是打开的是链接的缺陷中的缺陷对话框,由于这两个对话框的名字都是details。无法区分,所以要这样判断。
v_type = Req_Fields.Field("RQ_USER_14").Value
If DialogBoxName = "Details" Then
'如果当前进入的是缺陷详情的对话框,就调用Defects_Bug_MoveTo以应用该函数中对缺陷详情的控制逻辑,同时将标志值改变,防止它触发保存事件中控制。
If v_type=2 Then
Call Defects_Bug_MoveTo
Req_Fields.Field("RQ_USER_14").Value =3
'当点击确定或取消按钮时,它会重新触发一次dialogbox中的脚本,由于上一次的触发已将标志修改成了3,所以这时就会触发缺陷中写入的post事件。触发完这个事件后,又再将标志位还原回2.下次再打开这个缺陷对话框就可以再次触发打开对话框时显示的控制逻辑。
ElseIf v_type=3 Then
Call Defects_Bug_CanPost
Req_Fields.Field("RQ_USER_14").Value =2
End If
End If
On Error Goto 0
End Sub
不够完美的地方时,还是不能区分当前点的是确认还是取消。不管点确认还是取消,都会触发post事件中写入的动作。
我就是使用这个方法解决了在链接的缺陷中修改bug状态时触发自动发邮件的功能的。 |
|