马上就要2016农历新年了,送点什么给大家呢?我觉得还是分享点技术吧。前不久用户在抱怨为什么登录Cognos Connection的密码不能让我们自己改?相信Cognos开发的很多人知道,Cognos门户中没有提供用户管理的模块,比如添加用户,修改用户密码等基本操作,原因我也不知道为什么。对了,上面说的是Cognos10以及以下的版本,听说Cognos11发布了,有没有这些基本功能就不知道了,因为试用版的下载地址我也一直没有下载成功过,IBM毕竟是美国的,当然这里不谈政治,只谈技术。下面我就把Cognos10如何修改用户密码的解决方案之一分享给大家,也为自己2015年技术分享画上一个句号。

一:配置环境

操作系统:Win10 专业版操作系统

数据库环境:SQLServer2008 R2

Cognos Server版本:IBM Cognos Bussiness Inteligence 10.2.1

Cognos FM版本:IBM Cognos FrameWork Manager10.2.1

Cognos认证方式:基于CJAP的Cognos第三方用户认证

二:功能描述

不借助任何第三方工具,在Report Studio中实现类似Form表单实现对Cognos用户密码的修改功能,让使用者在Cognos Connection中可以自己维护自己的密码信息,从而减少开发人员在后台对用户密码的修改工作。

三:开发步骤

3.1:存储过程部分

在Cognos用户认证库创建一个带参数的存储过程,该存储过程有两个参数,一个就是用户名,一个就是用户的新密码,如下面的脚本所示

  1. CREATE PROCEDURE [dbo].[UpdatePwd]
  2. (
  3.  
  4. @username NVARCHAR(),
  5. @newpwd NVARCHAR()
  6.  
  7. )
  8. AS
  9. update dbo.PT_User set Password=@newpwd
  10. where UserName=@username
  11. SELECT @@ROWCOUNT as "is_update" --如果@@ROWCOUNT=1则说明受影响1行,表示修改成功

测试上面的存储过程,如下图所示

执行结果查看,返回1表示执行成功

查看用户表,可以看到用户密码为111111修改成功

3.2:FM建模部分

创建一个查询主题,查询主题调用的是我们3.1中创建的存储过程,具体设置如下图所示

注意上图中红色线圈起来的值设置:username和newpwd都是采用宏函数的形式进行传参的,从而保证不同的用户登录username是可变的,以及用户

从前端输入的密码是自定义的,具体表达式如下图所示

用户名宏函数表达式

新密码宏函数表达式

测试一下查询主题

如果用户admin的密码被初始为缺省状态000000那么则说明查询主题设计OK

3.3:RS设计部分

选择我们查询主题所在的数据包,发布到CognosConnection,然后新建一个RS

3.3.1:新建一个提示页面1,如下图所示

HTML处的代码如下图所示,作用是生成一个提交button以及完成表单的验证工作

  1. <script>
  2. function update()
  3. {
  4. var form=getFormWarpRequest();
  5. var pass=form._textEditBoxpass.value;
  6. var againpass=form._textEditBoxagainpass.value;
  7. if(pass == "" || againpass == "")
  8. {
  9. alert("新密码不能为空!请输入密码!");
  10. return false;
  11. }
  12. else if(pass!=againpass )
  13. {
  14. alert("两次输入的密码不一致,请重新输入!");
  15. return false;
  16. }
  17. else
  18. {
  19. promptButtonFinish();
  20. }
  21.  
  22. }
  23.  
  24. </script>
  25. <button type="button" name="finishN15E390E0x165E83C8RS" id="finishN15E390E0x165E83C8RS" class="bp" onmouseover="this.className = 'bp bph'" onmouseout="this.className = 'bp'" onclick="update()" style="padding-left:10px;padding-right:10px;">完成</button>

3.3.2:返回页面1,如下图所示

[重新登录]是一个超级链接按钮,地址为

  1. http://localhost:9300/p2pd/servlet/dispatch?b_action=xts.run&m=portal/logoff.xts&h_CAM_action=logoff

密码修改结果是一个数据项,表达式为

  1. if([物理层].[update_password].[is_update]=)
  2. then
  3. ('密码修改成功!')
  4. else
  5. ('密码修改失败!')

3.4:功能测试部分

运行报表,在报表输入新密码,验证非空,和二次密码输入如下图‘

非空验证

密码二次输入验证

填写正确提交修改

查看数据库看是否是我填的123456

点击重新登录按钮,注销然后重新登录

再次登录用新密码123456,登录成功

四:答疑与扩展

4.1:方案答疑

4.1.1:UI解疑

提示页面的输入框如何设置为隐藏形式,即密码框形式?

如下图所示,设置文本框空间的隐藏文本属性即可

4.1.2:调用解疑

RS什么时候调用了存储过程?

我们提示页面没有做任何操作,但是页面1里面有一个数据项的表达式是

  1. if([物理层].[update_password].[is_update]=)
  2. then
  3. ('密码修改成功!')
  4. else
  5. ('密码修改失败!')

这个数据项在页面1展示,由于update_password是来自于引用存储过程的查询主题的

也需要注意:如果想让RS调用到存储,那么存储过程中的项 目必须在页面中被查询出来

4.2:扩展1:开发自定义JAVA程序

是否可以开发一个具有修改密码功能的java程序,把程序导出为jar放入到Cognos安装目录,然后在前端调用

4.3:扩展2:RS调用JQuery,AjaX等实现表单的提交

是否可以基于高级JS功能完成和数据库的异步通讯,从而实现修改数据库的密码

