接着上一篇博客,我们进行往来单位一览表设计如下:
可以看到我们设计的时候,将客户和供应商用两个字段来解决,这样基本可以解决那些往来单位有可能即是供应商又是客户的情况。当然因为这里不是主要做客户关系管理系统,所以可以这样设计问题也不大,但如果要单独还要增加客户关系管理系统的话,我们建议是分开两个表来设计。这里主要围绕的是进销存来设计,所以我们把往来单位做到一个表里面。
这样就有以下几个核心点我们要去解决:
1比如到时候系统分配权限的时候,采购进下面的往来单位一览表只能看到往来单位是供应商的,销售进来只能看到往来单位是客户的。
2为了安全保密设置,有些人又不能让他看到往来单位详细联系人信息(我们联系人存储在子表,防止不相关的人看到信息私下又去联系)。
3出于常理自己录入的往来单位信息,希望只有自己看到,别人要特别权限才能看到,而且如果自己是主管还能看到自己下属录入的客户或者供应商。
4.采购进来默认是否客户界面控件为不可编辑,销售进来是否供应商控件不可编辑。
5.不同组织人进来只能看到他们自己组织内的往来单位.
具体实现过程:
1首先利用我们平台的权限分配系统,创建相应的权限界面,如下所示即可。
2.对于第5点,利用组织机构数据授权即可解决。
3.其他代码解决。代码如下:

/// <summary> /// 往来单位一览表 /// </summary> class RefUnitList : Jeez.Runtime.Base.General.frmList { public override void RefreshList() { //设置一览表的数据源 base.ReportListData = new RefUnitListData(); base.ReportListData.objContext = this.objContext; base.ReportListData.FormPropertyPage = this.FormPropertyPage; base.RefreshFilterGridData(); } } /// <summary> /// 构建一览表的数据源 /// </summary> public class RefUnitListData : Jeez.Runtime.Data.ReportList { public RefUnitListData() : base() { } //获取SQL on部分 protected override void AddFromSqlBeforeONPart(StringBuilder sb, System.Collections.ArrayList aryTable, string tableName, string tableNameAs) { base.AddFromSqlBeforeONPart(sb, aryTable, tableName, tableNameAs); } //获取SQL where部分 public override string GetRptListSQLWhere() { string strwhere = base.GetRptListSQLWhere();//获取框架点击过滤的时候设置的过滤条件 //我们可以利用构建数据源的where部分来实现打开往来单位一览表的数据源的数据隔离 string filter = BaseFunc.GetEmpFilter(objContext);//获取当前用户的自己职员ID,以及他下属的职员ID,职员表我们有个上级主管字段来决定员工上下级关系 if (strwhere == "") { //如果点击过滤没有设置过滤条件,我们就添加自己的过滤条件,这里就可以直接where , //如果点击过滤没有设置过滤条件,我们就添加自己的过滤条件,这里就可以直接where , if (!Jeez.Common.UI.AccessControl.CheckACLWithNoMsg("SCM_WLDW_SeeAll")) { //如果没有看所有往来单位的权限的话,就只能查看业务员自己以及业务员下属录入进来的往来单位数据 strwhere += string.Format(" where jzRefUnit.EmployeeID in {0}", filter); if (!Jeez.Common.UI.AccessControl.CheckACLWithNoMsg("SCM_WLDW_SeeBoth")) { //如果没有查看两者的权限 if (Jeez.Common.UI.AccessControl.CheckACLWithNoMsg("SCM_WLDW_Customer")) { //如果只有看客户的权限 strwhere += string.Format(" and jzRefUnit.IsCustomer=1"); } if (Jeez.Common.UI.AccessControl.CheckACLWithNoMsg("SCM_WLDW_Supply")) { //如果有查看供应商权限 strwhere += string.Format(" and jzRefUnit.IsSupply=1"); } } } else { if (!Jeez.Common.UI.AccessControl.CheckACLWithNoMsg("SCM_WLDW_SeeBoth")) { //如果没有查看两者的权限 if (Jeez.Common.UI.AccessControl.CheckACLWithNoMsg("SCM_WLDW_Customer")) { //如果只有看客户的权限 strwhere += string.Format(" where jzRefUnit.IsCustomer=1"); } if (Jeez.Common.UI.AccessControl.CheckACLWithNoMsg("SCM_WLDW_Supply")) { //如果有查看供应商权限 strwhere += string.Format(" where jzRefUnit.IsSupply=1"); } } } } else { //如果点击过滤没有设置过滤条件,我们就添加自己的过滤条件,这里就可以直接where , if (!Jeez.Common.UI.AccessControl.CheckACLWithNoMsg("SCM_WLDW_SeeAll")) { //如果没有看所有往来单位的权限的话,就只能查看业务员自己以及业务员下属录入进来的往来单位数据 strwhere += string.Format(" and jzRefUnit.EmployeeID in {0}", filter); if (!Jeez.Common.UI.AccessControl.CheckACLWithNoMsg("SCM_WLDW_SeeBoth")) { //如果没有查看两者的权限 if (Jeez.Common.UI.AccessControl.CheckACLWithNoMsg("SCM_WLDW_Customer")) { //如果只有看客户的权限 strwhere += string.Format(" and jzRefUnit.IsCustomer=1"); } if (Jeez.Common.UI.AccessControl.CheckACLWithNoMsg("SCM_WLDW_Supply")) { //如果有查看供应商权限 strwhere += string.Format(" and jzRefUnit.IsSupply=1"); } } } else { if (!Jeez.Common.UI.AccessControl.CheckACLWithNoMsg("SCM_WLDW_SeeBoth")) { //如果没有查看两者的权限 if (Jeez.Common.UI.AccessControl.CheckACLWithNoMsg("SCM_WLDW_Customer")) { //如果只有看客户的权限 strwhere += string.Format(" and jzRefUnit.IsCustomer=1"); } if (Jeez.Common.UI.AccessControl.CheckACLWithNoMsg("SCM_WLDW_Supply")) { //如果有查看供应商权限 strwhere += string.Format(" and jzRefUnit.IsSupply=1"); } } } } return strwhere; } //获取SQL order by部分 public override string GetRptListSqlOrderBy(ref string strSQLGroupBy) { return base.GetRptListSqlOrderBy(ref strSQLGroupBy); } } /// <summary> /// 往来单位新增界面 /// </summary> class RefUnit : Jeez.Runtime.Base.General.BillUI { Jeez.Control.JeezUltraCheckBox.JeezUltraCheckBox ckIsCustomer; Jeez.Control.JeezUltraCheckBox.JeezUltraCheckBox ckIsSupplyer; public override bool LoadUI() { bool b = base.LoadUI(); if (b) { ckIsCustomer = base.GetControlByName("JeezCheckBox1") as Jeez.Control.JeezUltraCheckBox.JeezUltraCheckBox; ckIsSupplyer = base.GetControlByName("JeezCheckBox2") as Jeez.Control.JeezUltraCheckBox.JeezUltraCheckBox; } return b; } protected override void BillUI_Load(object sender, EventArgs e) { base.BillUI_Load(sender, e); InitByDefine(); } /// <summary> /// 根据角色设置价格单元格的可见隐藏 /// </summary> void InitByDefine() { if (!Jeez.Common.UI.AccessControl.CheckACLWithNoMsg("SCM_WLDW_SeeChild")) {//如果没有看子表数据的权限,子表grid数据就隐藏起来 this.CurrentGrid.Visible = false; } if (!Jeez.Common.UI.AccessControl.CheckACLWithNoMsg("SCM_WLDW_SeeBoth")) {//如果没有看子表数据的权限,子表grid数据就隐藏起来 ckIsCustomer.Enabled = false; ckIsSupplyer.Enabled = false; if (Jeez.Common.UI.AccessControl.CheckACLWithNoMsg("SCM_WLDW_Customer")) { //如果只有看客户的权限 ckIsCustomer.Checked = true; } if (Jeez.Common.UI.AccessControl.CheckACLWithNoMsg("SCM_WLDW_Supply")) { //如果有查看供应商权限 ckIsSupplyer.Checked = true; } } else { ckIsCustomer.Enabled = true; ckIsSupplyer.Enabled = true; } } protected override void LoadEntityDataToControl() { base.LoadEntityDataToControl(); InitByDefine(); } }
总结:一览表开发主要了解一览表数据源的构建部分,比如我们代码部分构建where部分,当然我们也可以设置一览表数据源的排序部分。
极致平台开发十大特点:
1. 一个数据库下可以同时进行N套业务系统开发,开发出来的产品可以根据您客户的需要按模块界面组发布,客户想要啥模块就可以给啥模块。而且一个数据库下开发所有功能,当客户需要从你的人力资源增加客户关系管理模块的时候,你只要做个升级包就可以了。解决企业多个业务系统信息孤岛问题。
2. 智能升级功能,当客户从A模块增加B模块的时候,您只需要做一个升级包即可,给客户升级后,客户原来录入的数据不会有影响,而且所有客户端都是智能感应智能升级,大大节省您的部署成本。
3. 工作流套打报表均可以运行时候自定义,比如费用报销单,您100家客户就有一百种费用报销的流程,套打的格式,用我们平台您只需要设计好这个费用报销单,至于哪个客户走什么流程,完全可以让客户自己去定义,而不需要像传统开发那样,提前在开发中设置好,100个客户就维护100套代码。套打也是如此。
4. 支持数据授权,当您开发多组织架构的系统的时候,我们只要业务单据引用组织机构即可,然后组织机构支持数据授权,这样就可以不需要编写任何一行代码就可以做到,组织与组织之间数据彼此隔离,我想给哪个用户看哪个组织的数据只要给这个用户这个组织的数据权限即可。
5. 支持字段授权,对于一些表的核心字段对用户进行屏蔽直接利用我们平台的字段授权功能即可,比如职员薪酬字段进行字段授权,让有的用户在看职员信息的时候,自动隐藏薪酬的数据。这也是无需编写任何一行代码。
6. 单据界面自动生成,我们开发的时候只要设计好实体,也就是传统开发所说的表结构即可,还可以设置哪些字段是必录,可见,不允许重复,在界面生成的时候,会自动生成一个界面,而且这个界面的增删改查是无需写一行代码的,您只要对您特有业务逻辑编码即可,相对传统开发,你代码量可以节省2/3,开发周期缩短2/3
7.一次开发同时具有单机局域互联网三个版本,客户想要单机就给单机想要互联网版就给互联网版。
8.强大的公式引擎,让您可以灵活设计计算类的项目,比如工资,预算。
9.包含强大的各种控件,比如文本控件支持F8调用,编码名称自动带出。Grid控件支持表头过滤,单元格融合,固定列,表格列,表格行各种公式汇总,复合表头,表格宽度可以自己随意调整,而且关闭后会自动记录之前的宽度。还支持表格列随意调整顺序。
10.平台内置很多基础功能,比如权限管理,用户角色管理,还有实施的一些导入导出工具都能帮助客户大大提高一个项目验收进度。
官网:www.jeez.com.cn
平台介绍:www.jeez.com.cn/jbf
平台下载地址:http://www.jeez.com.cn/upfiles/jbfsetuppro.rar
(下载即可有3个月免费试用)
联系电话:13826519021 18988763421 QQ:180315586 420977542 (加我注明极致软件即可)
平台销售经理:李先生
将互联网时代的管理软件做到极致!
==================================================================