Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
English
There following questions and steps are to help you plan and develop a plugin to fulfill a custom requirement.
Thai

คำถามและขั้นตอนต่อไปนี้เพื่อช่วยคุณวางแผนและพัฒนาปลั๊กอินเพื่อตอบสนองความต้องการที่กำหนดเอง


Table of Contents

1. What is the problem?

Thai

อะไรคือปัญหา?

You have a custom requirement and you found that none of the built-in plugins provided by Joget Workflow nor plugins available in Marketplace are able to fulfill your requirement. 

...

Thai

ตัวอย่างที่ 3: ตัวแปรแฮชใช้งานได้สะดวก แต่ไม่สามารถตรวจสอบสภาพได้

2. How to solve the problem?

Thai

วิธีแก้ปัญหา

Refer to the Plugin Types that are supported by Joget Workflow, find the most appropriate plugin type that can help you to fulfill the custom requirement.

Thai

อ้างอิงถึง Plugin Types ที่ Joget Workflow สนับสนุนค้นหาประเภทของปลั๊กอินที่เหมาะสมที่สุดที่สามารถช่วยให้คุณปฏิบัติตามข้อกำหนดที่กำหนดเองได้

Example 1: Develop a Datalist List Action plugin to display a button for generate form PDF.

Thai

ตัวอย่างที่ 1: พัฒนาปลั๊กอินการกระทำ Datalist List เพื่อแสดงปุ่มสำหรับสร้างฟอร์ม PDF

...

Thai

ตัวอย่างที่ 3: พัฒนาปลั๊กอิน Hash Variable ที่สามารถเขียนสคริปต์ Bean Shell ได้

3. What is the input needed for your plugin?

Thai

สิ่งที่จำเป็นในการป้อนข้อมูลสำหรับปลั๊กอินของคุณ?

Find out what information are needed by your plugin to function/work. Look at it from the user's perspective; how are you going to use the plugin. Then, look at it from a developer's perspective; to make the plugin reusable in more use cases.

...

Example 1: To develop a PDF Download Datalist List Action plugin, we can consider providing the following as input.

...

    1. Form ID : The form that will be used to generate the PDF file.

      Thai

      แบบฟอร์ม: แบบฟอร์มที่จะใช้ในการสร้างไฟล์ PDF

    2. Record ID : Use the id of the datalist List row or a column value to load the record.

      Thai

      ID เรคคอร์ด: ใช้ id ของแถวดาต้าลิสต์หรือค่าคอลัมน์เพื่อโหลดเรคคอร์ด

    3. File Name : File name of the the generated PDF file.

      Thai

      ชื่อไฟล์: ชื่อไฟล์ของไฟล์ PDF ที่สร้างขึ้น

    4. Formatting options : Options to format and customise the PDF output. 

      Thai

      ตัวเลือกการจัดรูปแบบ: ตัวเลือกในการจัดรูปแบบและปรับแต่งเอาต์พุต PDF

...

Thai

ตัวอย่างที่ 2: ในการพัฒนาปลั๊กอินเมนู Gantt Chat Userview เราสามารถพิจารณาให้สิ่งต่อไปนี้เป็นอินพุต

    1. Datalist Binder List Data Store : We can reuse datalist binder List Data Store in our plugin to retrieve the data needed by the Gantt Chart.

      Thai

      ดาต้าลิสต์ BinderData Store: เราสามารถใช้ดาต้าลิสต์ Binder Data Store ในปลั๊กอินของเราเพื่อดึงข้อมูลที่ต้องการโดยแผนภูมิแกนต์

    2. Mapping : A field to map the columns that will be returned from the datalist binder List Data Store to the data needed by the Gantt Chart.

      Thai

      การแมป: ฟิลด์เพื่อแมปคอลัมน์ที่จะส่งคืนจากตัวยึดข้อมูลไปยังข้อมูลที่ต้องการโดยแผนภูมิแกนต์

    3. Styling : Options to style the Gantt Chart.

      Thai

      จัดแต่ง: ตัวเลือกเพื่อจัดสไตล์แผนภูมิแกนต์

Example 3: Hash Variable plugin does not provide interface for user to configure, but to develop a Bean Shell Hash Variable plugin, we need somewhere to put our Bean Shell script. We can reuse the Environment Variable to store our scripts. So the Hash Variable syntax will be a prefix with environment variable key.

...

E.g. #beanshell.EnvironmentVariableKey[name=Joget&email=info@joget.org&message={form.sample.message?url}]#

4. What is the output and expected outcome of your plugin?

Thai

ผลลัพธ์และผลลัพธ์ที่คาดหวังของปลั๊กอินของคุณคืออะไร?

How and what a normal user (Not the admin user who use the plugin to provide functionality) will use and see your plugin result.

