在我的最后一篇文章(当然,有点过时)中,我概述了我们在项目中采用的方法,以与SAP-HANA一起解决持续交付的问题。但这仅仅是故事的一半。
今天我想与大家分享我们如何解决前端层的问题:SAP BusinessObjects reports(使用HANA视图)。
与SAP HANA一样,从一个BusinessObjects BI系统到另一个系统的传输主要是一个手动过程:在CMC内的"促销管理"中,你
工作。
我们在这个项目中遇到的问题?嗯,首先,我们经常遇到这样的情况:一个对象无法传输,因为目标系统已经包含一个同名但CUID不同的对象。
现在,当人们在目标系统上手动创建对象时,你不能责怪传输机制,而事实上他们应该这样做但是接下来的主要动机是,这个过程是手动的。与后端一样,我们需要找到一种方法来编写这个过程的脚本,因此,我们可以将其集成到我们的构建自动化中。
流程
构建首先将所选对象从我们的开发系统导出到LCMBIAR文件,并将其推送到github存储库。
这里最棘手的部分是找出要在属性文件中使用的正确导出查询,哪个是升级管理命令行工具(lcm_客户端.sh)作为参数。同时,有更多的文档可用(例如本文和sapnote1969259),大数据推荐,但在当时,几乎找不到。正在试用安装的查询生成器(http):///AdminTools/querybuilder/ie.jsp文件)证明有用。
在下一个构建阶段,首先通过删除任何现有对象来清除相应的目标系统(如QA、PROD)。为此,我使用了JavaAPI for SAP BusinessObjects BI:
包com.sap.wap网站.bobj;
导入文件输入流;
导入java.io.IOException异常;
导入java.util.Iterator;
导入java.util.Properties属性;
导入com.crystaldecisions.sdk软件包.exception.sdkeException异常;
导入com.crystaldecisions.sdk软件包.框架.CrystalEnterprise;
导入com.crystaldecisions.sdk软件包.framework.IEnterpriseSession会话;
导入com.crystaldecisions.sdk软件包.occa.infostore.iInfo对象;
导入com.crystaldecisions.sdk软件包.occa.infostore.iInfo对象;
导入com.crystaldecisions.sdk软件包.occa.infostore.iinfo商店;
导入com.crystaldecisions.sdk软件包.plugin.authentication.enterprise插件.企业中心;
public class DeleteObjects{
private static final String QUERY\u UNIVERSES=
"选择*来自CI\u APPOBJECTS,其中SI\u SPECIFIC\u KIND="DSL.宇宙";
private static final String QUERY_CONNECTIONS=
"选择*FROM CI_APPOBJECTS WHERE SI_KIND='CCIS.数据连接'";
private static final String QUERY_LCMJOBS=
"SELECT*FROM CI_INFOOBJECTS WHERE SI_KIND='LCMJob'";
public static void main(String[]args){
Properties props=null;
try{
props=new Properties();
道具荷载(新文件输入流("配置属性"));
}捕获(IOE){
系统输出打印("读取属性文件时出错。");
系统出口(1) ;
}
delete(args,props);
}
private static void delete(String[]args,大数据视频,Properties props){
IEnterpriseSession enSession=null;
尝试{
//登录
会话=CrystalEnterprise.getSessionMgr公司().登录(
道具.getProperty("cmsuser"),
道具.getProperty("CMS密码"),
道具.getProperty("cmshost")+":"+道具.getProperty("cmsport"),
IsecEnterprise.KIND公司);
//检索InfoStore
IInfoStore InfoStore=(IInfoStore)会话.getService("信息商店");
如果(args[0].equals("universes")
searchAndDestroy(infoStore,QUERY\universes);
if(args[0].equals("connections")
searchAndDestroy(infoStore,QUERY\connections);
if(args[0].equals("lcmjobs"))
searchAndDestroy(infoStore,QUERY\lcmjobs);
if(args[0].equals("folder")){
String QUERY\folder=
SELECT*FROM CI\u INFOOBJECTS WHERESI_KIND='Folder'和SI_NAME='"+args[1]+";
searcheanddestroy(infoStore,QUERY_Folder);
}
}catch(sdkeexception e){
系统输出打印("使用CMS时出现异常");
}最后{
注销();
}
}
/**
*不加区别地删除使用传递的查询返回的所有内容
*
*@param infoStore
*@param query
*@throws SDKException
*/
private static void searcheanddestroy(IInfoStore infoStore,String query)
throws SDKException{
IInfoObjects infoObjects=infoStore.query文件(查询);
for(Iteratoriter = infoObjects.iterator(); iter.hasNext公司();) {
infoObjects.delete文件((iInfo对象)下一步());
}
infoStore.commit文件(infoObjects);
}
}
这个实用程序被打包到一个JAR归档文件中,并放在文件系统中(在我们的例子中是/usr/sap/bobj/sap\u bobj/util)。
然后依次调用所有相关对象,大数据在线,e、 g.
java–cpcom.sap.wap网站.bobj.DeleteObjects文件宇宙
java–cpcom.sap.wap网站.bobj.DeleteObjects文件文件夹WAP