

在hook代码中加速记录状态的改变
经过多次的试验终于搞定了这个问题
个人感觉这其中有两个地方需要注意,1:是用来修改记录的用户会话,2:状态转换矩阵
1:在hook中更改记录的状态是需要通过 sessionObj.UserLogon适时地切换一下用户会话,否则cq始终都会认为该条记录已经被锁定,那么你的这次操作将无法成功
2:更改状态的操作一定要在状态转换矩阵的框架之下,如正常流程: submited -> closed ->opened,那么你绝不能在submited状态下调用open操作,这种调用将无法成功
我们以CQ自带的Defect为例,比如我想在用户提交某种类型的defect时让他的状态直接变化为closed状态,那么就可以用如下方法:
在submit操作的通知hook中加入一下代码:
Dim hl
hl = GetFieldValue("Headline").GetValue
'如果临时defect则直接close
if hl = "临时defect" then
Set s = GetSession
Dim dbidValue
dbidValue = GetDisplayName
Dim e,s
'切换用户会话,
'cqt为用户数据库名
'cqs为模式库名或者连接名
s.UserLogon "admin","admin","cqt",AD_PRIVATE_SESSION,"cqs"
Set e = s.GetEntity("Defect",dbidValue)
s.EditEntity e, "Close"
'Defect被close必须填写resolution内容
e.SetFieldValue "Resolution","重复"
e.Validate
e.Commit
end if
经过多次测试终于通过,我只在通知hook做了试验,别的地方没有去试, 感兴趣的朋友可以再去试验一下。
唯一的缺憾是状态的变更必须在状态转换矩阵的框架之下,所以在应用中所起的作用好像不是太大
[ 本帖最后由 thehenry 于 2007-8-6 14:46 编辑 ]
搜索更多相关主题的帖子:
hook 状态 代码 记录