The ReportEngine.AfterGetFolders script is called after a collection of report folders the user has access to has been retrieved but before these folders are displayed in the Reports Explorer. This script allows you to modify this collection if, for example, you want to only display certain folders under certain conditions.

Parameters
A reference to the Stonefield Query Application object and a collection containing objects with information about the folders. These objects have a FolderName property containing the name of the folder.

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

Example
Here's an example that allows you to display the reports in only a single folder in the Reports Explorer. For example, an accounting application may have menu items that allow the user to see General Ledger Reports, Payroll Reports, Accounts Payable Reports, and so forth. When the user chooses the appropriate menu item, the application calls Stonefield Query, passing it the name of the folder to display as a parameter (the parameters passed to Stonefield Query are available in the Application object's Parameters collection). All other folders are removed from the in-memory collection (not permanently from the reports table).

Visual FoxPro

lparameters toApplication as SQApplication, ;
  toFolders as Collection
local lcFolder, lnI, loFolder
lcFolder = GetParameterValue('folder')
if not empty(lcFolder)
  for lnI = toFolders.Count to 1 step -1
    loFolder = toFolders.Item(lnI)
    if not loFolder.FolderName == lcFolder
      toFolders.Remove(lnI)
    endif
  next
endif

VBScript

function Main(Application, Folders)
dim Parameter, Folder
for I = 1 to Application.Parameters.Count
  set Parameter = Application.Parameters.Item(I)
  if Parameter.Name = "folder" then
    set Folder = Parameter.Value
  end if
next
if Folder <> " " then
  for I = Folders.Count to 1 step -1
    set Folder = Folders.Item(I)
    if Folder.FolderName <> Folder then
      Folders.Remove(lnI)
    end if
  next
end if
end function

JavaScript

function Main(Application, Folders) {
var I, Parameter, Folder ;
for (I = 1; I <= Application.Parameters.Count; I++) {
  Parameter = Application.Parameters.Item(I) ;
  if (Parameter.Name = 'folder') {
    Folder = Parameter.Value ;
  }
}
if (Folder <> ' ') {
  for (I = Folders.Count; I <= 1; I++) {
    Folder = Folders.Item(I) ;
    if (Folder.FolderName <> Folder) {
      Folders.Remove(lnI) ;
    }
  }
}
}

C#

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

public static void ReportEngine_AfterGetFolders(SFQApplication sfqApplication, 
  Folders folders)
{	
  string folderName = String.Empty;
  Parameter param = sfqApplication.Parameters.Item("folder");
  if(param != null)
  {
    folderName = (string)param.Value;
  }

  if(folderName != String.Empty)
  {
    for (int i = 0; i < folders.Count; i++) 
    {
      Folder folder = folders.Item(i);
      if (folder.FolderName.ToUpper() != folderName.ToUpper()) 
      {
        folders.RemoveItem(i);
      }
    }
  }
}

VB.NET

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

public shared function ReportEngine_AfterGetFolders(sfqApplication as SFQApplication,
  folders as Folders) as Boolean
  Dim folderName as string = String.Empty
  Dim param as Parameter = sfqApplication.Parameters.Item("folder")
  if Not param Is Nothing
    folderName = param.Value
  End If

  if folderName <> String.Empty
    for i as integer = 0 To folders.Count
      Dim folder as Folder = folders.Item(i)
      if folder.FolderName.ToUpper() <> folderName.ToUpper()
        folders.RemoveItem(i)
      End If
    Next
  End If
  Return True
End Function

See also

Scripts