日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

技术分享 | 业务模板的技术实践

發布時間:2023/12/4 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 技术分享 | 业务模板的技术实践 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

源寶導讀:“業務模板”作為天際·建模平臺3.0推出的重要特性,它將元數據復用發揮到了極致,通過業務模板幾乎可以覆蓋整個建模元數據開發流程,提供業務場景級別的復用能力。本文將介紹“業務模板”的設計原理、實現方案和應用場景。

一、背景

? ? 建模平臺作為天際開放平臺的核心能力域之一,是一個極致高效的低代碼開發平臺,支持通過數據建模、頁面建模、組件建模等可視化建模方式低代碼或零代碼快速構建企業級應用。

? ? 使用建模平臺開發應用的過程一般是:數據建模=》頁面建模=》多個頁面組合成業務場景。數據模型可以被多個頁面復用,組件模型也可以被多個頁面復用,通過建模平臺可以快速構建出相應的場景。

? ? 例如:開發一個簡單的用戶管理系統,管理用戶名稱和用戶編碼信息。

? ? 首先進行數據建模:我們可以設計一個用戶表,包含用戶名稱和用戶編碼兩個字段。然后進行頁面建模:創建一個用戶表單頁面,使用用戶表作為數據源,表單使用輸入框組件綁定用戶名稱和用戶編碼,設置相應的輸入格式和校驗規則,就可以實現用戶名稱和用戶編碼的錄入功能了;再創建一個用戶列表頁面,使用用戶表作為數據源,使用用戶名稱和用戶編碼字段作為列表展示字段,就可以批量展示和管理用戶數據了。

? ? 完成這么一個簡單的用戶表單錄入+列表展示數據場景,使用建模平臺只需要花費幾分鐘就能完成。

? ? 如果現在需要再開發一個客戶管理系統,管理客戶名稱和客戶編碼信息。正常的做法就按照上面的建模流程就行數據建模(客戶表)=》頁面建模(客戶表單、客戶列表)=》客戶管理系統。

? ? 分析用戶管理系統和客戶管理系統我們會發現這兩個業務場景極其類似,都是針對名稱和編碼(唯一標識)的管理,但是都要進行數據建模(數據隔離,表名不同,字段名一致),頁面建模(結構一致,只是展示的文本描述不同)。雖然重復完成這個場景只需要幾分鐘,但是如果每個客戶都有類似的場景,那么都需要花費幾分鐘;如果場景再復雜一點,涉及到多個數據源,多個頁面呢,每個頁面又用到復雜的組件或者功能特性,那么完成一個類似的場景需要花費多少時間呢?

二、什么是業務模板

? ? 通過分析以上的場景我們發現,目前建模平臺提供的主要是基于組件級和頁面級的復用能力,針對業務場景復用能力比較薄弱。而實際產品場景中確實存在這種業務功能極其類似的場景,比如成本系統的變更業務場景,設計變更和現場簽證兩個具體的變更過業務十分相似,如果重復開發的話需要耗費大量的開發資源。

? ? 為了解決這種業務場景級別的復用能力,在ERP3.0版本中,建模平臺提供了業務模板功能?;跇I務領域抽象的模型,提煉出一套業務模板,通過模板化的思路快速復制的方式構建有規律、符合模型的業務。

? ? 目前建模中業務模板覆蓋了大部分建模能力,從數據建模到頁面建模、業務組件、業務參數以及主頁、標簽頁和權限,以支持創建一個業務場景閉環。

三、業務模板的原理

3.1、什么是元數據

元數據的定義:

元數據(Metadata),又稱中介數據、中繼數據,為描述數據的數據(data about data),主要是描述數據屬性(property)的信息,用來支持如指示存儲位置、歷史數據、資源查找、文件記錄等功能。

? ? 元數據在建模平臺中的作用是描述建模中所有特性的數據,是整個建模平臺的基石,建模平臺中的一切模型都是以元數據作為數據載體,建模中的元數據物理表現形式為一個個XML文件。

? ? 例如頁面模型元數據,每個頁面對應的就是一個XML文件。

? ? 頁面元數據:

<?xml version="1.0" encoding="utf-8"?> <functionPage title="合同變更基本信息表單" pageName="合同變更基本信息表單"><pageLayout pageLayoutCategory="OneColumn"><cells><cell rowIndex="0" width="100%" height="100%"><control id="appForm" entityName="主實體" autoHeight="1" /></cell></cells></pageLayout> </functionPage>

