审核流

v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}

1.       新建一个存储过程

-- =============================================

-- Author:    <howie>

-- Create date: <2015-03-30>

-- Description:  <待审批>

-- =============================================

Create PROCEDURE [dbo].[TrainErp_spContractOtherExamineQuery]

@pi_DoAction  varchar(100),

@pi_ExamineCode varchar(50),

@pi_FlowCode varchar(50),

@pi_Audit varchar(50),

@pi_PageIndex bigint,

@pi_PageSize int,

@po_RecordCount bigint output

AS

BEGIN

DECLARE @pt_StartRowIndex INT

DECLARE @pt_EndRowIndex INT

SET @pt_StartRowIndex = (@pi_pageIndex - 1) * @pi_pageSize + 1

SET @pt_EndRowIndex = @pi_pageIndex * @pi_PageSize

--查询一条

if @pi_DoAction=‘getone‘

begin

SELECT *,@pi_FlowCode as FlowCode FROM TrainErp_Daliy_ContractOther  where ContractCode=@pi_ExamineCode

end

--查询多条

if @pi_DoAction=‘getlist‘

begin

SELECT * FROM

(

SELECT

pt.*,

ROW_NUMBER() OVER (ORDER BY pt.ContractId desc) AS RowIndex

FROM TrainErp_Daliy_ContractOther  as pt

inner join TrainErp_CheckFlow_FlowStep as fs on pt.Step=fs.Step

where (@pi_FlowCode=‘‘ or fs.FlowCode=@pi_FlowCode) and (charindex(@pi_Audit,fs.Audit)>0)

) tba

WHERE RowIndex BETWEEN @pt_StartRowIndex AND @pt_EndRowIndex

--得到总数

SELECT @po_recordCount = COUNT(*)

FROM TrainErp_Daliy_ContractOther  as pt

inner join TrainErp_CheckFlow_FlowStep as fs on pt.Step=fs.Step

where (@pi_FlowCode=‘‘ or fs.FlowCode=@pi_FlowCode) and (charindex(@pi_Audit,fs.Audit)>0)

end

END

注:只需要改个表名和存储过程名,将TrainErp_Daliy_ContractOther替换掉就行。

2.运行程序,在后台审核流管理中添加:

接着在审核流步骤中添加总共有几个步骤:

3.       除了做好的模块页面之外,新建两个与模块对应的审核页面,也是list和detail

4.       打开路径Areas/manage/Utilities

在文件中增加一行代码:

这行代码请通知耗子统一添加,做到了就告诉耗子,不允许个人添加

5.       模块的页面就不阐述了,完成基本的增删改就好,接下来详细阐述一下审核页面的列表页和详细页:

列表页:

@using System.Data

@using Adf.App.Interface.Entity

@using Adf.App.Service.Service

@using Adf.App.Service.UI

@using Adf.Core.Database

@using Adf.Core.Util

@using Adf.Core.Web

@using Adf.Web.Areas.Utilities

@{

/*-----------------------------------------------------------------------

* @模块编码:ContractOtherExamine

* @模块名称:合同审批待审批

* @作者:howie

* @创建时间:2015-03-25

* @修改时间:

-----------------------------------------------------------------------*/

/* --系统变量-------------------------------------------------------- */

Layout = "~/views/shared/SystemLoginLayout.cshtml";

Module curModuleEntity = ViewBag.MainModuleEntity;

LoginInfo sysLoginInfo = ViewBag.GlobalLoginInfo;

List<UserModuleParam> sysModuleParamList = newList<UserModuleParam>();

List<RoleModuleParam> sysRoleModuleParamList = ViewBag.RoleModuleParamList ?? newList<RoleModuleParam>();

RoleModuleParam sysRoleModuleParam = newRoleModuleParam();

/* --自定义变量-------------------------------------------------------- */

DataTable dtFlow = DbService.Instance().QueryDataTable("TrainErp_CheckFlow_ExamineFlow", "", "");

}

@section MainHeader

