⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 agcreatedepttree.java.svn-base

📁 一个包含排班信息的模块 2.1. 最新排班 6 2.2. 所有排班 6 2.3. 日常排班统计 7 2.4. 排班管理 7 2.5. 班次配置 7 2.6. 部门人员配置 7
💻 SVN-BASE
字号:
package com.fzet.cois.dividework.agents;

/*
 * 生成部门树形结构代理|agCreateDeptTree
 * @author yeshq
 * @version 2007-1-30
 */
import lotus.domino.*;
import java.util.*;
import com.fzet.cois.common.scriptLib.*;

public class AgCreateDeptTree extends AgentBase {
    Session session = null;

    Database db = null;

    Database dbMain = null;

    Document doc = null;

    int nCount = 0; // 计数器,用于为各个折叠式元素命名,所有的折叠式元素都以UNID命名

    View vwDept = null; // 部门取值视图

    String sRootName = null; // 树形根目录名称

    public void NotesMain() {
	AgentContext ac = null;
	ErrHandle err = null; // 错误处理

	try {
	    session = getSession();
	    ac = session.getAgentContext();
	    db = ac.getCurrentDatabase();
	    doc = ac.getDocumentContext();
	    dbMain = Common.getMainDb(session);
	    err = new ErrHandle(session, 0, "", "agCreateDeptTree");

	    // 首先打开“部门取值视图”,如果打不开,后面的代码就无法执行,只好退出
	    vwDept = dbMain.getView("vwDept");
	    if (vwDept == null) {
		err.record(true, 0, "无法打开部门取值视图");
		return;
	    }
	    sRootName = doc.getItemValueString("CompanyName");

	    // 调用绘制树形结构函数,并将返回值填写到Tree域中
	    String sTree = paintTree("");

	    // 好了,结果已经出来了,接下来就是要把它分配到n个Body域中(因为域会超长)
	    int nPos = 1;
	    int nStart = 0;
	    int nEnd = nStart + 10000;
	    int nLength = sTree.length();

	    while (nStart < nLength) {
		if (nEnd > nLength)
		    nEnd = nLength;
		doc.replaceItemValue("Body" + Integer.toString(nPos), sTree.substring(nStart, nEnd).toString());

		nStart += 10000;
		nEnd += 10000;
		nPos += 1;
	    }
	} catch (NotesException e) {
	    err.record(true, e.id, e.text);
	    e.printStackTrace();
	} catch (Exception e) {
	    e.printStackTrace();
	} finally {
	    try {
		if (vwDept != null)
		    vwDept.recycle();
		if (doc != null)
		    doc.recycle();
		if (db != null)
		    db.recycle();
		if (dbMain != null)
		    dbMain.recycle();
		if (ac != null)
		    ac.recycle();
		if (session != null)
		    session.recycle();
	    } catch (Exception e) {
		e.printStackTrace();
	    }
	}
    }

    // 绘制树形结构函数
    public String paintTree(String sRootName) {
	String sSubTree = null; // 用于接收“绘制子树形结构”函数的返回值
	String sTableCode = null; // 作为表格头代码的常量使用
	ErrHandle err = null; // 错误处理
	try {
	    err = new ErrHandle(session, 0, "", "agCreateDeptTree.paintTree()");

	    sTableCode = "<table border0 width=100% cellspacing=0 cellpadding=0>";
	    // 在“类别管理视图”中根目录是以“/”表示的,所有必须将根目录转换为“/”
	    if (sRootName.equals("")) {
		sRootName = "/";
	    }
	    // 调用“绘制子树形结构”函数
	    sSubTree = paintSubTree(sRootName, "0", "TreeRoot");
	    // 返回值为空,表示当前部门没有下级部门
	    // 根目录的命名为“TreeRoot”
	    if (sSubTree.equals("")) {
		return sTableCode + addIcon(sRootName, sRootName, "0", "TreeRoot", "0", "0")
			+ "</table><span id=\"TreeRoot\" parentId=\"\"></span>";
	    } else {

		return sTableCode + addIcon(sRootName, sRootName, "1", "TreeRoot", "0", "0")
			+ "<tr id=\"TreeRoot\" parentId=\"\"><td>" + sSubTree + "</td></tr></table>";

	    }
	} catch (Exception e) {
	    err.record(true, 0, e.toString());
	    e.printStackTrace();
	    return "";
	}
    }

    // 绘制子树形结构函数
    // 参数说明:sParentName|父部门名称,sParentIsLast|父部门是否为同级中的最后一个部门
    public String paintSubTree(String sParentName, String sParentIsLast, String sParentAreaName) {
	ErrHandle err = null; // 错误处理
	String sResult = null; // 函数返回值
	String sTableCode = null; // 表格头常量
	try {
	    err = new ErrHandle(session, 0, "", "agCreateDeptTree.paintSubTree()");
	    sTableCode = "<table width=100% border=0 cellspacing=0 cellpadding=0>";
	    // 调用“查找子部门”函数,返回值为一个数组
	    Vector asSubDept = new Vector();
	    asSubDept = findSubDept(sParentName);
	    // 如果没有下级部门,则返回空值
	    sResult = "";
	    if (!asSubDept.isEmpty()) {
		String sSubTree = ""; // 用于接收“绘制子树形结构”函数的返回值
		String sAreaName = ""; // 用于定义各折叠式树形区域的命名
		String sIsLast = "0"; // 用于定义是否同级部门中的最后一个部门,0|否,1|是。默认为“0”
		String sSubDept = ""; // 循环中使用,记录当前的子部门
		String sShortName = ""; // 部门简称,用于添加图标时作为显示名称
		Vector vSubDept = new Vector(); // 返回值中每个元素又是一个Vector,有三个值:UNID,简称,全称
		for (int i = 0; i < asSubDept.size(); i++) {
		    vSubDept = (Vector) asSubDept.elementAt(i);

		    sAreaName = vSubDept.elementAt(0).toString(); // 命名折叠式树形区域
		    if (i == asSubDept.size() - 1) // 判断是否同级部门中的最后一个
			sIsLast = "1";
		    sShortName = (String) vSubDept.elementAt(1); // 部门简称
		    sSubDept = (String) vSubDept.elementAt(2); // 部门全称
		    // 递归调用“绘制子树形结构”函数
		    sSubTree = paintSubTree(sSubDept, sIsLast, sAreaName);
		    if (sSubTree.equals("")) {
			sResult += sTableCode + addIcon(sShortName, sSubDept, "0", sAreaName, sIsLast, sParentIsLast)
				+ "</table><span id=\"" + sAreaName + "\" parentId=\"" + sParentAreaName + "\"></span>";
		    } else {

			sResult += sTableCode + addIcon(sShortName, sSubDept, "1", sAreaName, sIsLast, sParentIsLast)
				+ "<tr id=\"" + sAreaName + "\" style=\"display:none\" parentId=\"" + sParentAreaName
				+ "\"><td>" + sSubTree + "</td></tr></table>";
			/*
                         * debug sResult += sTableCode + addIcon(sShortName, sSubDept, "1", sAreaName, sIsLast, sParentIsLast) + "<tr id=\"" + sAreaName + "\" style=\"display:\"
                         * parentId=\"" + sParentAreaName + "\"><td>" + sSubTree + "</td></tr></table>";
                         */
		    }
		}
	    }
	    // 返回函数计算结果
	    return sResult;
	} catch (Exception e) {
	    err.record(true, 0, e.toString());
	    e.printStackTrace();
	    return ""; // 如果出错,返回空值
	}
    }

    // 查找子部门函数,根据传入的“部门名称”,查找其下级部门
    public Vector findSubDept(String sParentName) {
	ErrHandle err = null; // 错误处理
	Vector asResult = new Vector(); // 函数返回值
	Document docDept = null;
	ViewEntryCollection vecDept = null;
	ViewEntry veDept = null;
	ViewEntry veTemp = null;
	try {
	    err = new ErrHandle(session, 0, "", "agCreateDeptTree.findSubDept()");

	    // 以“部门名称”为关键字,在“部门管理视图”中查找所有下级部门文档
	    vecDept = vwDept.getAllEntriesByKey(sParentName, true);
	    veDept = vecDept.getFirstEntry();
	    while (veDept != null) {
		docDept = veDept.getDocument();
		Vector vDept = new Vector();
		vDept.addElement(docDept.getUniversalID());
		vDept.addElement(docDept.getItemValueString("DeptName"));
		// 升级到LD7时出错,modify by yeshq,2007/10/19
		// if (docDept.getItemValueString("ParentDept") == null) {
		if (docDept.getItemValueString("ParentDept") == null
			|| docDept.getItemValueString("ParentDept").equals("")) {
		    vDept.addElement(docDept.getItemValueString("DeptName"));
		} else {
		    vDept.addElement(docDept.getItemValueString("DeptName") + "/"
			    + docDept.getItemValueString("ParentDept"));
		}
		asResult.addElement(vDept);
		docDept.recycle();

		veTemp = veDept;
		veDept = vecDept.getNextEntry(veDept);
		veTemp.recycle();
	    }
	    return asResult;
	} catch (NotesException e) {
	    err.record(true, e.id, e.text);
	    e.printStackTrace();
	    return asResult;
	} catch (Exception e) {
	    e.printStackTrace();
	    return asResult;
	} finally {
	    try {
		// 最后释放dcDept,docDept对象所占用的资源
		if (docDept != null)
		    docDept.recycle();
		if (veTemp != null)
		    veTemp.recycle();
		if (veDept != null)
		    veDept.recycle();
		if (vecDept != null)
		    vecDept.recycle();
	    } catch (Exception e) {
		e.printStackTrace();
	    }
	}
    }

