使用efwplusScript開發Winform程序【像小程序那樣開發PC軟件】

1、前言python

本人從事多年醫療管理軟件的開發,在醫院大多數的軟件都仍是CS程序,BS程序不多,對於使用者來講CS的操做體驗確實比BS的要好。git

一、CS的缺點就是升級麻煩,每次有新版本都須要全部客戶端操做升級。有沒有辦法像BS程序那樣刷新一下頁面就是最新程序?數據庫

二、還有就是企業軟件項目個性化需求都特別多,特別是界面上的每個項目可能要求都不太同樣,好比表單錄入一個項目一個版本是很正常的現象,那有沒有辦法把界面層的開發單獨出來,採用配置的方式了?json

三、另外就是如今的開發模式,若是在現場修改問題太麻煩了,改完代碼後得編譯、發佈、升級客戶才能看到最新效果,特別懷念之前存儲過程的方式,只要往數據庫提交最新的SQL,客戶立馬看到效果。全部界面開發能不能作到像存儲過程這樣,在運行的程序中直接打開程序代碼修改完保存,界面修改過來?瀏覽器

最後,琢磨出使用腳本語言來開發Winform程序,這樣上面三個問題就完美解決了,這就是efwplusScript。app

 

2、efwplusScript介紹編輯器

 

上圖就是採用efwplusScript開發的一個簡單增刪改查的實例,雖然看上去像網頁,其實仍是Winform程序,點擊地址欄的刷新按鈕,頁面實時顯示最新內容,無需升級操做。頁面上的全部功能沒有一句C#代碼,都是採用腳本語言開發。下圖顯示編寫腳本的主界面。ide

 

可視化設計界面函數

 

如上圖,直接使用efwplusStudio.exe這個工具就能夠開發Winform界面程序。支持新建雲軟件項目,新建界面,可視化設計界面,編寫腳本代碼,還能夠直接運行調試等。微服務

 

3、efwplusStudio.exe開發工具說明

 

一、腳本資源

Config:配置當前程序有多少個雲軟件

WinAssembly:依賴的程序集

WinScript:雲軟件的腳本文件

二、代碼編輯器,編寫python代碼、XML代碼和界面設計

三、本地雲軟件,列出全部雲軟件,雙擊界面節點能夠打開對應頁面。

四、跟蹤調試,顯示調試日誌

 

4、efwplusClient.exe客戶端說明

 

efwplusClient有點像一個自定義的瀏覽器,支持打開網頁和Winform程序,至關於BS和CS混合展現的客戶端程序。

除了經過地址打開頁面,efwplusClient還整合了管理軟件的權限功能,點擊左上角的菜單按鈕,會彈出登陸界面,登陸後會根據用戶權限加載對應功能菜單。

 

efwplusClient整合的功能包括:

一、組織機構,包括機構信息、科室維護、人員信息

二、用戶權限,包括用戶維護、系統菜單、角色權限

三、其餘設置,包括系統參數、報表管理、消息管理、字典管理、圖標管理

 

人員信息

 

圖標管理

 

字典管理

 

5、快速開始(Hello實例)

一、新建雲軟件

 

二、查看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>

 

三、查看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>

 

四、查看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')
View Code

 

 

五、查看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>
View Code

 

 

# -*- 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')
View Code

 

六、查看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')
View Code

 

 

 

6、efwplusScript實現原理

一、雲軟件

.net開發是以dll程序集爲最終程序文件,而efwplusScript開發爲一個雲軟件。

一個雲軟件中包括controller、model、view各類代碼文件,efwplusClient是按雲軟件爲單位運行的。這些雲軟件配置在Config/CloudSoftConfig.xml文件中。

雲軟件的代碼結構也是採用MVC模式,分爲Controller、Model和View,config.xml爲雲軟件配置文件,cloudsoft.py存放全局數據和函數。

雲軟件有多個入口,每一個controller.py文件均可以是程序入口,通常的程序都只有一個入口函數。

二、可視化界面設計

三、數據庫操做

四、調用efwplus微服務

五、調用RESTful API

 

efwplusScript程序下載:加QQ羣399651389中共享文件中獲取。

源代碼獲取:https://gitee.com/kakake/efwplusScript

 

程序安裝教程:

一、還原數據庫CloudSoftDB.bak(SqlServer2012,備份數據庫羣文件中獲取),而後在efwplusServer\Config\EntLib.config文件中修改數據庫鏈接字符串。

二、啓動服務端程序efwplusServer\efwplusBase.exe(以管理員運行,第一次打開程序會提示自動獲取受權碼)

三、配置完以上,就能夠啓動efwplusClient\efwplusClient.exe和efwplusStudio.exe

相關文章
相關標籤/搜索