{

<linkrel="stylesheet"type="text/css"href="/Plugs/combinationtext/combinationtext.css"/>

<scripttype="text/javascript"src="/Plugs/combinationtext/jquery.combinationtext.js"></script>

<scripttype="text/javascript">

// List

var curTableId = "myTable";

var curListWhere = "@Html.Raw(curModuleEntity.ListDefaultWhere)";

var curListOrderBy = "@Html.Raw(curModuleEntity.ListOrderBy)";

var curListFields = "@Html.Raw(curModuleEntity.ListFields)";

var curListQueryType = 3;

//save

var curSaveFields = "@Html.Raw(curModuleEntity.DetailSaveFields)";

var curPrimaryFields = "@Html.Raw(curModuleEntity.PrimaryFields)";

var queryParams = {

pageIndex: 1,

pageSize: @curModuleEntity.PageSize,

recordCount: 0,

pageCount: 1,

MainDsCode: "@curModuleEntity.MainDsCode",

detailDsCode: "@curModuleEntity.DetailDsCode",

where: curListWhere,

orderBy: curListOrderBy,

fields: curListFields,

queryType: curListQueryType,

dataParam: {

//页面注意点1:审核流类型替换

"DoAction": "getlist",

"FlowCode": "@EnumHelper.GetDescription(EAuditTypeCode.ContractOther)",

"Audit": "@sysLoginInfo.User.UserCode"

}

}

var gConfig = {

mc: "@curModuleEntity.ModuleCode",

id: curTableId,

tplColumnId: "tplColumnInfo",

tplGridDataId: "tplGridData",

tplFilterId: "tplFilterInfo",

tplToolId: "tplToolInfo",

queryParams: queryParams

};

$(function() {

//初始化信息

$("#" + curTableId).asDataGridV1(gConfig);

gConfig = $("#" + curTableId).asDataGridV1("getConfig");

//初始化

doAjustGridScroll(curTableId, $(window).height() - 50);

$(window).resize(function() {

doAjustGridScroll("myTable", $(window).height() - 50);;

});

$.asSetLayOut(); //设置表单控件样式

/**---------列表部分--------------------------------------------------------------------------*/

//定义当前的操作按钮控制信息

$.asButtonEvent("add", "click", function() {

var sp = {};

sp.moduleCode = "@curModuleEntity.ModuleCode";

sp.detailDsCode = "@curModuleEntity.DetailDsCode";

sp.showType = "detail";

sp.doCmd = "add";

sp.d = new Date();

$.asAppGetForm(sp, function(retData) {

$("#" + gConfig.detailId).html(retData);

$("#" + gConfig.gridId).hide();

$("#" + gConfig.detailId + "").show();

}, function() {

alert("数据获取错误");

});

returnfalse;

});

//页面注意点2:审核执行存储过程为我们一开始建的存储过程

//审核事件

$.asButtonEvent("examine", "click", function() {

var cblInfo = $.asGetValuesOfCtrlName("gridform_myTable", "gridSel", "|");

if (cblInfo.length < 1) {

alert("请选择一条记录");

returnfalse;

}

var arrInfo = $.asSplitToArray(cblInfo, "|");

if (arrInfo.length > 1) {

alert("你选择多条记录了,只能选择一条记录");

returnfalse;

};

var sp = {};

sp.ProcName = "TrainErp_spContractOtherExamineQuery";

sp.DoAction = "getone";

sp.DoCmd = "examine";

sp.ExamineCode = cblInfo;

sp.moduleCode = "@curModuleEntity.ModuleCode";

$.asAppGetForm(

sp, function(retData) {

$("#" + gConfig.detailId).html(retData);

$("#" + gConfig.gridId).hide();

$("#" + gConfig.detailId + "").show();

}, function() {

alert("数据获取错误");

});

returnfalse;

});

//刷新当前列表页

$.asButtonEvent("ListRfresh", "click", function() {

$.asTableReloadData(gConfig.id, queryParams);

});

//查询功能

$.asButtonEvent("QueryFilter", "click", function() {

//构造查询参数

var s_FlowCode = $("#s_FlowCode").val();

queryParams.dataParam.FlowCode = s_FlowCode;

queryParams.dataParam.Audit = "@sysLoginInfo.User.UserCode";

//重新加载

$.asTableReloadData(gConfig.id, queryParams);

});

//返回至列表页

$.asButtonEvent("btnReturnList", "click", function() {

$("#" + gConfig.detailId).hide();

$("#" + gConfig.gridId).show();

returnfalse;

});

/**---------详细页部分--------------------------------------------------------------------------*/

$("body").on("click", ".save", function() {

if ($("#gridform_myTable").valid()) {

$.asFormSetHidden(gConfig.gridFormId, "mc", gConfig.mc);

$.asFormSetHidden(gConfig.gridFormId, "procName", "TrainErp_spWaitExamineExecute");

var param = {};

$.asAppSubmitFormProc(

gConfig.gridFormId, param, function(retData) {

//返回正确的数据

if (retData.RetStatus == 100 || retData.RetStatus == 101) {

//刷新数据

alert(retData.RetValue);

} else {

alert(retData.RetValue);

}

}, function() {

//表单提交前进行验证

//return true 继续进行

//return false 阻止提交

//alert("进行验证字段是否合法");

returntrue;

}, function() {

alert("发生错误,请重新提交");

});

}

returnfalse;

});

//详细页,返回列表

$("body").on("click", "#btnReturnList", function() {

$("#" + gConfig.detailId).hide();

$("#" + gConfig.gridId).show();

returnfalse;

});

$("#btnGetVal").click(function() {

alert($("#subBox").combinationtext(‘getValue‘));

});

});

</script>

}

@section MainBody

{

<divid="myTable"></div>

<!--工具条信息-->

<scripttype="text/html"id="tplToolInfo">

//页面注意点3:数据集-模块-角色权限要增加一个操作:审核

@{

if (AppService.CheckRoleModuleParam(sysRoleModuleParamList, "examine", "1", ref sysRoleModuleParam))

{

<buttontype="button"id="btn@(sysRoleModuleParam.ParamCode)"class="@sysRoleModuleParam.ParamCode">@sysRoleModuleParam.ModuleParam.ParamName</button>

}

}

<divstyle="clear: both"></div>

</script>

<!--过滤条件-->

<scripttype="text/html"id="tplFilterInfo"class="dn">

<tableclass="filter-Table">

<tr>

<tdclass="w80px tar">审核流:@sysLoginInfo.User.UserCode</td>

<tdclass="w80px">

<divclass="rule-single-select">

@StringHelper.ToMvcString(HtmlControlHelper.GetDropDownList("s_FlowCode","", "",dtFlow, "FlowName", "FlowCode"))

</div>

</td>

<tdclass="w80px">

<inputtype="button"class="QueryFilter"id="btnQuery"value="查询"/>

</td>

<td></td>

</tr>

</table>

</script>

//页面注意点4:审核列表页显示内容,可以与搭建的模块页面的列表页一致

<!--表头信息-->

<scripttype="text/html"id="tplColumnInfo"class="dn">

<tr>

<thclass="w40px">选择</th>

<thclass="w150px">合同编号</th>

<thclass="w150px">合同名称</th>

<thclass="w150px">客户名称</th>

<thclass="w150px">电子资料</th>

</tr>

</script>

<!--表体信息-->

<textareaid="tplGridData"style="display: none;">

{#foreach $T.rows as record}

<tr>

<td><inputtype="checkbox"name="gridSel"value="{$T.record.ContractCode}"/></td>

<td>{$T.record.ContractCode}</td>

<td>{$T.record.ContractName}</td>

<td>{$T.record.ContractCustomer}</td>

<td><ahref="/uploadfiles/{$T.record.ContractFile}">{$T.record.ContractFile}</a></td>

</tr>

{#/for}

</textarea>

}

 

详细页:

@using System.Data

@using Adf.App.Interface.Entity

@using Adf.App.Service.Service

@using Adf.App.Service.UI

@using Adf.App.Service.UI.Form

@using Adf.Core.Util

@using Adf.Core.Database

@using Adf.Core.UI.Form

@using Adf.Core.Web

@using Adf.Web.Areas.Utilities

@{

Layout = "~/views/shared/sysmdetail.cshtml";

Module sysModuleEntity = ViewBag.MainModuleEntity;

LoginInfo sysLoginInfo = ViewBag.GlobalLoginInfo;

//数据

DataTable curMainDataTable = ViewBag.MainDataTable;

//当前页面变量

String sysDoCmd = RequestHelper.GetFormString("DoCmd");

//临时变量

//参照数据源

//审核历史记录,这个DataTable必须要,注意改一下主键

DataTable dtHistory = DbService.Instance().QueryDataTable("select eh.*,u.UserName as AuditName from TrainErp_CheckFlow_ExamineHistory as eh inner join AdfV2_User as u on eh.Audit=u.UserCode where eh.ExamineCode=‘" + DbService.DtV(curMainDataTable, "ContractCode") + "‘ order by eh.AddTime");

//页面用到的其他datatable,可有可无

DataTable curDtSysConfigItems = AppService.QueryDataTable("ds-SysConfigItemsEdit", "where SysConfigItemsCode like ‘020%‘", "SysConfigItemsCode,SysConfigItemsName,ParentCode", "Order by SortBy desc", false) ?? newDataTable();

}

@section MainTool

{

<linkhref="/Style/Manage/Default/css/timeaxis.css"rel="stylesheet"type="text/css"/>

<scripttype="text/javascript"src="/Style/common/timeaxis.js"></script>

<divclass="asDataGridTool">

<buttontype="button"id="btnsave"class="save">保存</button>

<buttonid="btnReturnList">返回列表</button>

<divstyle="clear: both"></div>

</div>

}

@section MainForm

{

<scripttype="text/javascript">

$(function() {

$.asSetLayOut();//设置表单控件样式

/*Start表单验证*/

$("#gridform_myTable").validate({

rules: {

ExamineStatus: {

required: true

}

},

//ignore:忽略某些元素不验证

ignore: "",

//errorPlacement:Callback Default: 把错误信息放在验证的元素后面

//指明错误放置的位置,默认情况是:error.appendTo(element.parent());即把错误信息放在验证的元素后面

errorPlacement: function (error, element) {

error.appendTo(element.parent());

},

success: function (label) {

label.html("&nbsp;").addClass("right");

}

});

/*End表单验证*/

});

</script>

@*页面整体化,上半部分为我们所做的模块信息,直接显示出来,在我们做的查询存储过程中已经有数据了,然后注意一下<fieldset>和<legend>标签,注意页面美化*@

<fieldset>

<legend>基本信息</legend>

<tableclass="asFormTable">

<tr>

<tdstyle="width: 100px; text-align: right;">合同编号:</td>

<td>

@Html.Raw(HtmlControlHelper.GetText("ContractCode", DbService.DtV(curMainDataTable, "ContractCode"), 40, false, false))

</td>

</tr>

<tr>

<tdstyle="width: 100px; text-align: right;">合同名称:</td>

<td>

@Html.Raw(HtmlControlHelper.GetText("ContractName", DbService.DtV(curMainDataTable, "ContractName"), 40, false, false))

</td>

</tr>

<tr>

<tdstyle="width: 100px; text-align: right;">客户名称:</td>

<td>

@Html.Raw(HtmlControlHelper.GetText("ContractCustomer", DbService.DtV(curMainDataTable, "ContractCustomer"), 40, false, false))

</td>

<tdstyle="width: 100px; text-align: right;">合同分类:</td>

<td>

<divclass="rule-single-select">

@Html.Raw(HtmlControlHelper.GetDropDownList("ContractTypeCode", DbService.DtV(curMainDataTable, "ContractTypeCode"), "", curDtSysConfigItems, "SysConfigItemsName", "SysConfigItemsCode", ""))

</div>

</td>

</tr>

<tr>

<tdstyle="width: 100px; text-align: right;">合同状态:</td>

<td>

<divclass="rule-single-checkbox">

@Html.Raw(HtmlControlHelper.GetCheckBox("ContractStatus", "ContractStatus", "1", ((DbService.DtV(curMainDataTable, "ContractStatus")).ToLower().Equals("true")) ? "1" : "0"))

</div>

</td>

<tdstyle="width: 100px; text-align: right;">合同附件:</td>

<td>

@Html.Raw(HtmlControlHelper.GetText("ContractFile", DbService.DtV(curMainDataTable, "ContractFile"), 40, false, false))

@StringHelper.ToMvcString(HtmlControlHelper.GetButton("btnContractFile", "btnContractFile", "", "上传"))

</td>

</tr>

</table>

</fieldset>

@*第二部分:审核信息部分*@

<fieldset>

<legend>审核信息</legend>

<table  class="asFormTable">

<tr>

<tdstyle="width: 100px; text-align: right;">审核项:

</td>

<td>

<divclass="rule-single-select">

@StringHelper.ToMvcString(HtmlControlHelper.GetDropDownList("ExamineStatus", "", "", EnumHelper.GetAllOutPutToDt(typeof (EAuditItems)), "Description", "Val"))

</div>

</td>

</tr>

<tr>

<tdstyle="width: 100px; text-align: right;">审核说明:

</td>

<td>

@StringHelper.ToMvcString(HtmlControlHelper.GetTextArea("Remarks", "Remarks", "", "width:400px", 20, 3))

</td>

</tr>

</table>

</fieldset>

@*第三部分:审核历史部分,这部分无需改动,直接显示的页面。*@

<fieldset>

<legend>审核历史</legend>

<divclass="container">

<divclass="main">

<ulclass="cbp_tmtimeline">

@{

int index = 1;

foreach (DataRow dr in dtHistory.Rows)

{

<li>

<timeclass="cbp_tmtime"><span>

@dr["AddTime"].ToString()</span><span>@dr["AuditName"].ToString()</span></time>

<divclass="cbp_tmicon ">@index</div>

<divclass="cbp_tmlabel ">

<h2>@EnumHelper.GetDescription(typeof (EAuditItems), dr["ExamineStatus"].ToString())</h2>

<p>@dr["Remarks"].ToString()</p>

</div>

</li>

index++;

}

}

</ul>

</div>

</div>

</fieldset>

@*操作参数*@

@Html.Raw(HtmlControlHelper.GetHidden("CreateUserCode", sysLoginInfo.User.UserCode))

@Html.Raw(HtmlControlHelper.GetHidden("ModifyUserCode", sysLoginInfo.User.UserCode))

@Html.Raw(HtmlControlHelper.GetHidden("DoCmd", sysDoCmd))

@*审核流所需参数,注意主键要改掉*@

@Html.Raw(HtmlControlHelper.GetHidden("ExamineCode", DbService.DtV(curMainDataTable, "ContractCode")))

@Html.Raw(HtmlControlHelper.GetHidden("Step", DbService.DtV(curMainDataTable, "Step")))

@Html.Raw(HtmlControlHelper.GetHidden("Audit", sysLoginInfo.User.UserCode))

@*审核操作状态部分*@

@Html.Raw(HtmlControlHelper.GetHidden("NotPass",Convert.ToString((int)EAuditItems.NotPass)))

@Html.Raw(HtmlControlHelper.GetHidden("AsNotPass", Convert.ToString((int)EAuditStatus.NotPass)))

@Html.Raw(HtmlControlHelper.GetHidden("AsPass", Convert.ToString((int)EAuditStatus.Pass)))

@Html.Raw(HtmlControlHelper.GetHidden("AsAudit",Convert.ToString((int)EAuditStatus.Audit)))

@*审核流部分*@

@*第一个参数是耗子添加的部分,可以直接将方法点出来*@

@Html.Raw(HtmlControlHelper.GetHidden("FlowCode", EnumHelper.GetDescription(EAuditTypeCode.ContractOther)))

@*第二部分,替换表名称*@

@Html.Raw(HtmlControlHelper.GetHidden("TableName", "TrainErp_Daliy_ContractOther"))

@*第三部分,传一个主键Code*@

@Html.Raw(HtmlControlHelper.GetHidden("PkCode", "ContractCode"))

}

@section MainHelper

{

}

6.  其他注意点:

a.  设计到审核流的表字段中添加两个字段:审核步骤:Step,审核状态:AuditStatus

b.  新建一个数据集,用我们第一步建立的存储过程名称

c.  新增一个模块,用来显示:

d.角色权限中添加一个审核操作:examine 赋值为1

Normal
0
false

7.8 磅
0
2

false
false
false

EN-US
ZH-CN
X-NONE

/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.5pt;
mso-bidi-font-size:11.0pt;
font-family:"Calibri","sans-serif";
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-font-kerning:1.0pt;}

时间: 2024-10-14 13:06:47

审核流的相关文章

审核流(3)低调奢华,简单不凡,实例演示-SNF.WorkFlow--SNF快速开发平台3.1

下面我们就从什么都没有,结合审核流进行演示实例.从无到有如何快速完美的实现,然而如此简单.低调而奢华,简单而不凡. 从只有数据表通过SNF.CodeGenerator代码生成器快速生成单据并与审核流进行结合案例. 现在我只有这样一个表如下:(下面介绍单表,多表原理是一样的) 1.审核流结合代码生成器快速实现 1.用代码生成器生成单据(选择启用审核流) 之后点击“生成“并把对应代码拷贝到相应的位置,执行脚本把菜单预制进去,详见“06.SNF.CodeGenerator代码生成器使用说明.docx”

SNF快速开发平台3.1之-- SNF.WorkFlow审核流简介

本项目是的在Spring.Net.Framework 平台之上进行研发.SNF.WorkFlow审核流是一款完全自主知识产权研发的为软件项目. 审核流基本概念:什么是审核流? 审核流:两个或两个以上的人,为了共同的目标,连续的以串行或并行的方式去完成某一业务. 业务:审核流所指业务涵盖了与经营相关的活动. 串行或并行:业务中的步骤也许以一步接着一步的方式进行,我们称之为串行:或者由不同的人或组合根据不同的情况处理,我们称之为并行. 两个或两个以上的人:如审核流的名称所表达的含义,一个人处理的业务

审核流(2)流程设计-SNF.WorkFlow功能使用说明--SNF快速开发平台3.1

流程设计 图形化的流程设计,更方便.直观 1.打开“流程设计“程序,如上.点击”新建“如下: 2.红色部分为必填项,审批对象是选择要审批的程序菜单,单据名称是在审核流流转时用于提示的单据名称,还要选择审核的数据表和审核状态字段.当维护完成后进行“确定“保存.再点击 进行图形化设计审核流. 3.从左边拖拽审核节点和连接线. 4.双击节点 ,设计节点此节点的名称.审核人.投票比例等. 注:可以选择多人再结合投票设置可以达到会审需求. 5.双击连接线可以配置走此分支需要具备的条件.如果业务人员可以用鼠

K3数据库相关

帐套信息KDAcctDB数据库下的 kdAccount_gl里.select * from t_ad_kdAccount_gl 版本14.0 K3各表说明select * from t_tableDescription sql server2008 下1.获取所有数据库名: SELECT Name FROM Master..SysDatabases ORDER BY Name 2.获取所有表名: SELECT Name FROM DatabaseName..SysObjects Where XT

通用审批流程快速开发系统案例分享

公司组织机构是一个树形架构,先前新加盟公司时都是总部直接添加在某个子公司下,因审计需要,要求通过下面公司申请,逐个角色处理来完成新公司的开通,开发任务最后落到我这里,时间紧,任务重,先前也没接触多少审批流程的开发,好在我们的系统是基于通用权限管理系统的底层来做的开发,角色,权限控制已没什么问题,而且底层也集成有一个审批流程组件,只是先前没多少人使用过,通过与吉日嘎拉老师的沟通,大致了解了这个组件的思想,就像其它系统调用权限功能一样,我只需要完成业务功能的开发,实现审批流的接口即可,经过将近3周的

C#-MVC开发微信应用(8)--菜单管理的实现

之前讲解了微信后台管理页面的操作来管理菜单,下面我们在简单的来看一下,代码是如何实现的. 我们要实现获取微信的菜单.创建菜单.删除菜单等操作. 01.首先定义菜单操作的接口: /// <summary> /// 菜单的相关操作 /// </summary> public interface IMenuApi { /// <summary> /// 获取菜单数据 /// </summary> /// <param name="accessTok

继往开来-忆2015之工作篇

工作上的事情主要有两块,作为程序员立身之本的技术部分,以及随着工作逐渐增加的"管"理部分. 先谈技术. 技术方面成长主要体现在设计层面.上次的技术瓶颈出现在刚入职场时期,更多的是各种语言.工具的使用问题,比如:commons,hibernate,MyEclipse等等的使用.这次的瓶颈出现在程序设计方面,由于这一年里面出现了大量重复类似的需求,强迫自己不得不重新适应快速迭代的敏捷开发,使用更多的设计模式和工具来减轻日常的开发工作. 设计模式,15年开发应用了工厂.单例.责任链.策略等模式.这些应

SNF开发平台WinForm之十三-时间轴控件使用-SNF快速开发平台3.3-Spring.Net.Framework

一.显示效果如下: 二.在控件库里选择UCTimeAxis 拖拽到窗体里. 三.加入以下代码,在load事件里进行调用就可以运行了. #region 给时间轴控件加载数据 private void UCTimeAxisData() { //增加节点 List<KeyValuePair<string, string>> list = new List<KeyValuePair<string, string>>(); list.Add(new KeyValueP

SNF微信公众号客户端演示-微信开发客户端能干什么

关注测试微信号: 关注后菜单页面如下: 一.扫描二维码进行订单查询演示 1.点击菜单“软件产品”->选择“扫描查询” 2.扫描如下二维码进行订单查询演示. 3.扫描结果如下: 二.微信“输入订单号”进行查询订单 1.点击菜单“软件产品”->选择“订单查询” 2.输入需要查询的订单号后点击“订单查询”按钮,如下显示查询结果: 三.微信端反馈信息 1.点击菜单“软件产品”->选择“反馈信息” 2.“*”号为必填项,留下联系方式和反馈意见后“提交”信息. 之后在我们网站后台就可以看到这些反馈.