domino xpages實現匯入、匯出功能
Xpages實現匯入匯出功能需要相關的java包,首先要將包新增到專案當中,具體操作如下:
1、開啟視窗----開啟eclipse檢視----開啟包資源管理器。這樣就進入到一個類似eclipse設計的檢視,在這裡有專案的所有設計元素。
2、將java包(需要的包在rar檔案中)貼上到WebContent-------WEB-INF--------lib資料夾下,如圖。
3、在專案上單擊右鍵---構建路徑---配置構建路徑(類似eclipse的構建環境),選擇 庫,然後單擊新增JAR,找到第2步copy過來所有的包,然後新增即可,如圖。
2.匯出 Xpages的匯出功能較為簡單,與CS端並沒有很大的出入,例子為<銷售平臺內控關差平臺>,例子為根據使用者選擇的條件來匯入,如果不需要可以自行簡化,具體操作如下:
1、建立一個定製控制元件,建立各個條件的域與匯出按鈕。如圖。
2、在程式碼----java---中建立新java類,名稱為xpages/MyReport.java。
3、在第一步建立的定製控制元件中的匯出按鈕裡新增以下程式碼:
//獲得元件
Var djDateTextBox1:com.ibm.xsp.extlib.component.dojo.form.UIDojoDateTextBox = getComponent("djDateTextBox1");
var djDateTextBox2:com.ibm.xsp.extlib.component.dojo.form.UIDojoDateTextBox = getComponent("djDateTextBox2");
//獲得使用者選擇條件
requestScope.put("dc_auditStart",djDateTextBox1.value);
requestScope.put("dc_auditOver",djDateTextBox2.value);
requestScope.put("dc_auditType",currentDocument.getItemValue("dc_auditType"));
requestScope.put("dc_venture",currentDocument.getItemValue("dc_venture"));
requestScope.put("dc_area",currentDocument.getItemValue("dc_area"));
//建立java物件,執行exportExcel方法
var myExportTool = new xpages.MyReport();
myExportTool.exportExcel();
4、在第二步建立的java類中新增如下程式碼
package xpages;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Vector;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import lotus.domino.Database;
import lotus.domino.Document;
import lotus.domino.DocumentCollection;
import lotus.domino.Session;
import lotus.domino.View;
import lotus.domino.local.DateTime;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFCreationHelper;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.CellRangeAddress;
public class MyReport {
public void exportExcel() {
// 建立一個新工作簿物件從poi庫
HSSFWorkbook wb = new HSSFWorkbook();
// 建立額外的表使用相同的語法和不同的表的名稱
HSSFSheet sheet1 = wb.createSheet("firstsheet");
// 建立助手類和日期風格
HSSFCreationHelper createHelper = wb.getCreationHelper();
HSSFCellStyle dateStyle = wb.createCellStyle();
dateStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy"));
HSSFCellStyle headerStyle = wb.createCellStyle();
HSSFFont headerFont = wb.createFont();
headerFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
headerStyle.setFont(headerFont);
// 為電子表格建立檔名
String fileName = "report.xls";
FacesContext context = FacesContext.getCurrentInstance();
Session session = (Session) context.getApplication()
.getVariableResolver().resolveVariable(context, "session");
// Faces上下文全域性物件提供了訪問servlet
// 通過外部環境的內容
ExternalContext extCont = context.getExternalContext();
// servlet的響應物件提供的控制響應物件
HttpServletResponse pageResponse = (HttpServletResponse) extCont
.getResponse();
HttpServletRequest request = (HttpServletRequest) extCont.getRequest();
//建立表頭
HSSFRow row = sheet1.createRow(0);
HSSFCell hCell = row.createCell(0);
hCell.setCellValue("統計匯出");
hCell.setCellStyle(headerStyle);
CellRangeAddress cra=new CellRangeAddress(0, 0, 0, 99);
sheet1.addMergedRegion(cra);
//第一行(部分程式碼)
row = sheet1.createRow(1);
row.setRowStyle(headerStyle);
row.createCell(0).setCellValue("審計型別");
cra = new CellRangeAddress(1, 1, 0, 0);
sheet1.addMergedRegion(cra);
row.createCell(1).setCellValue("經營體維度");
cra = new CellRangeAddress(1, 1, 1, 1);
sheet1.addMergedRegion(cra);
row.createCell(2).setCellValue("區域維度");
cra = new CellRangeAddress(1, 1, 2, 2);
sheet1.addMergedRegion(cra);
//獲取條件資料(請參照第三步中獲得的資料)
Vector dc_auditType = (Vector)request.getAttribute("dc_auditType");
Vector dc_venture = (Vector)request.getAttribute("dc_venture");
Vector dc_area = (Vector)request.getAttribute("dc_area");
Date dc_auditStart = (Date)request.getAttribute("dc_auditStart");
Date dc_auditOver = (Date)request.getAttribute("dc_auditOver");
//資料匯出(下面是你需要自己修改的程式碼了)
Database db = null;
View view = null;
Document doc = null;
try {
db = session.getCurrentDatabase();
view = db.getView("vh_main");
doc = view.getFirstDocument();
} catch (Exception e1) {
e1.printStackTrace();
}
int rowNum = 2;//資料行的位置
while(doc != null){
//判斷文件是否符合條件
boolean bl1 = false;//審計型別判斷
boolean bl2 = false;//經營體維度判斷
boolean bl3 = false;//區域維度判斷
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
boolean dt1 = false;
boolean dt2 = false;
System.out.print(dc_auditType);
try {
if(" ".equals(dc_auditType.get(0))){
bl1 = true;
}
else if (dc_auditType.get(0).equals(String.valueOf(doc.getItemValue("auditType").get(0)))){
bl1 = true;
}
if(" ".equals(dc_venture.get(0))){
bl2 = true;
}
else if (dc_venture.get(0).equals(String.valueOf(doc.getItemValue("venture").get(0)))){
bl2 = true;
}
if(" ".equals(dc_area.get(0))){
bl3 = true;
}
else if (dc_area.get(0).equals(String.valueOf(doc.getItemValue("area").get(0)))){
bl3 = true;
}
if(doc.getItemValue("auditStart") != null && doc.getItemValue("auditStart").size() != 0 && dc_auditStart != null && dc_auditOver != null){//時間不是空,則進行判斷
String x = String.valueOf(doc.getItemValue("auditStart").get(0));
String y = String.valueOf(doc.getItemValue("auditOver").get(0));
if(x.compareTo( formatter.format(dc_auditStart)) >0 && y.compareTo( formatter.format(dc_auditOver)) <0 ){
dt1 = true;
}
}
else{
dt1 = true;
}
}
catch (Exception e2) {
System.out.println("比較出現異常biubiubiu~~~~~");
e2.printStackTrace();
}
//匯出文件中的資料(這是匯出內容的核心資料)
if(bl1 && bl2 && bl3 && dt1){
try{
row = sheet1.createRow(rowNum);
row.createCell(0).setCellValue(doc.getItemValue("auditType") != null && doc.getItemValue("auditType").size() != 0?String.valueOf(doc.getItemValue("auditType").get(0)):"");//審計型別
row.createCell(1).setCellValue(doc.getItemValue("venture") != null && doc.getItemValue("venture").size() != 0?String.valueOf(doc.getItemValue("venture").get(0)):"");//經營體維度
row.createCell(2).setCellValue(doc.getItemValue("area") != null && doc.getItemValue("area").size() != 0?String.valueOf(doc.getItemValue("area").get(0)):"");
row.createCell(3).setCellValue(doc.getItemValue("auditStart") != null && doc.getItemValue("auditStart").size() != 0?String.valueOf(doc.getItemValue("auditStart").get(0)):"");
}
catch (Exception e1) {
e1.printStackTrace();
}
rowNum++;
}
try {
doc = view.getNextDocument(doc);
} catch (Exception e) {
e.printStackTrace();
}
}
//下面的程式碼不需要關心,複製就可以了
ServletOutputStream pageOutput = null;
try {
pageOutput = pageResponse.getOutputStream();
pageResponse.setContentType("application/x-ms-excel");
pageResponse.setHeader("Cache-Control", "no-cache");
pageResponse.setHeader("Content-Disposition", "inline; filename="
+ fileName);
// Write the output, flush the buffer and close the stream
wb.write(pageOutput);
pageOutput.flush();
pageOutput.close();
} catch (IOException e) {
e.printStackTrace();
}
context.responseComplete();
}
}
5、以上就完成了匯出功能,需要注意的是匯出功能較難除錯,很有可能出現死迴圈等錯誤,除錯需要在程式碼中多處print,然後檢視控制檯。
3.匯入 在Xpages中匯入功能目前並不人性化,但是基礎功能是可以實現的。實現的原理是使用者事先將一個表格存放在一個檢視的第一個文件中,然後再點選匯入實現功能。具體操作如下:
1、首先需要一個匯入的檢視,再建立一個匯入的表單,表單中有作者,有檔案上載和檔案下載兩個元件,如圖。
2、在java中建立類,類名為xpages/MyImpotTool_1.java。
3、在檢視中新增匯入按鈕,按鈕中加入以下程式碼:
var myImportTool = new xpages.MyImportTool_1();
myImportTool.importExcel();
view.postScript(" alert('匯入成功!'); ");
4、在第二步建立的java類中新增以下程式碼:
package xpages;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import lotus.domino.Database;
import lotus.domino.Document;
import lotus.domino.EmbeddedObject;
import lotus.domino.RichTextItem;
import lotus.domino.Session;
import lotus.domino.View;
import org.apache.commons.io.IOUtils;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import java.util.*;
import lotus.domino.*;
public class MyImportTool_1 {
public void importExcel() {
FacesContext context = FacesContext.getCurrentInstance();
Session session = (Session) context.getApplication()
.getVariableResolver().resolveVariable(context, "session");
ExternalContext extCont = context.getExternalContext();
HttpServletResponse pageResponse = (HttpServletResponse) extCont
.getResponse();
HttpServletRequest request = (HttpServletRequest) extCont.getRequest();
try {
Database database = session.getCurrentDatabase();
View view = database.getView("匯入表格所在的檢視");
Document doc = view.getFirstDocument();
RichTextItem body = null;
body = (RichTextItem) doc.getFirstItem("data");
// String path = jhFile.getBody().getAbsolutePath();
//body.getEmbeddedObject("").getInputStream();
EmbeddedObject e = (EmbeddedObject)body.getEmbeddedObjects().get(0);
InputStream is = e.getInputStream();
byte[] buf = IOUtils.toByteArray(is);
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(buf);
POIFSFileSystem fs;
HSSFWorkbook wb;
HSSFSheet sheet;
HSSFRow row;
fs = new POIFSFileSystem(byteArrayInputStream);
wb = new HSSFWorkbook(fs);
sheet = wb.getSheetAt(0);
System.out.print("2");
//遍歷所有的行,取出資料,建立文件
for (int i = 1; i <= sheet.getPhysicalNumberOfRows(); i++) {
row=sheet.getRow(i);
Document cpdoc = database.createDocument();
cpdoc.replaceItemValue("form", "main");
//cpdoc.replaceItemValue("cjdate", new Date());
//DateTime dt = session.createDateTime("Today");
//dt.setNow();
//主表單隱藏域中的資訊
cpdoc.replaceItemValue("author", session.getUserName());
cpdoc.replaceItemValue("step",0);
cpdoc.replaceItemValue("status", "匯入待提交");
cpdoc.replaceItemValue("lotNumber","無編號" );
System.out.print("3");
if(row.getCell(1) != null){
cpdoc.replaceItemValue("auditType", row.getCell(1).getStringCellValue()); //審計型別
}
if(row.getCell(2) != null){
cpdoc.replaceItemValue("venture", row.getCell(2).getStringCellValue());//經營體維度
}
if(row.getCell(3) != null){
cpdoc.replaceItemValue("area", row.getCell(3).getStringCellValue());//區域維度
}
System.out.println(i);
cpdoc.save();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}