Fork me on GitHub
Environment Detection环境检测工具设计与实现

ERP环境检测工具设计与实现 Environment Detection

环境检测的功能在安装程序中应用的很普遍,ERP程序中也需要在系统第一次启动时,对所安装的环境进行检测,遇到不满足的情况要及时提示用户更新系统。

image

网格中显示要检测的编号,内容描述,最后一列是检测结果,工具栏Export可以将检测结果导出为EXCEL文件。

先来看检测规则的设定,仍然是发挥XML文件的功效,设定放到Xml文件中

image

当需要检测新的项目时,一般只需要更改此文件内容,增加检测方法。

Method方法定义于程序中的一个静态方法,运行时反射调用此方法进行判断。

  public bool CheckIfDotNetFrameworkInstalled()
        {
            return BaseCommon.CheckIfDotNetFrameworkInstalled(DotNetFrameworkVersion.Version20);
        }
        
        /*  Could have a look in the registry for things like:  
        HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\11.0\ Excel\InstallRoot and then check in that path for excel.exe.
         */

        public bool CheckExcelInstalled()
        {
            Type officeType = Type.GetTypeFromProgID("Excel.Application");
            return officeType != null;
        }

        /*  Detecting if an Oracle Database is Installed
        Check for the existence of an ORACLE_HOME. It's also reasonable to expect that this environment 
        should be configured for the installation, so testing the environment variables and exiting with a 
            sensible diagnostic (possibly suggesting they run oraenv) is a good first start. 
        If you have an ORACLE_HOME, ORACLE_SID or other appropriate environment variable set up, 
            you can then check for the existence of an oracle home and test for database connectivity and permissions.
        */
        public bool CheckOracleInstalled()
        {
            string ORACLE_HOME = Environment.GetEnvironmentVariable("ORACLE_HOME");
            string ORACLE_SID = Environment.GetEnvironmentVariable("ORACLE_SID");
            return !string.IsNullOrWhiteSpace(ORACLE_HOME) && !string.IsNullOrWhiteSpace(ORACLE_SID);
        }

        public bool CheckJavaInstalled()
        {
            string JAVA_HOME = Environment.GetEnvironmentVariable("JAVA_HOME");
            return !string.IsNullOrWhiteSpace(JAVA_HOME);
        }

        public bool CheckForMySQLServer()
        {
            string query = "SELECT Name FROM Win32_Product WHERE Name LIKE '%MySQL Server%'";
            var searcher = new ManagementObjectSearcher(query);
            var collection = searcher.Get();
            return collection.Count > 0;
        }
 

这几个功能方法是我从StackOverflow中找到的,在Windows 7 x86的机器上,结果值与实际值没有偏差。

再来分析一下,在具体的环境中,为了运行一个ERP程序有哪些内容需要我们去检测。

1  基本的.NET  Framework 需要检测。现在项目基本上都升级到Target=.NET 4.0,版本4.0也要检测。.NET 4.5因为不支持XP系统,短时间还没有打算编译为.NET 4.5版本。

.NET 4.0 不允许运行于Windows 2000系统中,但可运行于XP中,XP至今仍然非常的流行,断绝了XP的支持,等于把一大批客户抛到脑后,这是不可接受的。

2  SQL Server 是否安装。应当要检测SQL Server是否已经安装,而不是在系统连接数据库时,提示无法连接到服务器。而对于数据库,SQL Server是否允许远程访问这一项,至今没有找到方法可以去检测。如果SQL Server 安装在本机,可以考虑自动启动它的,允许远程访问。

image

当然也不能做的太霸道了,蓝软ERP,每次以集成认证方式登陆系统后,会修改sa的密码,让我的其它ERP产品无法连接到数据库中。记得学数据库的时候,推荐安装好SQL Server后把SA帐户禁用,但我看到有些ERP产品,却以SA作为连接帐户,理论与实践确实有些差异。

3  Dot Net时代,COM/COM+已经不是很重要的技术。以.NET Framework内建的事务机制可满足事务需求。

操作系统的安全补丁,因很少用到和发现问题,没有去检测。

4  Excel/Word/PowerPoint项目的检测是为产生导出文件。ERP项目中,绝大部分单据都可以导出到EXCEL进行编辑,查看。部分单据,比如员工信息,员工简历要导出成WORD格式,以便于打印装订。

PPT格式的导出很少遇到。最近遇到一个需求,要求可以把物料清单导出为Visio格式的图形格式,以图形的方式直观的显示当前物料清单它的下一层物料列出。这个功能需求很实用,目前还没有找到办法去实现。

 
 
分类: .NET Solution

.NET Solution

 
摘要: 环境检测的功能在安装程序中应用的很普遍,ERP程序中也需要在系统第一次启动时,对所安装的环境进行检测,遇到不满足的情况要及时提示用户更新系统。 网格中显示要检测的编号,内容描述,最后一列是检测结果,工具栏Export可以将检测结果导出为EXCEL文件。 先来看检测规则的设定,仍然是发挥XML文件的功效,设定放到Xml文件中 当需要检测新的项目时,一般只需要更改此文件内容,增加检测...阅读全文
posted @ 2013-05-08 16:22 James Li 阅读(299) | 评论 (2) 编辑
 
摘要: ERP系统中要管理用户为单据上传的一些附件,比如增值税发票,退货发票,ROHS检测报告,这时,需要设计一个通用的附件管理模块来管理用户上传的附件。 数据表设计 IF OBJECT_ID ('dbo.Attachment') IS NOT NULL DROP TABLE dbo.AttachmentGOCREATE TABLE dbo.Attachment ( Index ...阅读全文
posted @ 2013-05-08 09:41 James Li 阅读(951) | 评论 (2) 编辑
 
摘要: 在部署ERP应用时,经常会碰到在开发环境下,没有问题,部署到服务器上,就出错。不同语言版本的操作系统、不同的数据库版本,等等因素的数据库排序规则的问题。比如在安装SQL Server 时取默认的规则,中文环境下,会设置为Chinese_PRC_CI_AS,但我们需要的规则应该是SQL_Latin1_General_CP1_CI_AS。在数据操作过程中,这个不一致会导致SQL语句的字符串相等报错。错...阅读全文
posted @ 2013-05-07 16:32 James Li 阅读(571) | 评论 (4) 编辑
 
摘要: 调试SQL语句是经常会碰到的需求,常常为了查找报表的数据是否正确,SQL脚本为什么取不到预想中的数据,一般都可以通过调试SQL语句来解决问题,找到原因。问题不一定是系统的Bug,可能是设置不正确,可能是数据之间没有关联。 看到园子里的一篇文章"介绍一款替代SSMS的sqlserver管理工具 toad for sqlserver5.7”,这个工具我最喜欢的功能当属SQL语句调试,其它的功能,SS...阅读全文
posted @ 2013-05-07 09:24 James Li 阅读(1001) | 评论 (4) 编辑
 
摘要: 三年前给客户做的一个物料采购系统,客户因为价格问题搁置,今天把它拿出来分享,以分析改善方法。 项目名称: Item Purchasing System /Item Purchasing Request 系统功能: 1) 配置 Configruation 公司和组织架构管理 Organization Manitenance: 目前的例子 三个公司(暂定命名为Shenzhen, S...阅读全文
posted @ 2013-05-06 15:46 James Li 阅读(326) | 评论 (0) 编辑
 
摘要: 对于开始接触基于ORM技术开发的ERP程序,在相当长的时间内还是会考虑SQL语句,而不是ORM查询。即便是在很熟悉ORM查询,也不如对SQL语句的了解程度。于是想做出一个查询工具,把SQL语句转化为C#代码,用于查询。 这样的程序片段在很多地方都需用用到。 比如SQL语句 SELECT RECNUM ,CCY ,DESCRIPTION ,SUSPENDED ,DEFAULT_RATE F...阅读全文
posted @ 2013-05-06 09:41 James Li 阅读(927) | 评论 (2) 编辑
 
摘要: 许可机制是ERP框架中必不可少的一部分,可以有效的保护框架资源在授权范围内应用,增加企业投资的回报。在研究了几种类型的许可机制(序列号注册码,Web服务联机验证,授权License文件)后,最后选定以Signed Xml配合RSA算法,作为许可机制的主要技术实现。 主要达到的目的如下 1 可以实现版本控制。企业版可使用所有的功能,专业版只可用部分功能,个人版免费使用,但功能集更少。 pub...阅读全文
posted @ 2013-05-03 09:18 James Li 阅读(1766) | 评论 (15) 编辑
 
摘要: 1 基于ORM(LLBL Gen)框架开发,界面与逻辑分离。 2 支持多种类型的数据库(SQL Server,Oracle,MySQL) 3 框架与业务代码完全分离,立即上手可以写一个进销存系统 4 支持两种类型的报表(Crystal Report,Reporting Service) 5 工作流设计,运行时,活动库,内建审批流,通知流 6 基于.net remoting C/S结构 ...阅读全文
posted @ 2013-05-02 10:06 James Li 阅读(89) | 评论 (0) 编辑
 
摘要: 在设计一个ERP程序时,提取公共的代码到一个通用类型库中是必要的。这样可以减少代码重复,提高代码利用率。 但是,做任何事情都要有个度,有些公共的代码引起了过度封装,反而不利于代码的理解。 举例说明如下 public class ConfigHelper{ /// <summary> /// Gets whether the specified path is a valid a...阅读全文
posted @ 2013-05-02 10:04 James Li 阅读(1478) | 评论 (12) 编辑
 
摘要: 1 水晶报表的各种例子,要会做。比如产能报表。 2 ListBox有bug,新加的item不会显示出来。entity control也有bug 3 直接执行一个报表服务功能,而不是通过报表管理器去找,再执行。 给LicenseType=Trial中的所生成的报表加”试用版“ 4 Data Archine存成EXCEL文件,甘特图控件也是 5 所有与EXCEL相关的内容读写都使用Infr...阅读全文
posted @ 2013-05-02 10:02 James Li 阅读(158) | 评论 (1) 编辑
 
摘要: 1 License许可验证中加hardware.id,在About对话框中读取出来。同时设计一个GenerateLicense方法。 2 FunctionTypePreloadWorker 预加载系统功能 CyrstalReportPreLoadWorker 水晶报表预加载模块。同时会检测系统当前的水晶报表版本。 3 服务模式 Remoting, StandAlone。 4 控制台输...阅读全文
posted @ 2013-05-02 10:01 James Li 阅读(136) | 评论 (0) 编辑
 
摘要: 公司的ERP框架是用ORM技术来访问数据库的,但有些查询还是会用DataTable保存数据,并且会把用户修改后的数据保存到服务器中。在习惯了ORM的写法后,对于用DataTable的保存用户修改过的数据,然后保存到数据库中反而有些不适应。ORM会自动检测到哪些数据项被改动了,进而生成必要的UPDATE子句,如果没有数据被更改,则不会产生任何UPDATE语句,这是ORM的好处与便利。把这个技巧应用到...阅读全文
posted @ 2011-12-23 17:59 James Li 阅读(1725) | 评论 (3) 编辑
 
摘要: 对于习惯于用ORM来开发系统的开发人员来说,几乎不用写SQL语句,但是也要针对ORM框架,来设计合适的查询,ORM框架会生成合适的T_SQL语句并发送到SQL Server中。由于ORM框架有好几种,比如NHibernate,LLBL Gen,Entity Framwork,掌握熟练的SQL查询技术在这里没有用武之地,真是可惜。这篇文章是介绍我的Management Console中的一个工具程序...阅读全文
posted @ 2011-12-23 13:32 James Li 阅读(1533) | 评论 (0) 编辑
 
摘要: 园子里这两天讨论的比较多的是CSDN-中文IT社区 600万用户数据在互联网上的传播,作为一名技术人员,暂且放下各自的想法的意见,仅仅从技术的角度来讲,分析和考验一下我们的编程基础。把下载到的压缩文件释放到硬盘中,得到文件www.csdn.net.sql。作为技术人员,对这个文件产生好奇心和编程的冲动。于是提出了下面的两条编程题目:1 如何把600万数据导入到SQL Server中?2 如何选择合适的密码加密方法?这个SQL文件有273MB,用SQL Server Management Studio打开它,会产生OutOfMemory异常,用记事本打开也很慢,推荐用Ultra Edit源代码编阅读全文
posted @ 2011-12-23 09:09 James Li 阅读(11201) | 评论 (80) 编辑
 
摘要: Management Console这个工具已经使用大半年了,期间经历了一些调整和修复。起初它是由一个ORM的扩展工具而来,后来经过众多工具的组合和拼接,逐渐庞大起来。在今年八月份就想到使用一个插件框架来把它们都集成起来,请参考文章《Management Console 工具管理类软件通用开发框架(开放源码)》来了解这个框架,这个框架是开源的,你可以到epn.codeplex.com中获取它的代码...阅读全文
posted @ 2011-12-22 09:12 James Li 阅读(1732) | 评论 (6) 编辑
 
摘要: 设计一个灵活稳定的多层架构的程序不是件容易的事情。当有了成熟的模式和应用之后,还需要经历各种应用与需求考验,用直白的话说,就是要经得起折腾。最近在重构自己的EPN框架时,有了一些新的体会实践,与各位分享。 首先是数据库的设计,一个框架数据库驱动多个业务逻辑数据库,这已经是大家所推荐的模式了。 如图所示,框架数据库Framework包含业务数据的基础配置,它可以驱动一套或多套业务数据库的运行。 ...阅读全文
posted @ 2011-12-21 09:08 James Li 阅读(1985) | 评论 (6) 编辑
 
摘要: .NET Resx格式的资源文件在日常开发中用的比较多,它用来存储常用的资源,可以是位图,文本文件,或是任何的电脑文件。先来看一下,它的日常用法 直接在这里Paste一个位图文件,然后在程序中以这种方式调用,非常的简洁明了 Bitmap bitmap = Resources.Button; 在知道这种方法之前,我一直是用Embedded Resource的方法,代码如下 publi...阅读全文
posted @ 2011-12-20 09:09 James Li 阅读(2087) | 评论 (2) 编辑
 
摘要: 最近一直在帮忙客户找程序方面的问题。当确定不是程序上的问题后,痛苦的过程就开始了:帮助客户修复计算错误的数据,也叫Data Fix。我们的ERP系统有1000多个表,有100个基础数据表,比如物料表,物料清单,工作单,销售单,采购单,这里包含表头(Header)和表明细(Detail),再加上100多个数据关联表,比如工作单与销售单的关联,工作单与物料进出,物料进出与仓库日记帐,仓库日记帐进而产生传票(voucher),成本(cost),这样加起来,又有100个多表。当发现程序有计算错误后,通常会修复程序,再帮助用户修复计算错误的数据。有时候程序修改好后,由于没有合并到客户的版本中,导致客户的阅读全文
posted @ 2011-12-06 09:04 James Li 阅读(2948) | 评论 (17) 编辑
 
摘要: 这个话题起源于今天面对一个客户的报表问题,用存储过程写的报表语句,跑在SQL Server 2000上面。客户说有一个地方抱错,而自己开发机器这边,死活找不到一个SQL Server 2000,全部都是SQL Server 2005/2008 R2。客户的这个问题是这样的,它是一个默认排序规则的问题 CREATE TABLE #BOM(BOM_NO NVARCHAR(50)START_DATE ...阅读全文
posted @ 2011-12-05 09:05 James Li 阅读(2537) | 评论 (14) 编辑
 
摘要: 几年前,一篇《ASP.NET开发人员经常使用的三十三种代码》非常流行,它总结了一些经常在ASP.NET开发中使用到的代码,直接可以拿来使用。今天重读这篇文章,有感而发,善于总结也是进步,于是我也从我的项目中总结一些常用的代码片段,分享给各位园友。 写文本文件TextWriter tw = new StreamWriter("date.txt");tw.WriteLine(DateTime.Now);tw.Close();读文本文件写法一Textreader tr = new StreamReader("date.txt");Console.WriteLi阅读全文
posted @ 2011-12-01 09:10 James Li 阅读(3559) | 评论 (19) 编辑
 
摘要: 这一篇文章讲解如何在Data Loader中把文档服务器中的文档,保存为本地的PDF格式文档。 先看操作流程。先用Doc Loader导入文档到服务器中,再到Document Explorer中浏览,设置分类 之后再到Document Browser中你所需要的目录中贴上去,这样操作 这样,这篇文档就有了正式的分类了,它正式成为文档服务器中的一篇文档。这是设计时的一种Policy...阅读全文
posted @ 2011-11-30 09:07 James Li 阅读(1142) | 评论 (5) 编辑
 
摘要: 这个系列的文章已经进行到第十五讲,今天要讲解的技术是Data Solution使用的数据存储技术。 因为习惯了ORM开发的缘故,与数据库相关的内容,第一反应就是使用ORM,极大的简化了数据读写的代码编写量。 Data Solution的数据存储也是使用LLBL Gen的ORM框架,源代码的视图是这样的 当你看到DatabaseGeneric和DatabaseSpecific文件夹的时候...阅读全文
posted @ 2011-11-24 09:12 James Li 阅读(1546) | 评论 (12) 编辑
 
摘要: 去年年初,我写过三篇文章,来讲解自己在.NET项目开发中用到的工具和资源。这三篇文章的地址是 《做一个项目,平时都用到哪些工具提高效率(上)》 《做一个项目,平时都用到哪些工具提高效率(中)》 《做一个项目,平时都用到哪些工具提高效率(下)》 经过了近两年的发展和学习,技术方面有了长足的进步。而现在再来看那些工具和资源,自认为那时还处于工具系列的初级阶段,技术含量不高,也没有形成一个体系。...阅读全文
posted @ 2011-11-22 08:57 James Li 阅读(4028) | 评论 (18) 编辑
 
摘要: 这个系列的文章主要讲解如何处理本机文档和互联网数据。今天要讨论的主题是,如何把PDF文档格式转化为可以编辑的RTF格式。PDF格式本身是只读的,需要Acrobat Professional这样的软件来编辑它的内容,或者在WORD中编辑好后,转化为PDF格式。我要达到的目标是这样的 指定的格式选择项如果PDF被勾选,则Path路径中所有的的PDF格式的文档会被处理,之后再导入文档数据库中。 ...阅读全文
posted @ 2011-11-21 09:18 James Li 阅读(1512) | 评论 (5) 编辑
 
摘要: 这篇文章是对第四篇文章《知识管理系统Data Solution研发日记之四 片段式数据解决方案》的补充,提供一套完整的解决方案。请先阅读那一篇文章来了解它的原理。 Rule Editor抓取数据 这里,主要的工作是设定目标地址,正则表达式规则。我生活在深圳,对深圳的IT行业比较关注,所以经常看下面的地址,http://www.iteer.net/modules/xdirectory/vi...阅读全文
posted @ 2011-11-18 15:24 James Li 阅读(1396) | 评论 (2) 编辑
 
摘要: 前几天,有园友针对我的文章《工作多年后积累的设计灵活,稳定,优秀WinForms应用程序的最佳实践》提出一个问题,说数据库的应用程序,在保存数据到SQL Server中去的时候,突然发现数据库服务器不可用,抛出这个异常 如果用户很辛苦的输入了很多数据,点击保存时,才发现服务器连接不可用。这时用户肯定会很恼火,如果你是用户,你也会觉得很冤枉,辛苦输入的数据又不能保存,你干吗不早说呢,早点告诉...阅读全文
posted @ 2011-11-18 09:13 James Li 阅读(5540) | 评论 (83) 编辑
 
摘要: 有园友号召博客园组织一些开源项目,得到大家的积极认可。来博客园五年多,学习到了很多技术,也认识了很多朋友。为感谢大家的帮助,从硬盘的一个角落里,把自己几年前的一个客户关系管理(CRM)项目开源出来。因为涉及到版权原因,已经对实现的业务逻辑和核心部分作了屏蔽处理,主要贡献是它的界面框架,美观实用的界面框架。 如上图所示,窗体标题是CRM,主体采用淡蓝色的背景,包含标准的菜单,工具栏,左边是Navig...阅读全文
posted @ 2011-11-17 09:11 James Li 阅读(5346) | 评论 (38) 编辑
 
摘要: 经过前面两篇文章的介绍,《分享制作精良的知识管理系统 博客备份程序 Site Rebuild》和《分享制作精良的知识管理系统 SQL Server文档数据库配置 完美实现博客文章的的下载,存储和浏览》,你所喜欢的博客内容已经下载到了自己的本机磁盘中,如下图所示的,海量的文档知识库,已经存在于您的电脑中 这么多文档,你当然可以根据自己的喜好来查看,但是,如何在这么多的文档中,搜索出您所需要的...阅读全文
posted @ 2011-11-16 15:20 James Li 阅读(1316) | 评论 (2) 编辑
 
摘要: 记得我在《知识管理系统Data Solution研发日记之一 场景设计与需求列出》中提到的一个需求,用户先选择一段文本,然后调用快捷键,也叫热键(Hot Key),资料与数据就自动保存到我的笔记库中。Data Loader已经完美的实现了这个功能,帮助你保存笔记数据。打开Data Loader程序,到Setting中进行初试设置,请看图 Wire Shortcust是热键,直接敲键盘,它会记录到你正在按的键。如果有对它进行修改,请重启动Data Loader以让Key Hook应用新的设置;另一个开关是Clear Clipboard after fetch its data,当您选中一段文字,阅读全文
posted @ 2011-11-16 09:13 James Li 阅读(1579) | 评论 (0) 编辑
 
摘要: 自己偶然的一个想法,坚持做出了这个软件。如果你对技术细节及其应用感兴趣,这个主题不会让你失望。一个商业应用程序所需要的特性,它都具备。下面介绍WinForms的数据绑定技术,有了这一项技术,写出的代码简洁,优美。请看Data Loader的Settings窗体,它的界面效果如下图所示 这个窗体主要保存Data Loader的设置信息。Downloaded Path是保存下载之后的文档的路径,在下载博客文档的过程中,它会去这里查看正在下载的文档是否在这里存在,如果是则跳过下载;Connection String是连接字符串,为正确连接到文档服务器;Failed Cleanup File是在加载文阅读全文
posted @ 2011-11-15 17:38 James Li 阅读(1161) | 评论 (2) 编辑
 
摘要: 关于Strong Name的主题,网上已经有很多这方面的介绍,你可能最熟悉的印象就是这样 大部分的情况,这样就可以了。如果代码是机密的,还可能用到Delay sign only,这就复杂一些,请查找相关资料。 如果就这么做了,代码中没有什么处理,可能你的程序还不够安全,因为有个Strong Name Remover可以很容易的清除你的签名,它运行起来是这样的 如果你不想让你的程序...阅读全文
posted @ 2011-11-15 09:03 James Li 阅读(1662) | 评论 (8) 编辑
 
摘要: 工作几年后,技术方面的积累越来越多,设计的程序也越来越灵活,稳定。如果开始入门的时候有人指点这些知识,每个人的成长都非常快,可惜IT行业的分享氛围不好,同事与同事之间,一不小心就变成从不交流技术的那种情况。我理解IT人,跑市场不会,与领导打交道不善到察言观色,唯一能让自己自信的,可能就是一堆很酷的代码,让自己把最重要的本钱拿出来,这种情况很少会出现。 经常在公共类库和应用程序中写日志Log,写跟踪...阅读全文
posted @ 2011-11-14 09:30 James Li 阅读(3447) | 评论 (21) 编辑
 
摘要: 前一篇文章《分享制作精良的知识管理系统 博客备份程序 Site Rebuild》已经提到如何使用Site Rebuild来下载您所喜欢的博客文章,但是还不能实现把下载的文件导入进数据库中,无法实现在线浏览服务器中的文档数据。这一篇文章则帮助您建立文档数据库,现博客文章的的下载,存储和浏览。 打开Data Loader程序,执行Setting程序,打开的界面效果如下 点击Connectio...阅读全文
posted @ 2011-11-11 09:18 James Li 阅读(1855) | 评论 (7) 编辑
 
摘要: 知识管理系统Data Solution研发日记已经写出了七篇,不断收到朋友们的反馈,希望能提供软件下载。在紧张了忙碌了两个星期后,Data Loader程序又有了明显的进步。新的界面效果如下图所示 现在一共有20个应用程序组,以帮助下载,解析和呈现文档数据和互联网网页数据。 今天要推荐的程序是博客备份程序。我知道博客园在后台提供了对博主文章的备份工具,可以导出为XML格式,然后在一个小应...阅读全文
posted @ 2011-11-10 09:15 James Li 阅读(2670) | 评论 (31) 编辑
 
摘要: 进行到这一步,知识管理系统Data Solution已经一共介绍了六篇文章 知识管理系统Data Solution研发日记之一 场景设计与需求列出 知识管理系统Data Solution研发日记之二 应用程序系列 知识管理系统Data Solution研发日记之三 文档解决方案 知识管理系统Data Solution研发日记之四 片段式数据解决方案 知识管理系统Data Solution...阅读全文
posted @ 2011-10-27 09:35 James Li 阅读(1639) | 评论 (8) 编辑
 
摘要: 知识管理系统Data Solution已经有五篇文章对它进行介绍,可以通过下面的连接,找到前面的文章 知识管理系统Data Solution研发日记之一 场景设计与需求列出 知识管理系统Data Solution研发日记之二 应用程序系列 知识管理系统Data Solution研发日记之三 文档解决方案 知识管理系统Data Solution研发日记之四 片段式数据解决方案 知识管理...阅读全文
posted @ 2011-10-26 17:34 James Li 阅读(1533) | 评论 (1) 编辑
 
摘要: 这个系列的文章已经写过四篇,如果你错过了之前的文章,可以通过下面的连接来找到他们 知识管理系统Data Solution研发日记之一 场景设计与需求列出 知识管理系统Data Solution研发日记之二 应用程序系列 知识管理系统Data Solution研发日记之三 文档解决方案 知识管理系统Data Solution研发日记之四 片段式数据解决方案 在这一篇中,专注于互联网的网页数...阅读全文
posted @ 2011-10-26 09:32 James Li 阅读(1524) | 评论 (3) 编辑
 
摘要: 知识管理系统Data Solution已经写了三篇文档,如果你错过了这些基础的知识,可以通过下面的连接到到它们 知识管理系统Data Solution研发日记之一 场景设计与需求列出 知识管理系统Data Solution研发日记之二 应用程序系列 知识管理系统Data Solution研发日记之三 文档解决方案 这一篇文章专注片段式的数据,也可称之为结构化的数据。比如,我们存放到SQL ...阅读全文
posted @ 2011-10-25 16:47 James Li 阅读(1207) | 评论 (1) 编辑
 
摘要: 前面两篇文章已经展示了Data Solution的设计目标和为达到此目标而设计的应用程序,这一篇继续细化对它的介绍,讲解Data Solution如何对文件进行扫描,转换,存储,检索。 本机磁盘的文件格式通常是doc/docx,pdf,pst/ost/eml,htm/mht,txt/rtf,这几种格式是电脑中常用的格式。要达到在同一个编辑器Editor中可以对它们进行编辑,再整理,需要选择一种通...阅读全文
posted @ 2011-10-25 09:31 James Li 阅读(1545) | 评论 (8) 编辑
 
摘要: 在上一篇文章《知识管理系统Data Solution研发日记之一 场景设计与需求列出》中,提到了诸多的需求。这一篇文章来看一下,完成这些功能,所需要的软件。这些程序均已经写好,以C#.NET和SQL Server 2005完成。 先看一下软件Data Solution的体系。Data Solution由二个大的解决方案组成,File Solution和Segment Solution。前者是文档...阅读全文
posted @ 2011-10-24 13:57 James Li 阅读(1748) | 评论 (7) 编辑
 
摘要: 在平时开发的过程中,经常会查找一些资料,从网上下载一些网页,压缩格式文件到自己的电脑中,然后阅读。程序有别于其他行业的一个特征是,所有的资料,数据,压缩文件,只用于产生可以工作的代码,这才算达到目的,解决问题。再漂亮的文档,源代码,如果没有解决问题,产生代码,这样的搜索也是失败。一般在解决问题之后,这些文章,也遗落在硬盘里面,像下面的文件这样 从技术的角度,来看图中的文件,我是在以下几个问...阅读全文
posted @ 2011-10-24 09:25 James Li 阅读(2364) | 评论 (9) 编辑
 
摘要: 随着工作年龄逐渐增加,身边的重担也越来越多。以前可以在公司加班到晚上10点,现在不行了。以前可以通宵的找bug,翻阅资料,现在想这样也没有机会了。做软件逐渐成为工作的主要部分,而渐渐从生活的主角退化出来。自从生活中有了家庭,随时要为家人考虑,和他们度过有意义的时光。可是,家庭的责任重担全落在自己身上,工作不仅仅要完成,而且要有进步,这样才能维持现有的开支。在这样一个时代,你要静下心来安心专注工作,...阅读全文
posted @ 2011-09-27 09:13 James Li 阅读(12406) | 评论 (82) 编辑
 
摘要: 对于Script.NET,我已经写了三篇文章来介绍它,文章汇总如下 .NET 动态脚本语言Script.NET 入门指南 Quick Start .NET 动态脚本语言Script.NET 开发指南 .NET 动态脚本语言Script.NET 应用举例 希望这三篇文章能帮助你了解Script.NET。 下面的例子,继续讲解它的应用。 发送邮件 Send Email mailObj...阅读全文
posted @ 2011-09-21 09:14 James Li 阅读(2198) | 评论 (6) 编辑
 
摘要: 近两年看到很多介绍WCF分布式开发的文章,很少看到有深入介绍.NET Remoting开发的文章,似乎Remoting技术逐渐从大众的视野中消失了一样。自从2005年发布这个名称为Indigo的技术以来,WCF逐渐成为.NET分布式开发的事实标准。然后微软没有推崇和更新的技术,像我们这样的第三世界国家,唯微软马首是瞻,也纷纷转向WCF技术的实践与开发。近期看到世界对SilverLight技术前展的...阅读全文
posted @ 2011-09-20 09:17 James Li 阅读(5668) | 评论 (29) 编辑
 
摘要: 删除一笔记录 Object].Delete() 下面的代码,删除FirstName为Tim,LastName为Brown的学生 DataManager dm = new DataManager(Config.Dsn);dm.QueryCriteria.Clear();dm.QueryCriteria.And(JoinPath.Student.Columns.FirstName,”Tim”) ...阅读全文
posted @ 2011-09-16 15:09 James Li 阅读(276) | 评论 (0) 编辑
 
摘要: DataManager.New[Object] 创建数据记录 下面的代码片断创建一笔学生记录,然后把它保存到数据库中。 DataManager dm = new DataManager(Config.Dsn);//assign a new object referenceStudent s = dm.NewStudent();s.FirstName = “Mike”;s.LastName = ...阅读全文
posted @ 2011-09-16 15:08 James Li 阅读(1098) | 评论 (0) 编辑
 
摘要: Lookup表 在ORM.NET Object Browser中指定表是lookup表,如下图所示 Lookup表明此表的数据是只读的,不会生成任何的新增,删除对象方法(Add[Object], New[Object], or Delete[Object]),列的属性也不包含Set属性。因此,Lookup表是用来表示static的数据,不会发生变化的数据。这样,ORM.NET框架会cac...阅读全文
posted @ 2011-09-16 15:07 James Li 阅读(211) | 评论 (0) 编辑
 
摘要: 这一节讲解如何使用ORM.NET提供的接口,显示数据,包括分组,排序 DataManager.Get[Object] Get[Object]Collection Methods 这是获取数据的主要方法,从名字中可以看出,GetObject是获取一个实体,GetObjectColletion是读取几行记录,以获取一个实体集合。使用模式如下 Object object = DataMana...阅读全文
posted @ 2011-09-16 15:07 James Li 阅读(160) | 评论 (0) 编辑
 
摘要: 这篇文章讲解如何使用ORM.NET读取数据。 请看生成的TestApp的代码 static void Main(string[] args){ // // TODO: Add code to start application here // DataManager dm = new DataManager(Config....阅读全文
posted @ 2011-09-16 11:49 James Li 阅读(1212) | 评论 (4) 编辑
 
摘要: ORM.NET是一个开源的ORM工具,用它来替代ADO.NET访问数据库,快速,方便,当前的版本是1.7。 这篇入门教程将引导如何用ORM.NET开发数据库类型的应用程序。 1 创建数据库 Create your database schema ORM.NET是数据库驱动的(database-driven)的ORM开发工上具,请先用SQL Enterprise Manager...阅读全文
posted @ 2011-09-16 09:36 James Li 阅读(1641) | 评论 (8) 编辑
 
摘要: 继续前面的两篇文章的动态脚本语言主题《.NET 动态脚本语言Script.NET 入门指南 Quick Start》和《.NET 动态脚本语言Script.NET 开发指南》,继续学习Script.NET的应用。 类型定义 type definition Script.NET不是OOP的语言,但可以借助于属性(property bags)来模拟类型定义。 vector = [ x -> 4...阅读全文
posted @ 2011-09-15 14:39 James Li 阅读(1833) | 评论 (4) 编辑
 
摘要: 前一篇文章介绍了《.NET 动态脚本语言Script.NET 入门指南 Quick Start》的基础知识,这一篇文章继续介绍Script.NET开发相关的内容。 Script.NET IDE Environment 以前提到的书写Script.NET脚本的方式,在Visual Studio中书写代码,然后以调试的方式运行代码。这种方式适合于对Script.NET不熟悉,或是发生了不可理解的错...阅读全文
posted @ 2011-09-14 09:15 James Li 阅读(2535) | 评论 (7) 编辑
 
摘要: Script.NET是一种动态的脚本语言,它使得程序可扩展,可定制,和维护性好。和Office系列的VB Script相似,可以在应用中嵌入大量的代码块,以便在运行时才执行这些代码。 Script.NET的设计理念是:简单(simplicity),有效率(efficiency),容易上手(intuitive)。先通过例子,来做一个基本的了解。 using System;using System...阅读全文
posted @ 2011-09-13 09:06 James Li 阅读(4078) | 评论 (26) 编辑
 
摘要: 这篇文章起源于我的LLBL Gen 3.x ORM源码追踪系列教程,有以下几篇文章 LLBL Gen 3.x 源代码追踪与解析 认识框架结构 LLBL Gen 3.x 源代码追踪与解析 Type Converter 类型转换器 LLBL Gen 3.x 源代码追踪与解析 存储过程的执行 LLBL Gen 3.x 源代码追踪与解析 查询命令的追踪 LLBL Gen 3.x 源代码追踪与解析...阅读全文
posted @ 2011-09-09 15:07 James Li 阅读(1373) | 评论 (2) 编辑
 
摘要: 经过多年的编程经验的积累,工作中肯定会遇到很多问题,也都通过各种办法解决了。无论是上网搜索,或是向同事寻求帮忙,在遇到问题时,都会把这个系列的问题的网页都保存起来,以便以后查找起来方便。这样,随着时间的积累,知识库的内容会越来越多,如何整理这些文件,方便查找,一直是工作之外努力的方向。 曾经用EverNote建立各种知识库,如下图所示,定期抽出时间,在网上搜索,看到好的文章,都剪贴下来 几个月下...阅读全文
posted @ 2011-09-09 09:01 James Li 阅读(7834) | 评论 (61) 编辑
 
摘要: Reflector是.NET开发中必备的反编译工具。即使没有用在反编译领域,也常常用它来检查程序集的命名规范,命名空间是否合理,组织类型的方法是否需要改善。举例说明,它有一个可以查看程序集完整名称的功能,请看下图 这里的Name,是标识一个程序集的完整标识,当GAC中存在程序集的多个版本时,这个名称是唯一的识别名称。 但是,Reflector很早就转向收费软件了,需要购买许可才可以使用。对于耻于...阅读全文
posted @ 2011-09-08 09:08 James Li 阅读(19837) | 评论 (82) 编辑
 
摘要: 工作多年,一直是.NET实践派的代表,没有过多的空洞理论,只谈实作技巧,把技术,知识,工具结合起来,给自己的生活多一点改变,提高产生效率。前面一个话题,《工作多年后才明白的.NET底层开发技术》都觉得反射的例子太过于肤浅,不过瘾,那么这个题材的反射例子,可能不会让你失望。 这个主题来源于我开发带智能提示的模板编辑器的过程,请看下面的例子程序。先说目的,我要达到在模板中敲入Math变量时,可...阅读全文
posted @ 2011-09-07 09:16 James Li 阅读(5382) | 评论 (17) 编辑
 
摘要: ORM工具开发系列的代码生成工具的开发,接上回,继续来设计基于模板的代码生成器。 模板编辑器 Template Editor 编辑器的基本要求是,文件编辑(Copy,Cut,Paste,Find/Replace)功能,语法高亮显示,智能提示。 对于.NET系统的内置类型,可以预先加载,并提供智能提示功能。 如图所示,可以直接引用系统内置的类型,在编辑模板时,会自动调出智能提示窗口。 ...阅读全文
posted @ 2011-09-06 09:12 James Li 阅读(1905) | 评论 (3) 编辑
 
摘要: 今天进入ORM工具开发系列的代码生成工具的开发。现在流行的代码生成工具,一般是基于模板的。T4,Code Smith在基于模板的代码生成方面相当流行。ORM工具,需要从不同的数据库中读取元数据,调用代码生成模板,生成代码。 先来看一下代码生成器的界面,边看边说。 界面是采用文章《Management Console 工具管理类软件通用开发框架(开放源码)》中提到的代码框架,加上停靠的Ou...阅读全文
posted @ 2011-09-05 09:17 James Li 阅读(2204) | 评论 (5) 编辑
 
摘要: LLBL Gen作为一款商业的ORM工具,有强大的ORM设计器,稳定的查询语法。 先来看一下,ORM的基础要素 1 对象和数据库表格的映射 2 查询的实现,对于添加,删除,修改命名,如何映射成数据库的SQL命令 3 多种数据库支持的实现 对象和数据库表格的映射 NHibernate采用的是xml文件存储实体属性与数据库字段的映射关系,之后,...阅读全文
posted @ 2011-09-02 17:21 James Li 阅读(2139) | 评论 (3) 编辑
 
摘要: 最近一段时间一直思考和总结,如何快速,方便灵活的开发.NET平台的ERP/MIS类型软件系统。在此之前,写过一个系列的文章来表达我的理解,一共有以下八篇文章信息化基础建设 总体结构信息化基础建设 开发框架信息化基础建设 窗体开发信息化基础建设 窗体特性信息化基础建设 报表开发信息化基础建设 Reporting Services报表开发信息化基础建设 消息引擎信息化基础建设 工作流开发之后,又对这个系列的主题文章进行补充完善,有以下八篇文章信息化基础建设 持续改进框架信息化基础建设 数据库文档信息化基础建设 数据字典信息化基础建设 业务报表信息化基础建设 ERP代码生成器(开源,提供源码下载)信阅读全文
posted @ 2011-09-02 09:04 James Li 阅读(2130) | 评论 (9) 编辑
 
摘要: 作为一款优秀的ORM工具,一直享受着LLBL Gen快速代码生成的好处,却很少钻研它的原理,趁项目不忙,研究下LLBL Gen 3.x的模板开发方法。如果不熟悉基础的配置和步骤,请参考文章《优秀的基于模板的代码生成工具Template Studio》。LLBL Gen提供的ORM框架是免费的,源代码也可以从官网获取,ORM设计器需要商业许可。既然是入门,肯定不能太复杂,参考Code Smith的入门资料的例子,生成下面的文件,作为模板代码生成的入门例子。using System; namespace <%=NameSpace %> { /// <summary> ///阅读全文
posted @ 2011-09-01 09:05 James Li 阅读(1318) | 评论 (2) 编辑
 
摘要: LLBL Gen作为一个优秀的ORM代码生成工具,可以基于模板快速生成应用程序代码。可能你也会推荐T4,Code Smith等模板生成器,但是先别急,先看看这篇文章作为入门教程,再来比较各自的优势和不足。 以第三方的模板Provide common SQL Functions for Microsoft SQL Server为例子,来讲解模板生成的步骤。 设计模板 打开Template St...阅读全文
posted @ 2011-08-31 09:11 James Li 阅读(3087) | 评论 (2) 编辑
 
摘要: 经过多年的积累发展,公司有一套完善的文档管理系统。一开始是用PHP设计的,.NET出来以后,逐步转用.NET重写。经过多年(N>10)的维护和发展,如今客户数量也不少,功能也完善。最近有一些任务是修改这个系统,隐藏一些控件,修改一些布局,一开始以为很容易,但随着任务的进行中,发现一个小功能的修改,也相当的麻烦。 比如,要修改一个控件,根据读取的参数的不同,把它设为隐藏或显示。 举例说明...阅读全文
posted @ 2011-08-30 09:09 James Li 阅读(3193) | 评论 (23) 编辑
 
摘要: 先看应用程序如何应用验证。以SalesOrderHeaderEntity为例子。 常见的三种验证: 1)保存之前的验证,重写ValidateEntityBeforeSave 2) 删除前的验证,重写ValidateEntityBeforeDelete 3) 属性获取值之后的验证,重写ValidateFieldValue 先讲解一个基本的模式,基类中的设...阅读全文
posted @ 2011-08-29 09:38 James Li 阅读(910) | 评论 (0) 编辑
 
摘要: 以LLBL Gen作为ORM的首选开发工具,在经历几个项目之后,对它的认识又有了新的高度。一方面要对Query API熟练于心,这样写查询语句才会得心应手,另一方面,也在尝试从ORM的实现,源代码分析,扩展方面来了解这个ORM工具,以便在项目出现救急的问题时可以得心应手,临危不乱。 这篇文章介绍LLBL Gen SDK中的内容,关于如何开发LLBL Gen插件的内容。这个Entity...阅读全文
posted @ 2011-08-26 11:30 James Li 阅读(980) | 评论 (1) 编辑
 
摘要: 经过数个ERP/MIS项目的开发,列举常见的问题与错误,共勉励。 1 界面代码与逻辑代码混淆 在项目的开始,一般都可以做到界面与逻辑的分离,界面只做数据绑定,业务逻辑则实现客户要求的计算。 WinForms中的BindingSource和Web中的ObjectDataSource,可以实现对object绑定到界面控件属性的功能。 这会带来极大的方便,降低程序的维护代价,做到低耦合。举例说明...阅读全文
posted @ 2011-08-26 09:05 James Li 阅读(2169) | 评论 (13) 编辑
 
摘要: AdventureWorks的存储过程uspGetEmployeeManagers,调用方法如下 DECLARE @return_value int EXEC @return_value = [dbo].[uspGetEmployeeManagers] @EmployeeID = 1 执行的结果所示 在测试工程中,创建如下的测试脚本 [...阅读全文
posted @ 2011-08-25 14:03 James Li 阅读(928) | 评论 (0) 编辑
 
摘要: TypeConverter 类,MSDN中的解释是提供一种将值的类型转换为其他类型以及访问标准值和子属性的统一方法。 先看一下例子,能够将字符串翻译成点结构的类型转换器 public class PointConverter : TypeConverter { public override bool CanConvertFrom(ITypeDescriptorC...阅读全文
posted @ 2011-08-24 09:20 James Li 阅读(1023) | 评论 (1) 编辑
 
摘要: 这一节追踪LLBL Gen是如何把实体映射到为数据库操作的SQL语句的。 先来看读取数据库的程序片段 [TestMethod] public void TestFetchSalesOrderHeader() { DataAccessAdapter adapter = new DataAccessAdapter(ConnectionString); ...阅读全文
posted @ 2011-08-23 14:03 James Li 阅读(925) | 评论 (1) 编辑
 
摘要: 前一篇文章中提到,LLBL Gen对单个表的查询,这里再来分析一下LLBL Gen对多表的操作。 Adapter模式,用到的变量adapter定义为DataAccessAdapter adapter=new DataAccessAdapter (); 主从表的查询,保存和删除 SalesOrder是采购单主表,它下面有明细表SalesOrderDetail,用于记录采购单的物料信息...阅读全文
posted @ 2011-08-23 09:26 James Li 阅读(1211) | 评论 (1) 编辑
 
摘要: ORM设计工具:Mindscape NHibernate Designer,请安装Mindscape.NHibernateModelDesigner.vsix文件。 它是一个Visual Studio 2010的插件,运行时效果所示 支持Model frist和Database first两种开发模式,如下图所示 Update Model from Database,从数据库...阅读全文
posted @ 2011-08-22 18:00 James Li 阅读(1478) | 评论 (2) 编辑
 
摘要: NHibernateORM工具使用LLBL Gen 3.1,它内置了NHibernate设计器。从生成的代码来看,它借助于FluentNHibernate这个框架提供的功能,把数据库字段与实体属性的映射移到.NET代码中,映射由ORM设计器来维护。 先看数据库的内容,Agent表定义如下 执行查询命令的结果如下,这一句是为了验证之后写的ORM语句的正确性。 启...阅读全文
posted @ 2011-08-22 14:31 James Li 阅读(1125) | 评论 (3) 编辑
 
摘要: 工作几年后的积累,经历大大小小的数个项目开发,积累了以下几种软件开发的模式和方法。 全部以Northwind数据库为例子,来比较几个开发方式的主要区别和着重点,更详细的内容请参看博客文章。 这里的开发模式,仅仅以代码的书写方式来比较。比如使用LLBL Gen框架,则大部分的时间在开发业务逻辑; 基于ASP.NET应用代码生成器的方式,适合于项目初期,一点点的加表,加字段,与数据...阅读全文
posted @ 2011-08-22 09:22 James Li 阅读(1916) | 评论 (8) 编辑
 
摘要: 做基于LLBL Gen的项目经常会用到的内容,忘记的时候用来查询,分享出来。 1 如何读取指定的表的内容到集合中 DataAccessAdapter adapter = new DataAccessAdapter(); EntityCollection allCustomers = new EntityCollection(new CustomerEntityFactory()); adapter...阅读全文
posted @ 2011-08-19 09:09 James Li 阅读(1423) | 评论 (4) 编辑
 
摘要: 工作多年,接触到大大小小的数个项目,经验多起来,但阻碍进步的因素也多。因为在代码中看到这个功能是如何实现的,下次自己做,也会用到类似的办法,这样减少了思考的时间,进步也会越来越慢。 说一说软件公司为什么要加密程序的源代码。我们都知道.NET平台的目标是将多种语言,编译为同一种格式,不同的编译器将C#/VB.NET之类的符合CLS规范的.NET语言源代码,编译成IL格式,在运行时IL格式的程序时,由...阅读全文
posted @ 2011-08-18 09:14 James Li 阅读(19503) | 评论 (41) 编辑
 
摘要: 一直从事ERP/MIS的开发工作,今天来展现一下菜单设计器的设计,及其用途,并对B/S部分代码开源。 先用EXCEL来展现,需要表达的菜单结构 如图所示,一级菜单是销售,采购,仓库,其下的子菜单是,日记帐,报表,查询,设置,批次过帐。 第三级别的子菜单,以仓库为例 仓库日记帐的明细功能包括进仓,出仓,仓库调整, 仓库查询的明细功能包括,库存结余,物料存货明细,仓库未完订单. 下面来使用菜单设计器,...阅读全文
posted @ 2011-08-17 09:06 James Li 阅读(2693) | 评论 (5) 编辑
 
摘要: 一直从事ERP/MIS开发,总结一下,自己在ERP/MIS开发中,经常用到的应用多线程的两种模式。 先举一个例子,以帮忙回忆起对多线程的印象。CopyFilesProc是实现拷贝文件的一个方法,用多线程调用: Thread simpleThread = new Thread(CopyFilesProc); simpleThread.Name = "CopyFiles"; simpleThr...阅读全文
posted @ 2011-08-16 09:16 James Li 阅读(2067) | 评论 (6) 编辑
 
摘要: 今天要演示的,是开发ERP/MIS中的员工主档(Employee Master)的功能,添加员工信息的CRUD功能,说白了就是添加,修改,删除这么个功能。这是个通用化的方案,稍微改一下表和实体的名字,就可以是添加采购单,添加销售单的功能,MIS开发简单,容易模仿,开发其他模块时可参照这个功能的流程和步骤。 1 数据库中添加数据表 GBEMPL 员工信息 GBEMDM 员工文档 其中GBEMPL ...阅读全文
posted @ 2011-08-11 09:13 James Li 阅读(2154) | 评论 (8) 编辑
 
摘要: 做ERP/MIS的程序,界面常常是做成WinForms和ASP.NET,界面繁杂,内容多。 我常常认为,MIS类型的程序,界面是最复杂的,不可理解的,如下图所示,物料主档的界面 这是我见过的,相当复杂的一个界面,你需要学习大量的知识,才能灵活的操作这个功能。 比如,Userd as Product,成品,Userd as Material 物料,这2个同时打勾选中,就是半成品,如果这2个都不选,在...阅读全文
posted @ 2011-08-10 09:36 James Li 阅读(1549) | 评论 (9) 编辑
 
摘要: 参加工作已经有五年了。由于是非计算机科系,一开始的工作是做网页,维护ASP脚本程序,有时候也要做图片,总而言之,一项任务交到手里,没有借口说不会做,想办法弥补然后把任务做完。后来才得到机会,参与编程开发工作。而且,当时一心想用C#.NET做开发,不希望参与DELPHI的开发,偏偏工作经过层层的转发,交到手里的就是DELPHI开发。经历努力,再后来就真的用.NET进行开发工作,一直持续到现在。消极的...阅读全文
posted @ 2011-08-09 09:24 James Li 阅读(11022) | 评论 (61) 编辑
 
摘要: 到LLBL Gen的网站下载区域,在Additional Download中找到模板v2xMigrationTemplates_date.zip,下载到本地,并把它解压到LLBL Gen 2.x的安装目录中。 运行LLBL Gen 2.x, 加载需要转换的lgp项目文件,F7调出生成工具 如图,选择template group为LLBLGen Pro v3 点击Generate,就可以在指定目录生成新版本的项目文件.阅读全文
posted @ 2011-08-08 13:52 James Li 阅读(281) | 评论 (0) 编辑
 
摘要: 做ERP/MIS之类的软件,通常会开发一些辅助工具来加速开发,比如代码生成器,数据字典生成工具。随着时间的积累,这类小工具会越来越多,虽然开发的速度会快,方便,但是也会因为找不到,不好查找这些小工具,产生麻烦。原因很简单,已经发了很多精力去做成了工具,自然就不会考虑用很原始的方式来完成任务。 举例说明 对于插件式的开发,我们通常会先做好界面功能,然后把这个功能添加到系统的功能列表中,以启用功能,为...阅读全文
posted @ 2011-08-08 10:02 James Li 阅读(3712) | 评论 (15) 编辑
 
摘要: 创建字典 将字典内容绑定到ComboBox cboCategory.InitializeValueListFromDictionary("DatabaseScript"); 效果如下 在设计Windows 组件ComboBox时,根本没有考虑到数据字典的存在,没有InitializeValueListFromDictionary的实现。 随着系统的扩展,在业务系统中实现了数据字典功能,然而组件Co...阅读全文
posted @ 2011-06-24 14:20 James Li 阅读(1042) | 评论 (1) 编辑
 
摘要: 我们都心知肚明,互联网不是每天都为我们开放着。一个好站点,由于各种原因,很容易就从我们的视野中消失。为此,分享一下我是如何搜集优秀的博客文章,如何加工整理,消化。经常写程序,需要经常查阅一些编程文档。一般编程知识的来源有以下几个途径MSDNMSDN是一个很优秀的知识库,这个离线版的MSDN几乎包含了所有与微软开发相关的主题。优秀的博客站点如果是做.NET开发,推荐的博客有以下几个博客园 cnblogs.com点部落 http://www.dotblogs.com.tw/(台湾)codeproject.com 经常在博客园看文章,或是关于技术方面的总结,或是某个系列的专题,比如Linq,EF,N阅读全文
posted @ 2011-06-24 09:00 James Li 阅读(3148) | 评论 (25) 编辑
 
摘要: EPN应用程序框架完全用C#语言编写,作为一个Win Forms的快速开发框架,可以被任意.NET语言调用。 在不熟悉VB语言的情况下,如何实现写出VB语言的Sample ? 先看EPN解决方案视图,熟悉需要引用的类型库 各个项目的说明 项目名称 用意 BPM 工作流 项目类型 活动库,测试控制台,设计器,监视器 Form Designer 窗体设计 项目类型 窗体控件库,设计器,窗体运行时 R...阅读全文
posted @ 2011-06-23 08:57 James Li 阅读(2357) | 评论 (4) 编辑
 
摘要: LLBL Gen + MySQL 快速开发 MySQL 安装配置 安装MySQL, 使用查询分析器连接数据库服务器 创建数据库CTU, 并且创建新表Agent 给数据表Agent添加三笔数据,Jack,Tony,Charles 数据库设计的任务到此为止,记得给每个表添加主键。这里设置的主键是Name LLBL Gen 设计实体模型 启动LLBL Gen 3.1, 创建新的项目,注意选择Targ...阅读全文
posted @ 2011-06-22 09:09 James Li 阅读(1367) | 评论 (7) 编辑
 
摘要: ERP代码生成器 这个代码生成器的作用是弥补Code Smith在批量表生成方面的不足。 代码生成器运行效果 基本的使用方法是,选择数据库,左边的树会列出数据库中的所有表,在参数区域,Template会列出当前目录下的CodeSmith模板,选择一个模板,Parameter会列出选中的模板的参数信息,选择生成的代码的存放路径为Target Folder 解决方案视图 下载源代码到本地后,请先添加程序集引用,包括Code Smith和SMO SMO是操作SQL Server元数据的一套非常有效率的API,以用于获取SQL Server表信息 程序代码只有2个窗体,主窗体和连接数据库的窗体,在启动阅读全文
posted @ 2011-06-21 08:59 James Li 阅读(4603) | 评论 (25) 编辑
 
摘要: 持续改进框架 1. WCF Operation Name 2. SQL=>ORM语句生成工具 3. 数据库注释内容的导出 4. 语法高亮控件 5. 标准窗体Login,Splash,About 6. C#,VB语言相互转化 7. 组件通讯方式 8. 定制Enterprise Library WCF Operation Name WCF是一套通讯技术框架,不能免俗,于是将框架代码的通讯部分升级到W...阅读全文
posted @ 2011-06-20 08:51 James Li 阅读(1400) | 评论 (0) 编辑
 
摘要: 开发框架 1. ORM, LLBL Gen,NHibernate 2. 接口与实现分离,界面与逻辑分离,分五个项目, BusinessLogic, Interface,Manager,Validation,EntryForm 3. SQL与ORM 4. 通讯集成 Remoting/WCF 5. Control/Component: NumberiEditor,TextEditor,Grid,Co...阅读全文
posted @ 2011-06-16 12:32 James Li 阅读(1914) | 评论 (6) 编辑
 
摘要: 工作流开发 1. 自定义工作流,自定义活动 2. 运行时服务 自定义工作流和活动 先看工作流设计器的界面 从界面中可以看到,需要做的工作有以下几点 1. 工作流定义保存方式 File下面的Save命令,将工作流定义保存到数据库中,以xml格式存在;同时也提供另存为,保存为xoml文件,以提供发人员设计的工流,直接发送到客户的电脑中。存成xoml文件的另一个好处是,方便调试诊断,以发现问题。 2....阅读全文
posted @ 2011-06-16 09:04 James Li 阅读(2038) | 评论 (4) 编辑
 
摘要: Reporting Services 报表开发 1. 设计报表 2. 部署报表 3. 测试报表 设计报表 启动Visual Studio 2008, 新创建报表项目,添加一个新的报表。 从工具箱中拖个Table到报表设计器中 自动弹出报表属性对话框,新创建一个连接,类型选.NET Assembly,字符串为net.tcp://localhost:2908/ServiceManager 返回到报表属性,准备输入SQL查询语句 找到QueryBuilder组件,打开,并选择报表程序集,点击类型下面的方法名后,在右边的窗格中自动生成对应的SQL查询语句 如果Always copy to the C阅读全文
posted @ 2011-06-13 09:27 James Li 阅读(1738) | 评论 (2) 编辑
 
摘要: 里程碑 Milestone 1 基础功能,已经完成 Milestone 2 界面实现与调用, 展现框架调用方式,框架与应用协作,已经完成 Milestone 3 正在开发中 Milestone 1 1. 可以记住窗体的布局,下次再打开窗体时,可以加载用户的布局。按照用户来实现 2. 报表的制作,参数产生,上传部署 3. 报表组件同时支持Reporting Services和Crystal Report. 报表管理程序,支持Reporting Services报表的浏览,上传与,删除(Forms界面) 4. 多线程的操作模式的实现BackgroundWorker,和WorkThreadBase阅读全文
posted @ 2011-06-13 09:26 James Li 阅读(255) | 评论 (2) 编辑
 
摘要: 消息引擎 1. 消息类型 2. 实现方法 消息类型 系统内置的实现,有二种类型,工作流消息和自定义消息。 工作流消息来自于工作流的设定,在不同的流程中,产生不同的讯息。比如,处理工程更改后,要通知工程部和生产部的相关负责人,这个功能直接在工作流中设置即可完成。 还有一类工作流消息,来自于系统内置的消息,比如,产生MRP运算之后,要产生大量的需求提示信息。在销售单过帐之后,也可发送邮件到仓库组,安...阅读全文
posted @ 2011-06-13 09:24 James Li 阅读(497) | 评论 (0) 编辑
 
摘要: 数据库文档 Benefit 数据库文档不仅仅可以用来读,还可以拿来用。 在《信息化基础建设 开发框架》一文中,提到过改进的智能提示支持。 在SQL查询管理器中,当鼠标悬停在表名上时,可以显示表的注释 创建表的描述 创建字段的描述 也就是如果我们在为数据库设计了文档,在写SQL语句时,这些附带的文档会智能的带出来,以供参考提示。 而且,这些注释是可以带到C#代码中去的,在进行代码生成时,同时把这个值也给C#代码的属性提示,非常棒的特性。 如下图所示,点击列名后的Edit,带出窗口,编辑提示内容,最后结果如下 再将这个注释文件,一键生成为数据库文档,写数据库文档的工作并不大。 由于一套数据库可能阅读全文
posted @ 2011-06-13 09:22 James Li 阅读(287) | 评论 (1) 编辑
 
摘要: ORM 常见错误 1. 根对象引用错误 // order collection to fetch CustomerEntity myCustomer = new CustomerEntity(11091); // prepare prefetch (customer -> salesOrder) IPrefetchPath2 myCustomerPath = new PrefetchPath2((...阅读全文
posted @ 2011-06-13 09:21 James Li 阅读(187) | 评论 (0) 编辑
 
摘要: 数据库字段映射当看到一个实体的属性,是否可以马上判断出它对应的数据库字段? _languageTranslation.KeyText, 比如看到这个KeyText的属性通常的做法是,去查找实体与数据库字段绑定的代码,以检查这个属性关联的数据库字段,代码可能是这样public LanguageTranslationEntity ReaderBind(IDataReader dataReader){LanguageTranslationEntity model=new LanguageTranslationEntity ();object ojb; model. KeyText =dataRead阅读全文
posted @ 2011-06-10 09:12 James Li 阅读(1323) | 评论 (6) 编辑
 
摘要: 窗体开发的主题内容 1. 窗体属性设置 2. CRUD与代码生成 3. 高级选项 4. 设计规范 使用EPN框架制作员工主档窗体,效果图如下 属性设置 增加窗体,EmployeeMaster 设置继承的类为EntryForm [FunctionCode("SAISEM")] public partial class EmployeeMaster : EntryForm { public EmployeeMaster() { InitializeComponent(); } } 并且添加功能编码SAISEM 在EPN的分类设置选项中,设置窗体的EPN属性如下 这表阅读全文
posted @ 2011-06-08 12:10 James Li 阅读(1733) | 评论 (10) 编辑
 
摘要: 开发框架 1. ORM, LLBL Gen,NHibernate 2. 接口与实现分离,界面与逻辑分离,分五个项目, BusinessLogic, Interface,Manager,Validation,EntryForm 3. SQL与ORM 4. 通讯集成 Remoting/WCF 5. Control/Component: NumberiEditor,TextEditor,Grid,Co...阅读全文
posted @ 2011-06-07 12:49 James Li 阅读(879) | 评论 (1) 编辑
 
摘要: 窗体特性 1. 记住表格布局 2. Inquiry 查询 3. 控件 4. 多国语言 5 Clone 复制 6 Export/Import 通用导入导出 7 Series code 序列号管理 记住表格布局 当窗体包含Grid,TreeView控件时,窗体在保存时会记住它的布局,在下次窗体重新打开时,自动加载布局设置 Grid的设置包括,列的顺序,分组,显示的字段,过滤 TreeView的设置包...阅读全文
posted @ 2011-06-07 12:46 James Li 阅读(286) | 评论 (0) 编辑
 
摘要: 报表开发 1. 支持2种主流报表格式 Crystal Report和Reporting Services 2. 本地化 3. 参数自动配置与传递 4. 扩展 using .NET Assembly to write an report 5. 报表管理程序,映射程序 以帐户报表GLCUCAR为例 参数自动配置与传递 如图,在报表明细中设置好参数选项,在打开报表时,会自动依据这个设置,生成参数列表 ...阅读全文
posted @ 2011-06-07 12:46 James Li 阅读(292) | 评论 (1) 编辑
 
摘要: 报表分类 业务报表中心主要是由各种业务报表构成的,在系统内我们按照业务类别进行了归类,大致包括以下几种: 一 销售报表 在商品销售后,您可以通过销售类报表了解企业的销售情况,比如某一期间内商品的销售总额,某个客户某种商品的销售情况、业务员的销售业绩情况、销售毛利情况等。 二 采购报表 采购货品之后,您可以通过此类报表了解企业的采购情况,比如供应商的供货情况、商品的采购情况、业务员的采购情况、订单情...阅读全文
posted @ 2011-06-07 12:40 James Li 阅读(527) | 评论 (0) 编辑
 
摘要: 从程序员的角度划分: Framework : Component 组件 Kernal 必须的基础功能 Application: System Administration 系统管理,Sales 销售,Inventory 库存 从开发的进程角度 Development Entry 数据入窗体 Query 查询窗体 Process flow 处理流程 Report 报表 Tooling ORM, C...阅读全文
posted @ 2011-06-07 12:38 James Li 阅读(688) | 评论 (2) 编辑
posted on 2013-05-08 20:53  HackerVirus  阅读(352)  评论(0编辑  收藏  举报