度量快速開發平臺——快速入門

量子物理學發表於2016-03-17
什麼是開發平臺
     當我們最開始接觸軟體開發的時候,我們大都是採用程式設計工具來編寫程式,運用JDKMFC等提供編寫程式碼來完成想要的功能,編寫完之後還要編譯成可執行的檔案,然後再執行。這種方式雖然通俗,但是一點也不方便,慢慢的,程式設計人員開始尋求比較方便開發的工具,於是諸如Visual StudioeclipsejbuilderVC++等等一系列的開發工具便出現在了市面上,這些工具的出現,大大方便了開發人員的程式設計工作,減少了程式設計人員很多不必要的麻煩。像包括編譯、異常處理、釋出、模擬執行等等操作,都可以在這些開發工具上完成。
但是,隨著時間的推移,程式設計人員發現,即使有這麼好的開發工具,在開發的過程中,依然要寫很多很多的程式碼,而且仔細的分析來看,很多程式碼基本上都是重複的編寫,功能大同小異。於是,他們便開始琢磨另一種更為方便高效的開發工具,比如說:我們可以將很多重複的程式碼封裝起來,然後需要用到的時候自行呼叫?或者是我們可以搭出一個基本的開發框架,然後程式設計人員可以在這個框架的基礎上進行二次開發?通過程式設計人員一次一次的實驗,最終形成了一種新的開發工具,那就是開發平臺。
     開發平臺,簡單的理解就是:以某種程式語言或者某幾種程式語言為基礎,開發出來的一個軟體,而這軟體不是一個最終的軟體產品,它是一個二次開發軟體框架,使用者可以在這個產品上進行各種各樣的軟體產品的開發,並且在這個產品上進行開發的時候,不需要像以往的程式設計方式那樣編寫大量的程式碼,而是隻需要針對業務進行一些簡單的操作,或者是寫極少量的程式碼便可以完成一個業務系統的開發工作。

 
第一章    認識度量快速開發平臺
       度量快速開發平臺作為面向構建的SOA中介軟體產品,提供了完整的企業應用從開發到執行、管理、監控的工具或環境支援,主要包括以下模組:開發框架、許可權系統、治理與監控、工作流、智慧窗體、自定義報表、門戶定製、整合平臺等。
       
       度量快速開發平臺的兩種模式:引擎模式生成原始碼模式。度量基於自主智慧財產權的智慧窗體技術,採用自己的指令碼解釋引擎,生成原始碼模式在度量快速開發平臺裡面得到了不一樣的體現,更大幅度的提高了效率。
 
首先大家得知道,我們在平臺中不管用什麼方式構建(在平臺中開發我們稱之為構建)出來的應用(在平臺中我們把根據實際業務構建出來的功能模組稱之為應用),最終我們是要讓使用者使用的,也就是說,使用者需要有一個地方能開啟我們在平臺中構建出來的應用,所以度量快速開發平臺的做法是通過配置選單的方式來實現(當然配置的每個選單都是受許可權控制的),每一個選單都對應一個應用。
在平臺中配置的每一個選單都是我們在平臺中通過不同的模式構建出來的應用,那麼我把在平臺中的構建模式分為以下5中模式:
 
對於表單工作流程的開發是不需要書寫任何程式碼的,只需要設定一個模版並通過簡單配置,以及視覺化的流程圖的設計(也就是托拉拽)就能完成。
 
所謂的智慧窗體,是在普通的窗體開發中針對實際業務變得更簡單更實用。在智慧窗體裡面所用到的控制元件、部件以及需要寫程式碼的地方都是經過加工的,這些東西開發者使用起來更方便、更簡單、效率更高,從而顯得更智慧化。
 
高階工作流是基於窗體、和表單工作流的一種開發,把窗體和表單工作流整合一起,把自由組合的窗體更具設計好的流程圖流轉,這樣可以更靈活的實現流程性的開發,從而變得更強大。
 
報表開發是一個單獨的報表設計器,在裡面可以快速方便的構建各種報表,然後這些報表的構建都只需要寫好查詢語句,然後經過托拉拽就能實現,一行程式碼都不用寫就能實現。
 
使用擴充套件開發的情況一般有兩種:
第一種:有在平臺中無法完成的需求時,我們可以通過其他開發工具編寫一個.NET程式,然後把這個程式的某個介面作為一個主介面配置到平臺中來,也就是說在平臺中配置一個選單,然後點選這個選單的時候開啟的就是你用其他開發工具編寫的這個程式。
第二種:有在平臺中無法完成的某個功能時,我們可以通過其他開發工具編寫完成這個功能的方法然後生成DLL(動態庫)檔案,然後在平臺中是可以直接呼叫的,比如我要與公安局聯網查詢身份證的真實性,那麼就可以自己寫一個效驗的方法生成DLL(動態庫)檔案,然後在平臺中輸入身份證的地方呼叫這個方法來進行效驗。
 
這裡要講的是平臺中構建時涉及到的一些重要的概念整理,是為了讓大家對這些概念有所瞭解後,在後面的講解中才方便大家更好的理解。以下是我整理的幾個比較重要的概念:
 
在平臺的開發工具中有一個選單的名字叫“資料庫維護”,這裡顯示了平臺中所有業務使用到的資料庫以及資料表,在這裡可以配置連線到不同資料庫,也可以對資料庫裡面的表進行操作,在之裡可以進行統一的管理。平臺自身使用的資料庫在這裡面叫“預設(default)”。
PS:如果利用其他工具在資料庫中新增了表那麼使用起來會有問題,原因就是在這裡對錶的進行維護包括欄位、型別、長度等等這些都是有記錄在我們平臺的系統表裡面的,如果繞過我們的這個資料庫維護工具操作的話就會出現問題。
 
我們對資料庫維護下的資料表進行配置時,有兩列分別叫“欄位名”和“實際名”(如下圖)
欄位名:也就是資料表欄位的別名(Alias),平臺構建中有設定業務表的情況時,系統就會顯示欄位的別名,當然前提是設定的業務表中的SQL語句沒有使用例如“AS”這種關鍵字再次命名別名的。
實際名:也就是資料表欄位名稱,比如你寫一句SQL語句那麼就得用這個名稱來查詢。
 
對資料庫維護裡面的資料表進行配置時,有兩列分別叫“型別”和“編輯型別”(如下圖)
型別:也就是資料表儲存資料時使用的型別。例如字元、數字、整數等。型別一旦確定儲存後是不能更改的,不同的型別下面有不同的編輯型別。
編輯型別:也就是在介面上編輯的時候需要使用的型別。例如編輯型別是單項選擇,那麼在平臺構建中使用到該欄位的時候介面上就會自動出現一個下拉選擇的控制元件。編輯型別是隨時都可以更改的,這也是構建介面時系統會自動生成什麼控制元件的依據,不同的編輯型別會生成不同的控制元件,每個編輯型別也有自己的個性化定義。一處定義多處使用,這也是簡化了不少操作的一個重要設計啊。
PS:如需檢視型別與編輯型別以及各型別下的相關屬性,請檢視詳細說明:《度量快速開發平臺——型別與編輯型別詳解
 
這個概念是相當重要的,因為在平臺的構建中我們肯定會使用的很平凡。有開發經驗的人都知道,當我們在使用一些控制元件開發的時候,有的控制元件是需要繫結資料來源的,例如我們使用的GridView這個網格控制元件,它就需要指定一個資料來源,也就是繫結一個DataTable。在平臺裡面原理也是差不多的,所有的部件(平臺裡面需要繫結業務表的稱之為部件,非繫結業務表的稱之為控制元件)也需要繫結一個資料來源,但是平臺叫繫結業務表,每個業務表是一句SQL語句組成,這個SQL語句可以複雜也可以簡單,平臺會通過這個SQL語句查詢得到一個DataTable,然後這個DataTable就會與部件繫結。
也就是說業務表就是一個裝SQL語句的容器,部件與業務表繫結,使用時就會根據業務表裡面的SQL語句查詢出表結構以及內容並且自動生成介面顯示出來。
 
業務表其實還分為“只讀業務表”與“讀寫業務表”。
只讀業務表:就是隻有查詢作用,不能根據這個業務進行寫資料操作。比如在繫結只讀業務表的部件中使用儲存資料的方法(SaveData)就會提示錯誤。一般這類業務表可以自定更復雜的SQL語句。
讀寫業務表:可以有查詢作用,還有寫資料的作用。比如在繫結讀寫業務表的部件中是可以直接呼叫儲存資料的方法(SaveData),把介面上的資料直接提交到資料庫表裡面。一般這類業務表都是對一個資料表進行操作,都是通過介面勾選的方式來自動生成SQL,不允許自定義。
 
理解業務表之後還有一個比較重要的概念就是“業務表變數”,既然上面我們說了業務表好比一個SQL語句的容器,那麼對於SQL語句我們都知道有一個WHERE子句,那就是篩選條件時用的。既然要篩選條件那麼這個條件一定不能是死的,肯定要從我們介面上靈活的傳入一些資料進行篩選這樣才實用,所以業務表變數就誕生了。
業務表變數就是在業務表的SQL語句中設定一個變數,這個變數的值是等待我們後續根據實際情況指定的。當然業務表變數不僅僅侷限於只能寫在WHERE子句後面,寫在欄位名列表處也是可以很靈活的使用的。
說到這裡我多提一句:當我們在構建業務表的時候如果需要把WHERE字句整個的作為業務表變數,那麼可以使用“select * from 表名 [:where]”這樣的寫法,去掉WHERE關鍵字,直接新增一個業務表變數“[:where]”,這是一個格式化的規定,必須得這樣寫才行。
 
在平臺裡面有一個很實用的東西,就是智慧嚮導。智慧嚮導其實類似於MSDN幫助這個功能,在我們對平臺構建不太熟悉的時候一定要多用智慧嚮導。這裡麵包含了絕大部分的內建方法屬性,並且在我們構建的時候,你當前用到了哪個部件那麼在這裡面就有這個部件的方法說明以及示例,更重要的是裡面有個輔助設定的功能,能自動生成相應程式碼。舉個例子,假如你所使用的部件繫結了一個帶有業務表變數的業務表,但是你忘記了自己取的業務表變數的名字,那麼你可以直接通過智慧嚮導中的輔助設定進行選擇設定,智慧嚮導會自動識別這些方法所需要的引數,這就是智慧的體現。當然智慧是在你任何需要寫程式碼的地方都開啟它。
 
第二章    平臺基本語法講解
首先給大家說明下度量快速開發平臺對程式碼的解析是中和了VB和C#兩種語言,雖然大多數情況我們都可以使用智慧嚮導,但是大家還是要對這兩種語言有個基本瞭解才行。
其次大家還需要注意一點,平臺中程式碼的解析暫時還不支援同行寫多條程式碼,一行只能寫一個表示式,並且程式碼結束時不需要結束符。
再者就是平臺中的註釋符號是:“’”單引號,並且註釋語也只能是單獨一行寫,不能與其他表示式同行寫。
當然平臺也有一些比好的設計,如平臺中的保留字、內建方法屬性是部區分大小寫的,定義變數時你可以寫:DIM,也可以寫:Dim,甚至可以寫:dIm都是可以的。還有就是平臺是中英文都支援的,所以這就對開發人員的要求降低了許多。
 
在平臺中如果需要自己寫程式碼的時候,定義變數是不許的,平臺裡定義變數的語法是採用的VB的形式,也就是用Dim關鍵字,不用專門指定變數的型別,如下圖:
 
在平臺中我們常用的邏輯判斷語句有4種,分別是:If判斷語句、For迴圈語句、For Each迴圈語句以及Do While迴圈語句。
 
  if判斷語句
