一、前言
本人从事多年医疗管理软件的开发,在医院大多数的软件都还是CS程序,BS程序很少,对于使用者来说CS的操作体验确实比BS的要好。
1、CS的缺点就是升级麻烦,每次有新版本都需要所有客户端操作升级。有没有办法像BS程序那样刷新一下页面就是最新程序?
2、还有就是企业软件项目个性化需求都特别多,特别是界面上的每一个项目可能要求都不太一样,比如表单录入一个项目一个版本是很正常的现象,那有没有办法把界面层的开发单独出来,采用配置的方式了?
3、另外就是现在的开发模式,如果在现场修改问题太麻烦了,改完代码后得编译、发布、升级客户才能看到最新效果,特别怀念以前存储过程的方式,只要往数据库提交最新的SQL,客户立马看到效果。所有界面开发能不能做到像存储过程这样,在运行的程序中直接打开程序代码修改完保存,界面修改过来?
最后,琢磨出使用脚本语言来开发Winform程序,这样上面三个问题就完美解决了,这就是efwplusScript。
二、efwplusScript介绍
上图就是采用efwplusScript开发的一个简单增删改查的实例,虽然看上去像网页,其实还是Winform程序,点击地址栏的刷新按钮,页面实时显示最新内容,无需升级操作。页面上的所有功能没有一句C#代码,都是采用脚本语言开发。下图显示编写脚本的主界面。
可视化设计界面
如上图,直接使用efwplusStudio.exe这个工具就可以开发Winform界面程序。支持新建云软件项目,新建界面,可视化设计界面,编写脚本代码,还可以直接运行调试等。
三、efwplusStudio.exe开发工具说明
1、脚本资源
Config:配置当前程序有多少个云软件
WinAssembly:依赖的程序集
WinScript:云软件的脚本文件
2、代码编辑器,编写python代码、XML代码和界面设计
3、本地云软件,列出所有云软件,双击界面节点可以打开对应页面。
4、跟踪调试,显示调试日志
四、efwplusClient.exe客户端说明
efwplusClient有点像一个自定义的浏览器,支持打开网页和Winform程序,相当于BS和CS混合展示的客户端程序。
除了通过地址打开页面,efwplusClient还整合了管理软件的权限功能,点击左上角的菜单按钮,会弹出登录界面,登录后会根据用户权限加载对应功能菜单。
efwplusClient整合的功能包括:
1、组织机构,包括机构信息、科室维护、人员信息
2、用户权限,包括用户维护、系统菜单、角色权限
3、其他设置,包括系统参数、报表管理、消息管理、字典管理、图标管理
人员信息
图标管理
字典管理
五、快速开始(Hello实例)
1、新建云软件
2、查看Config/CloudSoftConfig.xml
3、查看WinScript/Hello/config.xml
4、查看WinScript/Hello/controller/Controller01.py
#-*- coding: UTF-8 -*-
__author__ = 'kakake'
globaltrace#日志显示开始加载脚本
trace.printlog('begin load Controller01.py',True)importsys
sys.path.append("WinScript/Hello")#将trace设置为跨文件的全局变量
importcloudsoft as soft
soft.set_trace(trace)#导入自己的模块
from model.Model01 importModel01from view.View01 importView01#导入常用的模块
importjsonfrom datetime importdatetime#入口函数
defmain(_controller):try:
trace.printlog('call main')
view01= View01(_controller) #有几个界面类就要实例化几个
controller01= Controller01(_controller,view01) #先实列化控制器类,然后在把对象传给界面类,这样界面就可以直接调用控制器中的方法
return0;exceptException,ex:returnex;#控制器类
##############################################################
classController01(object):def __init__(self, _controller,_view01):
self.controller=_controller
self.view01=_view01
self.rview01=_controller.RenderList['View01']#注册事件
self.rview01.initload(self.viewload)
self.rview01.bind('btnHello', 'click', self.Hello)#界面初始化加载
defviewload(self):pass
defHello(self,sender,e):
self.rview01.msgbox('Hello World!','提示','ok','info')
trace.printlog('hello world')##############################################################
#日志显示脚本加载完成
trace.printlog('end load Controller01.py')
View Code
5、查看WinScript/Hello/view/View01.xml和View01.py
View Code
#-*- coding: UTF-8 -*-
__author__ = 'kakake'
importsysimportcloudsoft as soft
trace=soft.get_trace()#日志开始加载脚本
trace.printlog('begin load View01.py')#界面类
##############################################################
classView01(object):def __init__(self, _controller):
self.view= _controller.RenderList['View01']##############################################################
#日志显示脚本加载完成
trace.printlog('end load View01.py')
View Code
6、查看WinScript/Hello/model/Model01.py
#-*- coding: UTF-8 -*-
__author__ = 'kakake'
importsysimportcloudsoft as soft
trace=soft.get_trace()#日志开始加载脚本
trace.printlog('begin load Model01.py')#实体类
##############################################################
classModel01(object):def __init__(self):pass
##############################################################
#日志显示脚本加载完成
trace.printlog('end load Model01.py')
View Code
六、efwplusScript实现原理
1、云软件
.net开发是以dll程序集为最终程序文件,而efwplusScript开发为一个云软件。
一个云软件中包括controller、model、view各种代码文件,efwplusClient是按云软件为单位运行的。这些云软件配置在Config/CloudSoftConfig.xml文件中。
云软件的代码结构也是采用MVC模式,分为Controller、Model和View,config.xml为云软件配置文件,cloudsoft.py存放全局数据和函数。
云软件有多个入口,每个controller.py文件都可以是程序入口,一般的程序都只有一个入口函数。
2、可视化界面设计
3、数据库操作
4、调用efwplus微服务
5、调用RESTful API
程序安装教程:
1、还原数据库CloudSoftDB.bak(SqlServer2012,备份数据库群文件中获取),然后在efwplusServer\Config\EntLib.config文件中修改数据库连接字符串。
2、启动服务端程序efwplusServer\efwplusBase.exe(以管理员运行,第一次打开程序会提示自动获取授权码)
3、配置完以上,就可以启动efwplusClient\efwplusClient.exe和efwplusStudio.exe