BusinessObjects Report Engine Java SDK is primarily used for Web Intelligence customization. This post describes how to start development of a command line tool. Such tools can make life of report developers easier. They can be used for:
- Documentation creation.
- Simple corrections and layout changes.
- Purging data from Webi documents.
- Automatic tests.
You will need:
- A bit of programming experience
- Eclipse IDE for Java Developers (http://www.eclipse.org/downloads/)
- BusinessObjects Enterprise XI 3.1 server (to connect to)
- BusinessObjects SDK libraries (see the list below)
New project in Eclipse
Download and extract Eclipse. Start it. Select default workspace folder (the new projects will be created in this folder). On the welcome page click “Go to Workbench”.
Create a new project:
1. File>New>Java Project
2. Specify project name (e.g. JavaTool).
3. Click Finish.
4. In the project folder on the disk (e.g. C:\Users\dbu\workspace\JavaTool\), create a folder lib and copy the jar files into it.
5. In Eclipse: Project>Properties>Java Build Path>Libraries, click “Add External JARs…”, OK.
6. Create package in the project. File>New>Package, type a name (e.g. org.bukhantsov.javatool), and click OK.
7. Create new class which will be starting point of the application. File>New>Class, type a name (e.g. Program), select option “public static void main” and click OK.
The generated class will be something like this:
package org.bukhantsov.javatool; public class Program { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub } }
Let’s start
The first program will print all variables defined in Web Intelligence documents from a BOE server folder. Let’s consider functional blocks of the application.
Connect to CMS
The first thing you have to do is to connect to the BOE server.
ISessionMgr sessionMgr = CrystalEnterprise.getSessionMgr(); IEnterpriseSession enterpriseSession = sessionMgr.logon("Administrator", "", "localhost", "secEnterprise");
Replace “localhost” with the name of your BOE server.
Get Webi documents from CMS
When you connected, you can get the objects corresponding to Webi documents from CMS.
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);
You can build and test the query in BusinessObjects Query Builder.
Get report engine proxy
To open Webi document, you need to get a proxy to Webi report engine web service.
ReportEngines reportEngines =
(ReportEngines) enterpriseSession.getService("ReportEngines");
ReportEngine wiRepEngine =
(ReportEngine) reportEngines.getService(
ReportEngines.ReportEngineType.WI_REPORT_ENGINE);
Process Webi documents from a folder
In a loop you can process all Webi documents from a folder
for (Object object : infoObjects) { IInfoObject infoObject = (IInfoObject) object; String path = getInfoObjectPath(infoObject); if (path.startsWith("/")) { DocumentInstance widoc = wiRepEngine.openDocument(infoObject.getID()); // process document widoc.closeDocument(); } }
The function getInfoObjectPath builds path to the Webi document. Parent of Webi document is folder, and parent of folder is folder. The root folder has id = 0.
public static String getInfoObjectPath(IInfoObject infoObject) throws SDKException { String path = ""; while (infoObject.getParentID() != 0) { infoObject = infoObject.getParent(); path = "/" + infoObject.getTitle() + path; } return path; }
Print Webi document variables
ReportDictionary dic = widoc.getDictionary(); VariableExpression[] variables = dic.getVariables(); for (VariableExpression e : variables) { String name = e.getFormulaLanguageID(); String expression = e.getFormula().getValue(); System.out.println(" " + name + " " + expression); }
Error handling
An important part of each program is error handling.
public static void main(String[] args) { IEnterpriseSession enterpriseSession = null; ReportEngines reportEngines = null; try { // * connect to CMS // * get report engine proxy // * get Webi documents from CMS // * process the documents } catch (SDKException ex) { ex.printStackTrace(); } finally { if (reportEngines != null) reportEngines.close(); if (enterpriseSession != null) enterpriseSession.logoff(); } }
Put all together
The complete code can be downloaded from here (however without libs). You can import it from File menu: File > Import… > Existing Project into Workspace.
package org.bukhantsov.javatool; import com.businessobjects.rebean.wi.DocumentInstance; import com.businessobjects.rebean.wi.ReportDictionary; import com.businessobjects.rebean.wi.ReportEngine; import com.businessobjects.rebean.wi.ReportEngines; import com.businessobjects.rebean.wi.VariableExpression; import com.crystaldecisions.sdk.exception.SDKException; import com.crystaldecisions.sdk.framework.CrystalEnterprise; import com.crystaldecisions.sdk.framework.IEnterpriseSession; import com.crystaldecisions.sdk.framework.ISessionMgr; import com.crystaldecisions.sdk.occa.infostore.IInfoObject; import com.crystaldecisions.sdk.occa.infostore.IInfoObjects; import com.crystaldecisions.sdk.occa.infostore.IInfoStore; public class Program { public static void main(String[] args) { IEnterpriseSession enterpriseSession = null; ReportEngines reportEngines = null; try { System.out.println("Connecting..."); ISessionMgr sessionMgr = CrystalEnterprise.getSessionMgr(); enterpriseSession = sessionMgr.logon("Administrator", "", "localhost", "secEnterprise"); reportEngines = (ReportEngines) enterpriseSession .getService("ReportEngines"); ReportEngine wiRepEngine = (ReportEngine) reportEngines .getService(ReportEngines.ReportEngineType.WI_REPORT_ENGINE); 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; String path = getInfoObjectPath(infoObject); if (path.startsWith("/")) { DocumentInstance widoc = wiRepEngine.openDocument(infoObject.getID()); String doc = infoObject.getTitle(); System.out.println(path + "/" + doc); printDocumentVariables(widoc); widoc.closeDocument(); } } } catch (SDKException ex) { ex.printStackTrace(); } finally { if (reportEngines != null) reportEngines.close(); if (enterpriseSession != null) enterpriseSession.logoff(); } System.out.println("Finished!"); } public static void printDocumentVariables(DocumentInstance widoc ) { ReportDictionary dic = widoc.getDictionary(); VariableExpression[] variables = dic.getVariables(); for (VariableExpression e : variables) { String name = e.getFormulaLanguageID(); String expression = e.getFormula().getValue(); System.out.println(" " + name + " " + expression); } } public static String getInfoObjectPath(IInfoObject infoObject) throws SDKException { String path = ""; while (infoObject.getParentID() != 0) { infoObject = infoObject.getParent(); path = "/" + infoObject.getTitle() + path; } return path; } }
Compile and run
You can run the program Run>Run.
To build executable JAR: go File>Export, select Java>Runnable JAR file. Select launch configuration (you will probably have the only one), select destination, select “Package required libraries into generated JAR”, and click Finish.
You can run the program using the following command:
java -jar javatool.jar
Final notes
Before running your tool on a bunch of reports it should be carefully tested. Especially if you do modifications.
The purpose of the code was to demonstrate how to access report engine. It does not demonstrate the best programming practices.
Java SDK Libraries
The Java SDK libraries can be found in the installation folder with BusinessObjects client tools or on the server.
C:\Program Files (x86)\Business Objects\common\4.0\java\lib
Required libraries:
boconfig.jar cecore.jar celib.jar cesdk.jar cesession.jar corbaidl.jar ebus405.jar jtools.jar logging.jar rebean.common.jar rebean.jar rebean.wi.jar wilog.jar xpp3.jar xpp3_min.jar SL_plugins.jar
Thanks for this post and clearly explaining the steps to access BO using SDK.
Excellent, keep up the good work.
LikeLike
Hi,
Could you please explain the same for BO 4.0 environment. I am currently using fp3 and i am unable to run any code due to some jar inclusions. Not sure which jar is creating an issue. I also heard that there are many differences between 3.1 and 4.0 in SDK perspective.
Regards,
Raghu
LikeLike
Hi Raghu
First, the functionality of Java Report Engine SDK was significantly cut in BO 4.0. The described code will not work.
To fix the problem with jars include all libraries from the folder: [SAP BusinessObjects]\SAP BusinessObjects Enterprise XI 4.0\java\lib
/Dmytro
LikeLike
Hi Dmytro,
So is there any chance to get variables and objects being used in any report in BO 4.0 environment. I have added all the libraries from \SAP BusinessObjects Enterprise XI 4.0\java\lib which is resulting in my eclipse being not working for small code also. Once i remove the xternal jars. again my eclipse is working fine..
Could you please specify any particular jar to be added or removed
Regards,
Raghu
LikeLike
Hi Radghu
It is enough to add the libraries from the lib folder, the subfolders of the lib folder are not required. I found some list of required libraries on the web (which is subset of the jars from lib folder), but that did not work for me, so I usually include all libraries. When an executable jar is built, only referenced libraries are packed.
There is no way to get variables and objects using the public SDK in BO 4.0 at the moment. But of course it is possible! BO is working somehow using these libraries! 🙂 The perfect documentation of the existing BO libraries is Webi code. You can investigate the code and build your own code.
I am going to dig into that as soon as I have some free time 🙂
/Dmytro
LikeLike
Thanks Dmytro. That would be really great and would be very helpful for all.
Regards,
Raghu
LikeLike
https://bukhantsov.org/2012/11/java-code-to-list-the-objects-used-in-a-webi-4-0-document/
LikeLike
This is a wonderful start for starters.
Can you please provide the code to schedule a webi report that has prompts and save the instance on to shared location, provided one has access to that location.
Thanks very much for considering my request.
LikeLike
Have you tried this http://scn.sap.com/docs/DOC-6284?
LikeLike
Hi dmytro,
I spent time on that and tried to convert the code but was not able to incorporate that into the code on this page.
Essentially, I am trying to enhance your code by adding a subroutine that will execute a webi report that has prompts and save the instance on to shared location.
Regards.
LikeLike
Do you want to run a report and export the result in a format (Excel, PDF) to a folder on a disk?
Or, do you want to schedule the report to run immediately? (but it is not quite clear for me what do you mean by “save to a location”)
Thanks
LikeLike
Hi Dmytro,
I somehow do not get notified of your response – sorry about the late reply therefore.
I am trying to export the result in a format (Excel, PDF) to a folder on a disk.
Will really appreciate the code.
Best Regards.
LikeLike
Hi BlackBird,
Are you able to save an instance? I am trying to do something similar. Please let me know your thoughts and experience on that!
Regards,
Rakesh.
LikeLike
Hi, Can you please tel me how to view the data from a report ie I want to view the entire report
LikeLike
HI dmytro,
Great work. Thank you very much
LikeLike
Hi!
nice Information thx. I tried to use this whole Java Programm but now i get some kind of errors…
Exception in thread “main” java.lang.NoClassDefFoundError: org/xmlpull/v1/XmlPullParserException
at com.businessobjects.rebean.internal.xml.XmlUtilities.toString(Unknown Source)
at com.businessobjects.rebean.wi.occa.OccaDocumentComAdapter.openDocument(Unknown Source)
at com.businessobjects.rebean.occa.OccaReportEngineComAdapter.openDocument(Unknown Source)
at com.businessobjects.rebean.wi.ReportEngineImpl.openDocument(Unknown Source)
at com.businessobjects.rebean.wi.occa.WebiReportEngine.openDocument(Unknown Source)
at org.chkGroupNames.javatool.Program.main(Program.java:55)
I also cannot find the 2 .jar files…
xpp3.jar
xpp3_min.jar
Is the error caused becaus i have not the 2 jar files?
thx tom
LikeLike
Yes, the issue is caused by the missing files, the list is the minimal set of necessary files.
xpp3.jar and xpp3_min.jar are in the folder
[Business Objects]\common\4.0\java\lib\external
LikeLike
We are building BPM based web application in JSF/PrimeFaces and we need to add this war file within SAP BO, either as a Tab or as a link, such that our application gets embedded inside Webi dashboard. Can you pls guide us on the required steps.
LikeLike
You can add Web Page Analytic to your Infoview dashboard and specify URL to your application.
LikeLike
HeyI am getting the problem in to the SDKexception like
Multiple annotations found at this line:
– Syntax error on token “(“, ; expected
– Syntax error, insert “;” to complete
LocalVariableDeclarationStatement
LikeLike
Sachin, Could you post the complete error? Thx
LikeLike
HI Expert,
Is there a SDK (JAVA) code to convert the existing WEBI report pointing to from UNV to UNX.
This could be a great help. For now no one has an answer for this thought you are an expert in SDK and can find a solution for this
Thanks
Balaji Karunakaran
LikeLike
I am still working on this. I do have some code however it can currently handle only simple UNV-UNX remapping.
LikeLike
Can you please share/post the code for update the WebI report to use UNX?
LikeLike
I agree… That would be GREAT!!!! Thanks for sharing! I really appreciate it
LikeLike
Hi,
I have few deski reports developed in BO 6.5 with macros(VB scripts). I have to convert these into webi reports in BO XI3.1 using Java SDK. I believw we should link .jar file to BO report, but not sure hoe to do it. I am pretty new to this arena. Can you please provide some generic steps to start up with a simple report using Java SDK.
Thanks in Advance.
LikeLike
https://bukhantsov.org/2013/04/how-to-create-a-webi-document-using-java-report-engine-sdk/
LikeLike
i have to create a crystal report and then upload the report in to SAP bussiness object BI platform 4 and from java i want to pass dsn of sql server and parameter and report type(pdf/excel) what jar i will use and what code i’ll write in java please advice.
Thanks in advance
LikeLike
I assume CrystalReportsSDK.jar but since it is 4.0 I would recommend to include all jar from the folder lib (without subfolders)
Here is the 4.0 SDK docs: http://scn.sap.com/docs/DOC-27465. The relevant is Report Application Server Java SDK: Using the SDK > Data source connectivity.
LikeLike
Hi,
I have two query and I want the second query to be execute depends on the result of first query like .
first query
result = “Select * from abc” ;
second query
=”select * from ‘+result+'”;
how this would be possible using
IInfoObjects infoObjects = (IInfoObjects)iStore.query(infoQuery);
because here when I execute the first query I get the infoObjects null , I want the value of first query and giving to second query ?
Please let me know if still find any confusion
LikeLike
Hi,
First i wanna thank you for sharing this turotial.I tried to compile it but it gives me the following error : java.lang.SecurityException: Impossible de trouver une configuration de connexion.
Do you know why?
LikeLike
Hello,
In fact i managed to solve the problem: you just need to add this to your code
System.setProperty(“java.security.auth.login.config”, “C:/WINNT/bscLogin.conf”);
System.setProperty(“java.security.krb5.conf”, “C:/WINNT/krb5.ini”);
where C:/WINNT/bscLogin.conf and excel are files that you create :
http://devlibrary.businessobjects.com/businessobjectsxir2/en/en/BOE_SDK/boesdk_java_dg_doc/doc/boesdk_java_dg/SDKFundamentals78.html
hope this will help.
LikeLike
i cannot get my program to connect, it gives me the below error even if i used administrator credentials i followed your program only please help:
com.crystaldecisions.sdk.exception.SDKException$SecurityError: Active Directory Authentication failed to log you on. Please contact your system administrator to make sure you are a member of a valid mapped group and try again. If you are not a member of the default domain, enter your user name as UserName@DNS_DomainName, and then try again. (FWM 00006)
cause:javax.security.auth.login.LoginException: No LoginModules configured for com.businessobjects.security.jgss.initiate
detail:Active Directory Authentication failed to log you on. Please contact your system administrator to make sure you are a member of a valid mapped group and try again. If you are not a member of the default domain, enter your user name as UserName@DNS_DomainName, and then try again. (FWM 00006) No LoginModules configured for com.businessobjects.security.jgss.initiate
at com.crystaldecisions.sdk.plugin.authentication.secwinad.internal.SecWinADError.ThrowException(SecWinADError.java:46)
at com.crystaldecisions.sdk.plugin.authentication.secwinad.internal.SecWinADAuthentication.startKerbLogin(SecWinADAuthentication.java:283)
at com.crystaldecisions.sdk.plugin.authentication.secwinad.internal.SecWinADAuthentication.startLogin(SecWinADAuthentication.java:152)
at com.crystaldecisions.sdk.occa.security.internal.LogonService.doLogon(LogonService.java:337)
at com.crystaldecisions.sdk.occa.security.internal.LogonService.doUserLogon(LogonService.java:684)
at com.crystaldecisions.sdk.occa.security.internal.LogonService.userLogon(LogonService.java:295)
at com.crystaldecisions.sdk.occa.security.internal.SecurityMgr.userLogon(SecurityMgr.java:162)
at com.crystaldecisions.sdk.framework.internal.SessionMgr.logon(SessionMgr.java:425)
at texas.Texas.main(Texas.java:17)
Caused by: javax.security.auth.login.LoginException: No LoginModules configured for com.businessobjects.security.jgss.initiate
at javax.security.auth.login.LoginContext.init(LoginContext.java:273)
at javax.security.auth.login.LoginContext.(LoginContext.java:418)
at com.crystaldecisions.sdk.plugin.authentication.secwinad.internal.SecWinADAuthentication.startKerbLogin(SecWinADAuthentication.java:280)
… 7 more
LikeLike
Hi,
Thanks for great work. I want to add additional query filter( condition) to specific report.
How should i do this?
Which class should i use to achieve this task?
Sorry for being new to BO.
Thanks in advance…
LikeLike
See an example here
https://bukhantsov.org/2013/04/how-to-create-a-webi-document-using-java-report-engine-sdk/ (Build the query)
LikeLike
Is there any method/api with which one call view BO webi report schedule page and set scheduling parameters? I checked with openDoc url , it applies only to view and refresh webi report page.
Can you please help on this issue? I searched a lot on internet however did not find anything.
LikeLike
http://scn.sap.com/docs/DOC-6284 does this help?
LikeLike
Thanks dmytro for your response. I had checked this link however, it gives an example where in , it uses BO java sdk api to schedule the report by passing parameters to BO webi report. However in this case it will not open/launch BO webi schedule page , to set scheduling parameters.
My requirement is , the way how opendoc helps to show BO webi report UI using opendoc url , like that i want an approach with which java program should open BO webi report page for scheduling(a page where it gives option for schedule, email ..etc in left side pane of BO webi report). Is there any way to do that?
LikeLike
Hi dmytro
Could you please give me few pointers on the issue described above?
LikeLike
So the scenario is: users enters the url in browser and it opens the page with scheduling parameters. I.e. you want the equivalent of the following GUI actions: InfoView > Document List > Select document > ‘Schedule’ from popup menu. After this, the report is scheduled by the user from the GUI. The goal is to implement the web application behind that url. Right? If so, I do not know how to implement this. It is probably possible but not that straightforward and with a little bit of hacking of InfoView.
If you want a custom web application that allows users scheduling reports – this is more straightforward, but additionally to the SAP code that actually schedules, you will have to develop GUI with all required fields.
LikeLike
Thanks dmytro for your inputs.Yes, that is the exact requirement I want to implement in java. After R&D and your inputs , it seems for this requirement , it would be better approach to schedule the reports from java using BO java sdk apis rather than tweaking InfoView object.
I will go ahead with java api to achieve scheduling of the reports. Thanks a lot for your inputs.
LikeLike
Hi dmytro,
After this hurdle, now trying to get values from the prompts of BO reports e.g. If prompt1=list of countries and prompt2=list of states. In java, once I get list of value(LOV) of prompt1 and if I select specific country then in that case I want to get values of prompt2 as a list of states for selected country of prompt1. Is it possible to do that in java?
I checked the API reference and came across QuerySpecification and Filer classes where we can set the value for a prompt. I am not sure if this is the right approach for above requirement. i.e. Using java api
1. First get LOV for prompt1 ie. list of countries
2. put a filter on selected country value for prompt2 and retrieve LOV of prompt2 i.e. list of states
Would be correct approach?
LikeLike
Hi dmytro,
Do you have any pointers on this?
LikeLike
There is no functionality for linked prompts, i.e. all prompts and their lists of values in Webi document are independent. I assume it is possible to hack this on the universe level somehow but I do not think this be reliable.
There are cascading prompts in Webi, see http://blog.davidg.com.au/2011/05/cascading-prompts.html. It is a single prompt but it allows to select a leaf value from a hierarchy. I have not tried to work with these from SDK. It seems it is not a part of public SDK, see http://scn.sap.com/thread/941998.
If you are building own GUI and dynamic loading of states corresponding to country is not important, you can probably create a list of values for the prompt that contain two fields: Country and State, and imitate cascading prompts from your GUI.
LikeLike
Hi dmytro,
Thank you for your inputs , it will help a lot to go ahead on this issue. Also, your tutorial-example on getting report drill filter is very informative and helpful.
Thanks!
LikeLike
Hi,
we have requirment to extract below information using sdk, could you pls help?
1.how many reports running at the moment within that how many deski and webi reports
2.those running reports, how long time it is in running state
3.how many reports are in pending state based on start time (within that how many reports pending for events) count of webi and deski
we are using BOXI3.1 SP5 /oracle 11 in our infrastructre
thanks
Arasu
LikeLike
Hi Arasu
BOE Auditing can provide you a lot of information about completed events. You may want to consider it. But I do not know if it can provide information about reports that are being run interactively from InfoView.
LikeLike
Hello,
I am working on a dashboard connected to webi through QaaWS by Webservice URL.
At times I receive an error – com.businessobjects.rebean.wi.services.nooutputexception.
Not sure this is an error or warning. Any suggestion on how to navigate from this?
Appreciate your help.
Arun
LikeLike
This is about BI 4.0, right?
I think the best would be to raise a support case with SAP since this problem has never been reported on the web or SAP support portal.
I am not sure if it helps you: The error is thrown if the response recieved from server after running a report is invalid or empty (at com.businessobjects.rebean.wi.impl.services.ReportEngineOutputServiceImpl.internalGetPages(..))
You might want to try to enable tracing on Web Intelligence Processing server and check the log for details about what is happening on the server when the error occurs.
LikeLike
Hi Dmytro,
Thanks for the detailed post. It helped me understand many things. We are converting from XI R2 to XI R4. Our application is a centralized reporting application and does all kind of crazy things. The code was written back in 1999 and many things changed. Currently, we are facing many issue with the way API used to work and how it is now with R4.
One of them is below. Am I doing anything wrong?
LineObject newLine = new LineObject();
newLine.setTop(topOffset);
newLine.setBottom(topOffset);
newLine.setLeft(leftOffset);
newLine.setRight(leftOffset + width);
newLine.setLineStyle(lineStyle);
newLine.setLineThickness(thickness);
// newLine.setWidth(width);
newLine.setEndSectionName(section.getName());
newLine.setEnableExtendToBottomOfSection(moveToBottom);
clientDoc.getReportDefController().getReportObjectController().add((IReportObject) newLine, section, -1);
return newLine;
This is how a line gets addedd to out reports. Now, in XI R4, this does not work.
clientDoc.getReportDefController().getReportObjectController().add((IReportObject) newLine, section, -1);
This line throws a NullPOinterException.
java.lang.NullPointerException
at com.crystaldecisions.sdk.occa.report.application.ReportObjectController.validateLineObject(ReportObjectController.java:4453)
at com.crystaldecisions.sdk.occa.report.application.ReportObjectController.validateLineObject(ReportObjectController.java:4470)
at com.crystaldecisions.sdk.occa.report.application.ReportObjectController.validateReportObject(ReportObjectController.java:6031)
at com.crystaldecisions.sdk.occa.report.application.ReportObjectController.validateAddReportObject(ReportObjectController.java:3542)
at com.crystaldecisions.sdk.occa.report.application.ReportObjectController.add(ReportObjectController.java:567)
Thanks !!!
LikeLike
It is RAS. I have never worked with it so I will not be able to help.. sorry
LikeLike
That was a really great post and thanks for providing the detailed informtaion on SDK!!!!
However when i tried to implement the above code i’m getting the following error. Could you please help what am i missing here. Thanks!
Unable to initialize the Core Framework. You can find bellow:
A) Resolution suggestions
B) Discovery Mechanism Report
C) Exception Stacktrace
A) Resolution suggestions
Configuration
=> Make sure your configuration is ok
B) Discovery Mechanism Report
MANIFEST found: jar:file:/C:/Documents%20and%20Settings/dkumar/workspace/Java%20tool/lib/boconfig.jar!/META-INF/MANIFEST.MF
MANIFEST found: jar:file:/C:/Documents%20and%20Settings/dkumar/workspace/Java%20tool/lib/cecore.jar!/META-INF/MANIFEST.MF
MANIFEST found: jar:file:/C:/Documents%20and%20Settings/dkumar/workspace/Java%20tool/lib/celib.jar!/META-INF/MANIFEST.MF
MANIFEST found: jar:file:/C:/Documents%20and%20Settings/dkumar/workspace/Java%20tool/lib/cryptojFIPS.jar!/META-INF/MANIFEST.MF
LikeLike
so what was the error message? “Unable to initialize the Core Framework”?
LikeLike
Yes. “Unable to initialize the Core Framework” was the error message that i got. And thanks for getting back to me so quickly. Appreciate it.
LikeLike
Digged into the code little bit and found out below is the code that is causing the error for me. Wondering am i missing any jar files?
ReportEngine wiRepEngine =
(ReportEngine) reportEngines.getService(
ReportEngines.ReportEngineType.WI_REPORT_ENGINE);
LikeLike
That is a strange error message. I have never seen such before. This does not seem to be BO message. Are you trying to run the code from the post or you are doing something else?
There is a list of necessary jars in the end of the post, if you are using BO XI 3.1.
LikeLike
Hi Dmytro,
I installed eclipse, got java to work. I’ve imported your javatools and set the jar files in the buildpath. I don’t know java and only know some basics of the eclipse editor..
I get the error “Could not find the main class” when I try to run the program.
However, the run configuration Main class is set as “org.bukhantsov.javatool.Program”
Hope you can point me to a solution?
LikeLike
Try to build the program gradually. Start from “Hello World” program, create new project, add new class “Program” with main function specifying package org.bukhantsov.javatool. Try to run it. If works, replace the entire program with the program from the post, add jars. Make sure that there is no errors. Try to run again.
LikeLike
Thanks for your time looking into my post! Ok I’m getting somewhere now, but get an error related to BO itself:
I have minimalized the code to the below and started from a new program. it runs but throws the error:
com.crystaldecisions.sdk.exception.SDKException$SecurityError: Active Directory Authentication failed to log you on.
(seems to be similar to what Pratik above is experiencing)
I know that the provided credential are ok, since I’m able to connect via VBA and .NET using the same credentials.
public class Program {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
System.out.println(“Connecting…”);
ISessionMgr sessionMgr;
sessionMgr = CrystalEnterprise.getSessionMgr();
IEnterpriseSession enterpriseSession = sessionMgr.logon(“xxxx”, “xxx”, “xxxx”, “secWinAD”);
System.out.println(“Done.”);
} catch (SDKException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
LikeLike
Well, I am aware about this issue with secWinAD but I do not know how to solve it for command line tool. The workaround is to use secEnterprise.
LikeLike
thanks for confirming that it is indeed an issue. I’ve been searching a bit via google but all I can find is the a Kerberos config file is needed.. but I don’t know anything about it.
I’ll try to see if I also can get an Enterprise userid/pw.
LikeLike
Yes. I followed your procedures exactly and i was able to successfully run the code till reportEngines = (ReportEngines) enterpriseSession
.getService(“ReportEngines”);
But when it steps into the next code which is ReportEngine wiRepEngine =
(ReportEngine) reportEngines.getService(
ReportEngines.ReportEngineType.WI_REPORT_ENGINE);
i got the above mentioned error 😦
LikeLike
And to add on to this i’m using BOXI 4.0.
LikeLike
It might be missing JAR if you are using 4.0
Try adding all JARs from folder …\SAP BusinessObjects Enterprise XI 4.0\java\lib (but without subfolders)
LikeLike
Thanks Dmytro!!! Yes it was because of the misssing jar files,i included all the jar files and the issue is fixed now…
And do you know how can i get the list of objects/varibales used in the report if i’m using BOXI 4.0 because ReportDictionary class is not supported in the BOXI 4.0 version. Do you know is there any equivalent function similar to that?
LikeLike
Well there is no such functionality yet. Expected in 4.1. Here is a post about objects/variables https://bukhantsov.org/2012/11/java-code-to-list-the-objects-used-in-a-webi-4-0-document/ but it is mostly a hack.
LikeLike
That’s reallyyyyyy a useful post….Thanks much Dmytro! i could find all the jars as you mentioned in the https://bukhantsov.org/2012/11/java-code-to-list-the-objects-used-in-a-webi-4-0-document/ except this one import com.businessobjects.adv_ivcdzview.Utils in my system;
Is there any other directory that can give me this jar file?
LikeLike
As mentioned on the post, you need to add C:\Program Files (x86)\SAP BusinessObjects\Tomcat6\webapps\BOE\WEB-INF\eclipse\plugins\webpath.AnalyticalReporting\web\WEB-INF\lib\adv_ivcdzview.jar
It should be copied from the BO server.
LikeLike
oh…no…i’m looking into my directory…well let me grab the files from there…..
LikeLike
First of all thanks for patiently answering my questions….And i dont find such directory in my system…all i’m finding is C:\Program Files\SAP BusinessObjects\SAP BusinessObjects Enterprise XI 4.0\warfiles\webapps\BOE\WEB-INF\eclipse\plugins… and after the plugins directory i dont see any other directory like “webpath.AnalyticalReporting\web\WEB-INF\lib\” as you mentioned
LikeLike
You are looking on the server, right?
Do you have Tomcat folder?
LikeLike
oh…no…i’m looking into my directory…well let me grab the files from there…..
LikeLike
I’m almost there to get the list of objects…. But i’m getting the error “Type mismatch: cannot convert from element type object to Dictionary expression” in the following code.
for (DictionaryExpression expr:list) {
System.out.println(expr.getName());
}
Could you help me on this???
LikeLike
No worries.. Found it out added the below line and it is working perfectly. List list = new ArrayList();
Thank you so much Dmytro! This is really a great blog!!!
LikeLike
Hello Dmytro,
Lots of good SDK related information on your site. It is very informative and great deal of work.
I am trying to find out if there is a way in SDK to build a wrapper on @Prompt function to pass it a DYNAMIC default value.
For ex in the @Prompt statement below I want to pass Default Option as sysdate which it doesnt allow today. Thinking if it can be achieved using java wrapper on top of @PROMPT universe function.
@Prompt(‘Enter value(s) for Something:’,’A’,’Class\Something’,Multi,Free,Persistent,{‘Default Option’},User:0)
LikeLike
I have never heard about java wrappers for BO functions. I do not think this is possible.
You may find this interesting:
https://bukhantsov.org/2012/02/calculated-default-value-for-a-prompt/
LikeLike
Thank you Dmytro
Yes it is good way to handle the dynamic default prompt.
Regards
Ash
LikeLike
Hello Dymtro,
DO you know if I can get the list of all the reports where sql has been overridden. Probably using query builder or sdk. I tried looking at query builder tables but could find any such flag. I think may have to write sdk macro or jsp. Please let me know what are your thoughts.
Thank you
Ash
LikeLike
I have a requirement to fetch all information related to crystal reports on server.(db, user info to be specific.)
I have read through your wonderful blog. but got stuck with calling crystal report API.. getting the following error..could you please help me out
error “Exception in thread “main” com.businessobjects.rebean.wi.ServerException: An internal error occured while calling ‘openDocument’ API. (Error: ERR_WIS_30270)
at com.businessobjects.rebean.wi.occa.OccaDocumentComAdapter.checkOpenDocError(Unknown Source)
at com.businessobjects.rebean.wi.occa.OccaDocumentComAdapter.openDocument(Unknown Source)
at com.businessobjects.rebean.occa.OccaReportEngineComAdapter.openDocument(Unknown Source)
at com.businessobjects.rebean.wi.ReportEngineImpl.openDocument(Unknown Source)
at com.businessobjects.rebean.wi.occa.WebiReportEngine.openDocument(Unknown Source)
at SandBoxinfoPkg.SandBoxClass.main(SandBoxClass.java:42)
”
can you email or call 918-841-6858
LikeLike
I assume the problem is that you try to open CrystalReports document using Web Intelligence engine. You should use another SDK for it.
http://help.sap.com/javadocs/boe/xi/ras/en/
I do not think I have an example on my blog but you can find them on the web.
LikeLike
Hi Dmytro,
We have a requirement to develop a report with dynamic tabs in Web Intelligence4.0. Could you please advise with work around for this? I think there is some limitation with WEBI for this . So do you have any SDK to create new tabs for the report based on the field values selected by the user in report prompt?
For example, for N number of Customer we need to create each tab for one customer.
Environment: SAP BI 4.0 SP5.
Thanks in advance for your help.
Regards
Jabir
LikeLike
Currently, 4.0 SDK does not allow to do any modification of reports with SDK.
“Tab” is “Report” in BO terms. The method for adding it is not functional as well as all other methods related to editing
http://help.sap.com/javadocs/bip/40/re/en/com/businessobjects/rebean/wi/DocumentInstance.html#createReport(java.lang.String)
Hopefully we will get API for Webi editing in 4.1.
There are two nice standard features that may work as workaround: the Navigation Map (in view mode) and input controls.
LikeLike
Hi Dmytro,
We are on BO 4. Ofcourse, as you mentioned, this above code did not work. I get the following error(below). I copied all the jar files (entire lib folder). Still it gives me this error – any help? thanks – Chai
com.crystaldecisions.sdk.exception.SDKException$UnsupportedEnterpriseVersion: SDK Version 1400 does not support Crystal Enterprise version 1250
at com.crystaldecisions.sdk.occa.security.internal.LogonService.checkVersionCompatibility(LogonService.java:724)
at com.crystaldecisions.sdk.occa.security.internal.LogonService.doLogon(LogonService.java:1043)
at com.crystaldecisions.sdk.occa.security.internal.LogonService.doUserLogon(LogonService.java:860)
at com.crystaldecisions.sdk.occa.security.internal.LogonService.userLogon(LogonService.java:208)
at com.crystaldecisions.sdk.occa.security.internal.SecurityMgr.userLogon(SecurityMgr.java:203)
at com.crystaldecisions.sdk.framework.internal.SessionMgr.logon_aroundBody0(SessionMgr.java:457)
at com.crystaldecisions.sdk.framework.internal.SessionMgr.logon_aroundBody1$advice(SessionMgr.java:512)
at com.crystaldecisions.sdk.framework.internal.SessionMgr.logon(SessionMgr.java:1)
at Program.main(Program.java:22)
LikeLike
Never mind..this is resolved. I had my login credentials incorrect
LikeLike
Hi,
I’m a newbie in BO and would like to know how to create dashboards in BO using Java SDK.
Any pointers/inputs will be helpful.
Thank you
LikeLike
Hi Man,
I have to say that this is great for me to start to learn BOE Java SDK. But I met a problem recently when I was told to use BOE Java SDK to create a universe with an existing database table. Is there any example for doing this?
Regards,
Miller
LikeLike
Hi,
Thank you for the post. One help though..can you please help me out with what class should I be using to extract Report query filter/prmpt conditions from BO4 webi report? Any example?
thank you.
Chai
LikeLike
Hi Dmytro,
Thanks a lot for this amazing tutorial. Could you please help me in extracting all the report names, locations, size and author.
I have done to get report names, path and author. But I’m not sure whether it’s fetching all the reports. Also, the main concern is how to get the size of a particular report.
Many thanks in advance
Regards,
Hardik
LikeLike
I got it like this.. Thanks.
IFiles ifiles = infoObject.getFiles();
IFile boFile = null;
long reportSize=0;
for (int k=0; k<ifiles.size(); k++) {
boFile = (IFile) ifiles.get(k);
System.out.println("Size : " + boFile.getSize());
reportSize += boFile.getSize();
}
System.out.println("Report Size : " + reportSize);
LikeLike
Hi Dymtro,
What’s the best way to get the author of the BO report ?
Currently I’m doing it in following way
DocumentInstance widoc = wiRepEngine.openDocument(infoObject.getID());
System.out.println(“Author : ” + idoc.getProperties().getProperty(“createdby”));
But it’s taking too long. Is there any better way through IInfoObject ?
Thanks in advance
LikeLike
Hello, I’ve a Null Exception at the getInfoObjectPath() method, here is my workaround:
public static String getInfoObjectPath(IInfoObject infoObject) throws SDKException {
String path = “/” + infoObject.getTitle();
while ((infoObject.getParentID() != 0) && ((infoObject.getParent() != null))) {
infoObject = infoObject.getParent();
path = “/” + infoObject.getTitle() + path;
}
return path;
}
LikeLike
Hi,
Iam new to Java plat form.
I have a requirement like. we have a region report(webi report)with region prompt we need to dynamically pass the parameters values to promt and that report results should be stored in unique location like if the parameter value is ‘Africa’ the report results (pdf and XL) stored in Africa folder
Note: Prompt values and report destination paths (folder) details are available in database
Please provide the sample code for my synario
Thanks In advance
LikeLike
Hello,
I want to know how can I include a macro already done with the sdk java in a report 4.1?
I am waiting for your answer.
LikeLike
Van Gogh was found shot dead in Amsterdam bby a Dutch Muslim, who staked a letter into Van Gogh’s chest with a
knife threatening Ayaan Hirsi Ali’s life. * Wanted-Dead or Alive: Starring the muscular Salman Khan plus tthe
voluptuous Ayyesha Takia, Wanted-Dead or Alive must remain the
1st big bite of the greater part underneath rated musician of Bollywood, Ms.
The center represents the now, soo the further you go awway from the
now, the further it prevents you from knowing who you truly are.
LikeLike
Hi dmytro,
I tried your code and am getting the following error
Exception in thread “main” com.businessobjects.rebean.wi.CommunicationException: Cannot initialize Report Engine server. (Error: RWI 00226)
at com.businessobjects.rebean.wi.occa.OccaConnection.doConnect(Unknown Source)
at com.businessobjects.rebean.wi.occa.OccaConnection.(Unknown Source)
at com.businessobjects.rebean.wi.occa.OccaServerConnectionManager.createConnection(Unknown Source)
at com.businessobjects.rebean.occa.OccaReportEngineComAdapter.createCadenzaSession(Unknown Source)
at com.businessobjects.rebean.occa.OccaReportEngineComAdapter.initNewCadenzaSession(Unknown Source)
at com.businessobjects.rebean.occa.OccaReportEngineComAdapter.openDocument(Unknown Source)
at com.businessobjects.rebean.wi.ReportEngineImpl.openDocument(Unknown Source)
at com.businessobjects.rebean.wi.occa.WebiReportEngine.openDocument(Unknown Source)
at sample.Sample1.main(Sample1.java:44)
Caused by: com.crystaldecisions.enterprise.ocaframework.OCAFrameworkException$AllServicesDown: Unable to find servers in CMS 10.156.20.251:6400 and cluster @admin:6400 with kind webiserver and service null. All such servers could be down or disabled by the administrator. (FWM 01014)
at com.crystaldecisions.enterprise.ocaframework.ServerController.validateServer(ServerController.java:431)
at com.crystaldecisions.enterprise.ocaframework.ServiceMgr.validateServer(ServiceMgr.java:1127)
at com.crystaldecisions.enterprise.ocaframework.ManagedSession.validateServer(ManagedSession.java:708)
at com.crystaldecisions.enterprise.ocaframework.ManagedSession.validateStatelessService(ManagedSession.java:573)
at com.crystaldecisions.enterprise.ocaframework.ManagedSession.newService(ManagedSession.java:911)
at com.crystaldecisions.enterprise.ocaframework.ManagedSession.get(ManagedSession.java:273)
at com.crystaldecisions.enterprise.ocaframework.ManagedSessions.get(ManagedSessions.java:297)
at com.crystaldecisions.enterprise.ocaframework.ServiceMgr.getManagedService(ServiceMgr.java:702)
… 9 more
Could you please assist us in solving this issue?
LikeLike
Is your BO system fine? It looks like Web Intelligence Processing Server is down (or it is not started yet). Can you open a Webi report through InfoView?
LikeLike
Yes everything is working fine and am able to open the report through Infoview.
LikeLike
The key error is this one:
Caused by: com.crystaldecisions.enterprise.ocaframework.OCAFrameworkException$AllServicesDown: Unable to find servers in CMS 10.156.20.251:6400 and cluster @admin:6400 with kind webiserver and service null. All such servers could be down or disabled by the administrator. (FWM 01014)
Are you using IP instead of server name? This usually does not work. Try to replace IP with server name. You might need to add corresponding line to hosts file, if the server name cannot be resolved.
LikeLike
We are trying to fix this issue. Actually we are working on the extraction of webi report details. We are trying to extract the report details such as Universe, class, attributes, measures, underlying query and the format used in the report such as tables, charts and their properties like color, width, height and so on using com.businessobjects.rebean.wi package. we are new to this field and we would like to know whether is this possible and if so how to use the classes in the package to extract the details. Could you please share us some code for this? It will be highly helpful for us. Thanks in advance.
LikeLike
Well. Here is the documentation com.businessobjects.rebean.wi
This post describes how to start. There are some BO documentation and examples about ReportEngine on SAP portal. Start here http://scn.sap.com/docs/DOC-27446
I might be able to answer some of your questions – dmytro.bukhantsov(at)gmail.com
LikeLike
I am actually going to write a tool to export such report metadata. You may wait for few months. Maybe I will finally find time for that 🙂
LikeLike
Здравствуйте, Дмитрий.
По англ я не мастер, но как понял, чтобы выполнить данную программу в BO 4.1, необходимо просто добавить библиотеки из SAP BО/…/lib и все?
If you dont understand sorry and just thank you for blog.
LikeLike
Добрый день Сергей
Чтобы скомпилировалось – да.
Но работать оно по идее не будет (по крайней мере не работало в 4.0)
Например, getDictionary() – Warning: This method is no longer functional from the SAP BusinessObjects 4.0 release onwards.
В 4.1 для Webi есть RESTful Web Services SDK. См sbo41_webi_restful_ws_en.pdf
LikeLike
Спасибо,что ответили так быстро, у вас наверняка мало времени.
А вообще, можете порекомендовать литературу или ссылки с большим количеством примеров по работе с SDK, помимо саповской документации , которые помогли вам в начале пути? Благодарю за потраченное время.
LikeLike
Наибольшее количество примеров, я думаю, на SAP портале http://scn.sap.com/docs/DOC-27465 > sample page. По-моему, неплохое введение по SDK в книге Crystal Reports 2008 Official Guide в последнем разделе (но книга довольно старая. Возможно для 4.1 она совсем не то что нужно). Саповские Developer Guides – тоже довольно ок. Я обычно пользуюсь API Reference и если что-то не понятно то гуглом.
LikeLike
Спасибо!
Есть еще вопрос: в одном из примеров вы открывали,обновляли и экспортировали отчет в pdf/xls/xml.
Предположим, есть отчет “My report”, у него всего два столбца Year и Revenue, на Year стоит промт “выберите год”. Я беру ваш код из этого примера и просто меняю строку
answers.put(“Year:”, new String[]{“FY2004”});
на
answers.put(“Year:”, new String[]{“2013”});
при этом выводится
“Выберите год
ERROR: Mandatory prompts has not been entered”
как я понимаю, значение “2013” не прошло, можете ли вы подсказать в чем я не прав?
Java и BO я впервые увидел только на этой неделе, спасибо за сайт и помощь с литературой.
ну и с меня пиво)
LikeLike
“Year:” это имя промта. Если имя в вашем случае “Выберите год” тогда и в коде нужно
LikeLike
Sir, could you please provide me the list of jar files for BO 4.0 SP6 to be uploaded into the lib folders.
We have installed the BO 4.0 SP6 and the below “common” ,”4.0″, “java”, “lib” folders are not found to copy the given list from the below path.
C:\Program Files (x86)\Business Objects\common\4.0\java\lib
Required libraries:
boconfig.jar
cecore.jar
celib.jar
cesdk.jar
cesession.jar
corbaidl.jar
ebus405.jar
jtools.jar
logging.jar
rebean.common.jar
rebean.jar
rebean.wi.jar
wilog.jar
xpp3.jar
xpp3_min.jar
SL_plugins.jar
But I have found cecore.jar, celib.jar, cesdk.jar,cesession.jar files
in the below given path.
C:\Users\Administrator\.businessobjects\upgrademanagementtool\configuration\org.eclipse.osgi\bundles\21\1\.cp\lib
Please ….please help me. I’m very much interested to learn SDK on BO4.0.
Thanks,
Sri
LikeLike
For 4.x, you have to include all libraries from
C:\Program Files (x86)\SAP BusinessObjects\SAP BusinessObjects Enterprise XI 4.0\java\lib\
(without subfolders)
Note however that this code will not work for 4.x. ReportEngine SDK only supports viewing workflow. Another workflows are not functional. For instance: getDictionary() – Warning: This method is no longer functional from the SAP BusinessObjects 4.0 release onwards.
In 4.1 there is RESTful Web Services SDK for Webi. See sbo41_webi_restful_ws_en.pdf
LikeLike
Thanks for your prompt response valuable advise Dmytro.
Could you please provide me a small sdk code(On any application component such as CMS DB,AUDIT DB) so that I can try and explore on my existing version BO 4.0 SP7.
I heart fully thanks once again for your help and waiting for you valuable advises to explore on SDK with BO 4.0 SP7.
LikeLike
Hi Dmytro,
I am facing some issues while logging on to CMS using sdk.
I am able to login on to infoview and CmcApp through web browser.
But when i run above piece of code providing credentials to CMS server, I am getting below error:
Note: The CMS server is on system infpw04267.
and using link http://infpw04267.ltisap.com:8080/CmcApp/logon.faces?explicitLogoff=true I can log in to CMS.
Eclipse error:
com.crystaldecisions.enterprise.ocaframework.OCAFrameworkException$NotFoundInDirectory: Server infpw04267:6400 not found or server may be down (FWM 01003)
cause:java.net.UnknownHostException: infpw04267
detail:Server infpw04267:6400 not found or server may be down (FWM 01003) infpw04267
at com.crystaldecisions.enterprise.ocaframework.RawSocketDirectory.find(RawSocketDirectory.java:211)
at com.crystaldecisions.enterprise.ocaframework.APSServerHandler.buildBootstrapAPSInfo(APSServerHandler.java:445)
at com.crystaldecisions.enterprise.ocaframework.APSServerHandler.buildAPSClusterInfo(APSServerHandler.java:881)
at com.crystaldecisions.enterprise.ocaframework.APSServerHandler.buildServerInfo(APSServerHandler.java:359)
at com.crystaldecisions.enterprise.ocaframework.ServerController.redirectServer(ServerController.java:549)
at com.crystaldecisions.enterprise.ocaframework.ServiceMgr.redirectServer(ServiceMgr.java:1099)
at com.crystaldecisions.enterprise.ocaframework.ManagedSessions.get(ManagedSessions.java:256)
at com.crystaldecisions.enterprise.ocaframework.ServiceMgr.getManagedService(ServiceMgr.java:702)
at com.crystaldecisions.sdk.occa.security.internal.LogonService.ensureServiceStub(LogonService.java:507)
at com.crystaldecisions.sdk.occa.security.internal.LogonService.doUserLogon(LogonService.java:663)
at com.crystaldecisions.sdk.occa.security.internal.LogonService.userLogon(LogonService.java:295)
at com.crystaldecisions.sdk.occa.security.internal.SecurityMgr.userLogon(SecurityMgr.java:166)
at com.crystaldecisions.sdk.framework.internal.SessionMgr.logon(SessionMgr.java:425)
at rmf.actions.BOCMS.authenticate(BOCMS.java:24)
at rmf.actions.UNIVERSEverifyAction.execute(UNIVERSEverifyAction.java:35)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:404)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:267)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:229)
at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:221)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:150)
at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:48)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:123)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:167)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:105)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:83)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:207)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:74)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:127)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:107)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:206)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:115)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:143)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:121)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:170)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:123)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:50)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:504)
at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:419)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1001)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.net.UnknownHostException: infpw04267
at java.net.InetAddress.getAllByName0(InetAddress.java:1157)
at java.net.InetAddress.getAllByName(InetAddress.java:1083)
at java.net.InetAddress.getAllByName(InetAddress.java:1019)
at com.crystaldecisions.enterprise.ocaframework.RawSocketDirectory.find(RawSocketDirectory.java:153)
… 130 more
LikeLike
Try to use infpw04267.ltisap.com as server name
Try to add infpw04267 and/or infpw04267.ltisap.com with corresponding IP to the hosts file
LikeLike
Dymtro,
Thank you for looking into my query.
I did try infpw04267.ltisap.com and its corresponding IP as server name but faced similar error.
Can it be because of some firewall restrictions on CMS server machine? Though i can log in to infoview and CmcApp from my local browser.
LikeLike
The exception is “java.net.UnknownHostException: infpw04267” so it cannot resolve server. You added “infpw04267.ltisap.com” to hosts. Do you also use the same name to connect (not a shortened version infpw04267)?
Try to connect using Webi rich client and open a document. If it works then it should be possible to make the code to work.
LikeLike
Hi Dmytro,
let me clarfy the scenario.
CMS server is hosted on a remote machine with host name:INFPW04267 whose ip is 172.17.206.29. Since its a remote machine, adding host name with corresponding ip to host file will solve the issue?
I am able login to CMS url: http://infpw04267.ltisap.com:8080/CmcApp/logon.faces?explicitLogoff=true
I am using your code to login to that CMS server from my local machine by passing following parameters to sessionMgr.logon() method.
hostname: INFPW04267 / INFPW04267:6400 / 172.17.206.29 / infpw04267.ltisap.com
Username: username for above url
Password: Password for above url
Authentication: secEnterprise
but eclipse is throwing below error:
com.crystaldecisions.enterprise.ocaframework.OCAFrameworkException$CommunicationError: Communication error occurred when trying to connect to server 172.17.206.29 (FWM 01009)
cause:com.crystaldecisions.thirdparty.org.omg.CORBA.COMM_FAILURE: gethostbyname() failed: java.net.UnknownHostException: INFPW04267 minor code: 0x4f4f000e completed: No
detail:Communication error occurred when trying to connect to server 172.17.206.29 (FWM 01009) gethostbyname() failed: java.net.UnknownHostException: INFPW04267
at com.crystaldecisions.enterprise.ocaframework.RawAPSDirectory.find(RawAPSDirectory.java:252)
at com.crystaldecisions.enterprise.ocaframework.APSServerHandler.buildAPSClusterInfo(APSServerHandler.java:955)
at com.crystaldecisions.enterprise.ocaframework.APSServerHandler.buildServerInfo(APSServerHandler.java:359)
at com.crystaldecisions.enterprise.ocaframework.ServerController.redirectServer(ServerController.java:549)
at com.crystaldecisions.enterprise.ocaframework.ServiceMgr.redirectServer(ServiceMgr.java:1094)
at com.crystaldecisions.enterprise.ocaframework.ManagedSessions.get(ManagedSessions.java:256)
at com.crystaldecisions.enterprise.ocaframework.ServiceMgr.getManagedService(ServiceMgr.java:697)
at com.crystaldecisions.sdk.occa.security.internal.LogonService.ensureServiceStub(LogonService.java:507)
at com.crystaldecisions.sdk.occa.security.internal.LogonService.doUserLogon(LogonService.java:654)
at com.crystaldecisions.sdk.occa.security.internal.LogonService.userLogon(LogonService.java:295)
at com.crystaldecisions.sdk.occa.security.internal.SecurityMgr.userLogon(SecurityMgr.java:162)
at com.crystaldecisions.sdk.framework.internal.SessionMgr.logon(SessionMgr.java:425)
at Program.main(Program.java:21)
Need your expertise on this.
Regards,
Suraj Bhosle
LikeLike
Add the following line to the hosts file on your PC (usually C:\Windows\System32\drivers\etc\hosts)
and try to connect using INFPW04267 again
LikeLike
Thank you Dmytro,
I will try adding above entry to host file.
But i did try providing IP address of the CMC host as well, but that didn’t work either?
Anyways, i will change the host file and let you know the outcome.
LikeLike
Thanks Dmytro,
adding an entry to host file worked!!!
LikeLike
Hi Guys,
Upgrade Management Tool available in BO 4.0 is used to upgrade to BO 4.0.
Can you tell me how much % conversion UMT can do?
Like for, suppose We have complete and incremental upgrade options in UMT. Does complete upgrade mean 100% migration from BO 3.1 to BO 4.0.
Thank you in Advance!!
LikeLike
Hi,
Great Work…Keep it up…..Thanks For Sharing….
I am new to this… is there any query to find the relationship between
1) user and universe (users who are all having access to universe)
2) user and document (users who are all having access to document)
I am using separate query for users and documents, then comparing it using two for loops
say if i have 10000 users and 16000 documents
i am comparing 1 user with 16000 documents…..so 10000 * 16000 times loop is rotating….
Takes lot more time to execute…
Thanks & Regard
karthi
LikeLike
Hello,
tell me please if you have a method to get the list users who are all having access to document)
Thank you
LikeLike
Hi Dmitriy,
Could you please help me to understand how IEnterpriseSession works?
As I understand from documentation this type of “session” is persisted. Does this means that IEnterpriseSession has not timeout as concept? And what if I will not close IEnterpriseSession, will it be stored on BO servers for ever? Is there any purge procedure?
LikeLike
Thanks for this information,
I need your help please! I can’t change format for “SI_UPDATE_TS” i use this instructions:
it’s run for getUpdateTimeStamp() i get what i want but i have a syntax erorr for “SI_UPDATE_TS” i don’t know what can i do,
the second thing i want to know how can i get “SI_DISABLED if it’s true all false in SI_ALIASES for a List of Users, i try with this instruction:
System.out.println(userInfom.properties().getProperties(“SI_ALIASES”)
.get(“SI_DISABLED”));
Thank you
LikeLike