This script is called when the user clicks the OK button in the Options dialog if you've defined any custom options settings in an Options.Settings script. It gives you an opportunity to do something about the changes, such as storing a value in another location.

If your Options.Settings and Setup.Settings scripts are the same, you may wish to use the same code you have in Options.Changed in a Setup.Changed script. The best way to do that is to create a user-defined script with the necessary code and call that script from both Options.Changed and Setup.Changed.

Parameters
A reference to the Stonefield Query Application object and an XML string containing the key values, former values, and new values of all custom options. The format for the XML is as follows:

<settings>
      <setting>
        <key>Registry key</key>
        <old>Former value</old>
        <new>New value</new>
      </setting>
      <setting>
        <key>Registry key</key>
        <old>Former value</old>
        <new>New value</new>
      </setting>
      ...
</settings>

The following elements are available:

  • key: the Registry key under HKEY_CURRENT_USER\Software\CompanyName\ApplicationName\Options (where CompanyName and ApplicationName are the values of the Company Name and Application Name configuration settings) that holds the value for the setting. Alternatively, if you're storing values in Data.INI, this is the key value under the Options section.

  • old: the former value for this option.

  • new: the value entered by the user.

Return Value
Any value (Stonefield Query ignores the return value).

Example
Here's an example that updates a custom property of the Application object when a change is made to the custom AR Location setting.

Visual FoxPro

lparameters toApplication as SQApplication, tcSettingsXML
local loXMLDOM as MSXML.DOMDocument, loNodes, loNode, lcDirectory
loXMLDOM = createobject('MSXML.DOMDocument')
loXMLDOM.ASync = .F.
loXMLDOM.LoadXML(tcSettingsXML)
loNodes = loXMLDOM.selectNodes('/settings/setting')
for each loNode in loNodes
  if loNode.childNodes(0).text = 'AR Location'
    lcDirectory = loNode.childNodes(2).text
    exit
  endif
next
toApplication.ARLocation = lcDirectory
return

VBScript

function Main(Application, SettingsXML)
dim XMLDOM, Nodes, Node
set XMLDOM = createobject("MSXML.DOMDocument")
XMLDOM.ASync = False
XMLDOM.LoadXML(SettingsXML)
set Nodes = XMLDOM.selectNodes("/settings/setting")
for each Node in Nodes
  if Node.childNodes(0).text = "AR Location" then
    Directory = Node.childNodes(2).text
    exit for
  end if
next
toApplication.ARLocation = Directory
end function

JavaScript

function Main(Application, SettingsXML) {
var XMLDOM, Nodes, Node, Directory ;
XMLDOM = new ActiveXObject('MSXML.DOMDocument') ;
XMLDOM.ASync = false ;
XMLDOM.LoadXML(SettingsXML) ;
Nodes = XMLDOM.selectNodes("/settings/setting") ;
for (Node in Nodes)
  {
  if (Node.childNodes(0).text == "AR Location")
    {
    Directory = Node.childNodes(2).text ;
    break ;
    }
  }
Application.ARLocation = Directory ;
return ;
}

C#

Please note that the method in this script must be named Options_Changed.

public static void Options_Changed(SFQApplication sfqApplication,
  string settingsXML)
{	
    string directory = String.Empty;
    XmlDocument doc = new XmlDocument();
    
    doc.LoadXml(settingsXML);
    
    XmlNodeList nodes = doc.SelectNodes("/settings/setting");

    foreach (XmlNode node in nodes)
    {
        if (node.ChildNodes[0].InnerText == "AR Location")
        {
            directory = node.ChildNodes[2].InnerText;
            sfqApplication.SetProperty("ARLocation", directory);
        }
    }
}

VB.NET

Please note that the method in this script must be named Options_Changed.

public shared function Options_Changed(sfqApplication as SFQApplication,
  settingsXML as string) as Boolean

    Dim directory As String = String.Empty
    Dim doc As XmlDocument = New XmlDocument()
    doc.LoadXml(settingsXML)

    Dim nodes As XmlNodeList = doc.SelectNodes("/settings/setting")

    For Each node As XmlNode In nodes

        If node.ChildNodes(0).InnerText = "AR Location" Then
            directory = node.ChildNodes(2).InnerText
            sfqApplication.SetProperty("ARLocation", directory)
        End If
    Next

    Return True
End Function

See the topic for the GetRegistryValue method of the Application object for an example that uses these options.

See also

Options.Settings | Options.Validate | Scripts | Setup.Changed