java - Business Objects 4.1 OpenDocument 使用企业登录进行编辑

标签 java business-objects business-objects-sdk

这个问题来自一个完全的 Java 新手,所以请毫不犹豫地在你的答案中指出明显或简单的事情!

我正在致力于从 Business Objects 3.1 到 4.1 的迁移。该迁移的一部分涉及将使用 OpenDocument URL 的现有报表移至新环境。

期望的行为是用户可以单击 URL 并直接转到其报告,而不会提示登录(具有报告 URL 的环境已经安全)。基于documentation对于 OpenDocument 功能,我需要添加一些 java 代码来获取登录 token 并将其作为 URL 的一部分传递(请参阅链接文档第 14 页的第 4.2 节)。我尝试使用文档中的 java 代码,添加适当的服务器/用户/密码,使用以下代码创建一个名为“custom.jsp”的文件:

String openDocumentToken() throws SDKException, UnsupportedEncodingException
{
IEnterpriseSession sess = CrystalEnterprise.getSessionMgr().logon("user","pword","cms name:6400","secEnterprise");
String token = sess.getLogonTokenMgr().createLogonToken ("",120,100);
String tokenEncode = URLEncoder.encode  (token,"UTF-8");
sess.logoff();
return( "http://xxx.xxxxxxxxx.com:8080/BOE/OpenDocument/opendoc/openDocument.jsp?iDocID=ATeBlMbXn.xCuSaEElUEGI0&sIDType=CUID&token=" + tokenEncode);
}

但是,当我尝试访问

下的报告时,仍然会收到登录提示
http://<server>/BOE/OpenDocument/opendoc/custom.jsp

有什么想法吗?我可以向您提供更多信息吗?

最佳答案

我遗漏了两部分:在顶部声明类(我告诉过你我是新的)和使用response.sendredirect()而不是仅仅return()。 This document有帮助,尽管我能找到的每个文档都假设您已经了解足够的知识来添加类和其他标签。

最后,我使用以下代码使一切正常工作:

<%@ taglib prefix="rs" uri="http://www.businessobjects.com/resource/rs" %>
<rs:doctype />

<!--
©2010 - 2013 SAP AG or an SAP affiliate company.  All rights reserved.

SAP and other SAP products and services mentioned herein as well as their respective    logos are trademarks or registered trademarks of SAP AG in Germany and other countries.  Please see http://www.sap.com/corporate-en/legal/copyright/index.epx#trademark for additional trademark information and notices.
-->

<%@ page language="java" contentType="text/html;charset=utf-8" %>
<%@ page import="com.businessobjects.bip.core.web.context.SessionHelper" %>
<%@ page import="com.businessobjects.bip.core.web.logon.LogonConstants" %>
<%@ page import="com.businessobjects.bip.core.web.utils.Encoder" %>
<%@ page import="com.businessobjects.opendoc.HandleOpenDocParams" %>
<%@ page import="com.businessobjects.opendoc.OpenDocBean" %>
<%@ page import="com.businessobjects.opendoc.OpenDocConstants"%>
<%@ page import="com.businessobjects.opendoc.OpenDocShare"%>
<%@ page import="com.businessobjects.opendoc.OpenDocUtils" %>
<%@ page import="com.businessobjects.swd.shared.actioncache.CafActionProperty" %>
<%@ page import="com.businessobjects.swd.shared.actioncache.ICafAction" %>
<%@ page import="com.businessobjects.webutil.ApplicationUtils" %>
<%@ page import="com.businessobjects.webutil.clientaction.ActionData" %>
<%@ page import="com.businessobjects.webutil.clientaction.ActionHelper" %>
<%@ page import="com.businessobjects.webutil.clientaction.ClientActionException" %>
<%@ page import="com.businessobjects.webutil.PlatformConstants"%>


<%@ page import="com.sap.security.core.server.csi.util.URLEncoder" %>
<%@ page import="com.sap.security.core.server.csi.XSSEncoder" %>
<%@ page import="com.businessobjects.servletbridge.customconfig.ConfigReader"%>
<%@ page import="java.io.IOException" %>
<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.Locale" %>
<%@ page import="java.util.Map" %>
<%@ page import="com.businessobjects.swd.security.SecurityUtils"%>
<%@ page import="com.businessobjects.swd.security.SecurityUtils.ProcessingException"%>
<%@ page import="com.businessobjects.webutil.PlatformConstants"%>

<%@ page import="com.crystaldecisions.sdk.framework.*" %> 
<%@ page import="com.businessobjects.foundation.exception.*" %> 
<%@ page import="com.crystaldecisions.sdk.exception.*" %>


<%@ taglib uri='/WEB-INF/fmt.tld' prefix='fmt'%>
<%@ taglib uri='/WEB-INF/c.tld' prefix='c'%>
<%@ taglib uri='/WEB-INF/c-rt.tld' prefix='c_rt'%>
<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
<%@ taglib prefix="cwl" uri="http://www.businessobjects.com/jsf/bip.core.web.logon"%>

<jsp:useBean id="openDocBean" class="com.businessobjects.opendoc.OpenDocBean"     scope="request"/>



<html>
<head>
    <title>This is Custom</title>        
</head>
<body>
<%
{

                IEnterpriseSession sess = CrystalEnterprise.getSessionMgr().logon("user","pwd","server:6400","secEnterprise");

            String token = sess.getLogonTokenMgr().createLogonToken("",120,100);

            String tokenEncode = URLEncoder.encode(token,"UTF-8");

            response.sendRedirect("http://<server>/BOE/OpenDocument/opendoc/openDocument.jsp?" + request.getQueryString() + "&token=" + tokenEncode);

} 

%>


    </body>
</html>

我能够使用硬编码的 CUID 运行此程序,仅在文档开头指定以下三个类:

<%@ page import="com.crystaldecisions.sdk.framework.*" %> 
<%@ page import="com.businessobjects.foundation.exception.*" %> 
<%@ page import="com.crystaldecisions.sdk.exception.*" %>

但是,当我将登录部分与 request.GetQueryString() 结合起来时函数,我刚刚将三个类添加到我已经知道正在使用该函数的列表中。您可能只需要几个类就可以编写此代码。

custom.jsp文件被放置在该目录中 ...\tomcat\webapps\BOE\WEB-INF\eclipse\plugins\webpath.OpenDocument\web\opendoc

为了让代码“take”,我必须停止Tomcat服务,删除...tomcat\work\Catalina\localhost下的BOE文件夹。目录,然后重新启动 Tomcat 服务并等待它重新填充 Work 目录中的所有文件(大约六分钟)。

为了访问我的自定义文件,我使用了 URL http://myserver:8080/BOE/OpenDocument/opendoc/custom.jsp

希望这能帮助另一个完全的 Java 新手,他对创建 Custom.JSP 文件有类似的问题,以自动登录尝试使用 OpenDocument 的用户(通过 Enterprise 或其他身份验证),而不提示登录屏幕。

关于java - Business Objects 4.1 OpenDocument 使用企业登录进行编辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21858863/

相关文章:

java - Java 中的随机数生成器

java - 测试类应该只有一个公共(public)零参数构造函数

java - BusinessObjects SDK 部署方面的最佳实践 - 自定义审核数据库

java - 识别计划的业务对象报告

java - 不同类型的 BufferedImage 是什么意思?

java - Conscrypt 库是否适用于 Java 11?

c# - Java "equivalent"到 CSLA

.net - 适用于 C# 和 .net 的业务对象框架

.net - Swift 和 .Net Web 应用程序的业务类

com - BusinessObjects XI COM 支持