If you use versioning in your data dictionary, you need a way to determine the version number of a specific object in the currently selected database. DataEngine.GetObjectVersion is the means. This script is called after the data dictionary has been loaded to determine which objects, if any, should be hidden because of versioning issues.
Parameters
A reference to the Stonefield Query Application object, the name of the object, and the object type: "field," "table," or "relation."
Return Value
The version number of the object as a string or a blank string if there is no version number.
Example
Suppose the first two characters of the table name represent the module the table belongs to (for example, ARCUS is the customers table in the AR, or Accounts Receivable, module). Also suppose a table named CSAPP contains the version number of each module. The following code returns the version number from the current database for the module the specified table or field belongs to. Note that rather than opening CSAPP each time, this code assumes it was opened in the DataEngine.GetCustomMetaData script for performance reasons.
Visual FoxPro
DataEngine.GetCustomMetaData:
lparameters toApplication as SQApplication
loDatabase = SQApplication.DataEngine.Databases.GetMainDatabase()
loDatabase.ExecuteSQLStatement('select MODULE, VERSION from CSAPP', , 'CSAPP')
return
DataEngine.GetObjectVersion:
lparameters toApplication as SQApplication, tcObjectName, tcObjectType
local lcModule, lcVersion
lcModule = left(tcObjectName, 2)
select CSAPP
locate for MODULE = lcModule
lcVersion = VERSION
return lcVersion
VBScript
DataEngine.GetCustomMetaData:
function Main(Application)
dim Database, XMLDOM
set Database = Application.DataEngine.Databases.GetMainDatabase()
VersionXML = Database.ExecuteSQLStatement("select MODULE, VERSION from CSAPP")
set XMLDOM = createobject("MSXML.DOMDocument")
XMLDOM.ASync = False
XMLDOM.LoadXML(VersionXML)
Application.AddProperty "VersionXML", XMLDOM
Main = True
end function
DataEngine.GetObjectVersion:
function Main(Application, ObjectName, ObjectType)
dim Node
Module = left(ObjectName, 2)
NodePath = "/DataSet/_resultset[@module='" + Module + "']"
Node = Application.VersionXML.selectSingleNode(NodePath)
Main = Node.getAttribute("version")
end function
JavaScript
DataEngine.GetCustomMetaData:
function Main(Application) {
var Database, VersionXML, XMLDOM ;
Database = Application.DataEngine.Databases.GetMainDatabase() ;
VersionXML = Database.ExecuteSQLStatement('select MODULE, VERSION from CSAPP') ;
XMLDOM = new ActiveXObject('MSXML.DOMDocument') ;
XMLDOM.ASync = false ;
XMLDOM.LoadXML(VersionXML) ;
Application.AddProperty('VersionXML', XMLDOM) ;
return true ;
}
DataEngine.GetObjectVersion:
function Main(Application, ObjectName, ObjectType) {
var Module, NodePath, Node, Version ;
Module = left(ObjectName, 2) ;
NodePath = '/DataSet/_resultset[@module="' + Module + '"]'
Node = Application.VersionXML.selectSingleNode(NodePath) ;
Version = Node.getAttribute("version") ;
return Version
}
C#
Please note that the method in this script must be named DataEngine_GetObjectVersion.
public static string DataEngine_GetObjectVersion(SFQApplication sfqApplication,
string objectName, string objectType)
{
string version = String.Empty;
XmlDocument doc = null;
try
{
doc = (XmlDocument)sfqApplication.GetProperty("VersionXML");
}
catch(Exception e)
{
}
if(doc == null)
{
Database database = sfqApplication.DataEngine.Databases.GetMainDatabase();
string selectStmt = "select MODULE, VERSION from CSAPP";
string resultSet = database.ExecuteSQLStatement(selectStmt);
doc = new XmlDocument();
doc.LoadXml(resultSet);
sfqApplication.AddProperty("VersionXML", doc);
}
string module = objectName.Substring(0, 2);
string nodePath = "/DataSet/_resultset[@module=\"" +
module + "\"]";
XmlNode node = doc.SelectSingleNode(nodePath);
if (node != null)
{
version = node.Attributes["version"].Value;
}
return version;
}
VB.NET
Please note that the method in this script must be named DataEngine_GetObjectVersion.
public shared function DataEngine_GetObjectVersion(sfqApplication as SFQApplication, _
objectName as string, objectType as string) as string
Dim version As String = String.Empty
Dim doc As XmlDocument = Nothing
Try
doc = sfqApplication.GetProperty("VersionXML")
Catch e As Exception
End Try
If (doc Is Nothing) Then
Dim database As Database = sfqApplication.DataEngine.Databases.GetMainDatabase()
Dim selectStmt As String = "select MODULE, VERSION from CSAPP"
Dim resultSet As String = database.ExecuteSQLStatement(selectStmt)
doc = New XmlDocument()
doc.LoadXml(resultSet)
sfqApplication.AddProperty("VersionXML", doc)
End If
Dim moduleName as string = objectName.Substring(0, 2)
Dim nodePath As String = "/DataSet/_resultset[@module=""" +
moduleName + """]"
Dim node As XmlNode = doc.SelectSingleNode(nodePath)
If (Not node Is Nothing) Then
version = node.Attributes.GetNamedItem("version").Value
End If
Return version
End Function
See also
DataEngine.GetCustomMetaData | Scripts© Stonefield Software Inc., 2023 • Updated: 06/06/16
Comment or report problem with topic