发新话题
打印

[已解决] 有人修改过users对象的唯一键属性吗( 此文章被查看:569次,被回复:9篇!! )

本主题由 yunshan 于 2008-5-14 23:45 关闭

有人修改过users对象的唯一键属性吗

目前用户的loginName是一串编号,在选择用户choice 列表里不是很方便.
之所以显示loginName是因为在users对象中唯一键的属性字段和login_name关联起来了,
如果我这里通过某种方法把唯一键改成full_name,说不是所有选择用户的时候就会换成名字呢(忽略名字为空的状况).
不知道这个方案是不是可行.
users对象的属性是只读的,有没有人直接改过数据库?


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



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

TOP

这个应该是不可以改的。



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

TOP

我研究了一下shcema数据库表结构,所有表的唯一键字段是在m_unique_key_def表里定义的.我把里面我的schema相关的users表的唯一键字段改成fullname字段,重启oracle后貌似没用.
接下来我试试把shcema export后,在导出的代码中修改,再重新导入,看是不是可行.



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

TOP

各种方法试一下,可行不可行都给大家分享一下,


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

TOP

我试过了,可以的.
首先cqload把schema导出,然后用文本编辑器编辑导出的文件,查找
ADD unique_key_def  ( "users", "login_name", 1 )
把login_name改成 fullname.
接下来再用cqload import schema.
导入完成后需要在CQ Designer中做一些小的修改,把所有submitter字段默认值的perl修改一下,以前是GetLoginName,换成GetFullName就可以了.所有类似的地方都需要进行修改.

通过上述操作,在users对象的唯一键看到的就是fullname了.


不过现在有带来了另外一个问题:
如何把使用cqload import的schema和已经存在的生产库和测试库关联?

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

TOP

这个我试了一下,改完后会有问题,而且fullname一般为用户的姓名,这样不能保证唯一性,在使用当中会有问题的

附件

1.GIF (39.72 KB)

2008-4-15 12:22

错误提示

1.GIF


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

TOP

你在关联字段的时候可以选择引用user的fullname啊?

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

TOP

我觉得这样改users的主键是很不合理的,可能会引发很多问题,比如cq api的使用等等。

要显示用户fullname的列表,最好使用其他途径,如hook等。

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

TOP

引用:
原帖由 yunshan 于 2008-4-15 17:43 发表
我觉得这样改users的主键是很不合理的,可能会引发很多问题,比如cq api的使用等等。

要显示用户fullname的列表,最好使用其他途径,如hook等。
如果在保证所有用户的fullname不为空,且不重复的前提下,我觉得没有太大的风险.
其实不管主键是什么字段,reference时候保存在数据库里的是userid,不是login_name,也不是fullname,这里修改主键以后,只是在显示用户的时候换了一个字段而已,不会造成太大的影响.

个人观点,仅供参考.其实以前我尝试过 新建字段 + hook 的方式来实现这个功能,不过由于现在的系统中有不下50个user字段,修改起来工作量非常大,因此我才想出这样的处理办法.

我把修改的方法列出来,就算是大家切磋一下,真正要这样做的话还是要谨慎一点.

在测试库和生产库中运行如下sql(生产库可以先不执行,在测试库完全测试通过后再变更到生产库中):
Update unique_key_def Set fielddef_id = 16777316 Where entitydef_id = 16777234;
在schema库中运行如下sql:
Update m_unique_key_def Set fielddef_id = 16777316 Where entitydef_id = 16777234;

Commit以后查看users对象,唯一键已经变化了.
接下来的工作,是在hook中查询GetUserLoginName,把所有找到的内容替换成GetUserFullName.

最后还要强调,在执行上面的脚本前,请务必保证所有用户的fullname不为空,且不重复的前提.


最佳答案
该回答被楼主/管理员列为正解!
本帖最近评分记录
  • yunshan 威望 +5 方法很好! 2008-4-18 19:35
  • yunshan 金钱 +10 方法很好! 2008-4-18 19:35

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

TOP

回复 9# 的帖子

这种方法虽然有一定的风险,但值得一试!

鼓励大家进行创新性思维,这样能够有更多有价值的东西产生!

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

TOP

发新话题