Как составить список объектов юниверса BO XIR2, используемых в веб-отчете? - PullRequest
0 голосов
/ 14 апреля 2009

Как вывести список объектов юниверса из веб-отчета, используя SDK Business Objects для XIR2?
Есть ли автоматизированный способ сделать это без SDK?

С помощью SDK я мог перебирать веб-отчеты и коллекции юниверсов, но не вижу собственного способа получения ни объектов запроса, ни запроса отчета.

Ответы [ 4 ]

3 голосов
/ 29 июля 2010

Хранилище BusinessObjects (база данных) содержит сложные данные, разбитые на столбцы составной таблицы.

Данные репозитория расшифровываются путем запроса через CMS; это означает, что он не может быть подключен к / запрашиваться напрямую, т. е. наложение юниверса и, таким образом, запросы выполняются непосредственно с него.

Однако репозиторий BusinessObjects может быть подвергнут сомнению либо путем отправки простых запросов через графический интерфейс Query Builder (доступ к которому осуществляется через панель запуска администратора <= XIR2.x, либо через меню программы серверов установки XI 3.x + - оба имеют URL-адреса), либо через Корпоративные SDK / Веб-службы. </p>

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

Методы доступа для запросов к хранилищу Инфо-объекты обсуждаются разработчиками SAP на соответствующих форумах и в блогах. Я рекомендую прочитать: http://weblogs.sdn.sap.com/pub/wlg/13214 для получения дополнительной информации.

1 голос
/ 13 августа 2009

Используя Query Builder, следующий запрос вернет значения SI_ID для каждого отчета, связанного с юниверсом:

ВЫБРАТЬ * ОТ CI_APPOBJECTS ГДЕ SI_KIND = 'Вселенная'

Используя Query Builder, следующий запрос вернет имена отчетов WebI на основе идентификатора:

ВЫБРАТЬ SI_NAME, SI_DESCRIPTION, SI_ID, SI_AUTHOR, SI_PARENT_FOLDER, SI_UNIVERSE, SI_HAS_PROMPTS ОТ CI_INFOOBJECTS ГДЕ СИ_ИД В (ххх, ххх, ххх)

Я не вижу способа объединить их вместе, чтобы просто показывать юниверсы с отчетами. Кроме того, я не вижу способа передать эти данные в бизнес-объекты как отчет WebI.

1 голос
/ 19 июня 2009

Мне пришлось использовать инструменты административного запроса (Построить запрос - очень элементарно), чтобы получить данные из CMS. Одна из вещей, которые я вижу в выходных данных, это соединения данных и операторы SQL. Технически это не использует SDK (т. Е. Вы используете их встроенный доступ к InfoStores), но вам, вероятно, понадобится документация SDK, чтобы выяснить, что вы даже ищете. Их реализация довольно грубая, и если вы ошиблись в запросе, он не скажет вам, что с ним не так. Если вы немного ошиблись в запросе, он может вернуть оператор «no records found».

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

0 голосов
/ 29 октября 2013

Есть способ добиться этого с помощью BO 4.0 SDK:

// Get the list of webi documents
IInfoStore infoStore = (IInfoStore) enterpriseSession.getService("InfoStore");
String query = "select SI_NAME, SI_ID from CI_INFOOBJECTS "
      + "where SI_KIND = 'Webi' and SI_INSTANCE=0";
IInfoObjects infoObjects = (IInfoObjects) infoStore.query(query);

for (Object object : infoObjects) {
    IInfoObject infoObject = (IInfoObject) object;
    if (getInfoObjectPathAndTitle(infoObject).startsWith("/")) {
      System.out.println("REPORT: " + infoObject.getTitle());

      IDocumentInstance doc = documentInstanceManagementService
          .openDocument(context, infoObject.getID());

      List list = ReportDictionaryHelper
          .getDictionaryObjectsFlatList(context, doc);
      if (list.size() > 0) {
        System.out.println("OBJECTS:");
        for (DictionaryExpression expr:list) {
          System.out.println(expr.getName());
        }
      }

      List vars = ReportDictionaryHelper.getDocumentVariables(context,doc);
      if (vars.size() > 0) {
        System.out.println("VARIABLES:");
        for (Variable var:vars) {
          System.out.println(var.getName());
        }
      }

      documentInstanceManagementService.closeDocument(context, doc);
      System.out.println();
}

Но я ищу способ сделать это с помощью BO XI R2 SDK. Не содержит необходимых apis.

...