使用efwplusScript开发Winform程序【像小程序那样开发PC软件】

一、前言

本人从事多年医疗管理软件的开发,在医院大多数的软件都还是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

<?xml version="1.0" encoding="utf-8"?>

<cloudsoftList>

<cloudsoftClient name="Login" path="WinScript/Login/config.xml" title="登录权限" version="1.0" />

<cloudsoftClient name="BasicSetting" path="WinScript/BasicSetting/config.xml" title="基础模块" version="1.0" />

<cloudsoftClient name="Hello" path="WinScript/Hello/config.xml" title="Hello" version="1.0" />

<cloudsoftClient name="BooksDemo" path="WinScript/BooksDemo1.0/config.xml" title="书籍示例" version="1.0" />

<cloudsoftClient name="Test" path="WinScript/Test/config.xml" title="测试" version="1.0" />

</cloudsoftList>

3、查看WinScript/Hello/config.xml

<?xml version="1.0" encoding="utf-8"?>

<configuration>

<cloudsoft name="Hello" title="Hello" version="1.0" author="kakake">

<baseinfo>

<data key="introduction" value="软件介绍" />

<data key="updaterecord" value="更新记录" />

</baseinfo>

<controllerList>

<WinformController ControllerName="Controller01" DllName="efwplusWinform.dll" TypeName="EFWCoreLib.WinformFrame.Controller.WinformController" DefaultViewName="View01" ScriptFile="WinScript\Hello\controller\Controller01.py">

<WinformView Name="View01" DllName="efwplusWinform.dll" ViewTypeName="EFWCoreLib.CoreFrame.Business.BaseFormBusiness" ViewFile="WinScript\Hello\view\View01.xml" Memo="" />

</WinformController>

</controllerList>

<AssemblyList>

</AssemblyList>

<fileList>

<file path="efwplusClient\WinScript\Hello\cloudsoft.py" />

<file path="efwplusClient\WinScript\Hello\config.xml" />

<file path="efwplusClient\WinScript\Hello\__init__.py" />

<file path="efwplusClient\WinScript\Hello\controller\Controller01.py" />

<file path="efwplusClient\WinScript\Hello\controller\__init__.py" />

<file path="efwplusClient\WinScript\Hello\model\Model01.py" />

<file path="efwplusClient\WinScript\Hello\model\__init__.py" />

<file path="efwplusClient\WinScript\Hello\view\View01.py" />

<file path="efwplusClient\WinScript\Hello\view\View01.xml" />

<file path="efwplusClient\WinScript\Hello\view\__init__.py" />

</fileList>

</cloudsoft>

</configuration>

4、查看WinScript/Hello/controller/Controller01.py

# -*- coding: UTF-8 -*-

__author__ = ‘kakake‘

global trace

#日志显示开始加载脚本

trace.printlog(‘begin load Controller01.py‘,True)

import sys

sys.path.append("WinScript/Hello")

#将trace设置为跨文件的全局变量

import cloudsoft as soft

soft.set_trace(trace)

#导入自己的模块

from model.Model01 import Model01

from view.View01 import View01

#导入常用的模块

import json

from datetime import datetime

#入口函数

def main(_controller):

try:

trace.printlog(‘call main‘)

view01 = View01(_controller) # 有几个界面类就要实例化几个

controller01 = Controller01(_controller,view01) # 先实列化控制器类,然后在把对象传给界面类,这样界面就可以直接调用控制器中的方法

return 0;

except Exception,ex:

return ex;

#控制器类

##############################################################

class Controller01(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)

#界面初始化加载

def viewload(self):

pass

def Hello(self,sender,e):

self.rview01.msgbox(‘Hello World!‘,‘提示‘,‘ok‘,‘info‘)

trace.printlog(‘hello world‘)

##############################################################

#日志显示脚本加载完成

trace.printlog(‘end load Controller01.py‘)

5、查看WinScript/Hello/view/View01.xml和View01.py

<?xml version="1.0" encoding="utf-8"?>

<viewform>

<winform size="880,500" tabindex="0" text="Hello World" name="View01" visible="false" width="880">

