cancel
Showing results for 
Search instead for 
Did you mean: 

Better way to extract all the details from SAP BO instead of calling each object with ID?

0 Kudos

My requirement is to extract all the metadata from SAP BO.

The process I followed is Get all universes, then get each universe with its details. Get all folders, then get each folder with its details. The process continues for documents, reports, report variables.

For example if we say we have 1000 objects (inclusion of universes, folders, documents, reports, variables), then we will have to make 1000 API requests to SAP BO to fetch the details. The number mentioned is just a minimum, this number can go upto multi-millions. In such a case we have to call SAP BO multi-million times to get the details. And this process is too slow and takes a lot of time to complete.

We use Java.

Is there any other better way to extract the data or any recommendations to use SAP BO APIs efficiently?

Any direction here would be helpful.

Accepted Solutions (0)

Answers (1)

Answers (1)

DellSC
Active Contributor

What do you mean by "API request"?

If you mean running a CMS query, you can pull all of the information you need about a set of IInfoObjects in a single query without having to query for the objects individually. For example, if you query for all of the SI_ID values for a given kind and then loop through that list to query for each object of that kind individually, that's going to take longer than if you just query for all the properties you need for the set of objects.

If you mean you have to parse the individual IInfoObjects after querying for them, then it's going to take however much time it takes. It helps to do this type of processing when there is little to no load on the system because it will run a little faster.

I have written a program using the Java SDK that does this type of thing and spits the data out to .csv files. It uses a .properties file where I can tell it which type(s) of object(s) to pull for a given run of the application. By limiting a given run to a specific type of object, it doesn't take too long to run most of the time - although I once ran it against a system that had @300K report instances and it took several hours to pull all of the instance information.

-Dell

0 Kudos

The API which I am referring to is REST API Web Intelligence

DellSC
Active Contributor
0 Kudos

The Java API is faster and has more functionality than the REST API for IInfoObjects of all sorts - it even includes ways to extract the security information for various objects. It's the easiest way to get data from the CMS database.

However, the REST API for Webi is what you need if you need to get information about the internals of a Webi report - what objects are used, what the SQL is, what the filters and parameter are, etc. For that, you do have to query one report at a time. It takes a while for this because the report is actually opened on the back-end of the REST call so that it can extract information that's stored only in the report - not in the CMS database.

If you're just trying to get metadata about the report and not the internal structure, you might be better using the BI Platform Java API.

I have an application that I've written for our clients that uses the Java API to get general info about universes and reports, the Java Semantic Layer API to get details about .unx universes, it shells out to a .NET app that uses the COM-based Designer SDK to get information about .unv universes, and finally it uses the REST Webi API to get information about the internals of all of the Webi reports and relate them to the universes they use. All of the data is then stored in a database so that reports can be run on it. Because of the unique challenges for getting all of this data from different types of objects, this was the only way to get everything that I needed.

-Dell