加入收藏 | 设为首页 | Life家族 | SCMLife | RMLife | PMLife | SQALife | TESTLife | 企业VIP专区 | 中文化荣誉殿堂

查看完整版本: 如何将查询结果赋值给某个字段?

xiangfei 2007-12-17 16:00

如何将查询结果赋值给某个字段?

为了实现用户取中文名字,建了一个名为“fullname”的字段。
想要动态的取fullname的值,然后查询users这个纪录类型,找到与之对应的login_name,将这个login_name赋值给owner这个字段,如何实现?

ty1227 2007-12-17 16:11

回复 楼主 的帖子

  LZ, owner字段是要在表单上显示吗?
   
    其实碰见很多根据login_name找对应的fullname的,还真是第一次碰见根据fullname找对应的loginname的,难道LZ的登陆名是中文?
    
     LZ可以说清楚点,这样方便大家帮你解答?
  

xiangfei 2007-12-17 16:17

回复 沙发 的帖子

owner字段不要在表单上显示。
fullname字段选的是用户的中文名字。但如果owner字段不用的话,邮件功能就不能用了,因此想要根据fullname的值找对应的loginname,赋值给owner。

xiangfei 2007-12-17 17:09

我起先是把fullname作为安全上下文字段来用的,每个用户建一个组来控制权限,这样用户就只能看到分配给自己的表单。并且用户的中文名称作为组名。这样的话fullname字段也可以当作owner字段来用,在列表中选择的时候也不会因为登陆名是英文而产生困扰。
但是owner这个字段还是要的。无论是邮件规则还是和rpm集成都要用到owner字段。因此我想通过动态的取fullname的值,然后查询users纪录,找到与fullname对应的loginname,赋值给owner这个字段,这样就不用再在owner列表中手工选择loginname。
我想问的就是这个需求该怎么实现?

yunshan 2007-12-17 21:39

定义一个fullname字段,放在form上,owner字段仍然保留,不显示出来。
在fullname字段的value change上添加hook,取得fullname的值,然后建立对user的查询,查询用户的login_name,按用户的fullname进行过滤,然后根据查询结果设置owner字段的值就可以了,参见CQ API,里面有类似的代码,比较简单。

softfly 2007-12-17 23:46

我这个HOOK是一段根据LOGINNAME反查FULLNAME的
你可以参考一下,很简单的

  Dim cur_user
  Dim objSession,objQueryDef,operator1,ResultSet
  Dim cur_user_fullname

  Set objSession = GetSession()
  cur_user = GetFieldValue(fieldname).GetValue()
  Set objQueryDef = objSession.BuildQuery("users")
  objQueryDef.BuildField("fullname")
  Set operator1 = objQueryDef.BuildFilterOperator(AD_BOOL_OP_AND)
  operator1.BuildFilter "login_name",AD_COMP_OP_EQ,cur_user
  Set ResultSet = objSession.BuildResultSet(objQueryDef)
  ResultSet.Execute

  Do While ResultSet.MoveNext = AD_SUCCESS
      SetFieldValue "fbug_resp_user_fullname",ResultSet.GetColumnValue(1)
  Loop

ty1227 2007-12-18 08:27

回复 板凳 的帖子

哦!,明白LZ的意思了,为了发邮件而设置的这个字段,可以写段代码,看下面的:(其实呢,不一定需要赋值给owner,随便一个字段都可以用来发邮件的.)

      Dim getmdl  
       Dim model   
       Dim Sess
       Dim ResultSet
       Dim getprj
       Dim strsql  
       DIM userfullname
           Dim userloginname
           userfullname = getfieldvalue("fullname").getvalue()
           set Sess = GetSession
       strsql = "select T1.login_name from cqaccess.users T1 where T1.fullname = '" + userfullname + "'"
       set ResultSet = Sess.BuildSQLQuery(strsql)
       ResultSet.Execute       
       set GetModel = ResultSet
       set getmdl = ResultSet
       while (getmdl.MoveNext = AD_SUCCESS)  
                  userloginname= getmdl.GetColumnValue(1)   
           setfieldvalue "owner",userloginname
       wend

xiangfei 2007-12-18 10:42

我试了很多次,owner字段一直取不到值,不知道是哪里错了,代码如下:

Dim fullname
Dim session
Dim userloginname

fullname = GetFieldValue("fullname").GetValue()
set session = GetSession
set querydef = session.BuildQuery("users")
querydef.BuildField("login_name")

set operator = querydef.BuildFilterOperator(AD_BOOL_OP_AND)
operator.BuildFilter("fullname"), AD_COMP_OP_EQ ,fullname
set resultset = session.BuildResultSet(querydef)
resultset.Execute
Status = resultset.MoveNext
While (Status = AD_SUCCESS)
  userloginname = resulset.GetColumnValue(1)
  setfieldvalue "owner", userloginname
wend

yunshan 2007-12-18 11:39

我给你改一下,你跑跑看,
Dim fullname
Dim session
Dim userloginname

fullname = GetFieldValue("fullname").GetValue
set session = GetSession
set querydef = session.BuildQuery("users")
querydef.BuildField("login_name")

Set operator = querydef.BuildFilterOperator(AD_BOOL_OP_AND)
operator.BuildFilter "fullname", AD_COMP_OP_EQ ,fullname
set resultset = session.BuildResultSet(querydef)
resultset.Execute
Status = resultset.MoveNext
Do While Status = AD_SUCCESS
  SetFieldValue "owner", resulset.GetColumnValue(1)
Loop

xiangfei 2007-12-18 13:31

回复 9# 的帖子

还是取不到。owner字段仍旧是空的,和没有加代码前一样。

ty1227 2007-12-18 15:36

回复 10# 的帖子

你查一下,是否你的fullname,本身没有值!


   查一下你的登陆用户(用户管理),是否登陆名字和中文名字都有值?

xiangfei 2007-12-18 16:02

回复 11# 的帖子

都是有值的。
而且,之前我是在owner字段的选项列表里写代码,实现fullname字段选了某个中文名,owner字段的下拉框里只显示与之对应的loginname。
但是这样仍旧要再选一次很麻烦,所以想要owner字段直接取对应的loginname,可以隐藏掉。可是试来试去都取不到。

xiangfei 2007-12-19 17:07

我改成在owner的选项列表下加代码,倒是可以取到相应的loginname了。只是owner字段要显示在表单上,我把它去掉,就又取不到了。
代码如下:
Dim fullname
Dim session
Dim status

fullname = GetFieldValue("fullname").GetValue()
set session = GetSession
set querydef = session.BuildQuery("users")
querydef.BuildField("login_name")
set operator = querydef.BuildFilterOperator(AD_BOOL_OP_AND)
operator.BuildFilter("fullname"), AD_COMP_OP_EQ ,fullname
set resultset = session.BuildResultSet(querydef)
resultset.Execute
status = resultset.MoveNext
Do while status = AD_SUCCESS
   choices.AddItem(resultset.GetColumnValue(1))
   AddFieldValue "owner", resultset.GetColumnValue(1)
   status = resultset.MoveNext
Loop

asukataozi 2007-12-20 08:57

你加个msgbox resultset.GetColumnValue(1) 看下你查询到的是否是loginname

yunshan 2007-12-28 18:21

其实这个问题应该是设置问题,代码是正确的,
你将Choices List Hook对应的属性设置为Recalculate Choices List,这样应该就可以了。
页: [1]
查看完整版本: 如何将查询结果赋值给某个字段?