51Testing软件测试论坛

标题: ClearQuest中,设置脚本使一个字段的可选项列表依赖于另一个字段的值,不起作用 [打印本页]

作者: bsd3000    时间: 2006-4-21 12:08
标题: ClearQuest中,设置脚本使一个字段的可选项列表依赖于另一个字段的值,不起作用
在ClearQuest中,在“模块”字段的“Choice List”处设置脚本以实现不同的产品对应不同的模块下拉列表项,脚本内容如下,
    DIM chanpin
    chanpin=GetFieldOriginalValue("产品").GetValue()
    select case chanpin
              case "cp1"
                      choices.AddItem("mk1")
         choices.AddItem("mk2")
              case "cp2"
         choices.AddItem("mk3")
         choices.AddItem("mk4")
    end select

但设置后使用时,不管产品选择什么,模块下拉列表中都是空的。麻烦知道的朋友帮忙解决一下,谢谢!
作者: luming    时间: 2006-4-21 13:09
写的应该没有问题。
你多用几个msgbox看看哪步的值没有取到。
作者: bsd3000    时间: 2006-4-21 15:55
谢谢luming。

加了MsgBox之后,发现所设的脚本不是在"产品"字段的值发生变化时执行,而是在执行某个操作(如新建Bug或修改Bug)一开始执行。
所以当点击新建按钮时,因为此时产品字段还没有值,“模块”处的下拉列表为空;当点击选择“修改Bug”时,只是根据“产品”处的值给出“模块”处的下拉列表;点击操作按钮打开了Bug操作界面后再改变“产品”的值并没有导致“模块”处的下拉裂列表内容改变。

可是按照帮助里的说明,这种脚本设置不是应该实现根据一个字段值的变化来更改另一个字段的下拉列表内容吗?

看到帮助中有这样一段说明,是不是要实现这个目的还需要做其它的设置?(Version字段的choice list根据Platform字段发生变化)
Version's Choice list hook gets recalculated every time Platform changes because its Recalculate Choice List option is set.
作者: luming    时间: 2006-4-21 16:16
你要的效果应该写在“产品”字段的choice list脚本中。

[ 本帖最后由 luming 于 2006-4-21 16:17 编辑 ]
作者: bsd3000    时间: 2006-4-21 17:21
我是希望“模块”字段的下拉列表内容随“产品”字段值的变化而变化,按照帮助中的说明,“产品”字段处Choice List应该是“Constant List”,不应该加脚本啊。
作者: chijj    时间: 2006-4-30 12:43
标题: 可以在【产品】的 ValueChanged 事件里写代码
在 【产品】的 ValueChanged 事件里写代码

Sub project_ValueChanged(fieldname)
    SetFieldValue "模块", ""
End Sub

这样,在产品名称变化后,模块列表就会相应改变。
别忘了执行 Hooks->Compile。

[ 本帖最后由 chijj 于 2006-5-8 09:49 编辑 ]
作者: bsd3000    时间: 2006-5-8 09:41
谢谢chijj。
不过这样的设置并不能实现我所希望的操作结果。
作者: chijj    时间: 2006-5-8 09:47
标题: 应该是可以的,我就是这么做的,可以实现选择不同的产品,模块列表里加载不同的模块。
先在 【产品】的 ValueChanged 事件里写代码,
然后在“模块”字段的“Choice List”处设置脚本:
    DIM chanpin
    chanpin=GetFieldOriginalValue("产品").GetValue()
    select case chanpin
              case "cp1"
                      choices.AddItem("mk1")
         choices.AddItem("mk2")
              case "cp2"
         choices.AddItem("mk3")
         choices.AddItem("mk4")
    end select

[ 本帖最后由 chijj 于 2006-5-8 09:50 编辑 ]
作者: bsd3000    时间: 2006-5-8 14:18
在产品的ValueChanged处写如下代码(设置的值是空字符串?),在产品的Choice List处设置Constant List,模块的Choice List处还是设置我原来设置的代码?
SetFieldValue "模块", ""  

这样设置之后,新建Bug时,不管产品处选择什么,模块处的下拉列表还是都是空的。

chijj是这个意思吗?
作者: chijj    时间: 2006-5-8 17:05
标题: 看看对你是否有帮助
一、网上有一篇文章【ClearQuest的Hook机制】,其中有:
4Hook调用顺序
ClearQuest中能定义这么多种类的Hook,它们的调用顺序又是怎样的呢?我们从四个阶段来说明:
4.1        开始执行一个操作时,顺序调用:
1) 操作 Access Control Hook
2) 字段Permission Hook
3) 操作 Initialization Hook
4) 字段Default Value Hook
5) 字段Choice List Hook

二、我的思路:选择【产品】后,设置【模块】为空,由于模块的内容发生变化,所以会触发模块的列表事件。
        是在模块的 Choice List 事件里写代码,不是在产品的 Choice List 里写代码。