? ? 根據不同的模型對應不同的元數據類型,分別存儲在不同的文件夾下,各個元數據之間存在在互相引用的關系。比如頁面引用數據表,主頁引用頁面等。

3.2、什么是頁面模板

? ? 建模通過可視化的方式創建建模模型,創建頁面時,可以選擇不同的頁面模板,其中包含組合模板,單頁模板等。

? ??選擇一個列表+表單的組合模板,選擇數據源后點擊開始創建,創建成功以后我們會發現,在列表的設計器中,新增按鈕默認會打開創建的表單頁面:

? ??頁面元數據是如何生成的?兩個頁面之間是如何關聯起來的呢?

? ? 首先看下元數據在整個應用中的存在形式如下:

? ? 元數據在不同的場景對應不同的模型,在建模中對應建模模型,在程序內存中對應元數據模型,在文件中對應XML文件,在ERP中對應一個個真實的頁面、數據表等,同時不同階段的模型可以互相轉換。

? ? 建模中生成元數據的方式有兩種:

  • 根據建模模型,先生成內存元數據模型,然后序列化到文件中;

  • 根據建模模型對應的文件模板,反序列化生成內存元數據模型,然后再序列化到文件中;

? ? 第一種生成方式適合元數據結構比較簡單的場景,比如數據表,視圖,業務參數等。第二種方式適合結構復雜,存在默認節點或者默認值的場景,比如頁面,表單,列表和數列表等。

? ? 頁面組合模板就是用的文件模板方式,將通用的文件結構提煉出來,生成模板,需要動態生成的數據使用關鍵字做占位符,在生成內存元數據模型前,將文件中的關鍵字根據上下文替換成對應的值。

頁面模板:

<functionPage templateId="2C63E14E-FF7E-4E0B-AE15-FEFB8DA34213"><pageLayout pageLayoutCategory="OneColumn"><cells><cell rowIndex="0" width="100%" height="100%"><control id="[prop:setting.Customize]appGrid" entityName="主實體" autoHeight="1"/></cell></cells></pageLayout> </functionPage>

? ? 其中[prop:xxx]就表示關鍵字,在生成元數據模型時會進行替換。例如:parentPage=“[prop:page0.Name] ”表示表單頁面的父級頁面即返回上級頁面為第一個頁面也就是列表頁面的地址,所以通過點擊列表新增按鈕進入表單頁面后,點擊上一級就能返回到列表頁面了。

3.3、業務模板的原理

? ? 頁面模板解決的是快速創建頁面的問題,業務模板要解決的問題是快速創建一類業務場景的問題。在技術實現上,業務模板也采用文件模板的方式,根據一個完整的業務場景所包含的所有的元數據文件,提煉出一套通用的元數據文件模板,根據這套文件模板可以快速生成不同的業務場景元數據。

? ? 模板文件中包含靜態和動態兩類結構。靜態指通用的結構,動態指根據不同的場景顯示不同數據的結構。例如在一個頁面模板中,頁面都包含頁面布局,那么頁面布局就是一個靜態結構;在不同的場景頁面名稱需要根據對應的場景顯示,比如在用戶管理界面,顯示為用戶頁面,在客戶管理界面,顯示為客戶頁面,那么頁面名稱就是動態數據。

? ? 那么如何生成動態數據呢?

? ? 答案就是關鍵字,使用關鍵字作為動態數據占位符,然后根據模板上下文動態替換關鍵字。

下面以成本的變更申報表單頁面模板為例:

<functionPage functionPageId="{{$system.NewId}}"?name="{{$system.NewId}}" title="{{$global.name}}變更申報表單頁面" pageName="{{$global.name}}變更申報表單頁面"? url="/std/02010350/{{$page.ReceiptsDeclare.name}}" description="{{$global.name}}變更申報表表單"?><pageLayout pageLayoutCategory="OneColumn" layoutType="0"><cells>????????????<cell id="45a3adeb-009f-ea11-86e2-94c6910421d9"><controlid="appForm"type="Mysoft.Map6.Modeling.Controls.AppForm"metadataId="{{$form.ReceiptsDeclareForm.formId}}"entityName="主實體"/></cell></cells> </functionPage>

其中{{xxx}}就是關鍵字,根據不同的使用場景關鍵字可以分為以下幾類:

1、系統關鍵字

? ? 系統關鍵字為系統內置關鍵字,目前只有$system.NewId,作用是生成新的Guid。例如每個頁面的元數據id應該唯一,因此模板中functionPageId="{{$system.NewId}}"。

