Введение в объектную модель RDC

Оценить
(0 голоса)

Помимо того, что объект Report сам по себе имеет много свойств (таких, например, как свойство RecordSelectionFormula), он еще содержит множество объектов и коллекций объектов, которые находятся на более низких уровнях иерархии. Одной из доступных в объекте Report коллекций является коллекция FormulaFields. Эта коллекция содержит набор объектов FormulaFieldDef in it ion (по одному объекту для каждой определенной в отчете формулы). Каждый из этих объектов, в свою очередь, содержит все свойства для данной конкретной формулы, такие как имя формулы, текст формулы, тип возвращаемых ею данных и тому подобное.

При работе с коллекциями объектов ссылка на объекты осуществляется через указатели индексов. Все индексы в RDC имеют нумерацию, начиная с единицы. То есть первый член коллекции имеет номер 1, второй — 2 и так далее. В отличие от них, индексы в элементах управления ActiveX и других объектных моделях Visual Basic имеют нумерацию, начинающуюся с нуля. Обычно RDC нумерует члены коллекции в том порядке, в каком они были включены в отчет.

Так, например, чтобы напечатать текст формулы из первой формулы приложения Xtreme Orders, можно использовать следующий фрагмент кода в окне Immediate (Немедленное вычисление), когда сама программа находится в режиме останова:

? Report.FormulaFields(1).Text

Здесь производится переход по иерархии к свойству Text первого члена коллекции FormulaFieldDef initions (ссылка на которую выглядит как FormulaFields) объекта Report. Поскольку свойство Text является свойством для чтения-записи, вы можете не только извлечь содержимое формулы на данный момент, но и заменить его, присвоив свойству Text строковое значение, как показано ниже:

Report.FormulaFields(1).Text = "{Orders.Order Amount} * 1.1"

Поскольку RDC является тесно интегрированным компонентом СОМ, при использовании RDC в Visual Basic вы сможете насладиться преимуществами функции автоматического завершения кода (которая в документации Microsoft называется функцией IntelliSense). Как только вы начнете вводить в соответствующем окне VB код для объекта Report, на экране в отдельном окне автоматически появится список всех доступных для него свойств, методов и значений встроенных констант (рис. 25.13). Если вам доводилось работать с версией Visual Basic 5 или 6, эта функция наверняка вам уже знакома. Теперь вы сможете пользоваться ее преимуществами также и в RDC.

Рис. 25.13. Функция автоматического завершения кода в действии

Работа с индексами: использование имен вместо номеров

Компонент RDC позволяет использовать строковые индексы для ссылки на члены только некоторых коллекций, но не для всех. Так, например, в RDC содержимое формулы необходимо определять следующим образом:

Report.FormulaFields(1).Text = "{Orders.Order Amount} * 1.1"

В прежних способах интеграции или в Visual Studio .NET можно применять следующий вариант записи:

Report.Formulas("Order + Tax").Text = "{Orders.Order Amount} * 1.1"

Введение в объектную модель RDC

В некоторых случаях вам придется проделывать целые эксперименты, чтобы отыскать требуемый член коллекции.

Было бы неплохо, если бы вместо числового индекса для присвоения значения формуле можно было бы использовать следующий код:

If SetFormula("Order + Tax","{Orders.Order Amount} * 1.1") Then MsgBox "Formula Changed"

Else

MsgBox "Incorrect Formula Name Supplied"

End If

Давайте рассмотрим код следующей функции:

Public Function SetFormula(FormulaName As String,4_

FormulaText As String) As Boolean Dim intCounter As Integer

For intCounter = 1 To Report.FormulaFields.Count If Report.FormulaFields(intCounter).FormulaFieldName = FormulaName Then Report.FormulaFields(intCounter).Text = FormulaText

SetFormula = True

Exit Function

End If ’Report.FormulaFields(intCounter).Name = FormulaName Next intCounter SetFormula = False End Function

Если вы внимательно проанализируете этот код, то увидите, что для коллекции FormulaFields можно использовать циклический оператор For, который позволит организовать поиск формулы с таким же именем, как и в передаваемом аргументе FormulaName. После того как эта формула будет обнаружена, формуле будет присвоено значение переданного аргумента FormulaText. Если формула с таким именем не будет обнаружена, подпрограмма вернет значение False.

Если вы имеете дело с большим количеством формул, полями параметров, SQL-выражениями или другими объектами, обращаться к которым гораздо проще по именам, а не по индексу, используйте именно этот вариант, что позволит облегчить процесс написания кода.

Кроме этого, в различных коллекциях RDC (среди которых особый интерес представляют коллекции FormulaFieldDefinitions и ParameterField) существует еще один способ обращения к объектам по именам. Следующий фрагмент кода демонстрирует пример использования метода GetltemByName:

Dim FormulaField As CRAXDRT.FormulaFieldDefinition

Set FormulaField = Report.FormulaFields.GetltemByName("Order + Tax") FormulaField.Text = "{Orders.Order Amount} * 1.1"

В этом примере сначала объявляется новая переменная объекта, в которой будет храниться формула. Затем она передается существующей в отчете формуле посредством вызова метода GetltemByName коллекции FormulaFields, используя в качестве аргумента имя формулы. Этот метод возвращает объект поля формулы, с которым впоследствии можно будет работать, производя считывание или настройку свойств.

Обратите внимание, что в имени поля формулы или параметра, которое вы указываете в виде аргумента GetltemByName, не может содержаться знак @, ? или фигурные скобки. Имя должно соответствовать только лишь имени поля формулы или параметра, без каких-либо дополнительных знаков. Если вы укажете неправильное имя, RDC передаст Visual Basic перехватываемое сообщение об ошибке.

 

Предоставление удостоверения для подключения к базе данных
Предоставление данных удостоверения для подотчетов
Управление выборкой записей
Настройка формул
Передача значений полей параметров

Добавить комментарий


Защитный код
Обновить