多语言展示
当前在线:145今日阅读:167今日分享:16

图表制作软件FineReport教程:[5]移动app集成

客户有自己的app,希望把我们的移动端功能集成到他们的app里面去,而不需要安装两个app。Android端和IOS端的集成接口是不一样的,下面就通过图表制作软件FineReport来简单介绍一下。
工具/原料
1

图表制作软件FineReport7.1.1

2

大小:148.2M 适用平台:windows/linux

IOS端集成App
1

资源准备准备好IOS端集成FineReport App的资源文件,包括自己的IOS工程、FineReport提供的资源包。点击IOS.zip下载FineReport提供的集成资源包,解压至文件夹中,可以看到如下图所示的文件:

3

资源导入在自己的项目中导入资源文件framework&bundle\模拟器\FineResource.bundle,添加framework&bundle\IFImages.xcassets到项目中,并在Build Phases——Link Binary With Libraries中添加下图所示的lib包:

5

集成使用FineReport App资源都导入配置完成之后,就需要集成App了,IOS端集成App有两张方式,一个是直接通过URL集成服务器上的模板,另外一个是通过发送用户名密码至服务器,验证通过之后,显示FineReport目录树。

6

直接URL集成直接URL集成报表,就是通过URL链接直接访问FineReport服务器上的报表。在项目中使用IFEntryViewController加载报表,根据报表路径,服务器路径,预览类型创建IFEntryViewController对象。引入头文件:#import

7

根据服务器地址和报表路径生成IFEntryViewController:IFEntryViewController *entryVC = [[IFEntryViewController al-loc] initWithPath:path ServerUrl:url]:reportPath:报表路径,如app/DetailedDrillA-phone.cpt;serverUrl:服务器地址,如http://192.168.1.100:8075/WebReport/ReportServer;viewType:预览类型,可选值有IFEntryViewTypePage(分页预览),IFEntryViewTypeWrite(填报预览),可选用,默认为分页预览;parameters:报表传递的参数,可选用;如果上述四个接口全部使用,则其使用方法为:- (id)initWithPath:(NSString *)reportPath serverUrl:(NSString *)serverUrl viewType:(IFEntryViewType)viewType parameters:(NSDictionary *) params;比如说URL集成一张在线app demo下的表单,直接预览,不传递参数,代码如下:IFEntryViewController *entryVC = [[IFEntryViewController alloc] initWithPath:@'app/sales/orders.frm' serverUrl:@'http://www.finereporthelp.com:8889/app/ReportServer'];

8

集成目录树查看模板集成目录树,就是指发送用户名密码至服务器验证之后,访问系统的目录树,查看系统下的所有模板。在项目中使用IFEntryViewController加载报表。其接口代码如下:引入头文件#import #import

9

