用JS完成POST的过程,由domino数据库的代理接收。以下的JS代码配合后面的JAVA代理修改指定的数据库的指定文档的指定域
function post2Domino() {
var oFORM = document.createElement("FORM");
oFORM.method = "POST";
oFORM.action = S_DbUrl +"/AG_SavePost?openagent&m_seq=" + Math.random(); //AG_SavePost为domino代理
oFORM = document.body.appendChild(oFORM);
var postObj = {
o:oFORM,
createField:function(_type, _attr, _style) {
var newField = document.createElement(_type);
if (_attr) {
for (var k in _attr) {
if (k == 'class') newField.className = _attr[k];
else if (k == 'id') newField.id = _attr[k];
else newField.setAttribute(k, _attr[k]);
}
}
if (_style) { for (var k in _style) newField.style[k] = _style[k]; }
return this.o.appendChild(newField);
},
submit:function() {
this.o.submit();
}
};
postObj.createField("input", /*指定文档ID*/
{name:'F_DocID',value:'<计算的值>'},
{display:'none'}
);
postObj.createField("input", /*指定所在数据库path*/
{name:'F_DBPath',value:'<计算的值>'},
{display:'none'}
);
postObj.createField("input", /*完成之后返回的URL*/
{name:'F_ReturnPath',value:'<计算的值>'},
{display:'none'}
);
postObj.createField("textarea",
{name:'F_ReviewLogRTF',value:document.all.eventtab1.innerHTML},
{display:'none'}
);
postObj.createField("textarea",
{name:'F_ReviewLogRTFS',value:document.all.eventtab2.innerHTML},
{display:'none'}
);
postObj.submit();
}
以下是AG_SavePost代理的内容:该代理通过getDocumentContext得到POST过来的文档,从文档中的域request_content得到JS POST过来的数据,request_content域里面内容大概是这样的: F_DocID=XXXXXX&F_DBPath=XXXXXXXX&F_ReturnPath=XXXXX&F_ReviewLogRTF=XXXXX.........
这里用到URLDecoder类对这里面的内容进行解码。 通过传过来的F_DBPath和F_DocID找到要修改的文档,然后修改它的F_ReviewLogRTF域....
import lotus.domino.*;
import java.net.URLDecoder;
import java.io.*;
public class JavaAgent extends AgentBase {
private static Session ss;
private static AgentContext agc;
private static Document vDoc, doc;
private static Database db;
private PrintWriter pw;
private String errMsg;
private String returnpath;
public static String get_field(String s,String field) throws Exception {
String ret = "";
String[] paramenters;
paramenters = s.split("&");
for(int i = 0; i<paramenters.length; i++) {
if(paramenters[i].startsWith(field + "=")){
ret = paramenters[i].substring(paramenters[i].indexOf(field + "=")+field.length()+1);
ret = URLDecoder.decode(ret,"UTF-8");
}
}
return ret;
}
public void NotesMain() {
try {
ss = getSession();
agc = ss.getAgentContext();
vDoc = agc.getDocumentContext();
pw = getAgentOutput();
String s = vDoc.getItemValueString("request_content");
String dbpath = get_field(s,"F_DBPath");
if(!"".equals(dbpath)) {
db = ss.getDatabase("", dbpath);
if (!db.isOpen()) {
errMsg = "找不到数据库:" + dbpath;
throw new Exception(errMsg);
}
}
String docid = get_field(s,"F_DocID");
returnpath = get_field(s,"F_ReturnPath");
if(!"".equals(docid)) {
doc = db.getDocumentByUNID(docid);
if (doc==null) throw new Exception("找不到文档ID:" + docid);
if (doc.hasItem("F_ReviewLogRTF")) {
Item item = doc.getFirstItem("F_ReviewLogRTF");
item.remove();
}
RichTextItem reviewlog = doc.createRichTextItem("F_ReviewLogRTF");
reviewlog.appendText(get_field(s,"F_ReviewLogRTF"));
if (doc.hasItem("F_ReviewLogRTFS")) {
Item item = doc.getFirstItem("F_ReviewLogRTFS");
item.remove();
}
reviewlog = doc.createRichTextItem("F_ReviewLogRTFS");
reviewlog.appendText(get_field(s,"F_ReviewLogRTFS"));
doc.save(true, true);
}else {
errMsg = "找不到文档ID:" + docid;
throw new Exception(errMsg);
}
} catch(Exception e) {
e.printStackTrace();
errMsg = e.toString();
}finally{
if(errMsg!=null) {
pw.println("操作失败:/n"+errMsg);
}
else{
System.out.println(returnpath);
pw.println("操作成功:/n<a href='" + returnpath + "'>返回</a>");
}
}
}
}