written by Manuel Schnitger, 21. June 2011
Today I’d just like to write a few lines about the changes regarding the RQL programming in version 11 of the Management Server (scheduled for the end of the year.) The change I’ll describe might sound like a totally different approach (and that is possible when looking behind the scenes) but the impact for you as someone who creates RQL based plugins is very small.
Ok, the change: In the Managment Server Version 11 (Swan version) Microsofts COM components for the RQL communication are not longer available/supported. Instead of the COM communication the Management Server will use the Windows Communication Foundation that is part of the .Net framework.
Reasons:
In order to provide a good overview I’ll provide a function that is probably used by many developers and in a second step I’ll provide a sample RQL plugin that is intended to run on a Management Server version 11.
Version 10 and earlier:
<%
function sendXML (XMLString)
set objData = server.CreateObject("RDCMSASP.RdPageData")
objData.XMLServerClassname="RDCMSServer.XmlServer"
sendXML = objData.ServerExecuteXML(XMLString, sErrors)
end function
%>
Version 11:
<%
function sendXML (XMLString)
set objData = Server.CreateObject("OTWSMS.AspLayer.PageData")
sendXML = objData.ServerExecuteXml(XMLString, sErrors)
end function
%>
The changes to this function are obviously very small:
Hint: If your obejcts do have other names….then of course you have to use different search strings ;)
As most people (including me) like to have a runing script instead of just a code snippet, this sample plugin might be helpful:
<%
' Create RQL Server Object And XML Document Object
set XMLDom = Server.CreateObject("OTWSMS.Core.RdObject")
set RQLObject = Server.CreateObject("OTWSMS.AspLayer.PageData")
' Define Variables
Dim RQLStatement ' Contains the RQL command
Dim RQLRequest ' Contains the result of the RQL Server
Dim ServerError ' Contains an error message of the RQL Server
Dim Projects ' Contains the number of the projects
LoginGUID = session("LoginGUID")
SessionKey = session("SessionKey")
' Create RQL Statement (Load All Projects)
RQLStatement= "<IODATA loginguid=""" + LoginGUID + """>" + _
"<ADMINISTRATION>" + _
"<PROJECTS action=""list"" />" + _
"</ADMINISTRATION>" + _
"</IODATA>"
' Transfer RQL Statement To RQL Server Object
RQLRequest = RQLObject.ServerExecuteXml(RQLStatement, ServerError)
' Show Appearing Errors
if ServerError > "" then Response.write "An error has occured:</BR></BR>"+ServerError
' Load Result Into XML DOM
Call XMLDom.LoadXML (CStr(RQLRequest))
' Execute XML Query For Projects In XML DOM
Set XMLDom = XMLDom.ObjectByQuery ("//PROJECTS")
' List Every Project By Name
for Projects=1 to XMLDom.objects.count
Response.write XMLDom.objects(Projects)("name")+"</BR>"
next
' Kill RQL Server Object
Set RQLObject=Nothing
%>
Hint: If you have a closer look at the script, you’ll notice that there is another change that I forgot to mention. If you don’t use the Microsoft XML-DOM object but the one that is provided by the Management Server you’ll also have to change this line:
set XMLDom = Server.CreateObject(“OTWSMS.Core.RdObject”)
The same line in version looks like this:
set XmlDom = Server.CreateObject(“RDCMSAspObj.RdObject”)
So another search & replace task would look like this: Search for “RDCMSAspObj.RdObject” and replace it with “OTWSMS.Core.RdObject”.
Ok, so these were the changes regarding RQL communication. A description of the changes as well as the sample RQL plugin (above) are planned to be part of an updated RQL documentation.
To answer a question that might possibly occour: No, I’m not aware of any other changes regarding RQL. ;)
Have fun with RQL!
Source: RQL development with Open Text Management Server 11
© copyright 2011 by Manuel Schnitger