崔文远 Troy Cui 老崔先生的上海生活、技术博客

C# .Net中DataTable缓存的实例

上次《[URL=http://www.cuiwenyuan.com/shanghai/post/AspNet-Datalist-ReportColumns-and-Image-file-url.html]C# Datalist 多列及Image中图片路径的绑定[/URL]》提到过公司的三放心评选活动的海选,每个用户打开页面的时候,待评选的人员都是随机排序的,因为当时没有用Ajax的技术,用的还是老Webform页面刷新,所以每次用户提交投票以后,页面上的待评选人员都会重新随机排序。昨天再次搞第2季度的评选,我也懒得修改为Ajax的交互式设计,只是针对这个页面进行了随机排序的优化:每个用户登录后第一次打开页面是随机排序,后面再次打开(刷新)页面都保持第一次的排序。因为我没有使用数据查询语句的动态排序,而是在读取数据库后,DataTable动态增加了一列RowId,然后随机生成GUID,根据此列动态的排序,所以这里需要保存RowId的数据到Cache。

代码如下,仅供参考。这个代码比一般的只是Cache完整的DataTable要复杂些。

<br/><br/>// 动态增加随机排序编号<br/>        dt.Columns.Add("RowId", Type.GetType("System.String"));<br/>        string rowId = string.Empty;<br/><br/>        if (Cache[cacheName] != null)<br/>        {<br/>            // Create DataTable From Cache <br/>            DataTable dtRowId = (DataTable)Cache[cacheName];<br/>            for (int i = 0; i < dt.Rows.Count; i++)<br/>            {<br/>                rowId = dtRowId.Rows[i]["RowId"].ToString();<br/>                dt.Rows[i][dt.Columns.Count - 1] = rowId;<br/>            }<br/>        }<br/>        else<br/>        {<br/>            // Create DataTable From DataBase <br/>            DataTable dtRowId = new DataTable();<br/>            dtRowId.Columns.Add("RowId", Type.GetType("System.String"));<br/>            <br/>            for (int i = 0; i < dt.Rows.Count; i++)<br/>            {<br/>                rowId = Guid.NewGuid().ToString();<br/>                dt.Rows[i][dt.Columns.Count - 1] = rowId;<br/>                // 保存到缓存表<br/>                DataRow drRowId = dtRowId.NewRow();<br/>                drRowId["RowId"] = rowId;<br/>                dtRowId.Rows.Add(drRowId);<br/>            }<br/><br/>            // Push DataTable To Cache<br/>            Cache[cacheName] = dtRowId;<br/>        }<br/><br/>

Tags:

发布: cuiwenyuan 分类: Web技术 评论: 0 浏览: 265

Infor ERP LN中销售订单利润检查及锁定功能的几点注意事项

近期一个销售员找我说他的订单没办法下达,我了解了一下发现是产生了Margin Check Blocking,于是我苦口婆心的给他介绍这个锁定的原理及背后的逻辑,同时还告诉财务的小姑娘了解销售订单解锁的权限分配等,基本上让他们知道了如下几点:

1、有很多种原因造成销售订单锁定,比如账龄、信用、低利率等,在于每个公司的实际需求去定义。
2、针对不同的销售员,可以设定不同级别的锁定权限,可以按照Margin等锁定类别来设定,也可以设定是否记录,是否锁定,是否拒绝等。因为不同的销售员是可以分级别的,比方说利润这点,有些资深的高级销售员就可以给客户一个任意的价格,只是记录一下低于设定的利润,而不去锁定或者拒绝。
3、针对不同的客户可以设定不同类型的锁和检查机制,这个大家都懂的,客户分级嘛。
4、既然订单锁定了,就需要分配不同的人去解除不同的锁,而对于信用、低利润这种,就需要在老板或者够资格的经理批准后才能解锁。
5、其实所有的功能我们都需要考虑用这个控制的目的是什么,除了系统的线上操作之外,线下还需要什么样的流程。

最后附上涉及到的几个Session截图,大家看图就应该懂了。







Tags: Infor ERPLN Baan

发布: cuiwenyuan 分类: Infor ERP LN(BaaN ERP) 评论: 0 浏览: 166

原创FlowPortal用户手写签名插件:Signature,需要另购手写板(及手写笔)

近期人事部提出需求,要给所有的工人使用电脑请假申请,代替纸质的申请。因为不可能给每一位工人开设Windows或者应用系统账号,更不可能给每一个工人配置电脑,所以他们使用公用的电脑来来申请,所使用的BPM账号也是共享的。所以面临如下风险:

1、工人可以随便帮别人申请,不管善意的还是恶意的。
2、中国的法律环境下,公用账号的系统,增加手写签字的记录可以规避一些风险。

现在的需求提出来了,第一个问题很好解决,我们让工人在领班的带领下去申请休假,领班不能泄露BPM的登录密码。工人使用完毕,及时退出。第二个问题呢比较棘手,从需求提出来,搞了2个多星期,终于搞出来了。技术上使用Html5的Canvas画布,可以保存签名为图片,或者直接放到数据库里,或者转换为JSON的格式保存在数据库。前端的应用使用jQuery,并做了方便移植和部署的插件。

发几张截图吧,有需要的朋友可以直接联系我,不过不是免费的。因为免费的东西是这个世界上最贵的东西!,暂时定价500元,至少可以节省你几天的时间去研究,省下来时间自己充充电,多陪陪家人,如果你的工作能令老板满意,收获的可远远不止500元。

程序员个人购买源码一口价:500元
公司购买需要发票的话,我得找朋友开服务发票,价格1000元。
支付宝转账,QQ、飞信或手机短信联系,邮箱发送代码。
为啥要付费购买:不用苦逼的去加班了,省下来宝贵的时间健健身、陪陪家人、孩子
QQ:17185490
手机:13818699609
支付宝账号:troy@cuiwenyuan.com


申请人填写界面





审批人处理界面



仓库库位管理思路及条码分享

公司仓库搬迁项目从年初开始,至今已接近尾声,对于新仓库的多层货架的库位管理,我这里分享一下我们的经验,如果你觉得有用,或有更好的建议,记得留言。

仓库及库位管理规则


1、对于一个物理的仓库,可以对应1个或多个系统的仓库。
2、每个系统的仓库都设立库位(即Location),库位的标示(条码)在不同的系统仓库中可以重复出现。
3、库位的条码按照4个维度来定义:排、列、层、位,相对于立体仓库的xyz(长宽高)多了一个层的划分。
4、库位的条码贴在货架上,高度以容易观察和扫描为宜,先统一为第2层的横杆上,及相同高度的竖立柱上。
5、第一层的库位条码上包括向下的箭头(如下图)
6、第二层的库位条码上包含向上的箭头(如下图)
7、第三层及第四层的条码上包含向左或向右的箭头(如下图,可根据自己的仓库入口及布局进行调整)
8、库位条码上每一层都突出显示(见下图)
9、货架每一排的首尾都需悬挂“十字路标”的指示牌,方便从不同方向都能看到本排的编号

库位条码示例图













Tags: 仓库库位管理

发布: cuiwenyuan 分类: Infor ERP LN(BaaN ERP) 评论: 0 浏览: 173

免费开源我的第一个原创FlowPortal插件:TaskComment

大概去年的这个时候,我和上家公司的3个同事开始踌躇满志的希望能在工作中利用Flowportal做点东西,同时能在BPM行业积累更多的经验、人脉,成立了八匹马BPM沙龙,但是随着本来谈好的合作厂商的失信,再加上4人中有一人离开上海,这个BPM沙龙就名存实亡了。
不过也就在去年的7月,我在八匹马BPM沙龙论坛发表了[URL=http://www.cuiwenyuan.com/shanghai/post/FlowPortal-Plug-in-TaskComment.html]我的第一个Flowportal插件:TaskComment[/URL],当时卖出了1份,免费送了好友了几份。之后就销声匿迹了,今年Flowportal的官方人员联系我索取源码,美其名曰帮我卖出去一份,就给我一份钱。我当时就抱着肉包子砸狗的态度,发了一份源码给他们。果不其然,至今几个月过去了,他们没有任何人联系过我。

于是,今天,趁着心情好,我决定在这里免费开源这个插件的源代码,就算你现在没这个需求,保留一份参考一下自己的2次开发也不错,另外也免得被官方再收费。

索取的办法就是在本文留言,并留下您的邮箱。

More...

C# Datalist 多列及Image中图片路径的绑定

今天搞公司三放心员工评选的程序,最后的评选是那种带头像,下面是评选星级和点赞的那种,平常的都是数据管理,用Gridview比较多,今天学习和尝试多列的绑定可以使用Repeater,也可以用Datalist。我最后用了Datalist,简单好用。整理到这里,备自己以后用。

<br/><asp:DataList ID="dlFinalTarget" runat="server" Width="99%" RepeatColumns="6" <br/>RepeatDirection="Horizontal"><br/><ItemTemplate><br/><table cellspacing="5" style="border:#ccc 1px solid; width:150px; margin-bottom:10px;"><br/>    <tr><br/>        <td align="center"><br/>            <asp:Image ID="imgPhoto" runat="server" Width="150px" Height="180px" ImageUrl='<%# DataBinder.Eval(Container.DataItem, "TargetEmployeeNumber","images/{0}.jpg")%>' ToolTip='<%# DataBinder.Eval(Container.DataItem, "TargetName")%>' /><br /><br/>            <asp:Image ID="imgStar" runat="server" Width="150px" Height="35px" ImageUrl='<%# DataBinder.Eval(Container.DataItem, "Star","images/star{0}.jpg")%>' /><br /><br/>            <a href="SanFangXinFinalTargetList.aspx?Action=Vote&SupportTypeId=1&Id=<%# DataBinder.Eval(Container.DataItem, "Id")%>"><img src="images/support.jpg" alt="赞" width="30" height="30" border="0" /></a><br/>                        <br/>            <a href="SanFangXinFinalTargetList.aspx?Action=Vote&SupportTypeId=2&Id=<%# DataBinder.Eval(Container.DataItem, "Id")%>"><img src="images/nonsupport.jpg" alt="赞" width="30" height="30" border="0" /></a><br/>        </td><br/>    </tr><br/></table><br/></ItemTemplate><br/></asp:DataList><br/>



其中有一点,绑定图片控件的时候,有个路径的问题,如果在前台绑定,请用一下方法。

<br/><asp:Image ID="imgStar" ImageUrl='<%# Eval("Name","~/Images/{0}.jpg") %>' style="width:200px" runat="server" /><br/>

Tags:

发布: cuiwenyuan 分类: Web技术 评论: 1 浏览: 132

我为何而生,你为何而生

上周看到[URL=http://user.qzone.qq.com/450496181]油麻菜[/URL]写的一篇《[URL=http://user.qzone.qq.com/17185490/blog/1399424492]你为何而生[/URL]》,期间看到他转载的罗素的一段短文,似乎积蓄了很久的想法,豁然开朗。转来给大家一起分享。

<br/>我为何而生 <br/>伯特兰·罗素 <br/>有三种情感,单纯而强烈,支配着我的一生:对爱情的渴望,对知识的追求,以及对人类苦难不可遏制的同情。这些感情如阵阵巨风,挟卷着我在漂泊不定的路途中东飘西荡,飞越苦闷的汪洋大海,直抵绝望的边缘。 <br/>我之所以追寻爱情,首先,爱情使人心醉神迷,如此美妙的感觉,以致使我时常为了体验几小时爱的喜悦,而宁愿献出生命中其它一切;其次,爱情可以解除孤独,身历那种可怕孤寂的人的战栗意识,会穿过世界的边缘,直望入冰冷死寂的无底深渊;最后,置身于爱的结合,我在一个神秘缩影中看到了圣贤与诗人们所预想的天堂。这正是我所追寻的,尽管它对于人类的生活或许太过美好,却是我的最终发现。 <br/>我也以同样的热情追求知识。我渴望理解人类的心灵,渴望知道星辰为何闪耀,我还试图领略毕达哥拉斯关于哪些数字在变迁之上保持着永恒的智慧。在这一方面,我取得了一点成果,但并不算多。 <br/>爱情与知识,尽其可能,引领着我通往天堂;然而怜悯总是把我带回现实。那些痛苦的呼唤在我内心深处回响。饥饿中的孩子,被压迫和折磨的人们,给子女造成重担的无助老人,以及孤独、贫穷和痛苦的整个世界,都是对人类理想生活的嘲讽。我渴望能减少这些不幸,但无能为力,这也是我的痛苦。 <br/>这就是我的一生。我发现人生是值得的;而且如果能够再有一次这样的机会,我会欣然接受。 <br/>

Tags:

发布: cuiwenyuan 分类: 技术管理与生活 评论: 0 浏览: 66

通过网页获取访客的QQ号码

现在有些互联网公司在开发一种软件,插入一段js代码到网站的任意页面(如首页),如果访客访问了网页,并且访客的电脑上打开并登录了QQ,那么就能获取到访客的QQ号码,从而判断客户是否开通了QQ邮箱,进而自动发送邮件,并展开后继的主动营销。

但这种技术如何实现的呢?通过今天研究其中一家软件公司的js代码,我发现了其中的一种绝妙的实现方式。

在需要获取的网页加入如下js引用:


...

More...

Tags: 干货

发布: cuiwenyuan 分类: Web技术 评论: 0 浏览: 317

js自动绑定焦点到指定textbox,

近期开发Web版的微型仓库管理的小系统,系统的特点就是针对单品条码的管理,也就是所有进出货等都是需要扫描一个唯一的条码来进行的。那么就遇到打开网页之后,自动锁定光标到条码输入的输入框,条码枪扫描以后,还需要自动清除内容并再次锁定光标到输入框。其实这就是js开发中焦点的处理,但是要实现这个功能真的没那么简单,并非用.Focus那么简单的,你会发现不管用C#来进行后来的焦点定位 - this.txtSerialNumber.Focus();,还是前台的js焦点定位都不行。

问了N个高手,搜索了N个网站,在高手的QQ群里问了多次,都没有很好地答案,最后在这里找到了解决办法:《[URL=http://wangye.org/blog/archives/150/]JavaScript让登录或搜索文本框自动获得焦点[/URL]》,再次感谢扬州的王晔。

Tags:

发布: cuiwenyuan 分类: Web技术 评论: 0 浏览: 132

C#验证Email是否真实存在,并非格式验证的思路

C#中验证邮件地址是否合法的方法有很多,正则表达式就挺好。但是要验证邮件地址是否真实存在,这个就有点复杂了。我参考了一下几篇文章及思路,弄了一个Web程序(写了个类)可以很方便的验证。不过有一点问题就是真实性的准确率方面,需要依赖运行程序的服务器IP地址,因为很多邮件服务上都有一个IP地址发信的黑名单。

有需要的朋友,可以加我QQ购买源码,或者提供Email清单,我来帮你验证。

[URL=http://www.jb51.net/article/17215.htm]C# 邮件地址是否合法的验证[/URL]
[URL=http://blog.sina.com.cn/s/blog_4cc1e6d201009208.html]C#验证Email是否真正存在[/URL]
[URL=http://blog.sina.com.cn/s/blog_4ff16d9201000crl.html]邮件服务器返回的错误码大全 ,from RFC[/URL]

购买源码一口价:100元
支付宝转账,QQ、飞信或手机短信联系,邮箱发送代码。
为啥要付费购买:不用苦逼的去加班了,省下来宝贵的时间健健身、陪陪家人、孩子
QQ:17185490
手机:13818699609
支付宝账号:troy@cuiwenyuan.com

Tags: 干货

发布: cuiwenyuan 分类: Web技术 评论: 0 浏览: 162