登录服务器[IFFrameUtils logInto:DEFAULT_SERVERNAME serverUrl:url withUsername:username andPassword:password success:^{        //登录成功,加载目录树        [IFFrameUtils loadReportTree:^(NSMutableArray *reportsArray) {            //加载成功,展示目录树            IFFrameDirectoryViewController *directoryVC = [[IFFrameDirectoryViewController alloc] initWithReportsArray:reportsArray];            [self.navigationController presentViewController:directoryVC animated:YES comple-tion:nil];        } failure:^(NSString *) {        }];    } failure:^(NSString *) {    }];

10

登录服务器的各个参数含义:serverName:服务器名称,如Demo服务器;serverUrl:服务器地址,如http://192.168.1.100:8075/WebReport/ReportServer;username:用户名;password:密码;success:登录成功的回调函数(一般是加载目录树);failure:登录失败的回调函数。其各个参数的使用方法为:+ (void)logInto:(NSString *) serverName serverUrl:(NSString *)serverUrl withUsername:(NSString *)username andPassword:(NSString *)password success:(void (^)())success failure:(void (^)(NSString *))failure;比如说集成在线app demo工程的目录树,代码如下:#import #import //登录服务器[IFFrameUtils logInto:@'Demo服务器' serv-erUrl:@'http://www.finereporthelp.com:8889/app/ReportServer' withUsername:@'demo' andPassword:@'demo' success:^{        //登录成功,加载目录树        [IFFrameUtils loadReportTree:^(NSMutableArray *reportsArray) {            //加载成功,展示目录树            IFFrameDirectoryViewController *directoryVC = [[IFFrameDirectoryViewController alloc] initWithReportsArray:reportsArray];            [self.navigationController presentViewController:directoryVC animated:YES comple-tion:nil];        } failure:^(NSString *) {        }];    } failure:^(NSString *) {    }];

12

webView里打开原生报表如果集成的方式是从webView上的html元素事件触发,打开原生报表,那么需要自定义WebView继承UIWebView,并重写- (BOOL) webView:(UIWebView *)webViewT shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType方法来实现。原理就是分析url,如果url是报表类型,就用EntryViewController打开报表。示例可见:- (BOOL) webView:(UIWebView *)webViewT shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {    if(navigationType != UIWebViewNavigationTypeLinkClicked) {        return YES;    }    NSString *urlString = [[request URL] absoluteString];    NSMutableDictionary *urlDict = [IFFrameUtils analysisUrl:urlString];    if([urlDict contain:KEY_URL]) {//说明是普通超链        IFWebViewController *toWebView = [[IFWebViewController alloc] initWithUrl:[urlDict objectForKey:KEY_URL]];        toWebView.title = @'链接';        [self iFPushVC:toWebView animated:YES];    } else {//说明是报表类型的超链        IFEntryViewType viewType = IFEntryViewTypePage;        if([[urlDict objectForKey:KEY_OP] isEqualToString:KEY_VIEWTYPE_WRITE]) {            viewType = IFEntryViewTypeWrite;        }        IFEntryViewController *entryVC = [[IFEntryViewController alloc] initWithPath:[urlDict objectForKey:KEY_PATH] serverUrl:[urlDict objectForKey:SERVERURL_KEY] viewType:viewType];        entryVC.title = urlDict[KEY_PATH];        [self iFPushVC:entryVC animated:YES];    }    return NO;}

Android集成app
1

资源准备准备好需要集成FineReport App的Android工程,并下载FineReport提供的集成资源包。点击android.zip,下载资源包,将其解压,得到如下图所示几个文件:

2

将解压出来的libs目录和res目录拷贝需要集成的Android工程项目中,并将libs目录下的JAR包和armeabi目录作为依赖库引用到Android开发工程中,如下图:

3

修改AndroidManifest.xml文件打开自己工程下的AndroidManifest.xml文件,并将解压出来的FineReport提供的AndroidManifest.xml中的内容写入到自己工程下的配置文件中

4

集成使用FineReport AppFineReport Android App提供了2种类型的接口:直接使用url访问服务器上的模板,以连接的形式集成至自己的App当中,另外一种是使用目录入口集成,即通过验证用户名密码,登录到FineReport App的主页或者目录页。

5

URL直接集成使用URL集成. 直接使用URL访问服务器工程模板,比如说我们想要集成服务器下的WorkBook2.cpt模板,并且是填报的形式,那么,代码如下:Intent intent = new Intent();        intent.putExtra('url','http://192.168.100.121:8075/WebReport/ReportServer?reportlet=WorkBook2.cpt&op=write');        intent.setClass(this, IntegrationActivity.class);        startActivity(intent);注:op=write表示参数op为write填报模式,正常预览模板,不需要添加op参数。

6

使用目录欢迎入口集成使用目录欢迎入口集成,直接登陆报表主页或者目录就相当于将FineReport的App嵌入到自己的App当中,当需要进入到FineReport App的时候,只需要发送相应的用户名密码验证即可登录到FineReport App的主页或者目录页当中,接口如下:Intent welcomeIntent = new Intent(this, LoadAppFromWelcomeActivity.class);        welcomeIntent.putExtra('username', 'demo'); // 数据决策系统 用户名        welcomeIntent.putExtra('password', 'demo'); // 数据决策系统 用户密码        welcomeIntent.putExtra('serverIp', 'http://www.finereporthelp.com:8889/app/ReportServer'); // 数据决策系统 地址ip        welcomeIntent.putExtra('serverName', 'demo服务器'); // 数据决策系统 名称        startActivity(welcomeIntent); 注:如果服务器系统中设置了主页,那么登录完成之后就跳转到主页,如果没有设置主页,就直接显示目录页。

推荐信息