📄 agsavepaib.java.svn-base
字号:
package com.fzet.cois.dividework.agents;
/*
* @author: yeshq
* @date:2007-8-11
* 保存周排班数据和个人的排班数据
* 运行逻辑:
* 1、先检查有无原来的个人排班数据,如果有,则全部删除
* 2、根据页面上的xml生成个人排班数据
* 3、保存部门的周表单数据
*/
import java.io.*;
import com.fzet.cois.common.scriptLib.Common;
import com.fzet.cois.common.scriptLib.ErrHandle;
import lotus.domino.*;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
public class AgSavePaib extends AgentBase {
public void NotesMain() {
ErrHandle err = null;
PrintWriter pw = null;
Session session = null;
AgentContext ac = null;
Database db = null;
lotus.domino.Document doc = null;
lotus.domino.Document docPersonPaib = null;
lotus.domino.Document docTemp = null;
View vwUser = null;
View vwPersonPaib = null; // 个人排班视图
DocumentCollection dcPersonPaib = null; // 个人排班文档集
String sbResult = null; // 返回结果
DocumentBuilderFactory domfac = DocumentBuilderFactory.newInstance();
DocumentCollection dc = null;
try {
session = getSession();
ac = session.getAgentContext();
db = ac.getCurrentDatabase();
doc = ac.getDocumentContext();
pw = getAgentOutput();
err = new ErrHandle(session, 0, "", "AgSavePaib.xml");
// 步骤1:删除个人排班数据
vwPersonPaib = db.getView("vwPersonPaib");
if (vwPersonPaib != null) {
String sKey = doc.getItemValue("Start_day").firstElement().toString()
+ doc.getItemValueString("DeptName");
dcPersonPaib = vwPersonPaib.getAllDocumentsByKey(sKey, true);
// 此处会出现bug,当A部门建立U1用户,B部门也建立U1用户,然后A部门再提交时,B部门中的U1用户将会丢失
docPersonPaib = dcPersonPaib.getFirstDocument();
while (docPersonPaib != null) {
docTemp = docPersonPaib;
docPersonPaib = dcPersonPaib.getNextDocument(docPersonPaib);
if (docTemp.getItemValueString("DeptName").equals(docTemp.getItemValueString("DeptName_1"))) {
docTemp.remove(true);
}
docTemp.recycle();
}
// dcPersonPaib.removeAll(true);
dcPersonPaib.recycle();
}
// 2、根据页面上的xml生成个人排班数据
sbResult = doc.getItemValueString("PaibXML");
View vwUsers = db.getView("vwPersonPaibForStat");
String sname = null;
String sCurDeptName = doc.getItemValueString("DeptName");
StringReader sr = new StringReader(sbResult);
InputSource is = new InputSource(sr);
// 解析xml数据
DocumentBuilder dombuilder = domfac.newDocumentBuilder();
org.w3c.dom.Document doc1 = dombuilder.parse(is);
Element root = doc1.getDocumentElement();
NodeList documents = root.getChildNodes();
if (documents != null) {
for (int i = 0; i < documents.getLength(); i++) {
// 判断此条记录是否在其他部门中设置过,以下主要是增加一个人员在不同部门中均有排班的情况,如A用户上半周在1区
// 下半周在2区,则实际上系统中只保存一条记录,所以1区和2区所改的结果都会反映在这条记录上
// add by yeshq ,2008/1/30
Node document = documents.item(i);
Node node = document.getFirstChild();
// 加此判断,当节点不为空时,把取出的节点值付给姓名
if (node.getFirstChild() != null) {
sname = node.getFirstChild().getNodeValue();
// 如果姓名中含有标识符,取标识符前面的姓名
if (sname.indexOf("(") != -1) {
sname = sname.substring(0, sname.indexOf("("));
}
}
dc = vwUsers.getAllDocumentsByKey(doc.getItemValue("Start_day").firstElement().toString()
+ sname.trim(), true);
docPersonPaib = dc.getFirstDocument();
if (docPersonPaib != null) {
String sDeptName = docPersonPaib.getItemValueString("DeptName");
String sDeptName_1 = docPersonPaib.getItemValueString("DeptName_1");
if (sDeptName.equals(sDeptName_1)) {
if (!sCurDeptName.equals(sDeptName_1)) {
docPersonPaib.replaceItemValue("DeptName_1", sCurDeptName); // 设置deptName1部门名
docPersonPaib.replaceItemValue("DeptUser_1", sname);
docPersonPaib.replaceItemValue("Sequence_1", Integer.toString(i)); // 设置排序的序法,防止重载时顺序乱
node = node.getNextSibling();
//docPersonPaib.replaceItemValue("group_1", (node.getFirstChild() == null) ? "" : node
// .getFirstChild().getNodeValue());
docPersonPaib.replaceItemValue("group", (node.getFirstChild() == null) ? "" : node
.getFirstChild().getNodeValue());
} else {
node = node.getNextSibling();
docPersonPaib.replaceItemValue("group", (node.getFirstChild() == null) ? "" : node
.getFirstChild().getNodeValue());
}
} else if (sCurDeptName.equals(sDeptName_1)) {
docPersonPaib.replaceItemValue("DeptName_1", sCurDeptName); // 设置deptName1部门名
docPersonPaib.replaceItemValue("DeptUser_1", sname);
docPersonPaib.replaceItemValue("Sequence_1", Integer.toString(i)); // 设置排序的序法,防止重载时顺序乱
node = node.getNextSibling();
//docPersonPaib.replaceItemValue("group_1", (node.getFirstChild() == null) ? "" : node
// .getFirstChild().getNodeValue());
docPersonPaib.replaceItemValue("group", (node.getFirstChild() == null) ? "" : node
.getFirstChild().getNodeValue());
} else {
node = node.getNextSibling();
docPersonPaib.replaceItemValue("group", (node.getFirstChild() == null) ? "" : node
.getFirstChild().getNodeValue());
}
node = node.getNextSibling();
docPersonPaib.replaceItemValue("day1", (node.getFirstChild() == null) ? "" : node
.getFirstChild().getNodeValue());
node = node.getNextSibling();
docPersonPaib.replaceItemValue("day2", (node.getFirstChild() == null) ? "" : node
.getFirstChild().getNodeValue());
node = node.getNextSibling();
docPersonPaib.replaceItemValue("day3", (node.getFirstChild() == null) ? "" : node
.getFirstChild().getNodeValue());
node = node.getNextSibling();
docPersonPaib.replaceItemValue("day4", (node.getFirstChild() == null) ? "" : node
.getFirstChild().getNodeValue());
node = node.getNextSibling();
docPersonPaib.replaceItemValue("day5", (node.getFirstChild() == null) ? "" : node
.getFirstChild().getNodeValue());
node = node.getNextSibling();
docPersonPaib.replaceItemValue("day6", (node.getFirstChild() == null) ? "" : node
.getFirstChild().getNodeValue());
node = node.getNextSibling();
docPersonPaib.replaceItemValue("day7", (node.getFirstChild() == null) ? "" : node
.getFirstChild().getNodeValue());
node = node.getNextSibling();
docPersonPaib.replaceItemValue("Zj", (node.getFirstChild() == null) ? "" : node.getFirstChild()
.getNodeValue());
node = node.getNextSibling();
docPersonPaib.replaceItemValue("Lj", (node.getFirstChild() == null) ? "" : node.getFirstChild()
.getNodeValue());
docPersonPaib.save(true);
} else {
docPersonPaib = db.createDocument();
docPersonPaib.replaceItemValue("Form", "frmPersonPaib");
docPersonPaib.replaceItemValue("UNID", docPersonPaib.getUniversalID());
docPersonPaib.replaceItemValue("DeptName", doc.getItemValueString("DeptName"));
docPersonPaib.replaceItemValue("DeptName_1", doc.getItemValueString("DeptName"));
docPersonPaib.replaceItemValue("start_day", doc.getItemValue("start_day"));
docPersonPaib.replaceItemValue("Sequence", Integer.toString(i)); // 设置排序的序法,防止重载时顺序乱
docPersonPaib.replaceItemValue("end_day", doc.getItemValue("end_day"));
docPersonPaib.replaceItemValue("Zbrq", doc.getItemValueString("Zbrq"));
docPersonPaib.replaceItemValue("Xgrq", doc.getItemValueString("Xgrq"));
docPersonPaib.replaceItemValue("LastModifyUser", doc.getItemValueString("LastModifyUser"));
docPersonPaib.replaceItemValue("DraftUserName", doc.getItemValueString("DraftUserName"));
docPersonPaib.replaceItemValue("Year", doc.getItemValueString("Year"));
docPersonPaib.replaceItemValue("WeekID", doc.getItemValueString("WeekID"));
// 以下是保存姓名、组名、周一至周日的数据及周计、累计
// 保存个人排班的表单
// document = documents.item(i);
// node = document.getFirstChild();
// 加此判断,当节点不为空时,把取出的节点值付给姓名
// 保存不含有标识符的姓名
docPersonPaib.replaceItemValue("DeptUser", sname);
docPersonPaib.replaceItemValue("name", node.getFirstChild().getNodeValue());
node = node.getNextSibling();
docPersonPaib.replaceItemValue("group", (node.getFirstChild() == null) ? "" : node
.getFirstChild().getNodeValue());
node = node.getNextSibling();
docPersonPaib.replaceItemValue("day1", (node.getFirstChild() == null) ? "" : node
.getFirstChild().getNodeValue());
node = node.getNextSibling();
docPersonPaib.replaceItemValue("day2", (node.getFirstChild() == null) ? "" : node
.getFirstChild().getNodeValue());
node = node.getNextSibling();
docPersonPaib.replaceItemValue("day3", (node.getFirstChild() == null) ? "" : node
.getFirstChild().getNodeValue());
node = node.getNextSibling();
docPersonPaib.replaceItemValue("day4", (node.getFirstChild() == null) ? "" : node
.getFirstChild().getNodeValue());
node = node.getNextSibling();
docPersonPaib.replaceItemValue("day5", (node.getFirstChild() == null) ? "" : node
.getFirstChild().getNodeValue());
node = node.getNextSibling();
docPersonPaib.replaceItemValue("day6", (node.getFirstChild() == null) ? "" : node
.getFirstChild().getNodeValue());
node = node.getNextSibling();
docPersonPaib.replaceItemValue("day7", (node.getFirstChild() == null) ? "" : node
.getFirstChild().getNodeValue());
node = node.getNextSibling();
docPersonPaib.replaceItemValue("Zj", (node.getFirstChild() == null) ? "" : node.getFirstChild()
.getNodeValue());
node = node.getNextSibling();
docPersonPaib.replaceItemValue("Lj", (node.getFirstChild() == null) ? "" : node.getFirstChild()
.getNodeValue());
}
docPersonPaib.save(true);
}
}
// 3、保存部门的周表单数据
// 保存周排班数据
doc.replaceItemValue("SaveOptions", "1");
doc.save();
// 防止F5刷新出错,所以加上窗口关闭,by yeshq, 2008/1/10
if (doc.getItemValueString("IsSubmit").equals("1")) {
pw.println("<script language=javascript>alert(\"排班已提交成功!\");window.close();</script>");
} else {
pw.println("<script language=javascript>alert(\"临时保存成功,但未提交到上级部门!\");window.close();</script>");
}
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (NotesException e) {
err.record(true, e.id, e.text);
e.printStackTrace();
// StringBuffer sbReturn = new StringBuffer().append("<root><Return>0</Return><Error>").append(e.text).append(
// "</Error></root>");
// Common.returnXML(pw, sbReturn.toString());
pw.println("<script language=javascript>alert(\"排班提交失败,请重新尝试!错误信息:" + e.toString()
+ "\");window.location=window.location;</script>");
} finally {
try {
if (docPersonPaib != null)
docPersonPaib.recycle();
if (vwUser != null)
vwUser.recycle();
if (vwPersonPaib != null)
vwPersonPaib.recycle();
if (dcPersonPaib != null)
dcPersonPaib.recycle();
if (doc != null)
doc.recycle();
if (db != null)
db.recycle();
if (ac != null)
ac.recycle();
if (session != null)
session.recycle();
} catch (NotesException e) {
System.out.println(e.text);
e.printStackTrace();
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -