51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2651|回复: 2
打印 上一主题 下一主题

[原创] actOpenDefectDetails对话框控制方式

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2011-7-19 10:03:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 dingding2011 于 2011-7-19 10:05 编辑

qc9.0,遇到一个变态的问题,就是在需求模块中操作链接的实体里。选中某一条关联的bug后,点击缺陷详情工具按钮打开bug的对话框后(这个按钮的actionname="actOpenDefectDetails"),发现在这个对话框中的操作并不能触发缺陷模块中各事件中写入的脚本。如,我希望在它弹出这个对话框修改完bug状态后保存时,弹出是否需要自动发邮件的对话框,它就是死活触发不了这个脚本。但在缺陷模块,打开bug详情(按钮的actionname=actBugDetails),在那个对话框中操作就能触发脚本。发现在缺陷模块中写入的脚本都是针对actBugDetails对应的对话框而起作用的。没搞懂actOpenDefectDetails对应的对话框中post 跟字段改变这些事件的操作脚本该写在哪里。希望懂的人给解释一下。谢谢!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
 楼主| 发表于 2011-7-19 10:42:30 | 只看该作者
唉,这是我能找到的最好的解决 办法了。尽管还是不满意,但好像也没有其它办法了。找不到适合的事件处理它。

alrighty - I came up with something that works for me and thought I would post it just in case others were interested...

Function TestLab_ActionCanExecute(ActionName)
on error resume next
if actionname = "actOpenDefectDetails" then
TestLab_ActionCanExecute = False
NewDefectAction = Actions.action("actGotoDefect")
NewDefectAction.execute
else
TestLab_ActionCanExecute = true
end if

On Error GoTo 0
End Function

I've also tried adding in the following to actually open the Defects Dialog from within the Defects module, but it causes application exceptions:
ANewDefectAction = Actions.action("actBugDetails")
ANewDefectAction.execute

I'll probably try and get back to this one and improve it later, but for now - it's probably good enough.



意思就是说还是不能直接调用缺陷模块中的bug详情对话框进行修改,而只能是执行一个跳转,让使用者跳到缺陷模块中打开这个bug详情,这时在bug详情中所作的操作才是能被脚本所控制的。
回复 支持 反对

使用道具 举报

该用户从未签到

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状态时触发自动发邮件的功能的。
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-25 09:58 , Processed in 0.071583 second(s), 29 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表