做ERP/MIS的程序,界面常常是做成WinForms和ASP.NET,界面繁杂,内容多。
我常常认为,MIS类型的程序,界面是最复杂的,不可理解的,如下图所示,物料主档的界面
这是我见过的,相当复杂的一个界面,你需要学习大量的知识,才能灵活的操作这个功能。
比如,Userd as Product,成品,Userd as Material 物料,这2个同时打勾选中,就是半成品,如果这2个都不选,在MRP运算或是下采购单时,则要去看Item Type物料类型(标准库存,套装).
因为参数很多,所以做成UI形式的界面,对于开发人员来说,工作量是最少的。
如果参数不多,或是参数很少的这类型应用,是否可以做成命令行式的调用,以简化ERP的用户操作。
举例说明,下采购单,从供应商FLEX那里购买100个Item为FLEX90183的标准件,因为是常规客户(不需要询价),可以直接下单,确定收货日期,这个采购指令可构造如下的命行来完成
PUPOOE ‘FLEX’, FLEX90183’,'100’,'2011/8/23’, 'US$’ 分析指令,PUPOOE是采购单的功能编码,给它传入几个参数,比如供应商FLEX,物料是FLEX90183’,数量是100,收货日期为2011/8/23,交易的货币是US$将这个命令输入到ERP系统的命令控制台中,系统于是下采购单,生成采购指令。这个过程不需要的UI界面来操作。
这是一种简化的情况,没有考虑到新客户,因为新客户要确定采购价格才能下单购买。
再举例ERP系统中,不需要操作界面,就可以完成的一些功能 Item Cost Rollup 成本上卷,用于更新物料清单的成本 MRP Computation 物料需求计算 Period-End Process 期末处理,过帐传票,月结,更新记帐期间 Data Initialization/Archiving 数据初始化/存档 Reconciliation(Account,Customer,Item,Vendor) 数据重核算(帐户,客户,物料,供应商) 对于Purchasing/Sales/Production中的每个功能,他们的取消(cancel)功能,都可以做成命令行调用 比如,取消JE000076的工作单(PRPMJC),命令是PRPMJC ‘JE000076’, 取消PO000237的采购单(PUPOOC),命令是PUPOOC ‘PO000237’ 由此可见,复于UI表现的MIS/ERP系统,也有大量的地方,可以用命令行来完成的工作。命令行处理的好处
我能找到的很好的理由,就是命令行式的操作,可以批处理。把各个命令,存入一个预处理文件中,可以在晚上或是系统不忙时,批次处理。比如MRP运算通常都会选在凌晨时计算。等我们早上到公司,结果已经计算好了,报表也通过自动生成模块,发送到我们的邮件中。另外,节省UI资源,节省内存,这是肯定的,因为不需要GDI+来绘制大量的界面元素。
如何实现需要的命令行处理程序
功能上的需求
1 命令解析功能,可以解析常见的功能,以及它的命令行调用,比如
命令是PUPOOC ‘PO000237’ ,要能识别功能编码是PUPOOC (Order Cancellation),传入的参数是采购单编号
对于不传入任何参数的PUPOOC 命令,则启动这个功能,等待用户的下一步操作。
2 可以支持外壳命令的调用,常见的CD/MD/CLS命令要能支持。
3 效果上,同CMD窗口的样式,给人的感觉就是来执行命令的
4 支持/help /?这种命令帮助,这样可以减少很多查找手册的时间,让软件使用更加方便
实现效果
如图,当前正要执行的命令是PUPOOC ‘PO000237’ ,翻译成文字就是取消PO000237的采购单,它的上面有几行内容,是执行了DIR命令的效果。
这个控件来源于CodeProject上的一篇为ShellControl的文章,请到CodeProject上下载控件源代码,然后添加自己的命令处理解析器。 把这些命令保存成一个文本文件,传入到这个功能中,可以实现批处理的功能,比如有如下的一批命令 PRPMJC ‘JE000076’ PRPMJC ‘JE000079’ PUPOOC ‘PO000237’ PUPOOC ‘PO000239’……
再来看,PUPOOC ‘PO000239’ 命令的解析。这里,需要写一个定制的命令解析工具,把参数按照约定的顺序,传入到功能中去。还需要有一个定时调度程序,在指定的时间,调用功能,执行外壳命令。 这两者的配合,才会给ERP/MIS系统带来威力巨大的改善。 总结一下,需要做的几个主要组件 1 外壳控件 ShellControl 2 命令解析程序,分两种类型,ERP/MIS的命令,OS的外壳命令 3 调度程序 ,加载批处理命令,在指定时间执行外壳命令