Java軟件報(bào)表軟件技術(shù)博客

          java報(bào)表軟件技術(shù)匯總 java報(bào)表軟件制作 報(bào)表軟件新聞
          posts - 355, comments - 100, trackbacks - 0, articles - 3
             :: 首頁 :: 新隨筆 ::  :: 聚合  :: 管理

          應(yīng)用場景

          用戶有自己的app,希望把報(bào)表的移動端【本文中以FineReport移動端為例】功能集成到他們的app里面去,而不需要安裝兩個(gè)app。Android端和IOS端的集成接口是不一樣的,下面我們分開詳述如何實(shí)現(xiàn)。

          IOS端集成App

          1. 資源準(zhǔn)備

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

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

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

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

          WeiXinSDK微信的SDK

          BaiduMap百度地圖的SDK

          FRDemo集成示例,可以通過設(shè)置服務(wù)器地址,報(bào)表路徑,加載報(bào)表,即直接通過URL訪問報(bào)表;

          FRDemo_目錄樹:集成示例2,可以登錄服務(wù)器,展示目錄樹,即通過發(fā)送用戶名密碼進(jìn)行驗(yàn)證,驗(yàn)證成功之后直接顯示FineReport的主頁或者目錄樹。

          2、資源導(dǎo)入

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


           

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

          同時(shí),在項(xiàng)目中添加前面下載資源中的微信SDK和百度SDK,如下圖:


           

          3、集成使用FineReport App

          資源都導(dǎo)入配置完成之后,就需要集成App了,IOS端集成App有兩種方式,一個(gè)是直接通過URL集成服務(wù)器上的模板,另外一個(gè)是通過發(fā)送用戶名密碼至服務(wù)器,驗(yàn)證通過之后,顯示FineReport目錄樹。

          3.1直接URL集成

          直接URL集成報(bào)表,就是通過URL鏈接直接訪問FineReport服務(wù)器上的報(bào)表。

          在項(xiàng)目中使用IFEntryViewController加載報(bào)表,根據(jù)報(bào)表路徑,服務(wù)器路徑,預(yù)覽類型創(chuàng)建IFEntryViewController對象。

          引入頭文件:

          1.     #import <FineSoft/IFEntryViewController.h>  

          根據(jù)服務(wù)器地址和報(bào)表路徑生成IFEntryViewController:IFEntryViewController*entryVC = [[IFEntryViewController al-loc] initWithPath:path ServerUrl:url]

          reportPath報(bào)表路徑,如app/DetailedDrillA-phone.cpt

          serverUrl服務(wù)器地址,如http://192.168.1.100:8075/WebReport/ReportServer

          viewType預(yù)覽類型,可選值有IFEntryViewTypePage(分頁預(yù)覽),IFEntryViewTypeWrite(填報(bào)預(yù)覽),可選用,默認(rèn)為分頁預(yù)覽;

          parameters報(bào)表傳遞的參數(shù),可選用;

          如果上述四個(gè)接口全部使用,則其使用方法為:

          -(id)initWithPath:(NSString *)reportPath serverUrl:(NSString *)serverUrlviewType:(IFEntryViewType)viewType parameters:(NSDictionary *) params;

          比如說URL集成一張?jiān)诰€app demo下的表單,直接預(yù)覽,不傳遞參數(shù),代碼如下:

          1.     IFEntryViewController *entryVC = [[IFEntryViewController alloc] initWithPath:@"app/sales/orders.frm" serverUrl:@"http://www.finereporthelp.com:8889/app/ReportServer"];  

          其詳細(xì)使用情況可查看資源包中的FRDemo示例

          3.2集成目錄樹查看模板

          集成目錄樹,就是指發(fā)送用戶名密碼至服務(wù)器驗(yàn)證之后,訪問系統(tǒng)的目錄樹,查看系統(tǒng)下的所有模板。

          在項(xiàng)目中使用IFEntryViewController加載報(bào)表。

          其接口代碼如下:

          ·        引入頭文件

          1.     #import <FineSoft/IFFrameUtils.h>  

          2.             #import <FineSoft/IFFrameDirectoryViewController.h>  

          ·        登錄服務(wù)器

          1.     [IFFrameUtils logInto:DEFAULT_SERVERNAME serverUrl:url withUsername:username andPassword:password success:^{  

          2.             //登錄成功,加載目錄樹  

          3.             [IFFrameUtils loadReportTree:^(NSMutableArray *reportsArray) {  

          4.                 //加載成功,展示目錄樹  

          5.                 IFFrameDirectoryViewController *directoryVC = [[IFFrameDirectoryViewController alloc] initWithReportsArray:reportsArray];  

          6.                 [self.navigationController presentViewController:directoryVC animated:YES comple-tion:nil];  

          7.             } failure:^(NSString *) {  

          8.             }];  

          9.         } failure:^(NSString *) {  

          10.      }];  

          登錄服務(wù)器的各個(gè)參數(shù)含義:

          serverName服務(wù)器名稱,如Demo服務(wù)器;

          serverUrl服務(wù)器地址,如http://192.168.1.100:8075/WebReport/ReportServer

          username用戶名;

          password密碼;

          success登錄成功的回調(diào)函數(shù)(一般是加載目錄樹);

          failure登錄失敗的回調(diào)函數(shù)。

          其各個(gè)參數(shù)的使用方法為:+ (void)logInto:(NSString *) serverNameserverUrl:(NSString *)serverUrl withUsername:(NSString *)usernameandPassword:(NSString *)password success:(void (^)())success failure:(void(^)(NSString *))failure;

          比如說集成在線app demo工程的目錄樹,代碼如下:

          1.     #import <FineSoft/IFFrameUtils.h>  

          2.         #import <FineSoft/IFFrameDirectoryViewController.h>  

          3.         //登錄服務(wù)器  

          4.             [IFFrameUtils logInto:@"Demo服務(wù)器" serv-erUrl:@"http://www.finereporthelp.com:8889/app/ReportServer" withUsername:@"demo" andPassword:@"demo" success:^{  

          5.             //登錄成功,加載目錄樹  

          6.             [IFFrameUtils loadReportTree:^(NSMutableArray *reportsArray) {  

          7.                 //加載成功,展示目錄樹  

          8.                 IFFrameDirectoryViewController *directoryVC = [[IFFrameDirectoryViewController alloc] initWithReportsArray:reportsArray];  

          9.                 [self.navigationController presentViewController:directoryVC animated:YES comple-tion:nil];  

          10.          } failure:^(NSString *) {  

          11.          }];  

          12.      } failure:^(NSString *) {  

          13.      }];  

          其詳細(xì)使用情況可查看資源包中的FRDemo_目錄樹示例

          4、注意事項(xiàng)

          1需要配合FR8.0或者FR7.1.1版本使用;

          2提供的示例FRDemo只能在真機(jī)上運(yùn)行,如需在模擬器上運(yùn)行,請?zhí)鎿Qframework&bundle/模擬器中的framework和bundle文件;

          3如果遇到百度地圖的集成c文件沖突報(bào)錯(cuò),可以將other linker flags中的-all_load改為-ObjC。

          5、里打開原生報(bào)表

          如果集成的方式是從webView上的html元素事件觸發(fā),打開原生報(bào)表,那么需要自定義WebView繼承UIWebView,并重寫- (BOOL) webView:(UIWebView *)webViewTshouldStartLoadWithRequest:(NSURLRequest *)requestnavigationType:(UIWebViewNavigationType)navigationType方法來實(shí)現(xiàn)。原理就是分析url,如果url是報(bào)表類型,就用EntryViewController打開報(bào)表。

          示例可見:

          1.     - (BOOL) webView:(UIWebView *)webViewT shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {  

          2.         if(navigationType != UIWebViewNavigationTypeLinkClicked) {  

          3.             return YES;  

          4.         }  

          5.         NSString *urlString = [[request URL] absoluteString];  

          6.         NSMutableDictionary *urlDict = [IFFrameUtils analysisUrl:urlString];  

          7.         if([urlDict contain:KEY_URL]) {  

          8.         //說明是普通超鏈  

          9.             IFWebViewController *toWebView = [[IFWebViewController alloc] initWithUrl:[urlDict objectForKey:KEY_URL]];  

          10.          toWebView.title = @"鏈接";  

          11.          [self iFPushVC:toWebView animated:YES];  

          12.      } else {  

          13.      //說明是報(bào)表類型的超鏈  

          14.          IFEntryViewType viewType = IFEntryViewTypePage;  

          15.          if([[urlDict objectForKey:KEY_OP] isEqualToString:KEY_VIEWTYPE_WRITE]) {  

          16.              viewType = IFEntryViewTypeWrite;  

          17.          }  

          18.          IFEntryViewController *entryVC = [[IFEntryViewController alloc] initWithPath:[urlDict objectForKey:KEY_PATH] serverUrl:[urlDict objectForKey:SERVERURL_KEY] viewType:viewType];  

          19.          entryVC.title = urlDict[KEY_PATH];  

          20.          [self iFPushVC:entryVC animated:YES];  

          21.      }  

          22.      return NO;  

          23.  }  

          6、測試

          FineReport提供一個(gè)Demo地址供測試。

          服務(wù)器地址:www.finereporthelp.com:8889/app/ReportServer

          用戶名:demo

          密碼:demo

          可用報(bào)表路徑:

          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.frmapp/Operations/area.frm

          ......

          Android集成app

          1. 資源準(zhǔn)備

          準(zhǔn)備好需要集成FineReport App的Android工程,并下載FineReport提供的集成資源包。

          下載FineReport提供的集成資源包,將其解壓,得到如下圖所示幾個(gè)文件:


           

          將解壓出來的libs目錄和res目錄拷貝需要集成的Android工程項(xiàng)目中,并將libs目錄下的JARarmeabi目錄作為依賴庫引用到Android開發(fā)工程中,如下圖:


           

          2. 修改AndroidManifest.xml文件

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

          3. 集成使用FineReport App

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

          3.1 URL直接集成

          使用URL集成. 直接使用URL訪問服務(wù)器工程模板,比如說我們想要集成服務(wù)器下的WorkBook2.cpt模板,并且是填報(bào)的形式,那么,代碼如下:

          1.     Intent intent = new Intent();  

          2.             intent.putExtra("url","http://192.168.100.121:8075/WebReport/ReportServer?reportlet=WorkBook2.cpt&op=write");  

          3.             intent.setClass(this, IntegrationActivity.class);  

          4.             startActivity(intent);  

          注:op=write表示參數(shù)op為write填報(bào)模式,正常預(yù)覽模板,不需要添加op參數(shù)。

          3.2 使用目錄歡迎入口集成

          使用目錄歡迎入口集成,直接登陸報(bào)表主頁或者目錄就相當(dāng)于將FineReport的App嵌入到自己的App當(dāng)中,當(dāng)需要進(jìn)入到FineReport App的時(shí)候,只需要發(fā)送相應(yīng)的用戶名密碼驗(yàn)證即可登錄到FineReportApp的主頁或者目錄頁當(dāng)中,接口如下:

          1.     Intent welcomeIntent = new Intent(this, LoadAppFromWelcomeActivity.class);  

          2.             welcomeIntent.putExtra("username""demo"); // 數(shù)據(jù)決策系統(tǒng) 用戶名  

          3.             welcomeIntent.putExtra("password""demo"); // 數(shù)據(jù)決策系統(tǒng) 用戶密碼  

          4.             welcomeIntent.putExtra("serverIp""http://www.finereporthelp.com:8889/app/ReportServer"); // 數(shù)據(jù)決策系統(tǒng) 地址ip  

          5.             welcomeIntent.putExtra("serverName""demo服務(wù)器"); // 數(shù)據(jù)決策系統(tǒng) 名稱  

          6.             startActivity(welcomeIntent);   

          注:如果服務(wù)器系統(tǒng)中設(shè)置了主頁,那么登錄完成之后就跳轉(zhuǎn)到主頁,如果沒有設(shè)置主頁,就直接顯示目錄頁。

           




          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 金坛市| 当涂县| 和平县| 六枝特区| 澄江县| 宝山区| 明水县| 青川县| 美姑县| 昌江| 大田县| 沐川县| 天峻县| 含山县| 恩平市| 渭南市| 梁河县| 华坪县| 广南县| 周至县| 衡东县| 井冈山市| 永泰县| 临漳县| 虹口区| 佛坪县| 株洲县| 曲周县| 淳化县| 丰宁| 桑植县| 闸北区| 涟源市| 裕民县| 河西区| 车致| 宽甸| 手游| 兴国县| 南漳县| 青海省|