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