4.4:扩展3:优缺点分析

优点:本方案仅仅通过一个RS页面就可以让用户完成修改自己密码的功能,是最简化的方案之一,可移植性很高,通过这个案例,我们也可以考虑更复杂的用户和角色的管理也通过这样的方法来实现.

缺点:还是要依赖Cognos本身的UI,比如修改完密码后的返回页面,即注销后的页面,Cognos的本身页面是很丑的,目前还没有找到修改这个页面的地方,或者说是更改Cognos

Logoff的返回地址为登录页

The End :2016年1月26日21:33:42

2015年末分享:利用RS修改用户密码的更多相关文章

  1. chpasswd-批量修改用户密码

    批量修改用户密码 工作原理: 从系统的标准输入读入用户的名称和口令,并利用这些信息来更新系统上已存在的用户的口令 语法: :# echo 用户名:密码 | chpasswd :# chpasswd & ...

  2. mysql基础:登录退出,修改用户密码,添加删除用户

    今天刚开始学习mysql,最先接触用户管理,给大家分享下 注:mysql中命令的大小写都可以的 ==========登录退出相关=================== root@jack-deskto ...

  3. CentOS修改用户密码方法

    CentOS修改用户密码方法 CentOS修改用户密码方法 1. 普通用户 a. 获取超级用户root权限 命令:su或者su -或者su - root b. passwd 用户名 2. 超级用户 a ...

  4. [转] 关于linux下通过shell命令(自动)修改用户密码

    关于linux下通过shell命令(自动)修改用户密码 2012-04-23 18:47:39 分类: 原文地址:关于linux下(自动)修改用户密码 作者:ubuntuer 本文章总结了如何手动.自 ...

  5. Linux批量修改用户密码

    对系统定期修改密码是一个很重要的安全常识,通常,我们修改用户密码都使用passwd user这样的命名来修改密码,但是这样会进入交互模式,即使使用脚本也不能很方便的批量修改,除非使用expect这样的 ...

  6. linux下passwd命令设置修改用户密码

    1.passwd 简单说明: 我们已经学会如何添加用户了,所以我们还要学习设置或修改用户的密码:passwd命令的用法也很多,我们只选如下的几个参数加以说明:想了解更多,请参考man passwd或p ...

  7. 为VisualSVN Server增加在线修改用户密码的功能

    原文:为VisualSVN Server增加在线修改用户密码的功能 附件下载:点击下载 VisualSVN Server是一个非常不错的SVN Server程序,方便,直观,用户管理也异常方便. 不过 ...

  8. MySQL——修改用户密码 | 移除权限

    修改用户密码 '; 移除权限 REVOKE Delete, Drop ON *.* FROM `root`@`localhost`; 权限列表

  9. Linux chpasswd (批量或单一修改用户密码)和passwd(直接修改用户密码)

    Linux命令:chpasswd 批量或者单一修改用户密码 语法: 1:# echo 用户名:密码 | chpasswd 2:# chpasswd < doiido.txt 实例 1.直接修改d ...

随机推荐

  1. android studio 添加有趣的注释模板 佛祖保佑无bug等

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha 汉化包 百度云盘 下载地址:https://pan.baidu.com/s/1pLjwy ...

  2. Qt Quick快速入门之qml与C++交互

    C++中使用qml对象,直接使用findChild获取qml对象,然后调用setProperty方法设置属性,当然必须在加载qml之后才能使用,不然findChild找不到对象,用法如下. engin ...

  3. 【2005-2006 ACM-ICPC, NEERC, Moscow Subregional Contest】Problem J. Jack-pot

    简单dfs,差分一下A数组和建出字典树能写得更方便,若不这么做代码时就会像我一样难受. #include<cstdio> #include<cstring> #include& ...

  4. 【平面图最小割】BZOJ2007-[NOI2010]海拔

    [题目大意] 城市被东西向和南北向的主干道划分为n×n个区域,包括(n+1)×(n+1)个交叉路口和2n×(n+1)条双向道路.现得到了每天每条道路两个方向的人流量.每一个交叉路口都有海拔,每向上爬h ...

  5. bzoj 3275 最小割

    给你一堆东西,叫你选一些东西出来,使得价值最大,要求选出的东西集合中的任意a,b满足性质p. 可以考虑: 1.拟阵? 2.二分图? 这道题由于数学硬伤,不知道不存在两条直角边是奇数,斜边是整数的直角三 ...

  6. Vi 学习 笔记

    rails server -p 端口名 // 切换端口 Vi 常用指令: mkdir filename //创建文件 mv filename1 filename2 // 文件重命名 rm filena ...

  7. BZOJ 3876: [Ahoi2014]支线剧情 带下界的费用流

    3876: [Ahoi2014]支线剧情 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=3876 Description [故事背景] 宅 ...

  8. Codeforces Round #297 (Div. 2)E. Anya and Cubes 折半搜索

    Codeforces Round #297 (Div. 2)E. Anya and Cubes Time Limit: 2 Sec  Memory Limit: 512 MBSubmit: xxx  ...

  9. Codeforces Round #279 (Div. 2) B - Queue 水题

    #include<iostream> #include<mem.h> using namespace std; ],q[]; int main() { int n,x,y; m ...

  10. C#高级编程9-第7章 运算符和类型强制转换

    运算符和类型强制转换 1.运算符 运算符的简化操作 条件运算符: if-else的简化操作,也称三元运算符.如果条件为真,返回一个值,为假返回另外一个值. condition?true_value:f ...