...

Example 1: When PDF Download Datalist List Action is used as a datalist List row action or column action, a normal user will see a link to download the PDF file in every rows of a datalistList. Once the link is clicked, a PDF will be prompted to be downloaded.

When the plugin is used as a whole datalist List action, a zip file containing all the generated PDF of every selected rows will be prompted to be downloaded.

...

Thai

ตัวอย่างที่ 1: เมื่อ PDF Download Datalist List Action ถูกใช้เป็นแอ็คชั่นแถวของดาต้าลิสต์หรือการกระทำคอลัมน์ผู้ใช้ปกติจะเห็นลิงค์เพื่อดาวน์โหลดไฟล์ PDF ในทุก ๆ แถวของดาต้าลิสต์ เมื่อคลิกที่ลิงค์ไฟล์ PDF จะถูกถามให้ดาวน์โหลด

เมื่อมีการใช้ปลั๊กอินเป็นการกระทำของดาต้าลิสต์ทั้งหมดไฟล์ซิปที่มี PDF ทั้งหมดที่สร้างขึ้นของทุกแถวที่เลือกจะได้รับแจ้งให้ดาวน์โหลด

...

Thai

ตัวอย่างที่ 3: ปลั๊กอิน Bean Shell Hash สำหรับผู้ดูแลระบบ เมื่อมีการใช้งานตัวแปรแฮชจะถูกแทนที่ด้วยการส่งคืนผลลัพธ์จาก Bean Shell

5. Are there any resources/API that can be reused?

Thai

มีทรัพยากร / API ที่สามารถนำกลับมาใช้ใหม่ได้หรือไม่?

Always refer to existing plugins and tutorials to look for a similar plugin/plugin type that you can refer to whenever possible.  The Joget team will try their best to enrich the contents in the tutorials section.

...

Example 1: To develop the PDF Download Datalist List Action plugin, we can reuse the methods in FormPdfUtil to generate a form as PDF. We can also refer to the source code of the Datalist List Form Data Delete Action plugin as well. Other than that, we can refer to the Export Form Email Tool on what kind of plugin properties options we can provide in the plugin as the Export Form Email Tool are using the methods in FormPdfUtil as well.

...

Example 2: To develop a Gantt Chart Userview Menu plugin, we can refer to the source code of all the Userview Menu plugin. From there, we can have a better understanding on how to make a template for a plugin using FreeMakerFreeMarker syntax. 


Thai

ตัวอย่างที่ 2: ในการพัฒนาปลั๊กอินเมนู Userview เมนู Gantt เราสามารถอ้างถึง source code ของปลั๊กอินเมนู Userview ทั้งหมด จากตรงนั้นเราสามารถทำความเข้าใจเกี่ยวกับวิธีสร้างเทมเพลตสำหรับปลั๊กอินโดยใช้ไวยากรณ์ FreeMaker FreeMarker ได้ดีขึ้น

Example 3: To develop Bean Shell Hash Variable plugin, we can refer to the source code of all the Hash Variable plugin and Bean Shell plugin. Especially, we can refer to Environment Variable Hash Variable plugin on how to retrieve environment variable using a variable key. We can also refer to Bean Shell Tool or Bean Shell Form Binder Data Store plugin on what to execute the script with Bean Shell interpreter.

...

Thai

Example 3: การพัฒนาปลั๊กอิน Bean Shell Hash Variable เราสามารถอ้างอิง source code ของปลั๊กอิน Hash Variable และปลั๊กอิน Bean Shell ทั้งหมด โดยเฉพาะอย่างยิ่งเราสามารถอ้างถึงปลั๊กอินตัวแปรสภาพแวดล้อมของแฮชตัวแปรในการเรียกข้อมูลตัวแปรสภาพแวดล้อมโดยใช้คีย์ตัวแปร นอกจากนี้เรายังสามารถอ้างอิงถึง Bean Shell Tool หรือปลั๊กอิน Bean Binder ของ Form Shell เกี่ยวกับสิ่งที่เรียกใช้งานสคริปต์ด้วยล่าม Bean Shell

6. Prepare your development environment

Thai

เตรียมสภาพแวดล้อมการพัฒนาของคุณ

a. You will need to have the Joget Open Source ready and built. We will use the "wflow-plugin-archetype" module to generate a maven project for our plugin.

...

C:\Users\(your computer name)\.m2\repository\org\joget\wflow-core\"78.0-SNAPSHOT"

Run the following for Window 

Thai

สร้างโครงการ maven