<panel type="panelEx" dock="fill" location="0,0" name="PanelEx1" size="864,461" tabindex="0" width="864">

<button type="buttonX" text="Hello World" location="371,113" name="btnHello" size="95,23" tabindex="0" width="95" />

</panel>

</winform>

</viewform>


# -*- coding: UTF-8 -*-

__author__ = ‘kakake‘

import sys

import cloudsoft as soft

trace=soft.get_trace()

#日志开始加载脚本

trace.printlog(‘begin load View01.py‘)

# 界面类

##############################################################

class View01(object):

def __init__(self, _controller):

self.view = _controller.RenderList[‘View01‘]

##############################################################

#日志显示脚本加载完成

trace.printlog(‘end load View01.py‘)

6、查看WinScript/Hello/model/Model01.py

# -*- coding: UTF-8 -*-

__author__ = ‘kakake‘

import sys

import cloudsoft as soft

trace=soft.get_trace()

#日志开始加载脚本

trace.printlog(‘begin load Model01.py‘)

#实体类

##############################################################

class Model01(object):

def __init__(self):

pass

##############################################################

#日志显示脚本加载完成

trace.printlog(‘end load Model01.py‘)

六、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

efwplusScript程序下载:加QQ群399651389中共享文件中获取。

源代码获取:https://gitee.com/kakake/efwplusScript

程序安装教程:

1、还原数据库CloudSoftDB.bak(SqlServer2012,备份数据库群文件中获取),然后在efwplusServer\Config\EntLib.config文件中修改数据库连接字符串。

2、启动服务端程序efwplusServer\efwplusBase.exe(以管理员运行,第一次打开程序会提示自动获取授权码)

3、配置完以上,就可以启动efwplusClient\efwplusClient.exe和efwplusStudio.exe

原文地址:https://www.cnblogs.com/kakake/p/9880153.html

时间: 2024-07-30 09:28:02

使用efwplusScript开发Winform程序【像小程序那样开发PC软件】的相关文章

移动开发之【微信小程序】的原理与权限问题以及相关的简易教程

这几天圈子里到处都在传播着这样一个东西,微信公众平台提供了一种新的开放能力,开发者可以快速开发一个小程序,取名曰:微信公众平台-小程序 据说取代移动开发安卓和苹果,那这个东东究竟是干吗用的?但很多人觉得是网页版应用. 有的人很鸡冻,但是--最后文章会提及具体的权限开放问题,所以,还是保持一颗冷静的?比较好. 那我们先来看看组件和API开放了哪些服务: 视图容器:视图(View).滚动视图.Swiper 基础内容:图标.文本.进度条 表单组件:按钮.表单等等 操作反馈 导航 媒体组建:音频.图片.

记录开发代码量的小程序

这段时间在开发网站,想要去记录自己的开发代码量,所以写了一个小脚本,用来记录,代码如下: #-*- coding: UTF-8 -*- #用来检测当前的代码量 import sys,os count = 0 def readfile(file): global count f = open(file,'r') read = f.readlines() for i in read: count+=1 f.close() def check(currentpath): s = os.listdir(

一个人开发一个产品,小程序从0到1 ,第1章 开发工具

