#
摘要: NET系統(tǒng)集成有自己獨(dú)立的登錄驗(yàn)證方式。比如,跟報(bào)表集成時(shí),不需要再使用報(bào)表內(nèi)置的登錄界面,只需要將報(bào)表默認(rèn)的參數(shù)用戶名fr_username和密碼fr_password發(fā)送給報(bào)表系統(tǒng),觸發(fā)一下報(bào)表驗(yàn)證方式就可以實(shí)現(xiàn)單點(diǎn)登錄了,以下用FineReport的.NET跨域單點(diǎn)登錄案例簡單介紹一下。
系統(tǒng)本身有獨(dú)立的登錄驗(yàn)證方式如下圖:
1.觸發(fā)報(bào)表驗(yàn)證方法
報(bào)表集成時(shí)不需要再一次...
閱讀全文
對于報(bào)表開發(fā),很多情況下,自帶的函數(shù)就能滿足大部分用戶的報(bào)表制作需求,F(xiàn)ineReport也不例外。但是在一些特殊領(lǐng)域,可能需要一些特殊的函數(shù),在這種情況下,F(xiàn)ineReport提供了自定義函數(shù)機(jī)制,可以由用戶根據(jù)業(yè)務(wù)需要自己來定義一些函數(shù),但這些函數(shù)必須滿足函數(shù)定義規(guī)則。
先來了解一下FineReport的函數(shù)定義規(guī)則:Functionname(Para,Para,...),其中Functionname為函數(shù)名,Para為參數(shù)。
每一個(gè)函數(shù)都被定義成一個(gè)類,這個(gè)類必須要實(shí)現(xiàn)Function這個(gè)接口,在運(yùn)算的時(shí)候首先通過函數(shù)名反射取得這個(gè)類,然后調(diào)用它的run(Object[] agrs)方法。下面以SUM這個(gè)函數(shù)為例。
SUM函數(shù)原理
由程序可以看到,SUM類用來運(yùn)算SUM函數(shù),他繼承了AbstractFunction類,而AbstractFunction實(shí)現(xiàn)了Function這個(gè)接口。
當(dāng)函數(shù)運(yùn)算的時(shí)候,先根據(jù)函數(shù)名取得運(yùn)算該函數(shù)的類,如SUM(2,4,true)這個(gè)函數(shù)先根據(jù)函數(shù)名取得SUM這個(gè)類,然后調(diào)用SUM類的run(Object[] args)方法,args中存放的是SUM函數(shù)的參數(shù),運(yùn)算的時(shí)候可以從args中取得參數(shù)進(jìn)行運(yùn)算。如執(zhí)行結(jié)果為SUM(2,4,true)=2+4+1=7。
SUM函數(shù)所使用代碼:
package com.fr.report.script;
import java.lang.reflect.Array;
import com.fr.report.script.core.FArray;
import com.fr.report.script.core.FunctionHelper;

public class SUM extends AbstractFunction
{

public Object run(Object[] args)
{
double result = 0;

for (int i = 0; i < args.length; i++)
{

if (args[i] == null)
{
continue;
}
result += parseObject(args[i]);
}
return FunctionHelper.parsePrimitiveDouble(result);
}

private double parseObject(Object obj)
{

if (obj instanceof Number)
{
return ((Number) obj).doubleValue();

} else if (obj instanceof Boolean)
{
return ((Boolean) obj).booleanValue() ? 1 : 0;

} else if (obj instanceof FArray)
{
FArray array = (FArray) obj;
double sum = 0;

for (int i = 0; i < array.length(); i++)
{
sum += parseObject(array.elementAt(i));
}
return sum;

} else if (obj != null)
{

try
{
return Double.parseDouble(obj.toString());

} catch (NumberFormatException exp)
{
return 0;
}
}
return 0;
}
}

實(shí)現(xiàn)步驟
編寫自定義函數(shù)
下面以一個(gè)簡單的自定義函數(shù)例子來說明使用自定義函數(shù)。我們定義一個(gè)函數(shù)StringCat,他的作用是把所有的參數(shù)以字符串的形式連接起來。
StringCat函數(shù)使用規(guī)則為StringCat(Para,Para,Para…….);
其中Para為該函數(shù)的參數(shù),個(gè)數(shù)不限。
由概述可知AbstractFunction實(shí)現(xiàn)了Function這個(gè)接口,因此StringCat可以直接繼承AbstractFunction類,完整代碼如下:
package com.fr.function;

import com.fr.script.AbstractFunction;


public class StringCat extends AbstractFunction
{

public Object run(Object[] args)
{
String result = "";
Object para;

for (int i = 0; i < args.length; i++)
{
para = args[i];
result += para.toString();
}
return result;
}
}

這里要注意,使用函數(shù)StringCat(Para,Para,Para…..)時(shí),根據(jù)函數(shù)名取得運(yùn)算該函數(shù)的類StringCat,并將參數(shù)傳入類中的args對象數(shù)組中,執(zhí)行該類的run函數(shù)。
而在run函數(shù)中即實(shí)現(xiàn)了將傳入的參數(shù)以字符串的形式連接起來。并返回最終形成的字符串。
編譯自定義函數(shù)
將編譯后的StringCat.class放到FineReport的安裝目錄WEB-INF下面的classes目錄下,因?yàn)镾tringCat.java屬于包c(diǎn)om.fr.function,所以StringCat.class需要放到classes\com\fr\function目錄下。
注冊自定義函數(shù)
生成該函數(shù)的類后需要在設(shè)計(jì)器中進(jìn)行注冊,才可以使用該函數(shù)。打開服務(wù)器|函數(shù)管理器,選擇剛剛定義好了StringCat類,如下圖
函數(shù)名稱可以自定義,如這邊定義為StringCat;
同時(shí)可以添加該函數(shù)的使用說明,如上圖所示的描述
使用自定義函數(shù)
注冊好自定義函數(shù)后,制作報(bào)表時(shí)便可直接使用了,使用方法與內(nèi)置的函數(shù)是相同的。
新建報(bào)表,定義兩個(gè)報(bào)表參數(shù)para1、para2,類型分別為字符串型與整形,默認(rèn)值分別為空字符串與0
在空白報(bào)表的任意單元格里寫入公式:=StringCat($para1,$para2)(注意:寫入公式的時(shí)候在參數(shù)名前加$,表明這是使用的參數(shù))
點(diǎn)擊分頁預(yù)覽在參數(shù)控件中,寫入?yún)?shù)值如para1為:FineReport,para2為:123。
點(diǎn)擊查詢可以看到結(jié)果

說明StringCat公式可以正常使用啦。
對于一款軟件或產(chǎn)品,尤其是一些企業(yè)級應(yīng)用的IT軟件,是不可能滿足所有需求的。尤其是針對業(yè)務(wù)化的產(chǎn)品需求,某些個(gè)性化的需求就要進(jìn)行二次開發(fā)。二次開發(fā)需要API接口,無論是什么樣的開發(fā),開發(fā)人員都需要對開發(fā)的產(chǎn)品大內(nèi)部結(jié)構(gòu)有所了解。在應(yīng)用廣泛的企業(yè)報(bào)表領(lǐng)域,開發(fā)在所難免,下圖展示了我在工作中開發(fā)的FineReport的內(nèi)核示意圖。

這款類似于Excel的報(bào)表軟件,成為設(shè)計(jì)器。在設(shè)計(jì)器中新建一個(gè)工作薄就是建了一個(gè)WorkBook,WorkBook相當(dāng)于一個(gè)容器,里面可以放任意個(gè)WorkSheet,就相當(dāng)于在設(shè)計(jì)器的一個(gè)工作薄中新建了多個(gè)sheet。每個(gè)WorkSheet是由任意個(gè)單元格CellElement組成,因此CellElement是一個(gè)模板的最小元素。獲得WorkBook后,必須取得其中的某個(gè)WorkSheet才能對這個(gè)報(bào)表中的CellElement進(jìn)行操作,這對于模板還是結(jié)果都是一樣的,如果以模板為例,最基本的內(nèi)核結(jié)構(gòu)就是如下面這張圖
由于每個(gè)部分各自包含了很多屬性,比如可以設(shè)置單元格的前景、背景、邊框、字體、字號等;又比如每個(gè)WorkSheet中可以添加,刪除單元格、可以設(shè)置每個(gè)sheet的頁面屬性、可以給每個(gè)sheet中添加圖表懸浮元素等;再比如可以對WorkBook進(jìn)行執(zhí)行獲得結(jié)果并導(dǎo)出成各種格式、可以進(jìn)行打印、添加工具欄等等。
正是基于這樣,再開發(fā)時(shí)會(huì)有豐富的API接口可供調(diào)用。以下是FineReport包含的所有開放的API。
由圖可有看出,對于這樣的開發(fā)可以從以下幾個(gè)功能點(diǎn)進(jìn)行開發(fā)。
報(bào)表數(shù)據(jù)源
設(shè)計(jì)器本身已經(jīng)提供了數(shù)據(jù)庫數(shù)據(jù)源、文本數(shù)據(jù)源、xml數(shù)據(jù)源等多種數(shù)據(jù)來源方式,同時(shí)還可以通過java程序自行生成數(shù)據(jù)來源,只需要實(shí)現(xiàn)TableData接口便可以了。
輸入輸出報(bào)表
在程序中新建一個(gè)報(bào)表對象同時(shí)也可以直接讀取一個(gè)cpt模板來生成,經(jīng)過處理的報(bào)表最終可以導(dǎo)出成多種形式,可以保存為程序網(wǎng)絡(luò)報(bào)表在web端直接訪問,也可以導(dǎo)出為excel、pdf、word、cpt等多種格式文件。
設(shè)置單元格屬性及報(bào)表屬性編輯
可以對報(bào)表對象的單元格屬性、web屬性、參數(shù)、頁面設(shè)置等多個(gè)屬性進(jìn)行控制,可以自由控制單元格的顯示樣式、工具欄的按鈕、參數(shù)面板的展示、參數(shù)的賦值等等。
自定義填報(bào)
開放的填報(bào)api接口能夠根據(jù)自己的需要來定義填報(bào)入庫方式,通過填報(bào)接口,可以往數(shù)據(jù)庫中保存用戶操作日志、在填報(bào)成功與失敗時(shí)進(jìn)行各種處理等等。
開發(fā)的工作雖枯燥也有意思,閑來無事時(shí)也會(huì)開發(fā)一些有趣的應(yīng)用,比如下圖把天氣集成到報(bào)表頁面。

關(guān)于這個(gè)問題,制作數(shù)據(jù)地圖的方法已不新奇,總體來說有這么幾類方案:
一類方案:直接在excel里制作
優(yōu)勢:個(gè)人小數(shù)據(jù)量應(yīng)用較為方便簡單
缺點(diǎn):需要熟悉VBA,且更強(qiáng)大的功能對VBA水平要求較高
1、繪制地圖圖形 + VBA宏語言
思路:用插入圖形"任意多邊形"繪制地圖;每一個(gè)"任意多邊形"賦予正確名稱;對"任意多邊形"賦值;利用VBA對"任意多邊形"的值進(jìn)行操作, 例如上色。
先準(zhǔn)備一張所需要的地圖圖片,網(wǎng)上都有,可以下載
然后利用插入繪制多邊形圖片將地圖中的區(qū)域描邊

選定好的區(qū)域可以在左上角修改名稱

將數(shù)據(jù)表中的數(shù)據(jù)和地圖中的地區(qū)做關(guān)聯(lián),這里就要用到VBA了。
代碼:
Sub ProvRefill()
ActiveSheet.Shapes.Range(Array("shandong")).Select
With Selection.ShapeRange.Fill
.Visible = msoTrue
.ForeColor.ObjectThemeColor = msoThemeColorAccent1
.ForeColor.TintAndShade = 0
.ForeColor.Brightness = -0.5
.Transparency = 0
.Solid
End With
End Sub
這段代碼是修改地圖所選區(qū)域的顏色的,其他功能類似,懂VBA的會(huì)覺得簡單,不懂的可以自行百度。
2、EXCEL插件集成
這類插件有很多,推薦Power Map for Excel 2013,安裝好之后,選擇數(shù)據(jù)區(qū)域,啟動(dòng)就行


二類方案:其他軟件
優(yōu)勢:地圖已集成在內(nèi),可連接數(shù)據(jù)庫,已有功能強(qiáng)大大數(shù)據(jù)量處理具有優(yōu)勢
缺點(diǎn):自定義開發(fā)對人員水平要求較高,較困難
這一類軟件一般是數(shù)據(jù)可視化的軟件,能用到EXCEL數(shù)據(jù)源的,現(xiàn)在比較普遍的是報(bào)表工具和所謂商業(yè)智能大數(shù)據(jù)工具。
不多說,大家可能覺得陌生,那就直接上實(shí)例。
這里介紹FineReport(功能強(qiáng)大最實(shí)際的報(bào)表工具)
展示數(shù)據(jù)地圖不在話下,關(guān)鍵有地圖鉆取功能。
所謂鉆取就是:比如你點(diǎn)擊山東省,進(jìn)入山東省省地圖,顯示山東省各市的數(shù)據(jù),數(shù)據(jù)的展示方式可以使用其他圖表,比如條形圖、氣泡圖等等。


詳細(xì)步驟:
1、 準(zhǔn)備數(shù)據(jù)源
將excel的數(shù)據(jù)導(dǎo)入到這個(gè)報(bào)表設(shè)計(jì)器里,如果你的excel數(shù)據(jù)是取自于數(shù)據(jù)庫的話,可以直接從設(shè)計(jì)器里讀取數(shù)據(jù)庫的數(shù)據(jù)。
2、 合并一片單元格,點(diǎn)擊菜單欄中的插入>單元格元素>插入圖表,選擇地圖,然后點(diǎn)擊確定,如下圖:(這里申明一下,這個(gè)軟件類似于EXCEL,所以一些操作術(shù)語何以類比于EXCEL)

1、 選擇地圖類型,國家地圖、省級地圖還是其他云云,或者你有自定義的SVG地圖也行。這里注意,地圖的區(qū)域名要和區(qū)域數(shù)據(jù)字段的名字對應(yīng)。

個(gè)人覺得鉆取才是其亮點(diǎn),所以這里一定要介紹一下。
鉆取:
定義好地圖的類型之后,就可以為地圖定義數(shù)據(jù)來源了,選中地圖,點(diǎn)擊圖表屬性表-數(shù)據(jù),進(jìn)入數(shù)據(jù)設(shè)置面板,地圖展現(xiàn)方式選擇多層鉆取,如下圖:

從上圖可以看到,鉆取層級下有個(gè)中國的文件夾,雙擊即可打開查看中國下面的省份,選中中國文件夾,右擊,則會(huì)跳出層級設(shè)置對話框,如下圖:

要實(shí)現(xiàn)點(diǎn)擊山東省能出現(xiàn)一張柱狀圖,這個(gè)其實(shí)是兩張圖表關(guān)聯(lián)的,所謂“聯(lián)動(dòng)”。
聯(lián)動(dòng):
合并一片單元格,點(diǎn)擊插入>單元格元素>插入圖表,選擇柱形圖,點(diǎn)擊確定即可添加一張柱形圖。
柱形圖的數(shù)據(jù)來源:(這里我都是直接用數(shù)據(jù)庫的數(shù)據(jù)源)

在此,地圖和柱形圖都已經(jīng)設(shè)置好了,如果要實(shí)現(xiàn)聯(lián)動(dòng),需要在設(shè)置交互屬性。
選中地圖,在圖表屬性表中選擇特效,點(diǎn)擊交互屬性,添加一個(gè)超級鏈接,即點(diǎn)擊,添加一個(gè)圖表超鏈-聯(lián)動(dòng)單元格,設(shè)置如下圖:

到這里基本就完成了,感覺自己做得圖有些low,別毀了人家名聲,其實(shí)人家功能很強(qiáng)大,可視化很炫的。
另附幾張圖:



其他軟件的話,還有商業(yè)智能可視化類的tableau, FineBI,可能對大家比較陌生,就不做教程介紹了。
總之,利用excel中的數(shù)據(jù)源制作地圖圖表方法多多,不當(dāng)之處還請指正。
很多人會(huì)遇到這種情況,在瀏覽頁面時(shí),發(fā)現(xiàn)鼠標(biāo)右鍵不啟用了。咦?刷新刷新再刷新,并無卵用,然后怒敲鼠標(biāo)(沒錯(cuò),我就是這么暴力),更換瀏覽器,無用,最后棄之。其實(shí),這是因?yàn)樵O(shè)計(jì)人員對頁面啟用了“禁用右鍵”功能,目的是為了防止內(nèi)容被抄。
曾經(jīng)也是受害者的我,如今作為一名小小的IT開發(fā)人員,就來告訴你如何“禁用右鍵”!
這里列舉一個(gè)我在利用FineReport開發(fā)報(bào)表時(shí)遇到的案例。
啟用“禁止右鍵”
報(bào)表大家都懂吧,啟用“禁用右鍵”功能,往往是出于展示過程中的數(shù)據(jù)安全和操作上的失誤考慮(想想銀行動(dòng)輒幾千幾百萬的金額,分分鐘要長個(gè)心眼啊)。
首先在頁面中調(diào)用模板,一般是將url放在iframe中,然后通過點(diǎn)擊相應(yīng)的樹節(jié)點(diǎn)查看報(bào)表,一般報(bào)表都會(huì)設(shè)置權(quán)限,如果設(shè)置權(quán)限,登錄系統(tǒng)后可能有些用戶通過點(diǎn)擊右鍵中的屬性查看url然后訪問,這樣對系統(tǒng)來說其實(shí)是很不安全的,因此禁止用戶通過右鍵查看url,此時(shí)可以使用禁用菜單右鍵功能。
2. 實(shí)現(xiàn)步驟
點(diǎn)擊模板>模板web屬性>(填報(bào),數(shù)據(jù)分析,分頁預(yù)覽設(shè)置),選擇為該模板單獨(dú)設(shè)置,在下面的事件設(shè)置里面添加一個(gè)加載結(jié)束事件,完整js代碼如下:
1.//點(diǎn)擊右鍵 無動(dòng)作
document.oncontextmenu=new Function("return false");
2.//點(diǎn)擊右鍵 彈出提示

document.oncontextmenu=function(e)
{
alert("提示內(nèi)容");
return false;
}
這段代碼的基本原理是讓用戶的頁面右鍵點(diǎn)擊事件返回false,禁止彈出菜單。
如果模板中有參數(shù)面板,希望一調(diào)用模板就禁用右鍵,而不是查詢之后禁用,則需要在參數(shù)面板的查詢按鈕中添加初始化事件,寫入上述js代碼。


查詢之前就做提示和禁用
破解“禁用右鍵”
找到瀏覽器頂部菜單中的【工具】按鈕,在下拉菜單中,選擇【Internet選項(xiàng)】
打開Internet選項(xiàng)后,再切換到【安全】選項(xiàng)卡,然后再點(diǎn)擊底部的【自定義級別】
然后在打開的【安全設(shè)置-Internet區(qū)域】對話框中,找到【活動(dòng)腳本】設(shè)置選項(xiàng),然后將默認(rèn)的“啟用”更改為【禁用】,最后再一路點(diǎn)擊底部的【確定】。

然后關(guān)閉再重啟瀏覽器,再打開剛剛的網(wǎng)頁,你就會(huì)發(fā)現(xiàn)“殘疾”的鼠標(biāo)右鍵能正常點(diǎn)擊了。
以上就是我的方法,不足之處還請多多指點(diǎn)。
摘要: 今天我們來聊聊Java防盜鏈,多說無用,直接上應(yīng)用案例。
這里所用的工具是報(bào)表軟件FineReport,搭配有決策系統(tǒng)(一個(gè)web前端展示系統(tǒng),主要用于權(quán)限控制),可以采用java防盜鏈的方式來實(shí)現(xiàn)頁面權(quán)限。
瀏覽器中直接輸入報(bào)表URL的時(shí)候,它的頭文件是空的,因此,可以在訪問的時(shí)候做兩個(gè)判斷:頭文件是否為空以及以什么頁面進(jìn)行跳轉(zhuǎn),如果不符合跳到錯(cuò)誤頁面即可。
什么是Referer?
這里...
閱讀全文
1. 環(huán)境搭建
1.1 環(huán)境準(zhǔn)備
首先確認(rèn)HANA Studio的環(huán)境是否允許工程進(jìn)行NewFile的操作,不行的話要考慮更新Studio的版本。

HANAStudio需要依賴Java jdk1.6或者1.7的版本

1.2 操作步驟
需要獲取到SYSTEM賬號的權(quán)限,在SYSTEM權(quán)限下進(jìn)行操作
Adda System

填寫正確的主機(jī)名(如IP地址)和HANA的instance number(詢問管理員獲得)

填寫賬號名和密碼,點(diǎn)擊finish

Create repository
點(diǎn)擊Repositories頁簽,Create repository Workspace

新建一個(gè)Package或者選擇一個(gè)原有的Package
如下圖,右鍵->New->Repository Package 新建Package,再彈出的頁面輸入包名即可創(chuàng)建

New file XMLASrvDef.xsxmla
在新建的包下新建文件XMLASrvDef.xsxmla

編輯文件,輸入service{*},點(diǎn)擊激活按鈕,如下圖:

激活后的文件狀態(tài)發(fā)生改變

Newfile .xsapp
同理,新建文件.xsapp,不需要輸入內(nèi)容,點(diǎn)擊激活按鈕
Newfile . xsprivileges
代碼:
{"privileges":
[{"name":"SYSTEM","description":"Administrationprivilege"}]
}
同理,新建文件. xsprivileges,編輯文件,輸入代碼如下:點(diǎn)擊激活按鈕
New file .xsaccess
同理,新建文件. xsaccess,編輯文件,輸入代碼如下:
{
"exposed" : true,
"authorization" :["test::SYSTEM"]
}
點(diǎn)擊激活按鈕
Newfile test.html
用于測試環(huán)境是否新建成功,同理編輯文件,點(diǎn)擊激活按鈕

配置必要的權(quán)限

Analytic Privileges中添加_SYS_BI_CP_ALL

Application Privileges中添加test::SYSTEM

1.3 測試連接
確保HANA 環(huán)境中至少存在一個(gè)Analytic view,假如沒有,需要自己新建用于測試
打開瀏覽器,輸入地址,測試連接

地址的格式:http://hostname:80[instance number]/test/XMLASrvDef.xsxmla
輸入用戶名和密碼結(jié)果返回404,說明服務(wù)器接到了請求,給出了響應(yīng)
保險(xiǎn)起見,可以輸入http://hostname:80[instance number]/test/test.html

如果看到上圖,說明服務(wù)已經(jīng)開啟
2.新建XMLA數(shù)據(jù)連接
點(diǎn)擊服務(wù)器>定義數(shù)據(jù)連接,新建一個(gè)XMLA數(shù)據(jù)連接,數(shù)據(jù)庫類型選擇SAP HANA,填寫url與賬號密碼,選擇Catalog,測試連接,連接成功即可


3. FAQ
3.1
假如以上權(quán)限配置好后仍舊出現(xiàn)問題,嘗試配置如下權(quán)限Granted Roles中添加
sap.hana.uis.db::SITE_DESIGNER: to designapplication sites
sap.hana.uis.db::SITE_USER: to useapplication sites
sap.hana.xs.lm.roles::Administrator
sap.hana.xs.ide.roles::EditorDeveloper
Object privileges中添加
GRANT_ACTIVATED_ROLE
3.2 環(huán)境搭建中遇到的問題
1.Serverreturned HTTP response code: 403 for URL
可能是(1)用戶名密碼錯(cuò)誤 (2)用戶權(quán)限沒有配置好 (3)新建的文件如privileges沒有激活,需要檢查
2.Serverreturned HTTP response code: Connection refused: connect
可能是設(shè)計(jì)器中填寫的url有問題,檢查ip地址,檢查端口號,檢查xsxmla文件所在的路徑是否輸入正確
3.新建的文件激活時(shí)遇到問題
請聯(lián)系SAP管理員
3.3 jdbc連接hana的注意點(diǎn)

圖中的SQL驗(yàn)證查詢是必填的選項(xiàng),這個(gè)sql的獲取,可以通過以下途徑
打開HANAStudio,隨便預(yù)覽一個(gè)數(shù)據(jù)源,點(diǎn)擊右上角的show log可以查看歷史查詢的SQL語句,把語句拿過來復(fù)制粘貼到此處即可
摘要: 文件輸出的多樣性,準(zhǔn)確性和穩(wěn)定性對于我們常用的報(bào)表軟件來說很重要。報(bào)表的輸入是指從報(bào)表的模板文件(XML格式的)創(chuàng)建WorkBook對象,輸出則指將報(bào)表保存為各種格式文件,比如Pdf、Excel、Word這種常見的文件格式,比如FineReport還支持cpt、Svg、Csv、Image(包含png、 jpg、gif、 bmp、wbmp)等多種文件格式。
...
閱讀全文
摘要: 數(shù)據(jù)庫保存的是陽歷日期,有時(shí)候會(huì)遇到把陽歷換成陰歷的需求,在報(bào)表開發(fā)過程中,可以首先定義一個(gè)可以將陽歷轉(zhuǎn)為陰歷的類,然后自定義FineReport函數(shù),在run方法中獲取年月日參數(shù)并調(diào)用之前的類將陽歷轉(zhuǎn)為陰歷,最終返回給報(bào)表。
閱讀全文
摘要: 很多人在開發(fā)報(bào)表的時(shí)候會(huì)遇到將多張表樣相同的excel導(dǎo)入到模板,然后提交至數(shù)據(jù)庫中。但問題是很多情況,在線導(dǎo)入不支持一次性選擇多個(gè)excel,一次只能選擇一個(gè)excel,也不能將多個(gè)excel中的數(shù)據(jù)在不提交入庫的前提下導(dǎo)入到模板中,即如果在導(dǎo)入excel之前,web頁面里面有數(shù)據(jù),導(dǎo)入excel之后會(huì)覆蓋之前的數(shù)據(jù).這樣的問題可以利用FineReport自定義一個(gè)excel導(dǎo)入按鈕來解決
閱讀全文