当前位置: 首页 > >

动态生成Xml文件及调用

发布时间:

一.动态生成 Xml 的类文件

using System; using JW.Module; using System.Data; using WindICFrameNet.Data; using System.Collections; using System.Text; using System.Data.SqlClient; using System.Configuration; using System.Xml; using System.Xml.Schema; using System.Xml.Serialization; using System.Xml.XPath; using System.Xml.Xsl;

namespace HN_AMS.BLL.QuanXian { /// <summary> /// 为每个用户动态生成一个XML菜单。 /// </summary> public class CreateMenu { DataHelper dataHelper = new DataHelper("connStr",false);

public CreateMenu() { // // TODO: 在此处添加构造函数逻辑 // }

#region 根据用户ID和系统ID查询该用户可操作的功能模块信息 /// <summary> /// 根据用户ID和系统ID查询该用户可操作的功能模块信息 /// </summary> /// <param name="userId">用户ID</param> /// <param name="systemId">系统ID</param> /// <returns></returns> public DataTable GetFuntionInfo(int userId, int systemId) { DataTable dt = new DataTable(); string sql = string.Format("SELECT distinct P1.COLUMN1 as GongNengID, P1.COLUMN2 as ModuleId, P1.COLUMN3 as FunctionName, P1.COLUMN6 as FunctionTypeId " + " FROM ((P4 inner join P3 on

P4.COLUMN3=P3.COLUMN4) left join P1 on P1.COLUMN1=P3.COLUMN2) " + " where P4.COLUMN2='{0}' and P1.COLUMN7='{1}' order by P1.COLUMN6 asc,P1.COLUMN2 asc ", userId, systemId); try { dt = dataHelper.ExecuteDataTable(sql); } catch{}

return dt; }

/// <summary> /// 根据用户ID和系统ID查询该用户可操作的功能模块信息 /// </summary> /// <param name="userId">用户ID</param> /// <param name="systemId">系统ID</param> /// <param name="funcTypeId">功能类别ID</param> /// <returns></returns> public DataTable GetFuntionInfo(int userId, int systemId, int funcTypeId) {

DataTable dt = new DataTable(); string sql = string.Format("SELECT distinct P1.COLUMN1 as GongNengID, P1.COLUMN2 as ModuleId, P1.COLUMN3 as FunctionName, P1.COLUMN6 as FunctionTypeId " + " FROM ((P4 inner join P3 on P4.COLUMN3=P3.COLUMN4) left join P1 on P1.COLUMN1=P3.COLUMN2) " + " where P4.COLUMN2='{0}' and P1.COLUMN7='{1}' and P1.COLUMN6='{2}' order by P1.COLUMN6 asc,P1.COLUMN2 asc", userId, systemId, funcTypeId); try { dt = dataHelper.ExecuteDataTable(sql); } catch{}

return dt; } #endregion

#region 根据用户ID和系统ID查询该用户可操作的功能模块类别 信息 /// <summary>

/// 根据用户ID和系统ID查询该用户可操作的功能模块类别信息 /// </summary> /// <param name="userId"></param> /// <param name="systemId"></param> /// <returns></returns> public DataTable GetFunctionTypeInfo(int userId, int systemId) { DataTable dt = new DataTable(); string sql = string.Format("SELECT distinct P1.COLUMN6 as FunctionTypeID, P5.COLUMN2 as FunctionTypeName " + " FROM (((P4 inner join P3 on P4.COLUMN3=P3.COLUMN4) left join P1 on P1.COLUMN1=P3.COLUMN2) left join P5 on P1.COLUMN6=P5.COLUMN1)" + " where P4.COLUMN2='{0}' and P1.COLUMN7='{1}' order by P1.COLUMN6 asc", userId, systemId);

try { dt = dataHelper.ExecuteDataTable(sql); } catch{}

return dt; } #endregion