    // 为各部门添加图标。
    // 各部门标签上还要添加调用“打开标签”“读取下级部门”等JS函数的代码
    // 参数说明:
    // sFullName|部门全称
    // sHasChild|是否有下级部门。1|有,0|没有
    // sAreaName|折叠式元素的名称
    // sIsLast|当前部门是否同级部门中的最后一个
    // sParentIsLast|上级部门是否同级部门中的最后一个
    public String addIcon(String sShortName, String sFullName, String sHasChild, String sAreaName, String sIsLast,
	    String sParentIsLast) {
	ErrHandle err = null;
	try {
	    err = new ErrHandle(session, 0, "", "agCreateDeptTree.addIcon()");
	    // 计算出当前部门的“全称”,如果第一个字符为“/”,则去掉这个字符
	    if (sFullName.substring(0, 1) == "/") {
		sFullName = sFullName.substring(1, sFullName.length());
	    }
	    // 为当前部门加上“根目录名称”,如“亿同科技”
	    String sTmpName = sFullName;
	    if (!sTmpName.equals("")) {
		sTmpName = sTmpName + "/" + sRootName;
	    }
	    if (sShortName.equals("") | sShortName.equals("/")) {
		// 此时,如果简称为空,表示为根目录,则显示为“根目录名称”
		sShortName = sRootName;
	    }
	    // 计算出当前部门的级数,如“开发部/cois产品事业部” = “2”
	    int nLevel = 1;
	    int nPos = sFullName.indexOf("/");
	    while (nPos >= 0) {
		nLevel += 1;
		nPos = sFullName.indexOf("/", nPos + 1);
	    }
	    // 根据部门级数,计算出各部门名称前面的缩进量
	    // 根目录和一级部门无缩进
	    // 二级以下部门前面添加缩进。其中,父部门为“最后一个部门”的,缩进处不加“竖线”背景
	    String sIndent = null;
	    if (nLevel > 1) {
		if (sParentIsLast.equals("0"))
		    sIndent = "<td width=20 rowspan=200 class=\"menubgline\">&nbsp;</td>";
		else
		    sIndent = "<td width=20 rowspan=200>&nbsp;</td>";
	    } else {
		sIndent = "";
	    }
	    if (sFullName.equals(""))
		sFullName = "/";
	    // 生成部门名称标签,点击时调用“fnRefreshList()”JS函数
	    String sCode = null;
	    sCode = "<span id=\"" + sAreaName + "_Link\" style=\"cursor:hand\" onclick=\"fnRefreshList(\'" + sAreaName
		    + "_Link\',\'" + sFullName + "\');\">" + sShortName + "</span>";

	    // 定义使用的图标名称
	    String sImageName = null;
	    String sOpenImageName = null; // 打开后的图片
	    if (sIsLast.equals("1")) { // 同级最后一个
		if (sHasChild.equals("1")) {
		    sImageName = "file_last_close_canopen.gif"; // 有下级
		    sOpenImageName = "file_last_open.gif";
		} else {
		    sImageName = "file_last_close.gif"; // 无下级
		    sOpenImageName = "file_last_open.gif";
		}
	    } else {
		if (sAreaName.equals("TreeRoot")) {
		    sImageName = "file1_close.gif"; // 根目录
		    sOpenImageName = "";
		} else {
		    if (sHasChild.equals("1")) { // 普通部门
			sImageName = "file2_close_canopen.gif"; // 有下级
			sOpenImageName = "file2_open.gif";
		    } else {
			sImageName = "file2_close.gif"; // 无下级
			sOpenImageName = "file2_open.gif";
		    }
		}
	    }
	    sImageName = doc.getItemValueString("ImagePath") + sImageName;
	    sOpenImageName = doc.getItemValueString("ImagePath") + sOpenImageName;
	    // 输出结果,如果有下级部门,则点击图标时,调用“打开折叠区域”JS函数
	    // 增加sOpenImageName和sImageName参数,yeshq, 2007/10/22
	    if (sHasChild.equals("1")) {
		/*
                 * return "<tr>" + sIndent + "<td height=18 valign=\"middle\"><img id=\"" + sAreaName + "_Image\" src=\"" + sImageName + "\" style=\"cursor:hand\" hspace=\"5\"
                 * align=\"absmiddle\" onclick=\"fnOpenDiv('" + sAreaName + "','" + sIsLast + "','" + sImageName + "');\">" + sCode + "</td></tr>";
                 */
		return "<tr>" + sIndent + "<td height=18 valign=\"middle\"><img id=\"" + sAreaName + "_Image\" src=\""
			+ sImageName + "\" OpenImage=\"" + sOpenImageName + "\" CloseImage=\"" + sImageName
			+ "\" style=\"cursor:hand\" hspace=\"5\" align=\"absmiddle\" onclick=\"fnOpenDiv('" + sAreaName
			+ "');\">" + sCode + "</td></tr>";
	    } else {
		/*
                 * return "<tr>" + sIndent + "<td height=18 valign=\"middle\"><img id=\"" + sAreaName + "_Image\" src=\"" + sImageName + "\" hspace=\"5\" align=\"absmiddle\">" +
                 * sCode + "</td></tr>";
                 */
		return "<tr>" + sIndent + "<td height=18 valign=\"middle\"><img id=\"" + sAreaName + "_Image\" src=\""
			+ sImageName + "\" OpenImage=\"" + sOpenImageName + "\" CloseImage=\"" + sImageName
			+ "\" hspace=\"5\" align=\"absmiddle\">" + sCode + "</td></tr>";
	    }

	} catch (Exception e) {
	    err.record(true, 0, e.toString());
	    e.printStackTrace();
	    return "";
	}
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -