資料管理系統設計和實現
為了方便部門內員工快速掌握相關的業務知識,所以設計實現了一個簡單的線上資料管理系統。
把一些常見的業務知識整理好,釋出在資料管理系統,方便職員遇到問題時查詢資料,找到對應的辦法解決。
主要實現的功能:
1.釋出的資料可以歸類。如:印表機問題,網路問題,電腦問題,電話機問題等等(這些類別可以配置)
2.釋出的資料可以包含圖片,附件文件等等。
3.許可權控制。登入使用者才能釋出,編輯和刪除資料。遊客只能檢視資料。
主要介面:
遊客資料查詢介面:
檢視內容介面:
登入使用者查詢介面:
登入使用者新增資料和編輯資料頁面(可以放圖片和上傳附件):
主要實現程式碼:
實體定義:
<entity entity-name="XnxyBlogKind" package-name="org.apache.ofbiz.xnxy" title="內容型別">
<field name="kindId" type="id-ne"><description>primary sequenced ID</description></field>
<field name="name" type="name"></field>
<prim-key field="kindId"/>
</entity>
<entity entity-name="XnxyBlog" package-name="org.apache.ofbiz.xnxy" title="內容表">
<field name="blogId" type="id-ne"><description>primary sequenced ID</description></field>
<field name="title" type="name"></field>
<field name="content" type="very-long"></field>
<field name="kindId" type="name"></field>
<prim-key field="blogId"/>
<!--
<relation type="one" fk-name="FK_XnxyBlog_XnxyBlogKind" rel-entity-name="XnxyBlogKind">
<key-map field-name="courseId"/>
</relation>
-->
<relation type="one-nofk" rel-entity-name="XnxyBlogKind" >
<key-map field-name="kindId"/>
</relation>
</entity>
<!-- Request Mappings -->
<request-map uri="view">
<security https="false" auth="false"/>
<response name="success" type="request" value="main"/>
</request-map>
<request-map uri="main"><security https="true" auth="true"/><response name="success" type="view" value="main"/></request-map>
<!-- ================ Blog Requests ================= -->
<request-map uri="FindBlog">
<security https="true" auth="false"/>
<response name="success" type="view" value="FindBlog"/>
</request-map>
<request-map uri="ViewBlog">
<security https="true" auth="false"/>
<response name="success" type="view" value="ViewBlog"/>
</request-map>
<request-map uri="EditBlog">
<security https="true" auth="true"/>
<response name="success" type="view" value="EditBlog"/>
</request-map>
<request-map uri="createBlog">
<security https="true" auth="true"/>
<event type="service" invoke="createXnxyBlog"/>
<response name="success" type="view" value="EditBlog"/>
<response name="error" type="view" value="EditBlog"/>
</request-map>
<request-map uri="updateBlog">
<security https="true" auth="true"/>
<event type="service" invoke="updateXnxyBlog"/>
<response name="success" type="view" value="EditBlog"/>
<response name="error" type="view" value="EditBlog"/>
</request-map>
<request-map uri="deleteBlog">
<security auth="true" https="true"/>
<event type="service" invoke="deleteXnxyBlog" />
<response name="success" type="request-redirect-noparam" value="FindBlog"/>
</request-map>
<!-- View Mappings -->
<view-map name="main" type="screen" page="component://system/widget/system/SystemScreens.xml#main"/>
<view-map name="FindBlog" type="screen" page="component://system/widget/system/BlogScreens.xml#FindBlog"/>
<view-map name="EditBlog" type="screen" page="component://system/widget/system/BlogScreens.xml#EditBlog"/>
<view-map name="ViewBlog" type="screen" page="component://system/widget/system/BlogScreens.xml#ViewBlog"/>
服務定義:
<service name="createXnxyBlog" default-entity-name="XnxyBlog" engine="entity-auto" invoke="create" auth="true">
<description>Create a XnxyBlog</description>
<auto-attributes include="pk" mode="INOUT" optional="true"/>
<auto-attributes include="nonpk" mode="IN" optional="true" allow-html="any" />
</service>
<service name="updateXnxyBlog" default-entity-name="XnxyBlog" engine="entity-auto" invoke="update" auth="true">
<description>Update a XnxyBlog</description>
<auto-attributes include="pk" mode="IN" optional="false"/>
<auto-attributes include="nonpk" mode="IN" optional="true" allow-html="any" />
</service>
<service name="deleteXnxyBlog" default-entity-name="XnxyBlog" engine="entity-auto" invoke="delete" auth="true">
<description>Delete a XnxyBlog</description>
<auto-attributes include="pk" mode="IN" optional="false"/>
</service>
介面和模板定義:
BlogScreens.xml
<?xml version="1.0" encoding="UTF-8"?>
<screens xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://ofbiz.apache.org/Widget-Screen" xsi:schemaLocation="http://ofbiz.apache.org/Widget-Screen http://ofbiz.apache.org/dtds/widget-screen.xsd">
<screen name="FindBlog">
<section>
<actions>
<set field="allowVisitors" value="true"/>
<set field="titleProperty" value="BlogManange"/>
<set field="headerItem" value="BlogManange"/>
<set field="viewIndex" from-field="parameters.VIEW_INDEX" type="Integer"/>
<property-to-field resource="widget" property="widget.form.defaultViewSize" field="viewSizeDefaultValue"/>
<set field="viewSize" from-field="parameters.VIEW_SIZE" type="Integer" default-value="${viewSizeDefaultValue}"/>
</actions>
<widgets>
<decorator-screen name="CommonMyDecorator" location="${parameters.mainDecoratorLocation}">
<decorator-section name="body">
<section>
<widgets>
<decorator-screen name="FindScreenDecorator" location="component://common/widget/CommonScreens.xml">
<decorator-section name="menu-bar">
<container style="button-bar">
<section>
<condition>
<if-empty field="userLogin"/>
</condition>
<actions>
</actions>
<widgets>
</widgets>
<fail-widgets>
<link target="EditBlog" text="${uiLabelMap.EditBlog}" style="buttontext"/>
</fail-widgets>
</section>
</container>
</decorator-section>
<decorator-section name="search-options">
<include-form name="FindBlog" location="component://system/widget/system/BlogForms.xml"/>
</decorator-section>
<decorator-section name="search-results">
<include-form name="ListFindBlog" location="component://system/widget/system/BlogForms.xml"/>
</decorator-section>
</decorator-screen>
</widgets>
</section>
</decorator-section>
</decorator-screen>
</widgets>
</section>
</screen>
<screen name="EditBlog">
<section>
<actions>
<set field="titleProperty" value="TchInfoManange"/>
<set field="headerItem" value="TchInfoManange"/>
<entity-one entity-name="XnxyBlog" value-field="blog"/>
</actions>
<widgets>
<decorator-screen name="CommonMyDecorator" location="${parameters.mainDecoratorLocation}">
<decorator-section name="body">
<container style="button-bar">
<link target="FindBlog" text="${uiLabelMap.CommonBack}" style="buttontext"/>
</container>
<include-form name="EditBlog" location="component://system/widget/system/BlogForms.xml"/>
</decorator-section>
</decorator-screen>
</widgets>
</section>
</screen>
<screen name="ViewBlog">
<section>
<actions>
<property-map resource="SYSTEMUiLabels" map-name="uiLabelMap" global="true"/>
<property-map resource="CommonUiLabels" map-name="uiLabelMap" global="true"/>
<set field="titleProperty" value="TchInfoManange"/>
<set field="headerItem" value="TchInfoManange"/>
<entity-one entity-name="XnxyBlog" value-field="blog"/>
</actions>
<widgets>
<section>
<condition>
<if-empty field="parameters.layeredEnable"/>
</condition>
<widgets>
<decorator-screen name="CommonMyDecorator" location="${parameters.mainDecoratorLocation}">
<decorator-section name="body">
<container style="button-bar">
<link target="FindBlog" text="${uiLabelMap.CommonBack}" style="buttontext"/>
</container>
<platform-specific>
<html><html-template location="component://system/template/system/BlogView.ftl"/></html>
</platform-specific>
</decorator-section>
</decorator-screen>
</widgets>
<fail-widgets>
<platform-specific>
<html><html-template location="component://system/template/system/BlogView.ftl"/></html>
</platform-specific>
</fail-widgets>
</section>
</widgets>
</section>
</screen>
</screens>
BlogForms.xml<?xml version="1.0" encoding="UTF-8"?>
<forms xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://ofbiz.apache.org/Widget-Form" xsi:schemaLocation="http://ofbiz.apache.org/Widget-Form http://ofbiz.apache.org/dtds/widget-form.xsd">
<form name="FindBlog" target="FindBlog" title="" type="single"
header-row-style="header-row" default-table-style="basic-table">
<field name="kindId" title="${uiLabelMap.SystemKindName}">
<drop-down allow-empty="true" >
<entity-options entity-name="XnxyBlogKind" key-field-name="kindId" description="${name}">
<!--<entity-constraint name="facilityTypeId" value="WAREHOUSE"/>-->
<!--<list-options list-name="" key-name=""/>-->
</entity-options>
</drop-down>
</field>
<field name="title" title="${uiLabelMap.SystemTitle}"><text-find/></field>
<field name="content" title="${uiLabelMap.SystemContent}"><text-find/></field>
<field name="submitButton" title="${uiLabelMap.CommonFind}"><submit/></field>
</form>
<form name="ListFindBlog" list-name="listIt" title="" type="list" paginate-target="FindBlog"
odd-row-style="alternate-row" default-table-style="basic-table hover-bar">
<actions>
<service service-name="performFind" result-map="result" result-map-list="listIt">
<field-map field-name="inputFields" from-field="requestParameters"/>
<field-map field-name="entityName" value="XnxyBlog"/>
<field-map field-name="viewIndex" from-field="viewIndex"/>
<field-map field-name="viewSize" from-field="viewSize"/>
<field-map field-name="noConditionFind" value="Y"/>
</service>
</actions>
<row-actions>
<entity-one entity-name="XnxyBlogKind" value-field="blogKind">
<field-map field-name="kindId" from-field="kindId"/>
</entity-one>
</row-actions>
<field name="blogId" title="${uiLabelMap.SystemBlogId}" widget-style="buttontext">
<hyperlink description="${blogId}" target="ViewBlog" >
<parameter param-name="blogId" from-field="blogId"/>
</hyperlink>
</field>
<field name="kindId" title="${uiLabelMap.SystemKindName}"><display description="${blogKind.name}"/></field>
<field name="title" title="${uiLabelMap.SystemTitle}"><display/></field>
<!--
<field name="content" title="${uiLabelMap.SystemContent}"><display/></field>
-->
<field name="viewLink" title=" " widget-style="buttontext">
<hyperlink description="${uiLabelMap.CommonView}" target="ViewBlog" also-hidden="false" link-type="layered-modal" >
<parameter param-name="blogId" from-field="blogId"/>
<parameter param-name="layeredEnable" from-field="blogId"/>
</hyperlink>
</field>
<field use-when="userLogin != null" name="updateLink" title=" " widget-style="buttontext">
<hyperlink description="${uiLabelMap.CommonUpdate}" target="EditBlog" >
<parameter param-name="blogId"/>
</hyperlink>
</field>
<field use-when="userLogin != null" name="deleteLink" title=" " widget-style="buttontext">
<hyperlink description="${uiLabelMap.CommonDelete}" target="deleteBlog" also-hidden="false">
<parameter param-name="blogId"/>
</hyperlink>
</field>
</form>
<form name="EditBlog" target="updateBlog" title="" type="single" header-row-style="header-row"
default-title-style="treeHeader" default-widget-style="inputBox" default-map-name="blog" default-entity-name="XnxyBlog">
<alt-target use-when="blog==null" target="createBlog"/>
<!--<auto-fields-service service-name="updateXnxyBlog" map-name=""/>-->
<field name="blogId" title="${uiLabelMap.SystemBlogId}" ><hidden/></field>
<field name="kindId" title="${uiLabelMap.SystemKindName}">
<drop-down allow-empty="false" >
<entity-options entity-name="XnxyBlogKind" key-field-name="kindId" description="${name}">
</entity-options>
</drop-down>
</field>
<field name="title" title="${uiLabelMap.SystemTitle}" required-field="true"><text size="100" maxlength="100" /></field>
<field name="content" title="${uiLabelMap.SystemContent}" widget-style="inputBox" ><textarea cols="50" rows="20" visual-editor-enable="true"/></field>
<field name="submitButton" title="${uiLabelMap.CommonSubmit}">
<submit/>
</field>
</form>
<form name="ViewBlog" target="updateBlog" title="" type="single" header-row-style="header-row"
default-table-style="basic-table" default-map-name="blog" default-entity-name="XnxyBlog">
<actions>
<entity-one entity-name="XnxyBlogKind" value-field="blogKind">
<field-map field-name="kindId" from-field="blog.kindId"/>
</entity-one>
</actions>
<auto-fields-service service-name="updateXnxyBlog" map-name=""/>
<field name="blogId" title="${uiLabelMap.SystemBlogId}"><hidden/></field>
<field name="kindId" title="${uiLabelMap.SystemKindName}">
<display description="${blogKind.name}"/>
</field>
<field name="title" title="${uiLabelMap.SystemTitle}" ><display /></field>
<field name="content" title="${uiLabelMap.SystemContent}" ><display /></field>
</form>
</forms>
BlogView.ftl
<center>
<h1>${blog.title}</h1>
</center>
<hr/>
<div id="${blog.blogId}_content">
</div>
<script type="text/javascript">
function HTMLEncode(html) {
var temp = document.createElement("div");
(temp.textContent != null) ? (temp.textContent = html) : (temp.innerText = html);
var output = temp.innerHTML;
temp = null;
return output;
}
function HTMLDecode(text) {
var temp = document.createElement("div");
temp.innerHTML = text;
var output = temp.innerText || temp.textContent;
temp = null;
return output;
}
jQuery("#${blog.blogId}_content").html(HTMLDecode("${blog.content}"))
//jQuery("#${blog.blogId}_content").html("${blog.content}")
</script>
主要程式碼就是以上這些,一些國際化資原始檔配置就不寫了。
總結
雖然這個系統很簡單,但也遇到了幾個問題。
1. 富文字編輯器問題。
ofbiz自帶的富文字編輯器是整合的jquery的elrte編輯器。對插入圖片和附件功能感覺很弱,不方便使用。
所以我替換成了ueditor編輯器。替換方法參考:http://blog.csdn.net/xiaozaq/article/details/78467808
解決辦法:定義服務時,入參配置allow-html="any" 。具體參考:http://blog.csdn.net/xiaozaq/article/details/78474630
3. 顯示ueditor編輯器內容時,發現裡面的內容被轉義了,導致顯示結果不是預期想要的。
相關文章
- 駕校管理系統設計和實現
- 就業資訊管理系統設計與實現就業
- 管理系統之許可權的設計和實現
- 資料庫課程設計—超市零售資訊管理系統(Python實現)資料庫Python
- 後設資料管理—動態表單設計器在crudapi系統中完整實現API
- .NET 8.0 酒店管理系統設計與實現
- 基於spring的醫院人事管理系統設計和實現Spring
- 食品加工MES系統如何實現資料採集和裝置管理
- WebServlet.Sqlite OkHttp實現賬戶管理系統的設計WebServletSQLiteHTTP
- 競拍系統設計和核心資料結構資料結構
- 線上消費行為統計與分析系統設計和實現
- Java畢業設計_基於MySQL網盤管理系統的設計與實現JavaMySql
- 如何設計應用系統的資料許可權管理
- Javaweb的例項--訂單管理系統--設計資料庫JavaWeb資料庫
- C語言-超市倉庫管理系統的設計與實現C語言
- 架構設計:資料服務系統0到1落地實現方案架構
- 基於jsp學生資訊管理系統的設計與實現(含原始檔)JS
- 基於java的大學生健康資訊管理系統的設計與實現Java
- [原始碼和文件分享]資料庫敏感資料加解密系統的設計與實現原始碼資料庫解密
- 資料庫系統設計概述資料庫
- 職工資訊管理系統的設計
- 讀資料工程之道:設計和構建健壯的資料系統15源系統實際細節(上)
- 讀資料工程之道:設計和構建健壯的資料系統16源系統實際細節(下)
- 基於SSH培訓機構管理系統的設計與實現
- 資料庫連線池設計和實現(Java版本)資料庫Java
- 口罩預約管理系統——資料庫設計(前端+PHP+MySQL)資料庫前端PHPMySql
- 圖片管理系統:原理、設計與實踐
- 讀資料工程之道:設計和構建健壯的資料系統14源系統
- Hadoop高階資料分析 使用Hadoop生態系統設計和構建大資料系統Hadoop大資料
- 圖資料庫 Nebula Graph 的資料模型和系統架構設計資料庫模型架構
- 基於Python的滲透測試資訊收集系統的設計和實現Python
- 聊聊畢業設計系列 --- 系統實現
- 資料庫:系統設計的核心資料庫
- 資料庫系統設計:分割槽資料庫
- 讀資料工程之道:設計和構建健壯的資料系統19資料儲存系統 (下)
- 讀資料工程之道:設計和構建健壯的資料系統18資料儲存系統(上)
- 得物社群計數系統設計與實現
- 基於java的企業車輛管理系統的設計與實現Java
- 資料結構 課程設計 員工管理系統(C語言)資料結構C語言