作用:判斷條件表示式是否成立。
格式:
      If … Then
Else
End If
        示例:
 
  for迴圈語句
作用:迴圈判斷條件表示式是否成立,如果成立就迴圈執行相應程式碼。使用 Exit For關鍵字可以提前退出迴圈。
格式:
      For … To
Exit For
Next
示例:
說明:示例中的“&”符號是連線字串的作用,與“+”用法一樣,但是在平臺裡面用“&”符號就不需要把數字型別轉換成字元型別再連線。
 
  for each迴圈語句
作用:迴圈獲取一個集合裡的成員。使用 Exit For關鍵字可以提前退出迴圈。
格式:
      For Each … In …
      …
      Exit For
      Next
示例:
說明:上述示例的意思是迴圈網格部件1的DataTable裡的所有行,並且彈出顯示框顯示每一行的ID值。“row["ID"]”的意思就是獲取當前行某列的值,這是C#裡面的寫法。
 
  do while迴圈語句
作用:迴圈判斷條件表示式是否成立,如果成立就迴圈執行相應程式碼。使用 Exit Do關鍵字可以提前退出迴圈。與for迴圈語句類似。
格式:
      Do While …
Exit Do
Loop
示例:
        
 
內建函式就是平臺裡面封裝的各種方法和屬性,這些方法和屬性都是根據實際的使用而提煉出來的,所以使用起來非常方便,在我們的智慧嚮導裡面就能查詢得到所有的內建函式。平臺裡面的內建函式大概分為:窗體環境的內建函式和基礎環境的內建函式。窗體環境的內建函式又分為:窗體函式、工作流函式、智慧部件函式。基礎環境內建函式則又分為:基礎函式、客戶端函式。根據這樣的分類在下面列出了比較重要且常用的具體的函式。
 
-->窗體環境的內建函式
    -->窗體函式
       ●設定窗體變數值:Form.SetParam(引數1,引數2)
引數1:字串型別  自定義變數的名稱。
引數2:任意型別    自定義變數的值。
作用及說明:給其它窗體自定義一個變數並賦值,其中Form表示一個窗體物件(也就是前面的‘其它窗體’),如“建立窗體()”方法返回的值就是一個窗體物件。
示例:
 
