模拟表单向domino post大容量的数据

来源:互联网 发布:淘宝钻号哪里看 编辑:程序博客网 时间:2024/04/29 05:39

用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>");
   }
  }
 }
}

原创粉丝点击