Joget DX 8 Stable Released
The stable release for Joget DX 8 is now available, with a focus on UX and Governance.
ในบทช่วยสอนนี้ เราจะทำตาม guideline for developing a plugin เพื่อพัฒนาปลั๊กอิน Mood Rating Form Field ของเรา โปรดอ้างอิงถึงบทช่วยสอนแรกสุด วิธีการพัฒนา Bean Shell Hash Variable เพื่อลายระเอียดสำหรับขั้นตอนต่อไป
เราต้องการให้มีฟิลด์การจัดเรตพร้อมอีโมจิซึ่งสามารถนำไปใช้กับรูปแบบอื่นได้
เราจะพัฒนา Form Field Element Plugin เพื่อแสดงฟิลด์อีโมจิ
ในการพัฒนาปลั๊กอิน Mood Rating Form Field เราจะต้องให้อินพุตมาตรฐานบางอย่างสำหรับ Form Field element.
ฟิลด์ฟอร์มแสดงการเลือกอีโมจิและปุ่มตัวเลือก
เพื่อการพัฒนาปลั๊กอิน Mood Rating Form Field lugin,เราสามารถขยายฟิลด์ Radio หลักจากนั้นแทนที่ตัวเลือกคุณสมบัติแม่แบบและปลั๊กอิน
เราจำเป็นต้องให้ซอร์สโค้ด Joget Workflow ของเราพร้อมและสร้างโดยทำตาม this guideline.
บทช่วยสอนต่อไปนี้จัดทำขึ้นด้วย Macbook Pro และ the Joget Source Code is version 5.0.1. โปรดอ้างอิงถึง แนวทางสำหรับการพัฒนาปลั๊กอิน สำหรับคำสั่งแพลตฟอร์มอื่น ๆ
สมมติว่าไดเรกทอรีโฟลเดอร์ของเรามีดังนี้
- Home - joget - plugins - jw-community -5.0.1
ไดเรกทอรี "ปลั๊กอิน" คือโฟลเดอร์ที่เราจะสร้างและจัดเก็บปลั๊กอินของเราทั้งหมดและไดเรกทอรี "jw-community" เป็นที่เก็บซอร์สโค้ด Joget Workflow
เรียกใช้คำสั่งต่อไปนี้เพื่อสร้างโครงการ maven ในไดเรกทอรี "ปลั๊กอิน"
cd joget/plugins/ ~/joget/jw-community/5.0.1/wflow-plugin-archetype/create-plugin.sh org.joget mood_rating 5.0.1
จากนั้นเชลล์สคริปต์จะขอให้เราใส่หมายเลขเวอร์ชันสำหรับปลั๊กอินและขอให้เรายืนยันก่อนที่จะสร้างโครงการ Maven
Define value for property 'version': 1.0-SNAPSHOT: : 5.0.0 [INFO] Using property: package = org.joget Confirm properties configuration: groupId: org.joget artifactId: mood_rating version: 5.0.0 package: org.joget Y: : y
เราควรได้รับข้อความ "BUILD SUCCESS" ที่ปรากฏในเครื่องของเราและโฟลเดอร์ "mood_rating" ที่สร้างขึ้นในโฟลเดอร์ "ปลั๊กอิน"
เปิดโครงการ maven ด้วย IDE ที่คุณชื่นชอบ เราแนะนำให้ใช้ NetBeans.
สร้างคลาส "MoodRatingField" ภายใต้ "org.joget" package. จากนั้นขยายคลาสด้วย org.joget.apps.form.lib.Radio. คลาส org.joget.apps.form.lib.Radio เป็นการดำเนินการของคลาส org.joget.apps.form.model.Element abstract class. โปรดอ้างอิงถึง Form Field Element Plugin.
เช่นเคยเราจะต้องใช้ abstract methods ทั้งหมด เราจะใช้ AppPluginUtil.getMessage method เพื่อสนับสนุน i18n และใช้ตัวแปรคงที่ MESSAGE_PATH สำหรับ message resource bundle directory.
ตอนนี้เราต้องสร้าง UI สำหรับผู้ใช้ผู้ดูแลระบบเพื่อให้อินพุตสำหรับปลั๊กอินของเรา ใน getPropertyOptions method, เราได้ระบุไฟล์ ตัวเลือกคุณสมบัติปลั๊กอิน ของเราไว้ที่ "/properties/form/moodRatingField.json". ให้เราสร้าง directory "resources/properties/form" ภายใต้ "mood_rating/src/main" directory. หลังจากสร้าง directory, ให้เราสร้างไฟล์ชื่อ "moodRatingField.json" ในโฟลเดอร์ "properties"
ในไฟล์ตัวเลือกคุณสมบัติ เราจะต้องตั่งค่าตัวเลือกดังต่อไปนี้ โปรดทราบว่าเราสามารถใช้ "@@message.key@@" syntax เพื่อสนับสนุน i18n ในตัวเลือกคุณวมบัติของเรา
[{ title : '@@form.moodRating.config@@', properties : [{ name : 'id', label : '@@form.radio.id@@', type : 'textfield', required : 'True', regex_validation : '^[a-zA-Z0-9_]+$', validation_message : '@@form.radio.invalidId@@' }, { name : 'label', label : '@@form.radio.label@@', type : 'textfield', value : '@@org.joget.MoodRatingField.pluginLabel@@' }] }, { title : '@@form.radio.advancedOptions@@', properties : [{ label : '@@form.radio.data@@', type : 'header' }, { name : 'validator', label : '@@form.radio.validator@@', type : 'elementselect', options_ajax : '[CONTEXT_PATH]/web/property/json/getElements?classname=org.joget.apps.form.model.FormValidator', url : '[CONTEXT_PATH]/web/property/json[APP_PATH]/getPropertyOptions' }, { label : '@@form.radio.ui@@', type : 'header' }, { name : 'readonly', label : '@@form.radio.readonly@@', type : 'checkbox', value : 'False', options : [{ value : 'true', label : '' }] }, { label : '@@form.radio.workflow@@', type : 'header' }, { name : 'workflowVariable', label : '@@form.radio.workflowVariable@@', type : 'textfield' }] }]
หลังจากเสร็จสิ้นตัวเลือกคุณสมบัติเพื่อรวบรวมอินพุต เราสามารถทำงานกับวิธีการหลักของปลั๊กอินซึ่งเป็นวิธี renderTemplate และ formatData เนื่องจากเราขยายคลาส Radio เราไม่จำเป็นต้องใช้เมธอด formatData
@Override public String renderTemplate(FormData formData, Map dataModel) { String template = "moodRatingField.ftl"; // set value String value = FormUtil.getElementPropertyValue(this, formData); dataModel.put("value", value); String html = FormUtil.generateElementHtml(this, formData, template, dataModel); return html; }
ใน renderTemplate เราระบุไฟล์เทมเพลตเป็น "moodRatingField.ftl" ให้สร้างไฟล์นี้ภายใต้ไดเรกทอรี "mood_rating / src / main / resources / templates" จากนั้นใช้ไวยากรณ์ FreeMaker เพื่อสร้างเทมเพลตของเราดังต่อไปนี้:
<div class="form-cell mood_rating" ${elementMetaData!}> <label class="label">${element.properties.label} <span class="form-cell-validator">${decoration}</span><#if error??> <span class="form-error-message">${error}</span></#if></label> <div class="form-cell-value" id="${elementParamName!}${element.properties.elementUniqueKey!}"> <#if !(request.getAttribute("org.joget.MoodRatingField")??) > <style> .mood_rating .tdstyle {text-align:center;width:20%;border:0px none transparent !important;} </style> </#if> <table style="width:150px"> <tbody> <tr> <td class="tdstyle"><img height="25" width="25" src="${request.contextPath}/plugin/org.joget.MoodRatingField/images/smiley5.png"></td> <td class="tdstyle"><img height="25" width="25" src="${request.contextPath}/plugin/org.joget.MoodRatingField/images/smiley4.png"></td> <td class="tdstyle"><img height="25" width="25" src="${request.contextPath}/plugin/org.joget.MoodRatingField/images/smiley3.png"></td> <td class="tdstyle"><img height="25" width="25" src="${request.contextPath}/plugin/org.joget.MoodRatingField/images/smiley2.png"></td> <td class="tdstyle"><img height="25" width="25" src="${request.contextPath}/plugin/org.joget.MoodRatingField/images/smiley1.png"></td> </tr> <tr> <#list ['5', '4', '3', '2', '1'] as i> <td class="tdstyle"> <input grouping="${elementParamName!}" id="${elementParamName!}" name="${elementParamName!}" type="radio" value="${i}" <#if error??>class="form-error-cell"</#if> <#if element.properties.readonly! == 'true'> disabled</#if> <#if value?? && value == i>checked</#if> /> </td> </#list> </tr> </tbody> </table> </div> <div style="clear:both;"></div> </div>
มีเทมเพลตไฟล์อีโมจิบางไฟล์ที่จะใช้โดยให้วางไฟล์รูปภาพเหล่านั้นไว้ในไดเรกทอรี "mood_rating / src / main / resources / resources / image"
ไม่จำเป็นต้องมี library เพิ่มเติม
เรากำลังใช้ i18n message key ใน getLabel และ getDescription method. เราจะใช้ i18n message key ในไฟล์ตัวเลือกคุณสมบัติของเราเช่นกัน จากนั้นเราจะต้องสร้าง message resource bundle ในไฟล์คุณสมบัติสำหรับปลั๊กอินของเรา
สร้าง directory, "resources/message/form", ภายใต้ "mood_rating/src/main" directory. จากนั้นสร้างไฟล์ "MoodRatingField.properties" ในโฟลเดอร์. ในไฟล์คุณสมบัติให้เพิ่ม message keys และ label ทั้งหมดดังต่อไปนี้
org.joget.MoodRatingField.pluginLabel=Mood Rating org.joget.MoodRatingField.pluginDesc=Form Field for rating mood form.moodRating.config=Edit Mood Rating
ต่อไปเราจะต้องลงทะเบียนคลาสปลั๊กอินของเราในคลาส Activator (สร้างอัตโนมัติในแพ็คเกจคลาสเดียวกัน) เพื่อบอก Felix Framework ว่านี่เป็นปลั๊กอิน
public void start(BundleContext context) { registrationList = new ArrayList<ServiceRegistration>(); //Register plugin here registrationList.add(context.registerService(MoodRatingField.class.getName(), new MoodRatingField(), null)); }
มาสร้างปลั๊กอินของเรากัน เมื่อกระบวนการสร้างเสร็จสิ้นเราจะพบไฟล์ "mood_rating-5.0.0.jar" ที่สร้างขึ้นภายใต้ไดเรกทอรี "mood_rating / target"
จากนั้นเราให้อัพโหลดปลั๊กอิน Manage Plugins. หลังจากอัปโหลดไฟล์ jar ตรวจสอบอีกครั้งว่ามีการอัปโหลดและเปิดใช้งานปลั๊กอินอย่างถูกต้อง
จากนั้นให้ตรวจสอบฟิลด์แสดงอารมณ์ข้อมูลใน ตัวสร้างฟอร์ม.
ลากไปที่ตัวสร้างฟอร์มและตั้งค่าคุณสมบัติ
บันทึกคุณสมบัติและตรวจสอบว่าฟิลด์แสดงผลเป็น canvas ดังต่อไปนี้
ตรวจสอบและทดสอบในรูปแบบ
คุณสามารถดาวน์โหลด source code จาก mood_rating_src.zip.
หากต้องการดาวน์โหลด jar ปลั๊กอินที่พร้อมใช้งานโปรดค้นหาที่ http://marketplace.joget.org/. (เร็ว ๆ นี้)