三、我这样做的,是可以实现的。

[ 本帖最后由 chijj 于 2006-5-8 17:08 编辑 ]
作者: bsd3000    时间: 2006-5-9 13:42
按照 chijj 的说明进行设置后,效果还是跟原来一样,选择产品后,模块的内容被设为空,但并没有触发模块的列表事件。

我的ClearQuest版本是2003.06.00
作者: luming    时间: 2006-5-9 14:52
我试过了,chijj的方法是有效的。
选中产品后,再选择模块,就可以看到模块列表内的内容。
作者: bsd3000    时间: 2006-5-9 15:57
我确实是按照chijj的方法做的,为什么不起作用呢?是哪儿设置有问题吗?

在产品的“Value Changed”处设置脚本如下:
SetFieldValue "模块", ""

在产品的“Choice List”处设置Constant_List,“cp1、cp2”

在模块的“Choice List”处设置脚本如下:
    DIM chanpin
    chanpin=GetFieldValue("产品").GetValue()
    select case chanpin
           case "cp1"
        choices.AddItem("mk1")
        choices.AddItem("mk2")
           case "cp2"
                     choices.AddItem("mk3")
        choices.AddItem("mk4")
    end select
作者: luming    时间: 2006-5-9 16:24
你把下面的内容取消试试。
在产品的“Value Changed”处设置脚本如下:SetFieldValue "模块", ""
作者: bsd3000    时间: 2006-5-9 16:45
我一开始没在产品的“Value Changed”处设置脚本,实现不了,
所以才按照chijj的方法,在产品的 “Value Changed”处加了脚本,还是一样的结果。
作者: luming    时间: 2006-5-9 16:56
呵呵,原先是GetFieldOriginalValue,用GetFieldValue就应该没问题了。
作者: bsd3000    时间: 2006-5-9 17:22
我就最开始用的GetFieldOriginalValue,后来都用的GetFieldValue,还是不行。
作者: bsd3000    时间: 2006-5-9 17:26
总是在执行某个Action时,执行模块Choice List处设置的脚本,而不是在改变产品的值时,执行模块Choice List处的脚本。
作者: luming    时间: 2006-5-9 18:27
你把use_hook都去掉试试。
作者: bsd3000    时间: 2006-5-10 09:09
luming是指的Behaviors里的use_hook吗?我自定义的“产品”和“模块”字段都没有使用use_hook,系统默认的字段中有几个字段使用了use_hook,但只有字段Resolution是可修改的,我把它删掉了。
但这样还是一样的结果。
作者: chijj    时间: 2006-5-10 10:36
标题: 我刚才测试了一下,你将 Record Types-Stateless 下的【产品】名称改为英文的试试。
1、你看一下 Record Types-Stateless 的 原 “Project” 是不是改为了中文名称 “产品” 了,如是,将其再改为英文名称,应该就可以了。
2、可以实现后,可以再将名称改回来。
3、建议【模块】也新建一个类型,在 Record Types-Stateless  下,这样可以在外面维护模块,以免每次修改都要修改CQ。

[ 本帖最后由 chijj 于 2006-5-10 10:44 编辑 ]
作者: bsd3000    时间: 2006-5-10 14:13
谢谢chijj !
不过我的“产品”和“模块”字段是在Record Types下的“Defect”中自定义的,不在Record Types-Stateless 下,我把这两个字段都改成英文名称,还是一样。

我知道Dynamic List可以在客户端更改,不必修改Schema,在Record Types-Stateless 下的字段也可以实现这个?如果操作呢?谢谢!
作者: chijj    时间: 2006-5-10 17:38
标题: 其他 Type 同自带的类型 Project 类似
在Record Types-Stateless 下,有一项 【Project】,它是可以在客户端填加和修改的,其他Type类型也和他一样。

1、建其他Type,选择在Record Types-Stateless 节点,右键->Add,即可填加新的Type。
2、在新建的Type下,可以设置字段,主键,窗体,状态等,同新建【缺陷】是一样的(注:窗体有两种,一种是提交用的,一种是修改查看用的)。
3、可以引用他们,象引用 Project,Owner 一样。
4、如新建Type类型-模块,在【模块】窗体上,可以有其对应的【项目】等相关信息。
5、在【缺陷】里填加【模块】字段,可以直接引用类型【模块】(也可以设置为字符型,然后在 Choice List 列表事件里写相关代码,使模块同项目关联起来)。

[ 本帖最后由 chijj 于 2006-5-11 08:25 编辑 ]
作者: bsd3000    时间: 2006-5-11 09:46
谢谢chijj。
不过我的Record Types-Stateless 下并没有“Project”。