微信小程序于2017年1月9日正式上线后,受到了广大用户的关注,其较低的开发成本和微信庞大的用户量,为许多企业和个人提供了商机.为了帮助开发人员简单地新建项目,高效地开发微信小程序,微信团队提供了一套微信开发者工具. 1.1 下载安装 在微信官方文档.小程序(https://developers.weixin.qq.com/miniprogram/dev/framework)中,找到微信开发者工具的下载地址,按个人使用的操作系统下载对应的版本.不用纠结在什么平台下开发比较好的问题,毕竟它是跨平台

小程序再次大升级:一号旺铺让你能用小程序打开小程序

腾讯科技讯6 月 21 日晚间,小程序再次迎来三大功能升级,包括小程序打开小程序.门店小程序的门店页支持添加视频.门店小程序支持接口管理,丰富了使用场景和扩展性. 以下为主要功能升级: 1.一号旺铺小程序打开小程序 同一个公众号下关联的 10 个同主体小程序和 3 个非同主体小程序之间,可以调用接口直接相互跳转.微信客户端6.5. 9 及以上版本支持. 2.门店小程序的门店页支持添加视频 为了方便宣传门店形象,门店小程序的门店页支持可添加视频.添加视频方式有两种: 上传视频至公众号素材库添加.

微信小程序_小程序开发框架

微信小程序_小程序开发框架 微信小程序小程序开发框架的目标是通过尽可能简单.高效的方式让开发者可以在微信中开发具有原生APP体验的服务. 框架提供了自己的视图层描述语言WXML和WXSS,以及基于JavaScript的逻辑层框架,并在视图层与逻辑层间提供了数据传输和事件系统,可以让开发者可以方便的聚焦于数据与逻辑上. 响应的数据绑定微信小程序框架的核心是一个响应的数据绑定系统. 整个系统分为两块视图层(View)和逻辑层(App Service) 框架可以让数据与视图非常简单地保持同步.当做数据

[小程序]微信小程序登陆并获取用户信息

1.小程序js端调用框架登陆API,获取到一个临时code,拿着这个code去调用自己的服务端接口 2.在自己的服务器端,使用app_id app_secrect code可以获取到用户的openid,这个id是用户唯一的id并且不会改变,可以把这个id返回给小程序端小程序端本地保存openid 3.获取用户信息很简单,并且不需要自己的服务器处理,只需要小程序端提供的API.前端页面wxml使用一个按钮,按钮里增加几个属性,就可以回调到小程序js部分的方法上,并且带着用户的个人信息,如昵称 头像

TODO:即将开发的第一个小程序

微信小程序是一种全新的连接用户与服务的方式,它可以在微信内被便捷地获取和传播,同时具有出色的使用体验.个人理解小程序是寄宿在微信平台上的一个前端框架,具有跨平台功能,安装方便,即用即装,用完即删. 接下来打算开发一个物流平台,主要开发4个功能 1.用户平台 a.货主注册 b.司机注册 2.货主平台 a.货物发布 b.货物状态查看 3.司机平台 a.查看货物 b.获取货物信息 c.去拉货 4.调度管理平台 这个物流系统主要采用的技术是小程序开发框架,PHP(ThinkPHP 5),MySQL,Li

开发第一个IOS小程序 - 点击按钮文字变色

1. 题目:实现点击按钮切换文字对应的颜色 2.分析大致的开发步骤是 •添加所需要的UI元素:3个按钮(UIButton).1个文本标签(UILabel) •监听3个按钮的点击事件 •改变文本标签的文字颜色 3.具体实现步骤 3.1 在storyboard文件中,拖拽相应控件器上,布局好以上显示页面效果 3.2 然后利用Xcode右端上的“圆圈”按钮,将代码区分割成 “Main.storyboard”与“viewController.m”文件,两个可以按住control键,不要放开,将以上元素拖

微信小程序开发公测,小程序账号申请办法攻略

11月3号晚上 10 点,微信公众平台发布公告,宣布微信小程序正式开放公测.此次小程序公测允许开发者将产品提交至微信公众平台审核,但是暂时不支持发布,也就是说普通消费者若想体验小程序,还需要等待一段时间. 什么人可以参与小程序公测? 微信小程序的公测暂时只开放给企业.政府.媒体.其他组织,个人微信公众号暂时无法参与小程序公测. 此次公测开放的内容包括: 开发支持:提供一系列工具帮助开发者快速接入并完成小程序开发: 开发文档:介绍小程序的开发框架.基础组件.API 及相关开发问题: 开发者工具:集

支付宝小程序开发之与微信小程序不同的地方

前言: 本文仅汇总微信小程序移植支付宝小程序过程中遇到的一些不同的地方,详细请参考官方开发文档. 网络请求: 对于网络请求,基本上改动不大,也就支付宝小程序没有responseType属性及响应码字段改成了status. 用户授权登录: 1. 登录: wx.login ====  my.getAuthCode wx.checkSession ==== 无(需后端接口验证) 缓存: 以常用的 wx.getStorageSync() 为例,先看微信的代码: wx.setStorageSync("id