1. 程式人生 > >使用efwplusScript開發Winform程式【像小程式那樣開發PC軟體】

使用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')
View Code

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

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')
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

efwplusScript程式下載:加QQ群399651389中共享檔案中獲取。

程式安裝教程:

1、還原資料庫CloudSoftDB.bak(SqlServer2012,備份資料庫群檔案中獲取),然後在efwplusServer\Config\EntLib.config檔案中修改資料庫連線字串。

2、啟動服務端程式efwplusServer\efwplusBase.exe(以管理員執行,第一次開啟程式會提示自動獲取授權碼)

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