另外我在客户端并没有找到可以添加和修改Stateless类型的Record的地方。
作者: chijj    时间: 2006-5-11 10:32
标题: 看看这篇文章会有很大帮助的【定制ClearQuest以通过所有者、角色或组来分隔记录】
网址: http://www.51testing.com/html/28/79.html
作者: bsd3000    时间: 2006-5-11 11:15
谢谢!
不知是否是我理解的问题,我怎么感觉新建Stateless类型的纪录对我这个问题没什么影响啊。

是不是在Stateless类型的纪录下也设置产品、模块字段,设置同样的脚本,然后使Defect下的产品、模块字段引用Stateless类型纪录下的相应字段,脚本就会达到预期的效果?
作者: chijj    时间: 2006-5-11 12:55
标题: 是这个意思
我录了一个片断录像,看是不是你要实现的功能。

[ 本帖最后由 chijj 于 2006-5-11 12:58 编辑 ]
作者: chijj    时间: 2006-5-11 13:40
标题: 我想,你的列表事件没有响应可能是这个原因,试试看
1、在某个字段如 “模块” 设置脚本时,有一个选项,要选择第一项,见附件。
2、可以先删除脚本为 DEFAULT,然后再设置 Scripts->BASIC,把原来的脚本拷过去,编译一下,Hooks->Compile。

[ 本帖最后由 chijj 于 2006-5-11 13:43 编辑 ]
作者: chijj    时间: 2006-5-11 13:42
标题: CQ设计器的部分设置
CQ设计器的部分设置
作者: bsd3000    时间: 2006-5-11 18:04
太感谢chijj了!
出现问题就是因为在开始设置模块的Choice List处的脚本时没有勾选你所说的第一个选项。
没有仔细查看那两个选项的含义的代价太大了,折腾了我好几天。
作者: bsd3000    时间: 2006-5-11 18:09
另外,chijj能否再帮忙指点一下,你所说的在Record Types-Stateless 下的纪录是可以在客户端填加和修改的,这个具体是在客户端的哪个地方进行操作的呢?谢谢!

对于Stateless类型的纪录我还没有仔细了解过,有时间的时候一定要好好看看这一部分,到时候有问题还得请chijj帮忙指点了,谢谢!
作者: chijj    时间: 2006-5-12 08:18
标题: 你太客气了,共同探讨!
你问的问题在 #27 的附件里有,象填加Project一样。

[ 本帖最后由 chijj 于 2006-5-12 15:46 编辑 ]
作者: 会飞的鱼    时间: 2006-6-19 11:09
我现在遇到一个问题和bsd3000 的是一样的,但是我在开始设置模块的Choice List处的脚本时勾选所说的第一个选项了,可是我在运行的时候提示说类型不匹配
作者: 会飞的鱼    时间: 2006-6-20 09:43
楼主遇到的问题,现在我也遇到了,就是"ClearQuest中,设置脚本使一个字段的可选项列表依赖于另一个字段的值,不起作用".现在我稍微该了一下,在运行的时候在客户端运行的时候是完好的,可是在web端运行的时候刚才的问题就解决不了.请问一下知道的,是不是这个问题不能更改?还是在那里需要设置!!!
作者: studystudy    时间: 2006-6-21 14:21
这种类型的贴帮助很大。谢谢
作者: cxy    时间: 2006-6-27 22:15
chijj是个好同学,大家要向他学习
作者: dongyongjing    时间: 2006-8-21 12:00
好帖子
作者: 轻扬婉儿    时间: 2006-11-24 17:40
顶  顶
作者: samonke    时间: 2006-12-22 10:50
发表于 2006-4-30 12:43 PM  资料 短消息   
可以在【产品】的 ValueChanged 事件里写代码


在 【产品】的 ValueChanged 事件里写代码

Sub project_ValueChanged(fieldname)
    SetFieldValue "模块", ""
End Sub

这样,在产品名称变化后,模块列表就会相应改变。
别忘了执行 Hooks->Compile。

[ 本帖最后由 chijj 于 2006-5-8 09:49 编辑 ]


发表于 2006-5-8 09:47 AM  资料 短消息   
应该是可以的,我就是这么做的,可以实现选择不同的产品,模块列表里加载不同的模块。


先在 【产品】的 ValueChanged 事件里写代码,
然后在“模块”字段的“Choice List”处设置脚本:
    DIM chanpin
    chanpin=GetFieldOriginalValue("产品").GetValue()
    select case chanpin
              case "cp1"
                      choices.AddItem("mk1")
         choices.AddItem("mk2")
              case "cp2"
         choices.AddItem("mk3")
         choices.AddItem("mk4")
    end select

[ 本帖最后由 chijj 于 2006-5-8 09:50 编辑 ]

   

   但是如果设置的SCHEMA是在UCM模式的基础上实现的,并且该模式的UCM_project是不可修改的,不能去设置其脚本,

那如果我想我的模块基于UCM_project的话,我想上面楼主chijj说的方法就不能实现的吧????那应该怎么去实现呢???
大家谈谈自己的看法拉????




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2