发新话题
打印

[已解决] 如何实现根据一个字段的值来过滤另一个字段的值.( 此文章被查看:989次,被回复:9篇!! )

如何实现根据一个字段的值来过滤另一个字段的值.

在我们的defect中,有一个project还有一个sw_ver字段project是short_string,sw_ver的命名规范是以project开头的一个字符串,我想要实现的是当project选择的是proj1时,那在sw_ver得下拉选项中只显示proj1_****,sw_ver的type是reference,它reference到一个stateless的record type上,他的choice list是default。 我能怎么用hook实现这个功能呢?请高手们指教。多谢!


问题已经解决 [打开主题]
本主题的最佳答案为 [ 10 楼].



© 本文为 demi_zhengSCMLife 共同所有,未经同意,请勿转载 ©如该文侵犯了您的版权,请联系管理员

TOP

回复 #1 demi_zheng 的帖子

这种问题实现起来比较简单的,
在sw_ver的choice list上添加代码,
查询你的sw_ver字段引用的记录类型中的所有记录,
把这些满足条件的加入到sw_ver的列表中就可以了。



© 本文为 yunshanSCMLife 共同所有,未经同意,请勿转载 ©如该文侵犯了您的版权,请联系管理员

TOP

这个可以用VALUE CHANGE的HOOK来实现阿
当你这里的值为A的时候,就往那个CHOICELIST里面添加A对应的一些选项
当你这里的值为B的时候,就往那个CHOICELIST里面添加b对应的一些选项



© 本文为 softflySCMLife 共同所有,未经同意,请勿转载 ©如该文侵犯了您的版权,请联系管理员

TOP

回复 #3 softfly 的帖子

但是sw_ver是reference类型,这样的话,是在choicelist里加什么?id,还是别的关键字?

© 本文为 yixianhu 所有,未经同意,请勿转载
©如该文侵犯了您的版权,请联系管理员

TOP

回复 #4 yixianhu 的帖子

你所引用的那个无状态记录类型的Unique Key

© 本文为 yunshan 所有,未经同意,请勿转载
©如该文侵犯了您的版权,请联系管理员

TOP

好的,我先来试试,找到办法再来报告!

© 本文为 demi_zheng 所有,未经同意,请勿转载
©如该文侵犯了您的版权,请联系管理员

TOP

引用:
原帖由 yixianhu 于 2007-9-29 09:12 发表
但是sw_ver是reference类型,这样的话,是在choicelist里加什么?id,还是别的关键字?
unique key
如果有2個時,請記得2個key中間有個空白...

© 本文为 wushung 所有,未经同意,请勿转载
©如该文侵犯了您的版权,请联系管理员

TOP

能把这个主题的答案贴出来吗?
VB的……

© 本文为 qhhsea 所有,未经同意,请勿转载
©如该文侵犯了您的版权,请联系管理员

TOP

我有一个HOOK.以前也有这个问题,我现在把它贴出来:
有两个字段,platform 与product
目的:当选择不同product时, platform会有不同的显示。
前提:在CQ的字段中找到product,把选项列表变成Basic
然后写上脚本:
Dim produce_choice
set produce_choice = GetFieldValue("platform")
value = produce_choice.GetValue
select case value
case"a"
   choices.AddItem("a1")
   choices.AddItem("a2")
   choices.AddItem("a3")
   choices.AddItem("a4")
case"b"
   choices.AddItem("b1")
   choices.AddItem("b2")
   choices.AddItem("b3")
   choices.AddItem("b4")
end select

© 本文为 leeao 所有,未经同意,请勿转载
©如该文侵犯了您的版权,请联系管理员

TOP

我来把答案贴出来,我对楼主的思路进行了拓展,按照下面的步骤,可以很好的实现:

1. 定义2个无状态记录类型Project,SW_Ver
Project中有字段Project,且为主键。 SW_Ver中定义了字段SW_Ver,且为主键。
注意: 这里是最简单的实现方式,抛弃了不必要的部分,只说核心的部分。如果需要其他字段,自行扩展。

2. 在Defect下定义2个字段Project和SW_Ver分别引用Project,SW_Ver两个Stateless无状态记录类型

3. 在Project的Default Value上加上hook(目的是为Project设置一个默认值,如AA):
SetFieldValue fieldname, "AA"

4. 在Project的Value Change上加上hook(动态的清空SW_Ver字段)
SetFieldValue "SW_Ver", ""

5. 在SW_Ver的Choices List上加入下面代码:
Dim sessionObj
Dim queryObj
Dim filterObj
Dim resultObj
Dim project
Set sessionObj = GetSession
project = GetFieldValue("Project").Getvalue
Set queryObj = sessionObj.Buildquery("SW_Ver")
queryObj.BuildField("SW_Ver")
Set filterObj = queryObj.BuildFilterOperator(AD_BOOL_OP_AND)
filterObj.BuildFilter "SW_Ver",AD_COMP_OP_LIKE, project
Set resultObj = sessionObj.BuildResultSet(queryObj)
resultObj.Execute
Do While resultObj.MoveNext = AD_SUCCESS
  Choices.AddItem resultObj.GetColumnvalue(1)
Loop
注意:这是至关重要的一个操作-将SW_Ver的Choices List的Hook Property设置为Recalculate Choices List
没有这个,List值不会发生变化,一直保留初始情况。


6. (Form Design部分省略) 执行可看到效果


最佳答案
该回答被楼主/管理员列为正解!

© 本文为 yunshan 所有,未经同意,请勿转载
©如该文侵犯了您的版权,请联系管理员

TOP

发新话题