ไฟล์โครงการที่สร้างจะถูกวางไว้ที่ไดเรกทอรีที่ระบุในพรอมต์คำสั่งเช่น: การเรียกใช้คำสั่งใน "C: \" จะวางไฟล์โครงการไว้ในรากของไดรฟ์ C ในการรับ jogetDependencyVersion ที่ถูกต้องเพื่อสร้างไฟล์โปรเจ็กต์ที่เหมาะสมกับการพึ่งพาที่ถูกต้องให้ตรวจสอบชื่อไฟล์ที่ระบุในโฟลเดอร์ ".m2" ภายใต้ไดเรกทอรีของเช่น: C: \ Users \ (ชื่อคอมพิวเตอร์ของคุณ) \. m2 \ repository \ org \ joget \ wflow-core \ "78.0-SNAPSHOT"

- เรียกใช้สิ่งต่อไปนี้สำหรับหน้าต่าง

...

-Sample Screenshot in Window:
Image RemovedImage Added


Run the following for Linux or Mac

...

- Sample Screenshot in Mac:                                                                                                                                        
 Image Modified

c. Open/Import the maven project with your favorite IDE. Joget team recommends NetBeans IDE.  

7. Just code it!

Thai

เพียงแค่รหัส!

a. Extending the abstract class of a plugin type

Thai

การขยายคลาสนามธรรมของประเภทปลั๊กอิน

Refer to the document of the plugin type listed in Plugin Types. Find the abstract class and interface that need to be extended and implemented by your plugin.

...

Thai

อ้างถึงเอกสารประเภทปลั๊กอินที่ระบุไว้ใน Plugin Types ค้นหาคลาสนามธรรมและอินเทอร์เฟซที่ต้องขยายและนำไปใช้โดยปลั๊กอิน

ตัวอย่าง: ในการพัฒนา Userview Menu plugin คลาสปลั๊กอินจำเป็นต้องขยายคลาสนามธรรม org.joget.apps.userview.model.UserviewMenu

b. Implement all the abstract methods

Thai

ใช้วิธีนามธรรมทั้งหมด

A plugin will have to implements the abstract method of Plugin Base Abstract Class and Interface and also the abstract method of the individual abstract class and interface for the plugin type. 

...

  • getCategory
  • getClassName
  • getDecoratedMenu
  • getDescription
  • getIcon
  • getLabel
  • getName
  • getPropertyOptions
  • getRenderPage
  • getVersion
  • isHomePageSupported

c. Manage the dependency libraries of your plugin

Thai

จัดการไลบรารีการพึ่งพาของปลั๊กอินของคุณ

The generated plugin folder by "wflow-plugin-archetype" module is a maven project. So, we will using the Dependency Mechanism provided by Maven.

Thai

โฟลเดอร์ปลั๊กอินที่สร้างขึ้นโดยโมดูล "wflow-plugin-archetype" เป็นโครงการ maven ดังนั้นเราจะใช้ Dependency Mechanism ที่ Maven จัดหาให้

d. Make your plugin internationalization (i18n) ready

Thai

เตรียมปลั๊กอินสากลให้พร้อม (i18n)

To make the plugin i18n ready, we need to create a message resource bundle property file for the plugin.

...

Code Block
languagejava
public void start(BundleContext context) {
    registrationList = new ArrayList<ServiceRegistration>();

    //Register plugin here
    registrationList.add(context.registerService(MyPlugin.class.getName(), new MyPlugin(), null));
}

f. Build it and testing

Thai

สร้างและทดสอบ

Once you are done with all the steps above, you can build your project with your IDE using Maven. You can also run "mvn clean install" command in your project directory to build it. After building your project, a jar file is created under "target" folder in your plugin project folder. Upload the plugin jar to Manage Plugins to test your plugin.

...

Thai

เมื่อคุณทำตามขั้นตอนทั้งหมดข้างต้นเสร็จแล้วคุณสามารถสร้างโครงการของคุณด้วย IDE ของคุณโดยใช้ Maven คุณยังสามารถเรียกใช้คำสั่ง "mvn clean install" ในไดเรกทอรีโครงการของคุณเพื่อสร้าง หลังจากสร้างโครงการของคุณไฟล์ jar จะถูกสร้างขึ้นภายใต้โฟลเดอร์ "ปลายทาง" ในโฟลเดอร์โครงการปลั๊กอินของคุณ อัปโหลดโถปลั๊กอินไปที่ Manage Plugins เพื่อทดสอบปลั๊กอินของคุณ

ตัวอย่าง: ใน NetBeans คลิกขวาที่ชื่อโครงการจากนั้นเลือก "ล้างและสร้าง"


8. Take a step further, share it or sell it

Thai

ก้าวไปอีกขั้นแบ่งปันหรือขายมัน

You have completed a very useful plugin. Don't just keep it to yourself, share or sell your plugin in the Joget Marketplace or even better, you can write a tutorial in our Knowledge Base to share your effort with others. To share or sell your plugin, please send an email to info@joget.org.

...