UNO объекты в AlterOffice API являются модульными, каждый модуль обрабатывает определенный набор функций. Например, модуль com.sun.star.text предоставляет доступ к функциям, связанным с текстовыми документами. Ниже представлены некоторые объекты UNO, используемые для работы с текстовыми документами AText в AlterOffice API.
XMultiComponentFactory
XMultiComponentFactory - интерфейс, который предоставляет доступ к сервисам, реализованным в компонентах AlterOffice. Этот интерфейс используется для создания экземпляров других интерфейсов.
Пример использования XMultiComponentFactory:
// Получаем менеджер сервисов по контексту компонента
Reference< XMultiComponentFactory > xServiceManager =
xComponentContext->getServiceManager();
// Создаем объект UnoUrlResolver
Reference< XInterface > xInterface =
xServiceManager->createInstanceWithContext(
"com.sun.star.bridge.UnoUrlResolver", xComponentContext);
Методы интерфейса XMultiComponentFactory:
- createInstanceWithArgumentsAndContext(ServiceSpecifier, Arguments, Context) - создает экземпляр компонента, который поддерживает сервисы, указанные фабрикой, и инициализирует новый экземпляр с заданными аргументами и контекстом.
Параметры:
- string ServiceSpecifier - имя сервиса.
- sequence< any > Arguments - аргументы.
- com::sun::star::uno::XComponentContext Context - контекст, из которого экземпляр компонента получает значения развертывания.
Возвращаемое значение: com::sun::star::uno::XInterface
- createInstanceWithContext(aServiceSpecifier, Context) - создает экземпляр компонента, который поддерживает сервисы, указанные фабрикой.
Параметры:
- string aServiceSpecifier - имя сервиса.
- com::sun::star::uno::XComponentContext Context - контекст, из которого экземпляр компонента получает значения развертывания.
Возвращаемое значение: com::sun::star::uno::XInterface
- getAvailableServiceNames() - позволяет получить имена всех поддерживаемых сервисов.
Параметры:
-
Возвращаемое значение: sequence< string >
XMultiServiceFactory
XMultiServiceFactory позволяет создавать экземпляры объектов, используя их имя.
Пример использования
XMultiServiceFactory:
// Получаем ссылку на XMultiServiceFactory из XTextDocument
Reference<XMultiServiceFactory> xDocMSF(xDoc, UNO_QUERY_THROW);
// Создаем объект таблицы через XMultiServiceFactory
Reference<XTextTable> xTable(xDocMSF->createInstance("com.sun.star.text.TextTable"), UNO_QUERY_THROW);
Методы интерфейса XMultiServiceFactory:
- createInstance(aServiceSpecifier) - создает экземпляр, классифицированный по указанному имени.
Параметры:
- string aServiceSpecifier - классифицированное имя экземпляра.
Возвращаемое значение: com::sun::star::uno::XInterface
- createInstanceWithArguments(aServiceSpecifier, Arguments) - cоздает экземпляр, классифицированный по указанному имени, и передает аргументы этому экземпляру.
Параметры:
- string aServiceSpecifier - классифицированное имя экземпляра.
- sequence< any > Arguments - аргументы, переданные экземпляру.
Возвращаемое значение: com::sun::star::uno::XInterface
- getAvailableServiceNames() - позволяет получить имена всех поддерживаемых сервисов.
Параметры:
-
Возвращаемое значение: sequence< string >
XIndexAccess
Интерфейс XIndexAccess предоставляет доступ к элементам по индексу.
Пример использования XIndexAccess:
// Создаем объект интерфейса XTextTablesSupplier из xDoc интерфейса XTextDocument
Reference<XTextTablesSupplier> xTablesSupplier(xDoc, UNO_QUERY_THROW);
Reference<XIndexAccess> xIA(xTablesSupplier->getTextTables(), UNO_QUERY);
//Получаем объект таблицы с индексом 0
Reference<XTextTable>xTable(xIA->getByIndex(0), UNO_QUERY);
Методы интерфейса XIndexAccess:
- getByIndex(Index) - возвращает элемент с указанным индексом.
Параметры:
- long Index - позиция в массиве. Первый индекс равен 0.
Возвращаемое значение: Any
- getCount() - возвращает количество элементов.
Параметры:
-
Возвращаемое значение: long
XNameAccess
Интерфейс XNameAccess используется для доступа к объектам по имени.
Пример использования XNameAccess:
Reference<XNameAccess> xSheets(xDoc->getSheets(), UNO_QUERY);
Sequence<OUString> sheetNames = xSheets->getElementNames();
Методы интерфейса XNameAccess:
- getByName(aName) - возвращает объект с указанным именем.
Параметры:
- string aName - имя объекта.
- getElementNames() - возвращает последовательность всех имен элементов в контейнере. Порядок имен не определен.
Параметры:
-
Возвращаемое значение: sequence<string>
- hasByName(aName) - возвращает TRUE, если элемент с таким именем находится в контейнере, FALSE если элемента нет.
Параметры:
- string aName - имя объекта.
Возвращаемое значение: boolean
Использование UNO_QUERY для запроса интерфейсов
При создании объекта с использованием AlterOffice API необходимо получить ссылку на объект, реализующий нужный интерфейс. Для этого используется параметр UNO_QUERY, который позволяет получить объект, реализующий запрашиваемый интерфейс, на основе уже существующего объекта. В данном примере UNO_QUERY используется для получения объекта типа
XStorable.
Reference< XStorable > xStorable(xComponent, UNO_QUERY);
Возможные параметры:
- UNO_QUERY - это параметр, который используется для запроса интерфейса у объекта UNO. Данный параметр не выбрасывает исключение при неуспешном присваивании ссылки на запрашиваемый интерфейс. Можно проверить успешность запроса, вызвав метод is() для новой ссылки:
if (!xStorable.is())
{
fprintf(stderr, "getting XStorable interface failed!\n");
return 1;
}
- UNO_QUERY_THROW - используется для запроса интерфейса. Если запрашиваемый интерфейс недоступен, возникает исключение типа RuntimeException.
Исключение:
caught UNO exception: unsatisfied query for interface of type com.sun.star.frame.XStorable!
- UNO_SET_THROW - генерирует исключение в случае, если производится попытка присвоить пустой указатель.
Исключение:
caught UNO exception: invalid attempt to assign an empty interface of type com.sun.star.frame.XStorable!