ReportEngine.SetReportProperties allows you to change the properties of a report when the user selects it in the Reports Explorer. Also, if the script returns False, Stonefield Query displays a warning message that the report is unavailable to the user and they cannot run it or edit it.

A reference to the Stonefield Query Application object and a reference to a Report object for the report.

Return Value
True if the user can access the report, False to flag the report as unavailable to this user.

Suppose you rename the STATE field in the CUSTOMERS table to REGION in version 2.0 of your application. As a result, any report designed in version 1.0 using that field won't work in 2.0 because the STATE field no longer exists. So, the following code renames the STATE field to REGION if it exists in the selected report. The code starts by putting all the existing fields into an array so we can put them back into the fields collection later if necessary. It then renames STATE to REGION if that field is found. If the name was changed, the code updates the collection since we can't change the name of objects in the collection because name is used as the object's key.

Visual FoxPro

lparameters toApplication as SQApplication, toReport as Report
local lnFields, ;
  laFields[1], ;
  lnI, ;
  loField, ;
lnFields = toReport.Fields.Count
dimension laFields[lnFields]
for lnI = 1 to lnFields
  loField = toReport.Fields.Item(lnI)
  laFields[lnI] = loField
  if loField.FieldName = 'Customers.State'
    loField.FieldName = 'Customers.Region'
    llNewName = .T.
if llNewName
  for lnI = 1 to lnFields
    loField = laFields[lnI]
return .T.


function Main(Application, Report)
dim Fields(1), Field
FieldCount = Report.Fields.Count
redim Fields(FieldCount)
NewName = False
for I = 1 to FieldCount
  set Field = Report.Fields.Item(I)
  set Fields(I) = Field
  if Field.FieldName = "Customers.State" then
    Field.FieldName = "Customers.Region"
    NewName = True
  end if
if NewName then
  for I = 1 to FieldCount
    set Field = Fields(I)
    Report.Fields.AddItem Field
end if
Main = True
end function


function Main(Application, Report) {
var FieldCount, Fields, NewName, I, Field ;
FieldCount = Report.Fields.Count ;
Fields = new Array(FieldCount) ;
NewName = false ;
for (I = 1; I <= FieldCount; I++) {
  Field = Report.Fields.Item(I) ;
  Fields[I] = Field ;
  if (Field.FieldName = "Customers.State") {
    Field.FieldName = "Customers.Region" ;
    NewName = true ;
if (NewName = true) {
  Report.Fields.Clear() ;
  for (I = 1; I <= FieldCount; I++) {
    Field = Fields[I] ;
    Report.Fields.AddItem(Field) ;
return true ;


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

public static void ReportEngine_SetReportProperties(SFQApplication sfqApplication, 
  Report report)
  bool newName = false;
  int fieldCount = report.Fields.Count;
  ReportField[] fields = new ReportField[fieldCount];

  for(int i = 0; i < fieldCount; i++)
    fields[i] = report.Fields[i];
    if(fields[i].FieldName == "Customers.State")
      fields[i].FieldName = "Customers.Region";
      newName = true;

  if (newName)
    for (int i = 0; i < fieldCount; i++)
  return true;


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

public shared function
  ReportEngine_SetReportProperties(sfqApplication as SFQApplication,
  report as Report) as Boolean
  Dim newName As Boolean = False
  Dim fieldCount As Integer = report.Fields.Count
  Dim fields(fieldCount) As ReportField
  For i As Integer = 0 To fieldCount - 1
    fields(i) = report.Fields(i)
    If fields(i).FieldName = "Customers.State" Then
      fields(i).FieldName = "Customers.Region"
      newName = True
    End If

  If newName Then
    For i As Integer = 0 To fieldCount - 1
  End If
  Return True
End Function

See also

Report Object | Scripts