GP/QTP Automation: GUI Mapping script

Posted by Albert Gareev on Sep 09, 2009 | Categories: Great PlainsSource code

All related posts: Reference Page – GP/QTP Automation

Purpose: extract object descriptions from Dexterity Dictionary and create custom XML-based GUI Map file for QTP.

Used resources: Service Functions – XML (QTP, VBScript)

Option Explicit
' Purpose: Map GP Dexterity GUI into XML file
' Requirements: GP App started (don't have to login)
'Output: ".....\DexGUI.xml"
Dim GPApp, objForm, objWindow, objWndField
Dim sGPMapXML, sCurrentProduct
Dim FormIter, WinIter, FieldIter
Dim objGPMapXML, objRoot, objFormMapXML, objWndMapXML, objFldMapXML
Set GPApp = GetObject("", "Dynamics.Application")
sCurrentProduct = GPApp.CurrentProduct
'Define or parameterize your output folder here
sGPMapXML = "C:\TEMP\" & "\DexGUI.xml"
Set objGPMapXML = XMLUtil.CreateXML("DexGUI")
Set objRoot = objGPMapXML.GetRootElement
FormIter = 1
Set objForm = GPApp.GetFirstForm()
Do
 If Not (objForm is Nothing) Then
  Set objFormMapXML = CreateChildElementByName(objRoot, "Form", "")
  objFormMapXML.AddAttribute "name", objForm.GetName()
  objFormMapXML.AddAttribute "childcount", CStr(objForm.CountWindows())
  WinIter = 1
  Set objWindow = objForm.GetFirstWindow()
  Do
   If Not (objWindow is Nothing) Then
    Set objWndMapXML = CreateChildElementByName(objFormMapXML, "Window", "")
    objWndMapXML.AddAttribute "name", objWindow.GetName()
    objWndMapXML.AddAttribute "childcount", CStr(objWindow.CountFields())
    FieldIter = 1
    Set objWndField = objWindow.GetFirstWindowField()
    Do
     If Not (objWndField is Nothing) Then
      Set objFldMapXML = CreateChildElementByName(objWndMapXML, "Field", "")
      objFldMapXML.AddAttribute "name", objWndField.GetName()
      objFldMapXML.AddAttribute "id", CStr(objWndField.GetID())
     End If
     FieldIter = FieldIter +1
     Set objWndField = objWindow.GetNextWindowField()
    Loop While FieldIter <= objWindow.CountFields()
   End If
  Set objWindow = objForm.GetNextWindow()
  WinIter = WinIter + 1
  Loop While WinIter <= objForm.CountWindows()
 End If
 Set objForm = GPApp.GetNextForm()
 FormIter = FormIter + 1
Loop While FormIter <= GPApp.CountForms()
objGPMapXML.SaveFile sGPMapXML
Set GPApp = Nothing
Set objForm = Nothing
Set objWindow  = Nothing
Set objWndField = Nothing
Set objGPMapXML = Nothing
Set objRoot = Nothing
Set objFormMapXML = Nothing
Set objWndMapXML = Nothing
Set objFldMapXML = Nothing

Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported
This work by Albert Gareev is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported.