95992828九五至尊2

商家级档次花费,实例演示使用RDIFramework

二月 11th, 2019  |  九五至尊1老品牌值得

                              ASP.NET3.5 集团级档次费用

实例演示使用RDIFramework.NET
框架的工作流组件

                               第一章:集团级档次框架概述

拓展业务流程的概念—请假申请流程-WinForm

       前言:从前也看过豪门在谈架构,谈分层,谈格局。对有些题材,大家也各持己见,确实不确。但是无论怎么着,大家最终仍然要在大家的类型中确确实实的去完结谈论的这个主意,方法谈了即将用,要实践才有价值。而且代码是最没有二义性的,所以,本体系将一步步的辅导我们付出一个正真的店家级档次。

 

      其中融合了分层架构,设计方式以及许多OO的安插性思想。而且大家也可以观望,大家不是”为了格局而形式”,而是一种自然过渡的想想。本种类文章不是为着其余,只是梦想得以给大家带来一点点的帮衬。
 
       本连串的稿子每一章选择上面的协会方式编写:指出难题--设计艺术--消除方案。
 
       大家将会为一个集团的人力资源部门支出一个系统。那几个系统可以批准,拒绝公司职工的请假的提请。而且那么些系统将运用
ASP.NET3.5来开发,语言是C#,数据库是SQL
SERVER2005.融合ASP.NET3.5中的很多特点,语法方面的Linq,Lamda,WF,AJAX等。

  参考小说:

       而且所有消除方案设计的很灵活,便于大家之后按照大家的作业逻辑来扩大。本篇主要规定项目标一些急需,并且介绍项目支付使用的架构。
 
      提议难题

RDIFramework.NET — 基于.NET的高速新闻化系统开发框架 —
系列目录

       Sue是人力资源部门的总经理,常常她直接利用Word和Excel来治本公司职工的请假的请求。Sue很快就发现了一个题材:很多的请假的乞请都不曾被记录下来,而且她也很难去跟踪那一个呼吁的处理进程和结果。将来,Sue已经接到了一个特许:开发一个商家级的序列来代表原先拔取的Word和Excel的管理形式。
 

RDIFramework.NET ━ .NET快速新闻化系统开发框架 ━
工作流程组件介绍

       最为整个项目标公司管理者,Sue任命玛丽作为象征去和IT部门开展关联,确定项目的需求。上面的集会可以在各类品种花费在此以前都开展的。

RDIFramework.NET ━ .NET连忙音信化系统开发框架 ━
工作流程组件Web业务平台

       玛丽说:我的顶头上司派我来涉足项目标支付,不过自身对总结机以及操作系统的学问却是一窍不通。咱们在广大年前就尝试开发管理连串,可是最终依然没有中标。首先让自个儿来介绍一下大家前几日在做什么。大家从来在用Word来管理员工的请假的发明。如若一个职工要请假,那么他就要填写一份Word的声明表。不过,当大家在上年在把大家用来记录员工申请的Excel交给首席营业官的时候,难点就出去了:很多的申请表已经被打消了,可是我们不通晓;大家也不驾驭申请表是何许时候交给老董的…

RDIFramework.NET ━ .NET急忙音讯化系统开发框架 ━
工作流程组件WinForm业务平台

       我说:这么说,你想要一个机关处理请求的连串。我事先也用过Word和Excel来管理过,所以我了解一点管制的进度,不过关于把申请表交给本身的上次从此发生了怎么业务,我就不知晓了。你可以告知我,之后的申请表的拍卖流程吗?
 
       玛丽说:假如员工想要申请沐日,那么他们首先就要去填写一张表格,并且打印出来,交给他们的上面去查处并且签字。他们的顶头上司签字之后就把申请表交给HR,然后本人就翻开本人的处境的Excel表格,看看那么些要提请假日的职工是或不是可以申请他们想要的休假时间。然后我就在本身的Excel表格上减去他们申请沐日的时刻。如若员工申请假日的时日操作了2周,那么本身就会通报他们的顶头上司,并且还要大家部门的上位执行官签字。可是,那样一来就出现了不少的标题,比如首席营业官很忙,他记不清把员工申请假日的报表给自家,这样很多的记录就出标题了。
 
       我:那么,你须求一个方可允许用户提交申请并且放置了工作流的系统,员工的上司,CEO可以用那些系统来认同可能拒绝请假的提请。

实例演示使用RDIFramework.NET
框架的工作流组件举办业务流程的概念—请假申请流程-Web

       玛丽:是的,我想我们可以拒绝员工的提请,不过一般情形下,大家都以把申请表扔了。
 
       我:你说还有一个标题就是:当员工已经交由了请假申请,不过他们突然想收回申请,他们并不曾告知您。所以您必要你的职工可以通过那一个种类来报告您他们裁撤了申请吗?若是那样的话,我得以让系统经过Email来打招呼你请求撤除了。我还是可以够通报你报名是或不是经过了上司的特许。
 
       Mary:行啊,很科学!那样自个儿就足以在自家的Excel表格中科学的笔录那几个数据了。
 
       我:你可以把你的Excel表格给我看看啊?我得以那个系列中生成Excel,并且导出。那样的话,任何已经撤回的哀告等数据就足以记录下来,而且你也不用手动的维护Excel。
 
       玛丽:好,Excel表格给您!可是一旦自个儿不用Excel,我得以跟踪记录假日申请的消息呢,我愿意用数据库来记录那个数据,你们可以办到吗?
 
       我:当然!你们须要安全呢?你是还是不是愿意一部分人方可见访问报表,还有一部分人,比如您,可以访问任王大帅西?
 
       玛丽:我不明了您说的洞庭碧螺春是如何,不过自个儿不期待Bob进入本人的治本系列。鲍勃他只能打印表格。
 
       我:OK。这么说,你们必要一个依照角色的安全系统,这几个序列装置了广大的访问权限,如只读,编辑等。
 
       玛丽:我不清楚怎么是基于角色的广安,然则听起来不错!
 
       我:你们须要审查跟踪什么?也是说,系统中的提交的申请的变化和安全的变化你都得以看出。例如,如果系统中的一个用户被给予了走访报表的权能,系统将会把那个新闻记录下来,并且告诉你。你须要跟踪记录吗?
 
       Mary:是的,需要。
 
       我:你必要经过区其余格局查看报名假日的申请新闻吗?比如,只查看撤销的报名,查看已经被上面签字了的申请?我得以在系统中,可以让你以不一样的规则来过滤,查看报名的音讯、而且自身仍是可以那几个音信放在一个主页上,方便你查看。
 
       Mary:真的,太好了!
 
        我:OK,我先天曾经募集到了十足的新闻了。我从此还会找你搜集需要的。未来系统作用如下:系统有全自动处理请求的工作流,报表查看,基于角色的安全,Email布告,查询音信,还有就是记录的跟踪。
 
       玛丽:恩,还有就是自我不期望界面上的书体花花绿绿,而且大小不均等。
 
       我:好,大家会小心的。
 
       设计方案  
       整个项目标缓解方案是用ASP.NET3.5付出的一个三层架构的方案。下面是本种类的花费进度:
 
 
 
       
第二章:数据访问层开发(DAL)
        数据访问层是三层结构中做基本的。一般景况下,数据层的天职就是应用数据库中存储进度,或然实施SQL语句。在此前的开发中,大家一般是采纳ADO.NET的办法,而且也知道把数据以什么样花样传播业务层中。而且有关到底把什么目标传到业务层的研究也很火爆,可是在本系列中我们就可以使得这一个争议平静下来。
        本章才介绍Linq To Sql
,并且利用内置的ORM设计工具来创建数量实体类,具体方案,将来讲述!
 
      第三章:业务逻辑层(BLL)
        业务逻辑层,也改为中间层,是我们落到实处工作逻辑规则的地方。以往大家一般是把数据库中的表一一在作业逻辑层中映射为实体类,不过如此做是够的。因为业务逻辑层必须保昏数据的共同体行,并且完毕业务逻辑规则,如必填字段,限制字段等。如果工作逻辑规则被损坏了,那么业务逻辑就要告一段落执行,并且不对数据层暴发影响。本章将讲述业务逻辑层设计的一些形式。
 
       第四章:UI层
        UI层是应用程序中用户可以触发的绝无仅有地点,所以,保持界面的可用性和一致性很重点。CSS和ASP.NET中的Theme可以决定界面的表现方式。而且本章还会开发自定的服务器菜单控件等。
 
       第五章:很是处理
 
        在支付任何一个种类的时候,相当的处理都是很关键的。大家平常见到比比皆是的开发人士忘记格外处理,或然当他们处理非常的时候,他们尚未正确的拍卖仍然当十分发生时,他们并未打招呼其余的人。所以我们要让系统告知大家到底出了哪些难点,而不是让用户告知大家。正确的百般处理,可以使我们看起来更为的正式。本章将应用Microsoft
Exception Handling Application Block.
 
       第六章:基于角色的吕梁申明
        很多的小买卖的应用程序都要角色的验证。比如大家得以使得有些的人得以访问那多少个页面,其它的片段人方可编写一些音信等。
 
       第七章:工作流机制
        把业务逻辑规则分解为一个个的工作流,并且用Windows Workflow
Foundation来达成。大家得以看看WF在类型中毕竟是怎么利用的。
 
       第八章:通知系统
        自动的关照系统可以文告用户,他们的沐日请求是不是因此,拒绝等。本章紧假诺行使了Windows
service技术。作用强大!

  RDIFramework.NET工作流程组件是以RDIFramework.NET框架为支撑,根据大家多年的档次经验和体系举行,结合国内各大工作新生儿窒息品的特点研发的一套流程管理组件。该器件不仅考虑到从零搭建业务系列,也设想到与存活工作系统的组成。从零搭建系统我们得以应用RDIFramework.NET框架以基础,来很快搭建工作系统。与现有系统的整合,我们的流程引擎提供了拉长的职能接口,供三方工作连串调用,并提供组件的全部源码方便用户举行整合。RDIFramework.NET工作流程组件选拔SOA架构方式,流程引擎协理WCF格局访问。支持B/S、C/S系统,同时扶助SQLServer、ORACLE等主流数据库。

       第九章:报表
        选择.NET中的水晶报表。以不相同的来得显示数据,如PDF,HTML,WORD等,设计规范的界面。
 
       第十章:查询控件
        开发自定的查询控件,以区其他准绳过滤,查看数据

九五至尊1老品牌值得 1

       第十一章:本性化主页
        把虽有些音讯特性化到一个页面,如大家明白的webpart的选择。内容充分!
 
 

  RDIFramework.NET━工作流组件主要蕴含工作流的安顿与概念、流程实例的倡导与运作、业务流程的监察与管理、工作流组件与工作连串的集成与合营等情节。

       今日第一讲述了”指出难点”和”设计方案”里,下篇接着讲述:化解方案部分。 

  一、请假流程业务验证

   
员工请假流程在商店各大音讯化系统中着力都会涉及到,本文我将向大家展示使用RDIFramework.NET工作流组件来自定义员工请假流程。方今的请假业务流程须求是那般的:

   
员工请假首先要提交至请假人所在机关的“部分经营”审批,倘若请假天数小于等于3天则“部门CEO”有权直接审批,否则须要提交至“分企业总老板”审批。

        转发标明出处,谢谢!

  二、请假申请流程定义

  请假申请业务流程大家已经明晰,以后大家选择RDIFramework.NET框架举办请假申请的定义。最后提供的请假流程如下图所示:

九五至尊1老品牌值得 2

      而且为了我们交换,已经成立商家类型支出团队,希望我们也从此会把关于集团用度的稿子放入团队中,希望大家再接再砺参预这一个团体。而且我从此也会宣布越多的体系示范,大家共同念书发展!

九五至尊1老品牌值得,  三、请假申请业务表单开发

  以后请假申请的整整工艺流程的概念大家算完结了,上边大家就开首支付请假表单,表单开发极度简单,大家得以按常规的付出表单的方式展开开发,再加载到框架下即可。开发布单前大家须求在数据库中树立请假单那些数据表。同时表中需求包罗以下多少个字段:WorkFlowId(工作流主键)、WorkFlowInsId(工作流实例主键)、WorkTaskId(工作职分主键)、WorkTaskInsId(工作任务实例主键)。如下图所示:

九五至尊1老品牌值得 3

  表定义好了,今后我们就要开展作业表单的支出了,打开VS,开发请假申请表单,如下图所示:

九五至尊1老品牌值得 4

  再编辑表单代码,在代码中得以随便已毕表单的业务逻辑,至极的灵敏。同时流程的事务表单只必要后续自我们已经已毕的基类(FrmBaseBizeForm)即可,再重载相应的不二法门。上边给了方方面面请假申请的政工表单完毕代码以供参考,如下所示:

using System;
using System.Data;

namespace RDIFramework.WorkFlow
{
    using RDIFramework.BizLogic;
    using RDIFramework.Utilities;
    using RDIFramework.WinForm.Utilities;

    /// <summary>
    /// 请假申请
    /// </summary>
    public partial class FrmQingJia : FrmBaseBizeForm
    {
        public FrmQingJia()
        {
            InitializeComponent();
        }

        private void FrmQingJia_Load(object sender, EventArgs e)
        {
            base.Form_Load();
            this.SetControlState();
            this.ShowEntity();
        }

        public override void SetControlState()
        {
            if (!string.IsNullOrEmpty(this.PageState))
            {
                this.pnlTool.Enabled = this.PageState != WorkConst.STATE_VIEW;
            }

            if (!string.IsNullOrEmpty(this.CtrlState))
            {
                gbMain.Enabled = btnSave.Enabled = this.CtrlState != "查看";
            }
            else
            {
                gbMain.Enabled = btnSave.Enabled = false;
            }
        }

        public override void ShowEntity()
        {
            string sql = "select * from testQingjia where workflowinsId=@workflowinsId";
            var sqlBuilder = new SQLBuilder(this.WorkFlowDbProvider);
            sqlBuilder.BeginSelect("testQingjia");
            sqlBuilder.SetWhere("workflowinsId", WorkFlowInsId);
            DataTable dt = sqlBuilder.EndSelect();
            if (dt != null && dt.Rows.Count > 0)//判断是否有数据,有数据读取数据库中的值
            {
                txtUserId.Text = dt.Rows[0]["userid"].ToString();
                txtUserName.Text = dt.Rows[0]["userName"].ToString();
                txtDuty.Text = dt.Rows[0]["dutyCaption"].ToString();
                txtDepartment.Text = dt.Rows[0]["archCaption"].ToString();
                dtBeginTime.Text = dt.Rows[0]["beginTime"].ToString();
                dtEndTime.Text = dt.Rows[0]["endTime"].ToString();
                txtDays.Text = dt.Rows[0]["Days"].ToString();
                txtQingJia.Text = dt.Rows[0]["QingJia"].ToString();
                cboQingJiaType.Text = dt.Rows[0]["QingJiaType"].ToString();
            }
            else//如果没有数据,初始化默认值
            {
                txtUserId.Text = UserId;
                txtUserName.Text = UserName;
                txtDuty.Text = DutyCaption;
                txtDepartment.Text = ArchCaption;
                dtBeginTime.Text = DateTime.Now.ToShortDateString();
                dtEndTime.Text = DateTime.Now.ToShortDateString();
            }
        }

        public override void SaveFormData(bool isDraft)
        {
            base.SaveFormData(isDraft);
            var sqlBuilder = new SQLBuilder(this.WorkFlowDbProvider);
            string sql = "DELETE TESTQINGJIA WHERE WORKFLOWINSID=@WORKFLOWINSID";//先删除原有数据
            sqlBuilder.BeginDelete("testQingjia");
            sqlBuilder.SetWhere("WORKFLOWINSID", WorkFlowInsId);
            sqlBuilder.EndDelete();


            sqlBuilder.BeginInsert("testQingjia");
            sqlBuilder.SetValue("WorkFlowId", WorkFlowId);
            sqlBuilder.SetValue("WorkTaskId", WorkTaskId);
            sqlBuilder.SetValue("WorkFlowInsId", WorkFlowInsId);
            sqlBuilder.SetValue("WorkTaskInsId", WorkTaskInsId);
            sqlBuilder.SetValue("ID", BusinessLogic.NewGuid());
            sqlBuilder.SetValue("userId", txtUserId.Text);
            sqlBuilder.SetValue("userName", txtUserName.Text);
            sqlBuilder.SetValue("dutyCaption", txtDuty.Text);
            sqlBuilder.SetValue("archCaption", txtDepartment.Text);
            if (this.WorkFlowDbProvider.CurrentDbType == CurrentDbType.Oracle)
            {
                sqlBuilder.SetValue("BeginTime", !string.IsNullOrEmpty(dtBeginTime.Text) ? BusinessLogic.GetOracleDateFormat(DateTimeHelper.ToDate(dtBeginTime.Text)) : BusinessLogic.ConvertToDateToString(dtBeginTime.Text));
                sqlBuilder.SetValue("EndTime", !string.IsNullOrEmpty(dtEndTime.Text) ? BusinessLogic.GetOracleDateFormat(DateTimeHelper.ToDate(dtEndTime.Text)) : BusinessLogic.ConvertToDateToString(dtEndTime.Text));
            }
            else
            {
                sqlBuilder.SetValue("BeginTime", BusinessLogic.ConvertToDateToString(dtBeginTime.Text));
                sqlBuilder.SetValue("EndTime", BusinessLogic.ConvertToDateToString(dtEndTime.Text));
            }
            sqlBuilder.SetValue("Days", txtDays.Text);
            sqlBuilder.SetValue("QingJiaType", BusinessLogic.ConvertToString(cboQingJiaType.SelectedItem));
            sqlBuilder.SetValue("QingJia", txtQingJia.Text);
            sqlBuilder.EndInsert();
        }

        private bool CheckInput()
        {
            if (string.IsNullOrEmpty(BusinessLogic.ConvertToString(cboQingJiaType.SelectedItem)))
            {
                MessageBoxHelper.ShowWarningMsg("请选择请假类型!");
                cboQingJiaType.Focus();
                return false;
            }

            if (string.IsNullOrEmpty(txtDays.Text))
            {
                MessageBoxHelper.ShowWarningMsg("请假天数不能为空!");
                txtDays.Focus();
                return false;
            }

            if(!MathHelper.IsDecimal(txtDays.Text))
            {
                MessageBoxHelper.ShowWarningMsg("请假天数必须为数值型!");
                txtDays.Focus();
                return false;
            }

            if (string.IsNullOrEmpty(txtQingJia.Text))
            {
                MessageBoxHelper.ShowWarningMsg("请假事由不能为空!");
                txtQingJia.Focus();
                return false;
            }

            return true;
        }

        private void btnSave_Click(object sender, EventArgs e)
        {
            if (!CheckInput())
            {
                return;
            }

            this.SaveFormData(false);
            MessageBoxHelper.ShowSuccessMsg("保存成功!");
        }
    }
}

        
 注:原文:http://www.amazon.com/gp/product/0470396865/ref=s9_subs_gw_s1_p14_i1?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=center-2&pf_rd_r=0PE5YHXJHWSSQN0GYNTJ&pf_rd_t=101&pf_rd_p=470938631&pf_rd_i=507846

  四、表单与业务流程的绑定

  表单开发达成后,我们必要在RDIFramework.NET框架中对表单举行绑定,如下图所示:

九五至尊1老品牌值得 5

  具体各项的阐明可以参考RDIFramework.NET工作流部分的介绍文档。表单在框架中定义好后,大家再在请假申请各义务节点对表单举行绑定,须要表明的是,大家是以主表单以基础举行绑定的,那就表示一个职责节点可以有所多少个表单,那对复杂的事体相当有效。下边看下请假流程中部门COO对表单的绑定如下图所示,在“表单名”前面的按钮“…”就足以打开选用大家曾经定义的主表单,来作为当前任务节点的表单列表。

九五至尊1老品牌值得 6

  五、请假申请演示

  请假申请是种种登录系统的人都应有可以采纳的业务流程,因而大家把“请假申请”的开行节点的拍卖才指定为“所有人”,这就象征只要能登录种类,就可以动用“请假申请”流程。如下图所示:

九五至尊1老品牌值得 7

  打开“平常业务”成效模块,可以看来眼下用户能够采取的业务流程,如下图所示:

  九五至尊1老品牌值得 8

  在“可用业务”中甄选“行政部”,左侧列出所选节点当前用户有权力启动的具备业务流程,大家选取“员工请假流程”,单击“早先任务”,打开启动职务主界面,如下图所示。如若请假4天,则应由近日用户所在部门高管审批的同时还亟需分集团总监审批。

九五至尊1老品牌值得 9

  单击提交后,流程提交到部门CEO“wikstone”处,以wikstone用户登录,在未认领任务界面,可以看到请假申请早已交付给“部门经理处了,如下图所示:

九五至尊1老品牌值得 10

  RDIFramework.NET工作流组件约定所有职责交给后都会进来对方未认领职分列表,那样做的补益是:倘诺当前付出后想反悔,只要对方并未认领,就足以撤回职责。选用“认领义务”后,举办待办职分窗体,如下图所示:

九五至尊1老品牌值得 11

  接纳一条待办职务后,大家得以“处理职务”,放任对当前职分的收养、查看当前职分的推行流程图,当前职责的“处理记录”等。大家接纳“处理职务”按钮,对当前任务举行处理,如下图所示:

九五至尊1老品牌值得 12

  在“处理职责”主界面,大家可以做过多的操作,具体可以参考RDIFramework.NET工作流组件的连锁认证,这儿就不一一演讲了。填写好审批意见后,单击“提交”按钮,即可依据流程定义(当前请假天数大于3天)提交到“分公司总高管”处审批。上面大家以分行总COO“lsx”的用户登录系列,可以看到请假申请已经提交到了分店总首席执行官处。如下图所示:

九五至尊1老品牌值得 13

   按同样形式展开任务处理,再提交,流程就能够回来流程启动用户了。大家以流程启动者登录进来看下,查看下审批列表,如下图所示:

九五至尊1老品牌值得 14

  同时大家可以查阅流程进行情状,如下图所示:

九五至尊1老品牌值得 15

  至此,整个请假申请业务流程落成,当前在工艺流程流转的历程中还有许多操作,比如:任务的回退、授权、指派、召回等都得以随心所欲完成。 

相关文章

Your Comments

近期评论

    功能


    网站地图xml地图