public void CreateXML(int userId, int systemId, string xmlPath) { XmlTextWriter textWriter = new XmlTextWriter(xmlPath, System.Text.Encoding.UTF8); //自动缩进 textWriter.Formatting = Formatting.Indented; // 开始写过程,调用WriteStartDocument方法 textWriter.WriteStartDocument(); // 写入注释 //textWriter.WriteComment("注释"); //写根节点<TREENODES> textWriter.WriteStartElement("TREENODES"); textWriter.WriteAttributeString("root", "true"); textWriter.WriteAttributeString("text", "功能菜单");

DataTable dtFunType = this.GetFunctionTypeInfo(userId,

systemId); DataTable dtFun = this.GetFuntionInfo(userId, systemId); DataView dv = dtFun.DefaultView; if(dtFunType.Rows.Count > 0) { for(int i=0; i<dtFunType.Rows.Count; i++) { string funTypeId = dtFunType.Rows[i]["FunctionTypeID"].ToString(); string funTypeName = dtFunType.Rows[i]["FunctionTypeName"].ToString(); //创建节点<TREENODE> textWriter.WriteStartElement("TREENODE"); textWriter.WriteAttributeString("text", funTypeName); textWriter.WriteAttributeString("open", "false");

dv.RowFilter = "FunctionTypeId="+funTypeId; foreach(DataRowView drv in dv) { string funName =

drv["FunctionName"].ToString(); string moduleId = drv["ModuleId"].ToString(); string url = "PageRedirect.aspx?moduleId="+moduleId; //创建节点<TREENODE> textWriter.WriteStartElement("TREENODE"); textWriter.WriteAttributeString("text", funName); textWriter.WriteAttributeString("href", url); textWriter.WriteAttributeString("target", "mainFrame"); textWriter.WriteEndElement(); }

//节点结束</TREENODE> textWriter.WriteEndElement(); } } //根节点结束</TREENODES> textWriter.WriteEndElement(); //写文档结束,调用WriteEndDocument方法 textWriter.WriteEndDocument();

//关闭textWriter textWriter.Close();

} } }
二.页面如何调用 HN_AMS.BLL.QuanXian.CreateMenu create = new HN_AMS.BLL.QuanXian.CreateMenu(); int userId = int.Parse(hiddenUserId.Value); int systemId = int.Parse(System.Configuration.ConfigurationSettings.AppSettings["SystemID"].ToString()); string xmlPath = Server.MapPath("~/XmlMenu/") + userId +".xml"; create.CreateXML(userId,systemId,xmlPath); 三.相关数据库表结构 1. P1(功能模块表) 字段 COLUMN1 COLUMN2 COLUMN3 COLUMN4 COLUMN5 COLUMN6 COLUMN7 COLUMN8 类型 Bigint Bigint Nvarchar(50) Nvarchar500) Nvarchar(500) Bigint Bigint Nvarchar(50) 描述说明 系统自动编号,功能 id 模块的编号(唯一约束) 功能名称 功能描述 功能路径 功能类别 (P5.Column1) 系统 ID (SystemTable.Column1) 页面操作类型(-1 为无权限,0 浏览,1 查询, 2 添加,3 编辑,4 删除)存储格式(0,1,2,3,4)

2. P2(角色表) 字段 COLUMN1 COLUMN2 COLUMN3 类型 Bigint Nvarchar(50) Nvarchar500) 描述说明 系统自动编号,角色 id 角色名称 角色描述

3. P3(功能和权限对应表) 字段 COLUMN1 COLUMN2 COLUMN3 类型 Bigint Bigint int 描述说明 系统自动编号 功能 ID (P1.Column1) 操作类型(-1 为无权限,0 浏览,1 查询,2 添

加,3 编辑,4 删除) COLUMN4 Bigint 角色 id (P2.Column1)

4. P4(用户和角色对应表) 字段 COLUMN1 COLUMN2 COLUMN3 类型 Bigint Bigint Bigint 描述说明 系统自动编号 用户 ID 角色 ID (Table3.Column1) (P2.Column1)

5. P5(功能类别编码表) 字段 COLUMN1 COLUMN2 COLUMN3 6. P6(操作类型表) 字段 COLUMN1 COLUMN2 7. System(系统表) 字段名称 COLUMN1 COLUMN2 COLUMN3 COLUMN4 COLUMN5 类型 BigInt Nvarchar(50) Nvarchar(50) Nvarchar(50) Nvarchar(50) 描述说明 系统自动编号 系统名称 说明 域名地址 单点登录时旋转页面中的 logo 对应的序号 类型 Bigint Nvarchar(50) 描述说明 系统编号 操作类型 类型 Bigint Nvarchar(50) Bigint 描述说明 系统自动编号 功能类别描述 系统 ID (SystemTable.Column1)

四.用户登录时判断是否分配菜单权限

string PathXml=Server.MapPath("XmlMenu/"+dt.Rows[0]["UserID"].ToString().Tri m()+".xml"); if(File.Exists(PathXml)==false) { urll=Request.UrlReferrer.ToString(); this.RegisterStartupScript("js","<script>alert('该用户赞未分配权 限,无法登陆,请联系管理员! ');window.location.href='"+urll+"'</script>"); return; }
五.




友情链接: