OFBiz มี Feature สำหรับทำ CRUD Service แบบใหม่ แจ่มกว่าเดิม

ลองมาดูการทำ CRUD Service แบบเก่า ที่ใช้ minilang สำหรับการทำ CRUD นะครับ

<service name="createPracticeParty" default-entity-name="Party" engine="simple"
            location="component://practice/script/org/hotwax/practice/PracticeServices.xml" 
            invoke="createPracticeParty" auth="true">
<description>Create a Party</description>
<auto-attributes include="pk" mode="OUT" optional="false"/>
<auto-attributes include="nonpk" mode="IN" optional="true"/>
</service>

แล้วผมก็ต้องไปอ้างอิงถึง Code method ที่ชื่อ createPracticeParty ภายในไฟล์ PracticeServices.xml ดังนี้

ึึ

<simple-method method-name="createPracticeParty" short-description="create a Party">
        <make-value entity-name="Party" value-name="newEntity"/>
<sequenced-id-to-env sequence-name="Party" env-name="newEntity.partyId"/>
<field-to-result field-name="newEntity.partyId" result-name="partyId"/>
<set-nonpk-fields map-name="parameters" value-name="newEntity"/>
<create-value value-name="newEntity"/>
</simple-method>

ซึ่งก็เป็นเรื่องที่เรารู้กันอยู่แล้ว แต่ service engine ใหม่ของ OFBiz ทำให้การเขียน CRUD Service ใกล้เคียงกับการปอกกล้วยเข้าไปทุกที เพราะเราสามารถรวบ Code ทั้งหมดข้างบนให้เหลืออยู่แค่นี้
<service name="createPracticeParty" default-entity-name="Party" engine="entity-auto" invoke="create" auth="true">
<description>Create a Party</description>
<auto-attributes include="pk" mode="OUT" optional="false"/>
<auto-attributes include="nonpk" mode="IN" optional="true"/>
</service>

แค่นี้จบครับ จุดแตกต่างคือ engine เปลี่ยนจาก “simple” เป็น “entity-auto” แล้วตัดตัว location ทิ้งไปเพราะไม่ต้องมีไฟล์ PracticeServices.xml แล้ว แล้ว invoke ก็เปลี่ยนเป็น “create” ซึ่งหมายถึงการ Create เรคคอร์ดใหม่ใน entity Party โดยวิธีใหม่นี้ invoke นี้จะมีได้สามค่า คือ “create”, “update” และ “delete”

เพียงแค่คุณเขียน Code ข้างบนใน Services.xml ก็เรียบร้อยครับสั้นๆ OFBiz Committee ทำ Feature นี้ออกมาแจ่มจริงๆ ครับ

ความคิดเห็น

อืม

อืม ลดขั้นตอนไปตั้งขั้นนึงนะคะเนี่ย แต่มันอาจจะทำให้ผู้ใช้ใหม่ๆ สับสนนิดหน่อยนะคะเนี่ย เพราะปกติ จะเข้าใจว่า จะต้องเขียน service ไปเรียกก่อน แล้วค่อยเรียกไปที่ simple method หรือ java method แต่ตอนนี้ก็จะต้องเข้าใจว่า มันทำได้ 2 แบบสำหรับ simple method ค่ะ

ต้องเลือกครับ

ต้องเลือกจากความเหมาะสมในการใช้งานครับ ถ้าไม่มีอะไรในกอใฝ่ก็ใช้แบบใหม่ใหม่แต่ถ้ามีความต้องการเกินที่มันทำได้ก็คงต้องทำใน simple method อยู่ดีครับ

นี่แหละครับเหตุผลหลัก

ที่ทำไมผมถึงชอบ Framework ของ OFBiz มัน Simple มากๆเอาเวลาที่เราจะมานั่ง Coding ไปทำอย่างอื่นดีกว่า เดี่ยวมี OrangeGears IDE มาอีกนี่สวรรค์ทรงโปรดเลยนะครับ :)

แต่วิธีนี้ผมยังมีปัญหากับมันนิสสสสนึง

คือตัวอย่างที่แสดงมาน่ะครับมันทำงานแบบ Stand Alone อยาก update create ของ entity ใดก็ทำมันของข้าคนเดียว คราวนี้ถ้าผมจะอ้างอิง service ตัวอื่นภายใน service ที่เราทำงานอยู่จะทำไงก็ไม่รุ อย่างของเก่าเวลาเรียก Service ของคนอื่นก็ใช้ tag <call-service> ภายใน code minilang แต่นี่เราเรียกใช้งาน CRUD ตั้งแต่ไก่โห่ คือยังไม่ได้ไปใช้ minilang แต่เรียกกันตั้งแต่ Services.xml แล้ว ก็เลยไม่รู้ว่าจะทำไงดี