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]