2、全局關鍵字

? ? 由用戶生成模板實例時輸入的業務標識和業務名稱、以及當前環境上下文生成。例如頁面名稱應該跟業務場景有關,因此模板中pageName="{{$global.name}}變更申報表單頁面"。

關鍵字

說明

$global.id業務的唯一標識
$global.name業務名稱
... ...... ...

3、配置關鍵字

? ? 根據模板配置生成配置界面,由用戶選擇的配置項生成。

關鍵字

說明

$config.[字段]創建實例時選擇的配置值
$config.[字段].field配置對應的字段
... ...... ...

4、模板內容關鍵字

? ? 元數據之間存在著各種聯系,比如數據關系記錄的是兩個數據表之間的關系,標準圖形化數據源頁面引用了數據表作為數據源。因此模板文件不僅包含關鍵字,同時模板文件也作為關鍵字的提供者,提供關鍵字供其他模板引用。

類型

關鍵字

實體關鍵字$entity.[模板英文名稱].[屬性名稱]
關系關鍵字$realtion.[模板英文名稱].[RelationshipId]
... ...... ...

? ? 在變更申報表單的業務模板中,由于引用了變更申報表單大控件,同時變更申報表單也是使用模板生成的,所以頁面跟表單是引用的關系metadataId="{{$form.ReceiptsDeclareForm.formId}}" 。

3.4、什么是模板實例

? ? 定義了業務模板以后就可以根據不同的業務場景動態替換模板文件中的關鍵字,從而生成一組有業務關聯的元數據文件,我們將由同一個業務模板生成的不同業務場景的元數據稱為業務模板的一個實例,業務模板實例元數據是描述這個實例的數據。

生成模板實例的流程如下:

四、如何開發業務模板

4.1、提煉業務模板內容

? ? 根據已經存在的元數據文件提煉通用的業務模板,分清楚哪些是靜態結構,哪些是動態結構,模板和模板之間是如何互相引用的。

? ? 以下以開發一個客戶表為例說明如何創建客戶表模板:

? ? 1、首先在建模中創建一個客戶表(test_Customer),增加客戶名稱(Name)和客戶編碼(Code)兩個字段,對應的元數據:

客戶表”元數據:

<?xml version="1.0" encoding="utf-8"?> <MetadataEntity EntityId="91c51e44-0bf2-4ef6-43bc-08d94ab36d6f" Name="test_Customer" DisplayName="客戶表"><Attributes><MetadataAttribute><AttributeId>4cabeff5-0515-4920-6d86-08d94ab36d6f</AttributeId><Name>Code</Name><DbType>nvarchar</DbType><Length>128</Length></MetadataAttribute></Attributes> </MetadataEntity>

? ? 2、分析元數據中的靜態數據和動態數據,例如元數據的id和表名name要唯一,字段的id要唯一,因此這些不能重復的值就作為動態數據局,要使用關鍵字替換;不同數據表的字段的名稱可以一樣,因此數據字段名稱可以作為靜態數據。

? ? 3、使用關鍵字替換動態結構

客戶表”元數據模板:

<?xml version="1.0" encoding="utf-8"?> <MetadataEntity EntityId="{{$system.NewId}}" Name="test_{{$global.id}}" DisplayName="{{$global.name}}"><Attributes><MetadataAttribute><!--?用表達式占位,生成隨機GUID--><AttributeId>{{$system.NewId}}</AttributeId><Name>Code</Name> <DbType>nvarchar</DbType><Length>128</Length></MetadataAttribute> </MetadataEntity>

4.2、定義業務模板配置

? ? 業務模板配置由:控件配置、布局配置和聯動配置組成。

? ? 控件配置定義控件和字段信息:

<configs><!-- 將配置項定義成單選框--><configItem itemId="AlterApply_IsInvalidCostEnable" label="啟用無效成本" field="AlterApply_IsInvalidCostEnable" control="Radio" dataType="String"><options><option text="是" value="1" isDefault="true"/><option text="否" value="0" isDefault="false"/></options></configItem><configItem itemId="AlterApply_IsIdleCostSupplement" label="啟用無效成本補錄" field="AlterApply_IsIdleCostSupplement" control="Radio" dataType="String"><options><option text="是" value="1" isDefault="true"/><option text="否" value="0" isDefault="false"/></options></configItem> </configs>

布局配置關聯控件配置從而定義布局顯示:

<layout><regions><region title="階段配置"><group title="申報階段"><rows><row><cells><!-- refld引用之前定義的兩個配置項--><cell colSpan="1"><configItem refId="AlterApply_IsInvalidCostEnable"/></cell><cell colSpan="2"><configItem refId="AlterApply_IsIdleCostSupplement"/></cell></cells></row></rows></group> </region></regions></layout>

聯動規則定義配置之間的聯動規則:

<rule itemId="AlterApply_IsIdleCostSupplement"><ruleConditions><!-- 條件判斷來自配置項的值--><ruleCondition field="AlterApply_IsInvalidCostEnable" operator="eq" value="1"/></ruleConditions><ruleActions><!-- 條件為true時執行顯示動作--><ruleAction type="trueAction"><props><value>0</value><visible>true</visible></props></ruleAction><!-- 條件為false時執行隱藏動作--><ruleAction type="falseAction"><props><value>0</value><visible>false</visible></props></ruleAction></ruleActions> </rule>

4.3、訂閱業務模板事件

? ? 在業務模板生成實例的過程中,產品需要擴展部分邏輯,比如成本合同變更生成實例以后,需要向流程中心發現業務數據。我們在模板操作過程中會發布事件,產品通過訂閱對應的事件進行業務邏輯擴展。

事件名稱

事件

說明

業務模板實例前事件TemplateInstanceCreatingEven
tData
訂閱此事件可以在生成實例前修改配置參數等
業務模板實例初始化事件TemplateInstanceInitEventData訂閱此事件可以獲取實例的信息
業務模板實例刪除事件TemplateInstanceDeleteEventData訂閱此事件可以做一些業務數據清理的操作

? ? 所有的事件都是派生自BusinessUnitEventData的類,通過事件總線發布事件。要訂閱處理事件,就要實現BusinessUnitEventHandler抽象類。

事件訂閱:

/// <summary> /// 業務事件的抽象類 /// </summary> /// <typeparam name="TBusinessUnitEventData"></typeparam> public abstract class BusinessUnitEventHandler<TBusinessUnitEventData>: IBusinessUnitEventHandler<TBusinessUnitEventData>where TBusinessUnitEventData : BusinessUnitEventData {/// <summary>/// 訂閱者具體的業務邏輯。/// </summary>/// <param name="businessUnitEventData"></param>public abstract void HandleEvent(TBusinessUnitEventData businessUnitEventData); }

五、如何使用業務模板

? ? 業務模板的使用非常簡單,用戶不用關心業務模板的開發原理,只用關注相應的配置項的作用即可。

? ? 例如使用成本系統合同變更業務模板,通過修改相應的配置項就可以生成一個重計量的業務實例:

? ? 通過查看業務模板實例信息查看生成的元數據:

六、應用案例

? ? 目前ERP產品中主要是成本系統和全域主數據應用了業務模板,成本系統開發了變更業務模板,同時產品出廠的時候會自帶現場簽證和設計變更兩個模板實例。

? ? 合同變更業務模板:

? ? 模板實例:

? ? 全域主數據目前也正在使用業務模板開發主數據模板,主要分為列表型主數據模板,用以擴展無層級類主數據,比如供應商和客戶;以及層級型主數據,用以擴展層積累主數據,比如科目信息。

七、總結

? ? 業務模板主要是解決同一類業務場景的快速構建問題,基于業務領域抽象的模型,提煉出一套業務模板,通過模板化的思路快速復制的方式構建有規律、符合模型的業務。

? ? 但是目前模板的內容是基于元數據文件進行提煉的,元數據結構比較復雜,相互之間的關聯密切,導致開發業務模板的門檻比較高,同時生成元數據的過程比較復雜,出現問題很難排查定位。

? ? 未來,我們將考慮通過可視化的方式構建業務模板,降低開發難度,讓業務模板被更多的開發者使用,發揮更大的價值。

------ END ------

作者簡介

李同學:?研發工程師,目前負責天際·建模平臺相關研發工作。

也許您還想看:

技術分享|Java SDK 動態類型

技術分享|NodeJS分布式鏈路追蹤實現

更多明源云·天際開放平臺場景案例與開發小知識,可以關注明源云天際開發者社區公眾號:

【建?!课臋n服務提供高保真打印模式

明源云·天際硬核技術認可:獲華為鯤鵬技術認證書

天際·開發者社區“重裝發布”!

總結

以上是生活随笔為你收集整理的技术分享 | 业务模板的技术实践的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。