●獲取窗體變數值:Me.GetParam(引數1)
引數1:字串型別  自定義變數的名稱。
返回值型別:根據獲取類容值的型別而定。
作用及說明:獲取當前窗體中某個變數的值,其中Me表示當前窗體(類似與C#裡的this)。一般該方法都是寫在子窗體中。
示例:
 
●設定部件只讀:Me.SetPartReadOnly(引數1, 引數2)
引數1:Contrl型別   部件的名稱,意思就是直接寫部件名稱就可以,不要加引號。
引數2:布林型別     true表示只讀,false表示非只讀。
作用及說明:設定本窗體中的部件或者控制元件是否只讀。
示例:
                 
 
●設定部件可見:Me.SetPartVisible(引數1, 引數2)
引數1:Contrl型別   部件的名稱,意思就是直接寫部件名稱就可以,不要加引號。
引數2:布林型別     true表示可見,false表示隱藏。
作用及說明:設定本窗體中的部件或者控制元件是否可見。
示例:
 
●設定分組可見:Me.SetGroupVisible(引數1, 引數2)
引數1:字串型別   分組的名稱。
引數2:布林型別     true表示可見,false表示隱藏。
作用及說明:設定本窗體中的分組(群組)是否可見。
示例:
 
●設定分組選中狀態:Me.SetGroupSelected(引數1)
引數1:字串型別   分組的名稱。
作用及說明:設定本窗體中選項卡模式的分組的焦點。
示例:
 
●設定功能可用:Me.SetFunctionEnabled(引數1, 引數2)
引數1:字串型別   功能的名稱。
引數2:布林型別     true表示可用,false表示不可用。
作用及說明:設定本窗體的功能按鈕是否可用。
示例:
 
●設定功能可見:Me.SetFunctionVisible(引數1, 引數2)
引數1:字串型別   功能的名稱。
引數2:布林型別     true表示可見,false表示隱藏。
作用及說明:設定本窗體的功能按鈕是否可見。
示例:
 
●設定功能顯示名稱:Me.SetFunctionCaption(引數1, 引數2)
引數1:字串型別   原功能的名稱。
引數2:字串型別   新名稱
作用及說明:重新設定本窗體的某個功能的顯示名,一般用於同一個功能按鈕有多種狀態的使用。
示例:
 
●新增右鍵選單:Me.AddContextMenu(引數1, 引數2)
引數1:Contrl型別   部件的名稱,意思就是直接寫部件名稱就可以,不要加引號。
引數2:字串型別    功能名稱,右鍵選單執行的程式碼是直接呼叫的功能按鈕的程式碼。
作用及說明:在某個部件上新增右鍵選單,當滑鼠右鍵點選這個部件時彈出的選單。
示例:
 
●獲取或設定窗體標題:Me.FormTitle
    返回值型別:字串型別
作用及說明:獲取或設定窗體的標題,這是一個屬性。
示例:Me.FormTitle="未命名窗體"
 
●關閉窗體:Me.Close()
作用及說明:關閉當前窗體。
         
   PS:更多的函式在平臺中智慧嚮導——窗體環境——智慧窗體裡檢視,並以此為準。
    -->工作流函式
●啟動流程:Me.StartFlow(引數1, 引數2)
引數1:字串型別   流程ID,也就是我們設計的流程圖的ID,一般情況是一個GUID。
引數2:任意型別     流程關鍵值,在流程流轉的過程中可以隨時呼叫這個關鍵值,更具這個值來查詢相關內容。
作用及說明:啟動一個流程,流程會根據引數1指定的流程圖流轉。
示例:
 
●下一步:Me.GoNextNode()
作用及說明:命令流程根據當前的流程圖(當前的流程圖就是當前窗體的Flow物件裡的流程圖)走向下一個節點。
示例:Me.GonextNode()
 
●設定流程變數:Flow.SetParam(引數1, 引數2)
引數1:字串型別   自定義變數的名稱。
引數2:任意型別     自定義變數的值。
作用及說明:向流程新增一個全域性變數,直到在該流程結束前都可以呼叫。
示例:
         PS:更多的函式在平臺中智慧嚮導——窗體環境——工作流裡檢視,並以此為準。
 
    -->智慧部件函式
智慧部件函式在平臺中智慧嚮導——窗體環境下會根據當時使用的部件自動顯示。
這裡需要注意一點的就是:如網格部件、記錄部件、樹形部件、日程部件、圖示部件、分組部件、文件顯示部件、文件編輯部件、報表展示部件、office部件這些部件都有一個共同的方法“RefreshData()”,很多人都不明白這個方法到底是什麼意思,到底什麼時候使用這個方法,這裡給大家解釋一下,該方法在文件裡面是這樣註釋的:“重新整理資料,從伺服器獲取資料。”,其實說直白一點這個方法就是執行繫結業務表的SQL語句的,執行後把得到的DataTable繫結到部件,這樣部件就有了欄位結構和資料,重新整理一次就重新繫結一次,那麼什麼時候呼叫這個方法我想大家應該有個概念了吧。只要需要繫結業務表的部件,肯定都有“RefrshData()”方法。
-->基礎環境的內建函式
    -->基礎函式
●轉換為字串:CStr(引數1)
引數1:任意型別。
返回值型別:字串型別。
作用及說明:把任意型別轉換為字串型別。
 
●轉換為整數:CInt(引數1)
引數1:任意型別。
返回值型別:整數型別。
作用及說明:把任意型別轉換為整數型別(int)。
 
●轉換為數字:CDbl(引數1)
引數1:任意型別。
返回值型別:數字型別。
作用及說明:把任意型別轉換為數字型別(Double)。
 
●轉換為長整型:CLng(引數1)
引數1:任意型別。
返回值型別:長整型型別。
作用及說明:把任意型別轉換為數字型別(long)。
 
●轉換為大寫字母:Ucase(引數1)
引數1:字串型別   需要轉換的字串。
返回值型別:字串型別。
作用及說明:把一串小寫字母轉換為大寫字母。
 
●轉換為人名幣大寫:ConvertRMB(引數1)
引數1:數字型別。
返回值型別:字串型別。
作用及說明:把一個數字轉換為人名幣大寫,如231→貳佰叄拾一。
 
●判斷空值:IsNull(引數1)
引數1:任意型別。
返回值型別:布林型別,True表示為空值,False表示部位空值。
作用及說明:判斷一個值是否為空值(null)。
 
●執行SQL查詢語句:ExecuteSelect(引數1)
引數1:字串型別    查詢的SQL語句。
返回值型別:DataTable型別。
作用及說明:從預設資料庫中執行一條查詢語句並返回一個DataTable物件,只能是“select”打頭查詢語句。(有過載函式,詳情參看平臺中的智慧嚮導)
 
●執行SQL語句:ExecuteNonQuery(引數1)
引數1:字串型別    一條SQL語句。
返回值型別:int型別  受有影響的條數(有多少條記錄被改變)。
作用及說明:在預設資料庫中執行一條SQL語句並返回一個受影響條數,可以是“delete”“update”“insert into”打頭的語句。(有過載函式,詳情參看平臺中的智慧嚮導)
 
●彈出提示訊息:ShowInformation(引數1)
引數1:字串型別    訊息類容。
作用及說明:彈出只有確定按鈕的訊息提示框。(有過載函式,詳情參看平臺中的智慧嚮導)。
 
●開啟檔案:OpenFile(引數1)
引數1:字串型別    檔案完整路徑。
作用及說明:使用Windows預設程式開啟指定路徑的檔案。
 
PS:更多的函式在平臺中智慧嚮導——基礎環境——基礎函式裡檢視,並以此為準。
    -->客戶端函式
●獲取登入使用者名稱:登入使用者名稱 ()
返回值型別:字串型別    當前登入系統的使用者姓名。
作用及說明:獲取當前登入系統的使用者姓名。
 
●獲取登入使用者ID:登入使用者ID ()
返回值型別:整數型別    當前登入系統的使用者ID。
作用及說明:獲取當前登入系統的使用者ID,每一個使用者ID都是不同的。
 
●獲取登入使用者部門名稱:登入使用者部門名稱 ()
返回值型別:字串型別    當前登入系統的使用者所在部門的名稱。
作用及說明:獲取當前登入系統的使用者所在部門的名稱。
 
●獲取登入使用者部門ID:登入使用者部門ID ()
返回值型別:整數型別    當前登入系統的使用者所在部門的ID。
作用及說明:獲取當前登入系統的使用者所在部門的ID。
 
●獲取登入使用者部門ID串:登入使用者部門串 ()
返回值型別:字元型別    當前登入系統的使用者所在的部門ID和所有上級部門ID組成的字串,以逗號分割。
作用及說明:獲取當前登入系統的使用者所在的部門ID和所有上級部門ID組成的字串,以逗號分割,如:“1000,1802,1893”。
 
●獲取登入使用者角色名稱:登入使用者角色名稱 ()
返回值型別:字串型別    當前登入系統的使用者所在的角色名稱(崗位名稱)。
作用及說明:獲取當前登入系統的使用者所在的角色名稱(崗位名稱)。
 
●獲取登入使用者角色型別:登入使用者角色型別 ()
返回值型別:字串型別    當前登入系統的使用者所在的角色的型別,0表示普通型別(普通崗位),1標識領導型別(領導崗位)。
作用及說明:獲取當前登入系統的使用者所在的角色的型別。
 
●獲取登入使用者角色ID:登入使用者角色ID ()
返回值型別:整數型別    當前登入系統的使用者所在的角色ID(崗位ID),每一個使用者的角色ID都是不同的。
作用及說明:獲取當前登入系統的使用者所在的角色ID(崗位ID)。
 
 
●獲取組織機構名稱:獲取機構名稱 ()
返回值型別:字串型別    當前登入系統的使用者所屬機構的名稱。
作用及說明:獲取當前登入系統的使用者所屬機構的名稱,也就是在組織機構樹裡面最上層的名稱。
PS:基礎環境裡面的函式在編寫程式碼的時候是可以直接調出來的,在英文狀態下輸入”.”可以彈出智慧提示,如下圖:
但是需要注意的是,目前這個提示智慧用鍵盤的方向鍵和回車進行選擇,不能滑鼠點選選擇。
 
第四節DataTable常用方法屬性
這裡為什麼把DataTable要提出來呢?因為在平臺裡面對DataTable的操作是比較多的,網格部件、樹形部件、記錄部件這3大部件是開發中使用最平凡的幾個部件,然而這幾個部件是與DataTable直接繫結的,(第一章的第三節的業務表裡也提到了這個)對DataTable的操作就可以對介面上的資料直接操作。DataTable的用法是和C#完全一樣的,大家可以查詢相關資料,在下面我列出了DataTable在平臺中的一些常用方法屬性(大家要注意的是對DataTable的操作是需要區分大小寫的):
網格部件、樹形部件、記錄部件都有一個共同的屬性:DataTable,下面這個例子是分別獲取這3個部件的DataTable:
複製DataTable到一個新的DataTable(包括表結構和資料)
 
  
PS:當我們在複製DataTable的行(DataRow)時經常會遇到這樣的提示:“該DataRow已屬於另一個DataTable”或者“該行已屬於另一個表”這樣的提示,那麼使用上面的方法需要用ItemArray屬性才行。
 
 
第三章    表單工作流程構建
本章節以“臨時物資採購申請”為例子來講解在平臺中構建表單工作流程的過程,以及構建時的一些技巧與注意事項等。
首先給大家介紹一下表單工作流的概念、用途、實現原理、構建思路。
概念:所謂表單工作流程,字面意思理解就是有一個表按指定的流程流轉。一般情況是一系列申請的制式表單,比如請假申請單、物資採購申請單、費用報銷單等等,這些表單的格式都是固定的,不會根據每次申請時的情況不同而對格式進行修改的單據。
用途:一般用於格式固定不變並且具有流程性(多個人按照規則參與到同一個表單,就可以說這個表單具有流程性)的表單,而且此類表單大多數的內容都是不超過一頁A4紙。
實現原理:一個模版和一張資料表的某條資料按照一個流程圖流轉。
構建思路:建立表單模版→建立資料表→構建流程圖。
建立表單模版我們可以使用WORD或WPS來建立,最後再複製到流程中的模版設計中(在本章第四節處)。如下圖所示是WORD建立的一個模版:
上圖中方括號“[]”括起來的這種寫法是建立模版的格式要求,其實這些方括號括起來的內容就是流程中繫結的資料表中的欄位名。也就是說,最後平臺會把這個模版中方括號括起來的內容與資料表中的欄位進行匹配,再把匹配相同的欄位的資料顯示在模版中的對應位置。
PS:對於表單模版的設計經驗大家可以參看《度量科技快速開發平臺(表單模版)》,下載地址:http://wenku.baidu.com/view/60aad789da38376bae1fae0a.html
第一步是建立一個新表,但是在建立的時候一定要注意如下圖所示:
建立新表後在預設資料表列表中選中新建的這張表並切換到欄位設定,然後會看到如下圖所示的介面:
上圖顯示的這些欄位是系統預設的欄位,不要修改也不要刪除它,但是這些欄位是可以使用的。
 
第二步建立表欄位,如下圖所示:
建立欄位時需要注意一個問題:如果是簽名欄位的時候,我們需要把這個欄位的屬性設定多行顯         示,並把長度修改為4000,下圖是科主任簽字欄位的屬性截圖:
設定為多行文字的目的是為了在後面流程圖設計的時候,選擇簽名存放的欄位時有這兩個欄位供         我們選擇(必須是多行文字),設定長度為4000是為了有足夠的長度來儲存簽名的內容以及圖片。
PS:如需檢視型別與編輯型別以及各型別下的相關屬性,請檢視詳細說明:《度量快速開發平臺—       —型別與編輯型別詳解》
第一步建立流程,建立時請選擇“建立基於表單的工作流”如下圖所示
點選上圖中的“下一步”按鈕彈出如下圖所的介面:
在圖顯示的介面填寫流程名稱(自定義填寫)、選擇使用表(流程儲存資料使用的資料表),選擇關鍵資訊欄位(儘量選擇區別每次申請的關鍵欄位),選擇其他描述欄位(儘量選擇區別每次申請的相關資訊)後點選節點模版後面的編輯按鈕,彈出如下圖所示介面:
把WORD中建好的模版複製過來,上圖中我已經把模版複製了進來,最後點選上圖介面上的確定按鈕就創         建好了一個流程。
 
第二步設計流程圖,在工作流管理裡面找到剛剛我們新建的流程“臨時物資採購申請”,然後選擇選單欄裡面的“流程設計”就彈出了下圖所示流程圖設計的介面:
上圖中經過我的托拉拽已經把流程圖設計好了,箭頭表示的是各個節點的使用情況,右邊是         節點的屬性列表,在屬性列表中我們常用的屬性是標題、顯示控制、任務主題、執行人員以     及審批引數。
審批引數屬性是審批節點獨有的屬性,單擊審批引數屬性彈出如下圖所示的介面:
單擊顯示控制屬性彈出如下圖所示的介面:
PS:一般簽名欄位都是選擇可見,不能選擇編輯,因為簽名欄位的資訊不是在表單上直接錄          入的,而是在稽核簽字的時候彈出的一個子窗體裡填寫已經和簽名然後追加到這個欄位中保     存,所以部需要選擇編輯,也不選擇不可見。
 
第三步執行檢視效果,如下圖所示:
在上圖所示介面填寫相關資訊後就可以點選下一步交給下一個人處理了。
 
本章節以構建“人員基本資訊管理”為例子來講解在平臺中構建智慧窗體的過程,以及構建時的一些技巧與注意事項等。
第一節    構建思路
首先給大家介紹一下智慧窗體的概念、用途、構建思路。
概念:智慧窗體,智慧表現在程式碼少,操作方便,智慧識別,智慧提示等方面,所以稱之為智慧窗體,然後智慧窗體裡面具有這些特點的控制元件又被稱之為智慧部件。
用途:窗體的開發應用很廣泛,這個就不用多說了,在平臺中還可以利用窗體構建高階工作流,將會在第五章講解。
構建思路:建立資料表→建立業務表→建立窗體→新增程式碼
第二節    建立資料表
建立一個物理資料表用於儲存人員資訊。
 
第一步建立一個新表,但是在建立的時候注意不用勾選任何選項,如下圖:
在上圖中可以對主鍵名稱和主鍵型別進行自定義修改,但是“建立為系統流程表單”這個選項就不要勾選了。
 
第二步建立欄位,在預設資料庫列表中選擇第一步建立的“人員基本資訊管理”,然後切換到欄位設定,如下圖所示(下圖中已經把欄位設定完成):
對上圖中的性別欄位和愛好特長欄位進行屬性設定,如下圖:
       
對性別欄位屬性設定時,開啟選項設定後彈出如下圖所示的介面:
選中上圖中新增的性別欄位並確定就完成了性別欄位的單項選擇設定。
 
我們需要建立2張業務表,一張是隻讀業務表,用於讀取所有人員資訊。另一張是讀寫業務表,用於新增一條人員資訊並儲存,或者讀取一條人員資訊進行修改並儲存。
 
首先新增只讀業務表,如下圖所示:
新增完成後在相應的目錄下找到該業務表然後單擊選單欄中的內容構建(開始構建SQL語句),如下圖所示:
在上圖中首選選擇預設資料庫,然後篩選找到“人員基本資訊管理”這個表,再選擇所有欄位,最後儲存。
 
再新增讀寫業務表,如下圖所示:
新增完成後在相應的目錄下找到該業務表然後單擊選單欄中的內容構建(開始構建SQL語句),如下圖所示:
上圖中選擇好資料庫、資料表和表的欄位後,切換到條件設定,為該業務表新增一個業務表變數(也就是為SQL語句新增一個條件變數),如下圖所示:
上圖中的“ID=[:變數ID]”的意思是:左邊是欄位中的ID,右邊是自定義的一個變數名稱。新增完成後單擊上圖中的儲存按鈕會彈出如下窗體:
PS:只讀業務表和讀寫業務表都是可以新增業務表變數的,並且只讀業務表可以自定義編輯SQL語句,而讀寫業務表是不能自定義編輯SQL語句的,只能在SQL構造器中勾選欄位。
 
我們需要建立2個窗體,一個是顯示所有人員資訊列表的主窗體(人員基本資訊管理窗體),從這個窗體上可以開啟另一個子窗體(人員基本資訊編輯窗體)進行新增或者修改。
 
建立子窗體:人員基本資訊編輯
 
第一步建立新窗體,修改窗體標題為“人員基本資訊編輯”,並拖入一個記錄部件到窗體中,如下圖:
 
第二步為記錄部件繫結一個業務表,單擊上圖中左上角的進入設計,然後選擇記錄部件在右邊會出記錄部件的屬性,如下圖所示:
在上圖中可以看到記錄部件有一個業務表的屬性,這個屬性就是選擇我們需要繫結的業務表,也就是第三節中我們建立的讀寫業務表,選擇後我們可以看到記錄部件的變化如下圖所示:
注意:這裡完成後一定要記得單擊儲存設計哦,要不然下一步新增程式碼就不能繼續。
PS:對記錄部件的欄位佈局可以檢視官方的視訊:《記錄部件欄位佈局》、《記錄部件分組部件》、《記錄部件選項卡布局》
 
第三步在“事件管理”裡面新增程式碼,在窗體設計器的上方有一個“事件管理”的按鈕,如下圖所示:
上圖中載入事件中的程式碼的意思是:判斷主窗體是操作的是新增,還是修改,然後在子窗體中進行相應程式碼的執行。
對與上面的程式碼:me.Input1、me.Input2、記錄部件1.AddNewRow()、記錄部件1.SetVaribleValue()、
記錄部件1.RereshData()在智慧嚮導中都有相應的說明與示例,並都可以通過智慧嚮導生成。
PS:部件重新整理方法的使用在第二章第三節的智慧部件函式裡有單獨介紹。
 
 
第四步在“功能管理”裡面新增程式碼,在窗體設計器的上方有一個“功能管理”的按鈕,如下圖所示:
 
建立主窗體:人員基本資訊管理窗體
 
第一步建立新窗體,修改窗體標題為“人員基本資訊管理”,並拖入一個網格部件到窗體中,如下圖:
 
第二步為網格部件繫結一個業務表,單擊上圖中左上角的進入設計,然後選擇網格部件在右邊會出現網格部件的屬性,如下圖所示:
在上圖中可以看到網格部件有一個業務表的屬性,這個屬性就是選擇我們需要繫結的業務表,也就是第三節中我們建立的只讀業務表,選擇和我們可以看到網格部件的變化如下圖所示:
注意:這裡完成後一定要記得單擊儲存設計哦,要不然下一步新增程式碼就不能繼續。
PS:對網格部件的佈局可以檢視官方的視訊:《網格部件欄位佈局》
 
第三步在“事件管理”裡面新增程式碼,在窗體設計器的上方有一個“事件管理”的按鈕,如下圖所示:
PS:部件重新整理方法的使用在第二章第三節的智慧部件函式裡有單獨介紹。
 
第四步在“功能管理”裡面新增“新增”、“修改”、“刪除”這兩個功能,如下圖一(新增功能)圖二(修改功能)圖三(重新整理功能)所示:
(圖一)
(圖二)
(圖三)
 
第五步,執行檢視效果,如下圖所示為修改人員資訊時的介面:
 
 
高階工作流,其實是結合窗體與流程的一種構建型別。簡單的說就是把窗體按照一定的流程流轉,在平臺中就稱之為高階工作流。
下面給大家介紹一下高階工作流的概念、用途、構建思路。
概念:所謂高階工作流,就是比普通的表單工作流程功能更強大,一般表單工作流是使用一個固定的模版來運算元據,而高階工作流是使用的窗體來運算元據,使用窗體來運算元據就更加的靈活了。
用途:一般用於申請內容不是固定不變的 ,例如物資採購申請,每次申請的物資個數都部一樣,那麼就需要使用高階工作流程來完成。
構建思路:建立資料表→建立業務表→建立窗體→建立流程圖
由於高階工作流程的構建步驟相對不太好描述,所以具體的構建操作請參看構建視訊:《高階工作開發》
 
 
報表一般用於資料的顯示,用於彙總統計方面的查詢,常用報表一般分為:網格報表、多列報表、套打報表、分組報表等。
網格報表,是最簡單的一種報表,就是把資料以網格的形式顯示出來,如下圖:
 
多列報表,多列報表常用與卡片型別的資料顯示,如下圖所示:
 
套打報表,就是把內容列印到固定格式紙張上的相應位置,如下圖所示(背景是一張格式圖片):
 
分組報表,主要是對資料進行一個分組的展示,如下圖所示:
使用報表展現資料可以直觀明確的對資料進行檢視統計,然而在平臺中構建這些報表是一件非常簡單的事情。
首先說一下構建的思路:構建業務表(查詢出相關資料)→構建報表→在窗體中用報表展現部件顯示報表。
構建業務表,構建業務表這個和構建智慧窗體時一樣,但是報表都是隻讀業務表,因為報表只用於資料的查詢,不會寫入資料。
構建報表,在平臺中有一個專門的報表設計器,在這個視覺化的介面裡面可以輕鬆的構建出想要的報表,如下圖所示:
點選上圖中的“設計報表”會彈出如下圖所示的設計報表的介面:
 
顯示報表,顯示報表需要在智慧窗體中使用報表展現部件來顯示,如下圖所示:
在報表展現部件中繫結一個事先構建好的報表,那麼就可以顯示資料並展示給使用者。
 
PS:報表具體構建的步驟請參看《報表構建》系列視訊。
在平臺中釋出一個構建好的應該我們只需要3個步驟:選單定義→角色管理→授權管理。
選單定義,就是把我們構建好的應用配置一個選單,使用者可以點選這個選單進入到這個應用。
角色管理,把同一個角色需要使用到的選單分配到一起,相當於把選單分組。當然這裡也可以對我們構建的窗體的某些功能進行分配。
授權管理,就是把角色管理裡面新增的這些角色分配到相應的人員使用。
PS:這就是我們第一章第二節裡面講到的選單許可權的控制。
在平臺中定義一個選單有四種模式:程式集、智慧窗體、表單流程、網頁。
程式集:通俗一點將就是可以配置一個選單出來呼叫我們外部的程式,包括.exe程式,或者DLL(動態庫)檔案,這個目的就是為了滿足我們平臺開發不出來的功能時藉助外部工具開發後在放到我們平臺中。這也是我們第一章第二節中將擴充套件開發時候說到的。
例子:
上面這個例子就是配置了一個開啟外部程式“檔案庫”的選單。
 
智慧窗體,也就是在在平臺中開發出來的智慧窗體,也就是第四章——智慧窗體構建講到的,可以把某個窗體作為這個應用的主介面配置出來使用。
如下圖這個例子:
上面這個例子就是配置一個“知識庫”的智慧窗體選單。
 
表單流程,也就是我們在平臺中開發出來的表單流程,也就是第三章表單工作流程構建講到的,可以把構建出來的表單流程配置到選單中,但是表單流程有2個型別可以選擇,第一個是“申請流程”型別,這個型別的選單是每個人點開之後只能看到自己申請過的記錄,配置如下圖:
第2個是“歸檔查詢”型別,這個型別的選單是能看到所有人申請的記錄,並且有刪除許可權,配置如下圖:
 
 
網頁,網頁型別的選單就是直接輸入一個網頁連線,那麼這個選單就可以直接開啟這個網頁,配置如下圖:
 
角色管理,可以理解成把選單按不同的角色型別進行分組,比如:科主任選單、管理員選單、預設選單等等,並且在角色裡可以分配某個窗體的某個功能是否可以使用。這樣的分配選單授權方式就完全能滿足我們的許可權分配了,如下圖是“預設選單組”角色的選單定義:
授權管理,就是把配置好的角色分配給某個些部門、崗位、或者人員,如下圖是把院長崗位授予設計人員角色的許可權:
 
在平臺中構建的智慧窗體、表單流程、報表、資料表這些東西都是可以匯入匯出的,並且有多種方式可以選擇匯入匯出。
對智慧窗體和表單工作流程的匯入匯出我們可以使用開發工具裡面的匯入匯出應用包這個功能,這個相當於批量匯入匯出窗體和流程相關資訊,如下圖:
在上圖中單擊下一步根據提示一步一步操作下去就可以把相應的窗體(業務表)、表單工作流,以及資料表結構一起匯出到一個應用包,匯入的時候也是相同的操作步驟的。
對於智慧窗體、表單流程、資料表、報表也可以單獨的匯入匯出:
智慧窗體,在智慧窗體選單中就有匯入匯出按鈕,如下圖:
這裡匯入匯出也會把窗體相應的業務表一起匯入匯出,但是資料表結構需要單獨匯入匯出。
 
表單工作流,工作流管理選單中也有匯入匯出按鈕,如下圖:
用這裡的功能匯入匯出,那麼我們還需要單獨匯入匯出資料表結構。
 
資料表,資料表結構在資料庫維護選單中也可以單獨匯入匯出,如下圖是匯出表結構:
那麼匯入表結構需要選擇資料庫單擊右鍵,如下圖:
 
報表,報表的匯入匯出就在報表設計器裡面,如下圖:
這裡匯入匯出會把相關的業務表一起匯入匯出,但是所使用到的資料表結構需要單獨匯入匯出。
 
主窗體指的是平臺的主窗體,不是我們構建應用時候的窗體。那麼主窗體事件就是官方提供的當主窗體在某些情況下會觸發的一些事件。官方目前提供了:主窗體載入事件、主窗體關閉事件、崗位切換事件、一級選單切換事件。
主窗體事件管理的選單在開發工具下面就能看到,如下圖:
在這些事件中我們可以根據具實際情況做點什麼,比如:想在客戶端登入的時做一些判斷,然後彈出一些提示,那麼我們就可以在主窗體載入事件中編寫這些程式碼。其他幾個事件以此類推,這些事件的用處是非常多的。
 
 
公共函式意思就完全公開的函式,在平臺的任意一個角落都可以呼叫,智慧窗體構建時、表單流程的擴充套件程式碼中、主頁外掛配置時、以及主窗體事件中都是可以呼叫的,但是目前不能呼叫這些公共函式的只有一個地方,那就是在報表設計器裡面設計報表的時候不能呼叫。
公告函式的選單在開發工具下面就能看到,如下圖:
上圖展示的公告函式是把接收到的身份證號計算出年齡,並把計算出來的年齡傳回去。
 
在智慧窗體、表單流程中的呼叫方式:call(“方法名”)。如果是需要傳入引數就用call(“方法名”,引數1,引數2,……),在公共函式中接收引數就用this.Input1、this.Input2……對應接收引數1,引數2。如下圖所示是呼叫時候的程式碼:
 
 
主頁,一般來說是我們登入平臺的第一個頁面,通常叫“我的桌面”或“系統首頁”,也就是顯示待辦流程、通知公告、新聞通知的頁面,如下圖所示:
與上圖類似的主頁不只是只有登陸首頁這麼一個,我們可以更具實際情況配置更多的主頁。
 
主頁配置管理,在這個選單裡就可以進行主頁的配置,如下圖所示是配置一個人事主頁:
在上圖中勾選的這些元件就是我們本章第二節將要講到的主頁外掛。
 
配置主頁到選單,在上圖中新增一個主頁後並選擇主頁將要使用到的某些外掛後,我們就可以把該主頁配置呈選單但釋出出來,在選單定義中如下圖所示配置:
上圖中的“傳入引數為主頁ID”指的是在新增主頁的時候自己定義或者系統自動生成的主頁ID。
 
 
主頁外掛,也就是每個主頁上面顯示的模組,主頁外掛分為:系統外掛、表格外掛、HTML嵌入式網頁外掛、HTML擴充套件外掛。
系統外掛是無法修改的,而且在主頁外掛管理裡面也看不到的,如待辦流程、圖片新聞、萬年日曆等。
表格外掛是使用最多的一種外掛型別,目前系統上看到的都是使用的表格外掛型別。如下圖所示是檔案中心的外掛截圖:
在表格外掛裡面需要設定表格標題、資料行的字串、SQL語句。
在資料行字串這一欄裡面可以看到用花括號“{}”括起來的數字,如下圖所示:
這些內容代表的是SQL語句查詢出來的列的下標。
再如下圖所示的”javacript:CallFunction4”表示的是呼叫公共函式(第八章第二節裡面有提到):
CallFunction4表示給指定的方法傳入4個引數,CallFuntion3表示傳入3個引數,以此類推。
 
第十章    平臺擴充套件性介紹
第一節 資料整合
資料整合,意思就是我們可以對多個資料庫的資料進行操作,目前支援比較流行的兩大資料庫:Oracle資料庫和SqlServer資料庫。
如下圖所示,在平臺的資料庫維護中配置一個連線到其他oracle資料庫的連線:
當然還有一個重要的問題,在連線大家都知道Oracle資料庫是分中英文字符集的,那麼通過平臺連線查詢英文字符集的資料庫時怎麼辦呢?其實這個大家可以放心,度量科技已經解決了這個問題,而且這個方式已經在各大專案場上實踐過了,效果非常好。簡單的說就是通過平臺連線到另一個伺服器進行轉換,當然這個伺服器完全就可以用一個虛擬機器,一點都不佔用資源。
 
如下圖所示,是在平臺的資料庫維護中配置一個連線到其他SqlServer資料庫的連線:
 
第二節 外部程式介面
在平臺中是可以呼叫外部程式的,這個在第一章第二節擴充套件開發簡介中有說到。只是外部程式只能是.NET開發的程式。
第一種呼叫方式,定義選單呼叫平臺目錄下的其他應用程式,如下圖所示:
呼叫.EXE的程式也是一樣的,只需要把程式集的名稱的字尾修改為.EXE就行了。
 
第二種呼叫方式,例項化一個外部程式的類,如下截圖:
在智慧嚮導→公共函式→載入外部程式集,可以檢視LoadAssembly方法的使用,使用該方法就可以呼叫自己用.NET寫的方法、屬性、窗體等。
 
第三節 簡訊貓介紹
在平臺中也有簡訊貓的功能,也就是可以通過平臺直接給手機傳送簡訊,也有定時傳送的功能,平時我們可以定時查詢統計一些資料然後傳送到相應的手機上。
在系統維護下面有一個系統任務的選單,如下截圖:
當然執行這些任務在平臺發伺服器上是需要啟動簡訊貓後臺服務程式的,簡訊貓後臺服務程式如下截圖:
 
當然還得有一個簡訊貓的裝置才行哦。

相關文章