圖表(長尾)FineReport教程:[5]移動app集成?

客戶有自己的app,希望把我們的移動端功能集成到他們的app裡面去,而不需要安裝兩個app。Android端和IOS端的集成接口是不一樣的,下面就通過圖表(長尾)FineReport來簡單介紹一下。

工具/原料

圖表(長尾)FineReport7.1.1

大小:148.2M 適用平臺:windows/linux

IOS端集成App

資源準備

準備好IOS端集成FineReport App的資源文件,包括自己的IOS工程、FineReport提供的資源包。

點擊IOS.zip下載FineReport提供的集成資源包,解壓至文件夾中,可以看到如下圖所示的文件:

圖表(長尾)FineReport教程:[5]移動app集成

其中FRDemo和FRDemo_目錄樹是示例demo,說明文件夾中是使用說明,剩下的三個文件夾才是集成時需要依賴的資源包。

framework&bundle:裡面包含了真機和模擬器集成時所需要的framework和bundle資源文件,圖片資源(IFImages.xcassets);

WeiXinSDK:微信的SDK;

BaiduMap:百度地圖的SDK

FRDemo:集成示例,可以通過設置服務器地址,報表路徑,加載報表,即直接通過URL訪問報表;

FRDemo_目錄樹:集成示例2,可以登錄服務器,展示目錄樹,即通過發送用戶名密碼進行驗證,驗證成功之後直接顯示FineReport的主頁或者目錄樹。

資源導入

在自己的項目中導入資源文件framework&bundle\模擬器\FineResource.bundle,添加framework&bundle\IFImages.xcassets到項目中,並在Build Phases——Link Binary With Libraries中添加下圖所示的lib包:

圖表(長尾)FineReport教程:[5]移動app集成

其中FineSoft.framework是FineReport提供的資源文件,在解壓文件夾的framework&bundle\真機\FineSoft.framework目錄下。

同時,在項目中添加前面下載資源中的微信SDK和百度SDK,如下圖:

圖表(長尾)FineReport教程:[5]移動app集成

集成使用FineReport App

資源都導入配置完成之後,就需要集成App了,IOS端集成App有兩張方式,一個是直接通過URL集成服務器上的模板,另外一個是通過發送用戶名密碼至服務器,驗證通過之後,顯示FineReport目錄樹。

直接URL集成

直接URL集成報表,就是通過URL鏈接直接訪問FineReport服務器上的報表。

在項目中使用IFEntryViewController加載報表,根據報表路徑,服務器路徑,預覽類型創建IFEntryViewController對象。

引入頭文件:

#import

根據服務器地址和報表路徑生成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:@";];

集成目錄樹查看模板

集成目錄樹,就是指發送用戶名密碼至服務器驗證之後,訪問系統的目錄樹,查看系統下的所有模板。

在項目中使用IFEntryViewController加載報表。

其接口代碼如下:

引入頭文件

#import

#import

登錄服務器

[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 *) {

}];

登錄服務器的各個參數含義:

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:@"; 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 *) {

}];

注意事項

1、需要配合FR7.1.1版本使用;

2、提供的示例FRDemo只能在真機上運行,如需在模擬器上運行,請替換framework&bundle/模擬器中的framework和bundle文件;

3、如果遇到百度地圖的集成c文件衝突報錯,可以將other linker flags中的-all_load改為-ObjC。

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;

}

測試

FineReport提供一個Demo地址供測試。

服務器地址:www.finereporthelp.com:8889/app/ReportServer;

用戶名:demo;

密碼:demo;

可用報表路徑:app/DetailedDrillA-phone.cpt app/para-phone.cpt app/DetailedDrill-pad.cpt app/parapad.cpt app/sales/sales.frm app/sales/map.frm app/sales/saleseffects.frm app/sales/TOP6-pad.frm app/sales/product.frm app/sales/SWOT.frm app/sales/orders.frm app/sales/abc.frm app/financial/FinaceStatistic.frm app/Operations/area.frm

如想查看更多示例效果,可聯繫相關集成人員。

Android集成app

資源準備

準備好需要集成FineReport App的Android工程,並下載FineReport提供的集成資源包。

點擊android.zip,下載資源包,將其解壓,得到如下圖所示幾個文件:

圖表(長尾)FineReport教程:[5]移動app集成

將解壓出來的libs目錄和res目錄拷貝需要集成的Android工程項目中,並將libs目錄下的JAR包和armeabi目錄作為依賴庫引用到Android開發工程中,如下圖:

圖表(長尾)FineReport教程:[5]移動app集成

修改AndroidManifest.xml文件

打開自己工程下的AndroidManifest.xml文件,並將解壓出來的FineReport提供的AndroidManifest.xml中的內容寫入到自己工程下的配置文件中

集成使用FineReport App

FineReport Android App提供了2種類型的接口:直接使用url訪問服務器上的模板,以連接的形式集成至自己的App當中,另外一種是使用目錄入口集成,即通過驗證用戶名密碼,登錄到FineReport App的主頁或者目錄頁。

URL直接集成

使用URL集成. 直接使用URL訪問服務器工程模板,比如說我們想要集成服務器下的WorkBook2.cpt模板,並且是填報的形式,那麼,代碼如下:

Intent intent = new Intent();

intent.putExtra("url",";op=write");

intent.setClass(this, IntegrationActivity.class);

startActivity(intent);

注:op=write表示參數op為write填報模式,正常預覽模板,不需要添加op參數。

使用目錄歡迎入口集成

使用目錄歡迎入口集成,直接登陸報表主頁或者目錄就相當於將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", ";); // 數據決策系統 地址ip

welcomeIntent.putExtra("serverName", "demo服務器"); // 數據決策系統 名稱

startActivity(welcomeIntent);

注:如果服務器系統中設置了主頁,那麼登錄完成之後就跳轉到主頁,如果沒有設置主頁,就直接顯示目錄頁。

教程, 目錄, 服務器, 圖表, 長尾,
相關問題答案