Business Objects SDK for XIR2 を使用して Webi レポートからユニバース オブジェクトを一覧表示する方法は?
SDKなしで自動化する方法はありますか?
SDK を使用して、webi レポートとユニバース コレクションを反復処理できましたが、クエリ オブジェクトまたはレポート クエリを取得するネイティブな方法がわかりません。
Business Objects SDK for XIR2 を使用して Webi レポートからユニバース オブジェクトを一覧表示する方法は?
SDKなしで自動化する方法はありますか?
SDK を使用して、webi レポートとユニバース コレクションを反復処理できましたが、クエリ オブジェクトまたはレポート クエリを取得するネイティブな方法がわかりません。
BusinessObjects リポジトリ (データベース) には、複合テーブル列にブロブ化された複雑なデータが含まれています。
CMS を介したクエリによって復号化されたリポジトリ データ。つまり、直接接続/クエリすることはできません。つまり、ユニバースがオーバーレイされているため、クエリが直接実行されます。
ただし、BusinessObjects リポジトリは、「Query Builder」GUI (admin Launchpad <= XIR2.x またはインストール サーバー プログラム メニュー XI 3.x+ を介してアクセス - どちらにも URL があります) を介して簡単なクエリを送信するか、Enterprise SDK の /ウェブサービス。
返されるデータは InfoObject の形式です。InfoObject は、リポジトリに保持されているデータのプログラムによるオブジェクト指向表現です。InfoObjects には、クエリ結果のテーブル内のテーブルとして投影される 1 つ以上の関連オブジェクトが挿入されている場合がありますが、データ出力は MS Excel などのツールで操作して表形式に変換できます。
リポジトリ InfoObject をクエリするためのアクセス方法については、関連するフォーラムやブログで SAP 開発者が議論しています。詳細については、 http ://weblogs.sdn.sap.com/pub/wlg/13214 を参照することをお勧めします。
クエリ ビルダを使用すると、次のクエリは、ユニバースに関連付けられた各レポートの SI_ID 値を返します。
SELECT * FROM CI_APPOBJECTS WHERE SI_KIND='ユニバース'
クエリ ビルダーを使用すると、次のクエリは ID に基づいて WebI レポート名を返します。
SI_NAME,SI_DESCRIPTION, SI_ID,SI_AUTHOR,SI_PARENT_FOLDER,SI_UNIVERSE,SI_HAS_PROMPTS FROM CI_INFOOBJECTS WHERE SI_ID IN (xxx,xxx,xxx)
この 2 つを組み合わせてユニバースとレポートを表示する方法がわかりません。また、このデータを Business Objects 自体に WebI レポートとして取り込む方法もわかりません。
CMS からデータを取得するには、管理クエリ ツール (クエリの作成 -- 非常に初歩的) を使用する必要がありました。出力に表示されるものの 1 つは、データ接続と SQL ステートメントです。これは技術的にSDKを使用していません(つまり、InfoStoreへの組み込みアクセスを使用しています)が、探しているものを理解するためにSDKドキュメントが必要になるでしょう。それらの実装は非常に粗雑で、クエリが間違っていても、何が問題なのかわかりません。クエリが少し間違っていると、「レコードが見つかりません」というステートメントが返される場合があります。
返されるレコードはマルチレベルです...クエリのフィールドが別のテーブルを参照できる場合、サブクエリの結果を含む1つのフィールドを取得できます。これらのフィールドの一部には、サブクエリの結果が含まれる場合があります。理解するのは大変ですが、フィールドを理解できれば、そこから (手動で) データを抽出できます。
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 を使用してこれを行う方法を探しています。必要な API が含まれていません。