[ClearQuest WEB 集成]
[CQWEB 集成]
通常情况下,CQ应用架构在windows平台下,对于应用开发者来说会具有两个优势:
1、基于windows平台,采用vbs脚本降低对CQ二次开发人员的技术要求;
2、将有大量的COM组件可通过vbs脚本使用,对于CQ应用的扩展性有较好的支持;
以笔者所在项目为例来说,CQWEB应用在windows 2003 server上部署,在CQWEB
应用运行一段时间后,需要在一套外部系统上将CQWEB的工单系统嵌入进来,为了避免用户在不同IT应用上登录切换,我们就提出将CQWEB工单应用系统与外部系统集成到一起的想法,集成方式可以根据集成的无缝程度、实施的复杂程度采用以下方式进行:
1、采用SSO方式将外部系统与CQWEB应用整合到一个门户应用框架;
2、外部系统应用直接访问CQWEB应用的后台数据库表,达到用户端的无缝集成;
3、外部系统提供后台自动登录CQWEB应用,后台自动执行CQWEB应用查询并对查询结果展示,后台自动整合外部系统与CQWEB应用的用户账号信息;
基于集成工作实施的复杂度尽量降到最低,又尽量为用户减少IT应用使用上的麻烦,我们采用第三种方式集成,基于应用平台的特点,在CQWEB应用服务器上编写ASP脚本,通过CQ VBS API访问CQWEB应用,提供给外部系统调用该ASP完成工作,因此需要进行:
1、在外部系统中编写程序,后台自动登录CQWEB应用,并记录SESSION会话;
2、在外部系统中特定功能点后台调用ASP脚本,完成CQWEB中公共查询的执行,并展示查询结果;
3、在外部系统中用户管理功能点后台调用ASP脚本,确保用户密码修改后自动调用ASP完成对CQ系统用户密码的同步;
以下作为对两个ASP脚本的备份。
CQModifyPwd.asp
---------------------------------------------------------------
<%
'On Error Resume Next
Dim ADUserName, ADPassword
Dim CQUserName, CQPassword
Dim ret
ADUserName=request.QueryString("ADUserName")
ADPassword=request.QueryString("ADPassword")
CQUserName=request.QueryString("CQUserName")
CQPassword=request.QueryString("CQPassword")
Dim MasterName, SessionObj
MasterName = "7.0.0"
Set SessionObj = CreateObject("ClearQuest.AdminSession")
SessionObj.Logon ADUserName, ADPassword, MasterName
If Err.Number > 0 Then
Err.Clear
ret = "登录失败"
End If
Dim CurUser
Set CurUser = SessionObj.getUser(CQUserName)
If Err.Number > 0 Then
Err.Clear
ret = "获取用户对象失败"
End If
CurUser.SetLoginName CQUserName, CQPassword
CurUser.UpgradeInfo
ret = "<result>ok</result>"
Set CurUser = Nothing
Set SessionObj = Nothing
'http://localhost:8091/CMS/CQModifyPwd.asp?CQUserName=yhl&CQPassword=hb1234&ADUserName=admin&ADPassword=cq
Response.Write ret
%>
CQQueryWork.asp
---------------------------------------------------------------
<%
On Error Resume Next
Dim CQUserName, CQPassword
Dim ret
Set ret = ""
CQUserName=request.QueryString("CQUserName")
CQPassword=request.QueryString("CQPassword")
Dim MasterName, ProductName
Dim SessionObj, wkspc
MasterName = "7.0.0"
ProductName = "cqhb"
Err.Clear
Set SessionObj = CreateObject("ClearQuest.Session")
SessionObj.UserLogon CQUserName, CQPassword, ProductName, 2, MasterName
If Err.Number > 0 Then
Err.Clear
'ret = "登录失败"
ret = "LogError:invalid user/password to login CQ"
End If
Dim QueryList, QueryResultList
Dim QueryDef, Rs
If ret = "" Then '登录成功
Set wkspc = SessionObj.GetWorkSpace
If Err.Number > 0 Then
Err.Clear
'ret = "获取workspace失败"
ret = "Error:failed to get WorkSpace"
End If
If ret = "" Then '获取workspace成功
ql = wkspc.GetQueryList(1)
Dim QueryNameStr
QueryNameStr = ""
For Each e In ql
If InStr(CStr(e), "工作区") > 0 Then
Set QueryDef = wkspc.GetQueryDef(e)
If Err.Number > 0 Then
Err.Clear
'ret = "获取查询失败"
ret = "Error:failed to get Query"
End If
Set Rs = SessionObj.BuildResultSet(QueryDef)
Rs.EnableRecordCount
Rs.Execute
If Err.Number > 0 Then
Err.Clear
'ret = "执行查询失败"
ret = "Error:failed to exec Query"
End If
If Rs.RecordCount > 0 Then
ret = "<result>"
ret = ret & "<query><name>" & e & "</name>"
ret = ret & "<recordcount>" & Rs.RecordCount & "</recordcount></query>" & vbCrLf
ret = ret & "</result>"
exit for
End If
End If
Next
End If '获取workspace成功
End If '登录成功
Set Rs = Nothing
Set wkspc = Nothing
Set SessionObj = Nothing
%>
<%
'http://localhost:8091/CMS/CQQueryWork.asp?CQUserName=fenglei_hd&CQPassword=hb1234
Response.Write ret
%>



