Saturday, October 1, 2016

Ant to Gradle, OFBiz evolution.

Apache OFBiz


Apache OFBiz are change build tool from "ant" to "gradle". So, Ant command is change to cradle command too.


This below list shows a comparison between the old targets on Apache Ant and their equivalent tasks on Gradle. Some tasks are not implemented because they are deprecated or implemented indirectly. Read below for details


./ant build-dev                   Will implement after first patch due to complexity
./ant build-production        Will implement after first patch due to complexity
./ant build-qa                      Will implement after first patch due to complexity
./ant build-test                    Will implement after first patch due to complexity
./ant clean-all ->                 ./gradlew cleanAll
./ant clean-cache ->            ./gradlew cleanCache
./ant clean-catalina ->         ./gradlew cleanCatalina
./ant clean-data ->              ./gradlew cleanData ./ant clean-downloads -> ./gradlew cleanDownloads
./ant clean-ivy                     Not implemented due to removing ivy from framework
./ant clean-logs ->              ./gradlew cleanLogs
./ant clean-output ->          ./gradlew cleanOutput
./ant clean-search-indexes -> ./gradlew cleanSearchIndexes ./ant clean-tempfiles -> ./gradlew                                                            cleanTempfiles

./ant clean-uploads ->          ./gradlew cleanUploads
./ant clean-xtra ->                ./gradlew cleanXtra
./ant copy-dtds ->                 ./gradlew copyDtds

./ant create-admin-user-login Not Implemented, it is bad practice to receive user input in builds.                                                          Instead look at load-admin-user-login

./ant create-component ->      ./gradlew createComponent -PcomponentName=custom -                                                                      PcomponentResourceName=custom -PwebappName=customweb -                                                        PbasePermission=OFBTOOLS,CUSTOM_SECURITY

./ant create-tenant ->              ./gradlew -PtenantId=DEMO1 -PtenantName=Demo1 -                                                                           PdomainName=localhost -PdbPlatform=D -PdbIP=127.0.0.1 -                                                               PdbUser=someUser -PdbPassword=somePassword

./ant download-PG-JDBC       Not implemented, dependencies are auto downloaded and you can                                                        compile group: 'postgresql', name: 'postgresql', version: '9.0-801.jdbc4'

                                               to built file ofbiz

./ant download-activemq         Not implemented, dependencies are auto downloaded
./ant download-mySQL-JDBC Not implemented, dependencies are auto downloaded

./ant gen-kek Not implemented, deprecated ./ant gitinfo -> ./gradlew gitinfo

./ant load-admin-user-login ->  ./gradlew loadAdminUserLogin -PuserLoginId=MyUserName

./ant load-all-tenants ->            ./gradlew loadAllTenants -Preader=seed,ext,demo
./ant load-demo ->                    ./gradlew loadDemo __OR__ ./gradle 'ofbiz --load-data'
./ant load-demo-multitenant     Not implemented, deprecated
./ant load-extseed ->                 ./gradlew 'ofbiz --load-data readers=seed,seed-initial,ext'
./ant load-exttest ->                  ./gradlew 'ofbiz --load-data readers=seed,seed-initial,ext,ext-test'
./ant load-file ->                       ./gradlew 'ofbiz --load-data file=foo/bar/FileNameHere.xml'
./ant load-readers                      Not necessary, just use ./gradlew 'ofbiz --load-data readers=whatever'
./ant load-seed ->                     ./gradlew 'ofbiz --load-data readers=seed'
./ant load-tenant ->                   ./gradlew loadTenant -PtenantId=sometenant
./ant load-tenant-data-readers -> ./gradlew 'ofbiz --load-data reader=seed,ext,demo --load-data                                                               delegator=default#TenantIdHere'

./ant refresh ->                           ./gradlew cleanAll build
./ant revert-dev                           Will implement after first patch due to complexity
./ant run-test ->                          ./gradlew 'ofbiz --test component=entity --test case=entity-tests'
./ant run-test-debug ->               ./gradlew 'ofbizDebug --test component=entity --test case=entity-                                                           tests'
./ant run-test-list                       Not implemented, deprecated and need to actually delete related                                                            classes and files

./ant run-test-suite ->               ./gradlew 'ofbiz --test component=widget --test                                                                                        suitename=org.ofbiz.widget.test.WidgetMacroLibraryTests'
./ant run-tests ->                      ./gradlew testInteg
./ant start ->                             ./gradlew ofbiz
./ant start-batch                        Not implemented
./ant start-batch-secure            Not implemented
./ant start-both ->                     ./gradlew 'ofbiz --both'
./ant start-both-secure ->          ./gradlew 'ofbizSecure --both'
./ant start-debug ->                   ./gradlew 'ofbizDebug --start'
./ant start-pos ->                       ./gradlew 'ofbiz --pos'
./ant start-pos-secure ->           ./gradlew 'ofbizSecure --pos'
./ant start-secure ->                  ./gradlew 'ofbizSecure --start'
./ant status ->                           ./gradlew 'ofbiz --status'
./ant stop ->                              ./gradlew 'ofbiz --shutdown'
./ant svninfo ->                        ./gradlew svninfo


credit: https://issues.apache.org/jira/secure/attachment/12812855/ANT_GRADLE_COMPARISON.txt
Read More

Friday, September 30, 2016

install and start Elasticsearch, Kibana, Marvel and Sense For Windows

Install and start Elasticsearch, Kibana, Marvel and Sense

ใน Elasticsearch มีเครื่องมือให้ใช้มากมา ไม่ว่าจะเป็น Logstash, Shield, Watcher, Beats, Graph, Reporting, Kibana และ Marvel ในบทความนี้จะสอนวิธีติดตั้ง และวิธีใช้งาน Elasticsearch, Kibana, Marvel, Sense

  1. Elasticsearch เป็น Search engine อ่านเพิ่มเติ่ม
  2.  Kibana เป็น open source data visualization platform ที่ใช้จัดการกับข้อมูลใน Elasticsearch โดยเราสามารถ ติดตั้ง plugin เข้าไปได้ เช่น Marvel, Sense นั้นเอง
  3. Marvel เป็น หน้าจอแสดงผล เพื่อตรวจสอบสถานะของ Elasticsearch node ต่างๆ
  4. Sense เป็น plugin ของ Kibana ที่ใช้จัดการข้อมูล โดยผ่าน Query DSL ปกติจะใช้ คำสั่ง curl command ในการจัดการกับข้อมูล Sense สามารถช่วยให้สามารถเขียน Query ได้ง่ายขึ้น

สิ่ง ที่ต้องทำก่อน คือการ Download Elasticsearch <<LINK>> และ Kibana  <<LINK>> มาก่อน ให้เลือก ตาม OS ที่ใช้อยู่ แล้วให้แตกไฟล์ ให้เรียบร้อย


จากนั้นให้ เปิด Command Prompt ให้ไปอยู่ที่ Folder ที่ได้แตกไฟล์ไว้

ทดสอบ Elasticsearch ใช้คำสั่ง bin\elasticsearch และ Kibana ใช้คำสั่ง bin\kibana



หมายเหตุ อาจจะเกิดกรณี ที่ Kibana Error ขึ้น ให้ตรวจสอบว่า Kibana ที่โหลดมานั้น รองรับกับ Elasticsearch หรือไม่ ให้โหลด Kibana ที่รองรับกับ เวอร์ชัน Elasticsearch มาทดสอบใหม่

หลังจากผ่านแล้ว ให้พิมพ์ URL : http://localhost:9200 สำหรับ Elasticsearch

ให้พิมพ์ URL : http://localhost:5601 สำหรัง Kibana



 ให้ทำการ หยุด  Elasticsearch และ Kibana เพื่อติดตั้ง Marvel และ Sense


ติดตั้ง Marvel


ติดตั้ง Marvel ให้ เปิด Command Prompt ของ Elasticsearch แล้วพิมพ์ คำสั่ง 
  1. bin\plugin install license โหลด License
  2. bin\plugin install marvel-agent โหลด plugin

Elasticsearch จะทำการดาวโหลด marvel-agent จาก repository มาติดตั้ง ใน Elasticsearch

ยัง ไม่เสร็จนะครับ ต้องติดตั้ง Marvel ใน Kibana ด้วย โดย คำสั่งนี้ 
  1. bin\kibana plugin --install elasticsearch/marvel/latest

หลังจาก สามารถทดสอบ Marvel ได้ โดยการรัน Elasticsearch และ Kibana ได้ ด้วยคำสั่ง ข้างบน สามารถตรวจสอบได้ ตาม URL : http://localhost:5601/app/marvel


ติดตั้ง Sense



การติดตั้ง Sense จะติดตั้ง เฉพาะ Kibana โดยใช้คำสั่ง 
  1. bin\kibana plugin --install elastic/sense

จากที่ติดตั้ง Sense แล้ว ให้ รัน  Elasticsearch และ Kibana 

ให้ http://localhost:5601 



ให้คลิกเลือก เมนู Status 



เข้าสู่มา Marvel Monitor : http://localhost:5601/app/marvel




เข้าสู่ Sense  - a Cool JSON Aware Interface to Elasticsearch : http://localhost:5601/app/sense


Query ทดสอบ สามารถ พิมพ์ตามได้นะครับ 

วันนี้พอแค่นี้ก่อนะครับ สำหรับ OS อื่น ที่ สามารถ ทำตามได้ครับ เพียงแค่ บางคำสั่ง เท่านั้นที่ใช้ไม่ได้






Read More

Thursday, September 29, 2016

Elasticsearch overview

Elasticsearch



Elasticsearch เป็น open-source search engine ที่สร้างขึ้นบน Apache Lucene (Apache Solr ก็สร้างขึ้นจาก Apache LuceneApache Lucene เป็น Core สำหรับ search engine ที่มีทั้ง full-text search-engine library high-performance และ  library และ feature สำหรับการทำ search engine อย่างครบถ้วน เราสามารถที่จะเขียนโปรแกรมด้วย JAVA เพื่อที่จะทำงานร่วมกับ Apache Lucene โดยตรงเพื่อทำ search engine เลยก็ได้ ถ้าเข้าในเข้าใจใน Apache Lucene ซึ่งหนังสื่อ Elasticsearch : The Definitive Guide เขาว่า "มีความซับซ้อนมาก" จึงทำให้มีการพัฒนา search engine ตัวอื่นๆ ที่สร้างขึ้นบน Apache Lucene ในนั้นก็คือ Elasticsearch

Elasticsearch ถูกนำไปใช้กับบริษัทและองค์กรชั้นนำระดับโลก กว่า 80 แห่ง (ที่มา https://www.elastic.co/use-cases)

ไม่ว่าจะเป็น Facebook, Microsoft, saleforce, Adobe, ebay, etc มากมาย จึงทำให้ Elasticsearch เป็น open-source ที่น่าเชื่อถือเป็นอย่างมาก

ในเรื่องข้อดีของ Elasticsearch

  1.  ฟรี (open source ที่อยู่ภายใต้ the Apache License, Version 2.0 )  
  2. อีกอย่างเป็น Cross-Platform สามารถทำงานบนระบบปฏิบัติการอะไรก็ได้
  3. มีสื่อการสอนที่ครบ (สามารถเข้าไปเรียนได้ที่ https://www.elastic.co/)
  4. high-performance
  5. การทำงานแบบ RESTful API
  6. มีการจัดการเรื่องความปลอดภัยการเข้าถึงข้อมูล
  7. ทำงานแบบ real-time (real-time document store)
  8. มี library Elasticsearch Clients ลองรับ JAVA, JAVA REST Client, JavaScript, Groovy, .NET, PHP, Perl, Python, Ruby (ศึกษาได้จากตรงนี้ https://www.elastic.co/guide/en/elasticsearch/client/index.html)
  9. โครงสร้างข้อมูลแบบตามใจ Schema-Free
  10. สามารถทำกระจายข้อมูลไป Node (Massively Distributed )

Elasticsearch ตอนนี้ มาถึง version 2.4.1 แล้ว (30/09/2016) สามารถดาวโหลดได้ที่ (https://www.elastic.co/downloads/elasticsearch)




Read More

Tuesday, September 27, 2016

Advance Report Birt + Groovy on OFBiz

เขียนบทความเกี่ยวกับการทำ Report รวมกับบทความนี้แล้ว มีอยู่ 3 บทความแล้วนะครับ ไครไม่เข้า คอมเม้นมาได้นะครับ (ในกรณีตอบได้จะตอบครับ มือใหม่หัดขับ OFBIZ) ในการทำ Report ในบทความนี้จะเป็น Report ที่แสดงรายการสั่งซื้อสินค้า ซึ่งจะมีการ joint ตาราง OrderHeader และ OrderItem และยังมีตาราง Product อีกตารางหนึ่ง ซึ่งตารางพวกนี้เราจะใช้ของ OFBIZ และโปรแกรมนี้สามารถที่จะสร้าง Report ตามรายชื่อที่ค้นหาได้เลย ที่มีอยู่มาทำ
*/บทความนี้จะไม่อธิบายในสิ่งที่ีได้อธิบายไปแล้วในบทความก่อนๆ ถ้าสงสัยให้ค้นหาในหน้าหลักนะครับ
เริ่มแรกจะทำการสร้าง Screen ใหม่ขึ้นมา 1 Screen แล้วสร้าง Form ค้นหา 1 Form ดังภาพตัวอย่างนี้
Screenshot from 2016-01-14 20:22:46
ต่อเราจะมาสร้างไฟล์ Script Groovy กัน ไฟล์นี้จะเก็บไว้ใน ofbiz/hot-deploy/{app คุณ}/webapp/{app คุณ}/WEB-INF/actions/ แลัวให้เขียนโค้ดในภาพนี้ ลงไป
Screenshot from 2016-01-14 20:27:57
ไฟล์ Groovy นี้เราจะใช้มันเป็นตัวรับและส่ง parameter จาก Form (ที่เรากรอก) ไปยังไฟล์ Report Birt ที่เราสร้างอย่างปลอดภัย
request map เราจะสร้างมาหาไฟล์นี้ ตามโค้ดนี้
<request-map uri="findSaleOrderPrint">
<security https="true" auth="true"/>
<event type="groovy" path="component://helloapp/webapp/helloapp/WEB-INF/actions/orderInfoParam.groovy" ></event>
<response name="success" type="view" value="saleOrderInfo"/>
</request-map>
<view-map name="saleOrderInfo" type="birt" page="component://helloapp/webapp/helloapp/forms/reports/saleOrderReport.rptdesign" content-type="application/pdf"/>
อย่าลืม กำหนด target มาที่ request map นี้ด้วยนะจ๊ะ
หลังจากที่เราสร้าง Screen, Form ต่างๆ แล้ว ต่อมาเราจะทำ Report กัน
เริ่่มจากสร้างไฟล์ Report ,สร้าง Data Source และ Data sets เราจะกำหนด อยู่ 3 data sets ดังนี้
1.เป็น data sets ของ ตาราง OrderHeader
Screenshot from 2016-01-14 20:50:24
โค้ดของตารางนี้ ในส่วน initialize, open และ fetch ตามลำดับ
Screenshot from 2016-01-14 20:55:16Screenshot from 2016-01-14 20:56:05Screenshot from 2016-01-14 20:56:20
2. เป็น data sets ของตาราง OrderItem
Screenshot from 2016-01-14 20:50:43
โค้ดของตารางนี้ ในส่วน initialize จะเหมือนกับ data sets ของ ตาราง OrderHeader  , open และ fetch ตามลำดับ
Screenshot from 2016-01-14 21:02:42Screenshot from 2016-01-14 21:02:50
3. เป็น data sets ของการ join ตารางทั้งสอง
Screenshot from 2016-01-14 20:50:59
เมื่อสร้าง data sets เสร็จแล้วเราจะทำการสร้าง parameter เราสร้างมา 2 ตัว คือ orderIds และ orderNames ซึ่งเป็นค่าที่ส่งมาจากไฟล์ groovy ในการสร้างให้คลิก is Required ออก ด้วย เพื่อให้โปรแกรมสามารถยอมรับได้เมื่อไม่มี parameter
Screenshot from 2016-01-14 21:04:54.png
ต่อมาจะเป็นของการจัด layout กันแล้ว นี้เป็นหน้ากระดาษ Report ของเรา
Screenshot from 2016-01-14 21:10:16.png

Screenshot from 2016-01-14 21:17:40.png
ตารางสีเทานั้นให้คลิกลากจาก data sets ของ joint แล้วเลือก attribute ที่ต้องการแสดง ในส่วนของ ผลรวมนั้น ให้คลิกขวาที่ช่องที่ต้อง insert-> aggregation ดังภาพด้านล่างนี้
Screenshot from 2016-01-14 21:25:46
ในส่วนอื่นๆ ให้เลือกใน data sets ของ join มาวาง หรือเพิ่ม label หรือ text หรือตกแต่งใส่สีให้สวยงาน แล้วลอง ทดสอบว่าได้ดังที่ออกแบบไว้หรือไม่
Screenshot from 2016-01-14 21:29:47Screenshot from 2016-01-14 21:10:16
วันนี้ได้ทำการสร้าง report ที่รับค่าจากการค้นหาของผู้ใช้งานนำมาค้นหาแล้วสร้างเป็น report ออกมาเป็นไฟล์ pdf นะครับ บทความต่อไปจะได้กล่าวถึง groovy กันนะครับ
Read More

(*_*) Report Layout Birt Report on Ofbiz

ในวันนี้จะเป็นบทความเกี่ยวกับการจัด layout หรือการจัดหน้ากระดาษรายงานนั้นเอง ในบทความที่แล้วได้ทำการใช้ตารางที่สามารถดึงข้อมูลจาก ฐานข้อมูลมาแล้ว ในวันนี้เราจะนำความรู้นั้น มาประยุคต์ให้เป็นรายงานอย่างเขาคุ้นตากัน รูปด้านล่างนี้คือเป้าหมายในการสร้างมานะครับ
Screenshot from 2016-01-13 22:18:09.png
เริ่มแรกสร้าง data source สร้างเหมือนบทความที่แล้ว <<บทความที่แล้ว>> กับ data sets ตามนี้
Screenshot from 2016-01-14 08:20:38
ในที่นี้เราจะใช้ตาราง ProductAndPriceVeiw ของ OFBIZ ต่อมาเราจะมาเพิ่มโค้ดในส่วนของ Script กัน เริ่มจาก intialize
Screenshot from 2016-01-12 20:24:44
ต่อมาเขียนโค้ด Open
Screenshot from 2016-01-14 08:24:00
กำหนด fetch
Screenshot from 2016-01-14 08:24:06
สังเกตโค้จะคล้ายกับบทความที่แล้ว เลย <<บทความที่แล้ว>>
ต่อจากนั้นเราจะมานัด layout กััน ในการจัด layout เราจะใช้ั Grid และ table ในการจัด layout ตามนี้ก่อน
Screenshot from 2016-01-14 08:35:52
จัด layout ให้อยู่ในลักษณะ นี้ก่อน ในส่วนที่เป็นเส้นทึบนั้นเป็นตารางที่เราลากมาวางจาก data sets ต่อมาเราจะใน label ก่อนเลย
Screenshot from 2016-01-14 08:41:54
ต่อมาเราจะใส่ข้อความที่มีขนาดยาวให้เลือกเป็นชนิด text ในการสร้างเราสามารถแทรก tag html เพื่อปรับแต่ให้สวยงานได้ด้วย
Screenshot from 2016-01-14 08:43:03Screenshot from 2016-01-14 08:44:11
ในส่วนของวันที่ เราจะใช้เป็น Dynamic text
Screenshot from 2016-01-14 08:42:17
จะสามารถเพิ่ม script อื่นได้มากมาย ให้คลิกเลือก <VALUE-OF>
Screenshot from 2016-01-14 08:47:13
หลังจากกรอกข้อมครบจะได้หน้าตา layout ออกมาในลักษณะนี้
Screenshot from 2016-01-14 08:43:03
จากนั้นให้ไปสร้างปุ่มใน screen หลัก แล้วสร้าง request map ให้เรียก veiw map ที่เรียกมาไฟล์ report ไฟล์นี้่ <<บทความที่แล้ว>> ทำการทดสอบดังนี้
Screenshot from 2016-01-13 22:18:09
*/ ให้ตรวจสอบดูก่อนว่าใน entity ProductAndPriceView มีข้อมูลหรือไม่ ถ้าไม่มีให้ทำการเพิ่มลงไปเสียก่อน
Read More

Basic Report Creating (-O-)

วันนี้เราจะมาทำ report ซึ่งจะดึงข้อมูลจาก entity student ที่เราได้นิยามกันในบทความก่อนๆ ในการทำ report ในเราจะใช้ birt framework เป็นตัวช่วยในการทำ report และจะใช้ Eclipse mars ที่มาพร้อมกับ birt ตามลิงนี้เลย link  ในการทำ report นี้ จะทำต่อจากบทความที่แล้ว
มาเริ่มกันเลยนะครับ ในการทำ Report เราจะทำการสร้าง โฟลเดอร์ชื่อว่า report ไว้ใน path นี้  {ชื่อ app หรือ component}/webapp/helloapp/forms/ แล้วให้สร้างไฟล์ขึ้นมา โดยเลือก file->new->report แล้วให้ตั้งชื่อ แล้วจะได้หน้ากระดาษปล่าวๆ มาScreenshot from 2016-01-12 20:06:41
ในแท็บ Master Page  ดังภาพด้านบน เราจะใช้ทำหัวกระดาษหรือชื่อรายงาน ในการทำเราจะต้องนำ Grid วางในหน้านี้เสียก่อน ถึงจะสามารถแทรก component ต่างๆ ข้าไปได้ ดังภาพนี้
Screenshot from 2016-01-12 20:09:35.png
ให้คลิกลากมาวางได้เลย ตัวอย่างการสร้างหัวกระดาษ หลังจากการนำ Grid (1 x 1) มาวางแล้ว จะนำเอา label มาวางแล้ว พิมพ์ปรับแต่งตามใจใน property ดังภาพ
Screenshot from 2016-01-12 20:14:43
จากนั้นจะมาสร้าง list ข้อมูลนักศึกษาที่ดึงมาจาก entity student โดยการเลือกแท๊บ layout
ต่อมาเราจะมาทำการกำหนดค่า และเขียนโค้ดในการดึงข้อมูลมาจากการสร้าง data source ก่อน
Screenshot from 2016-01-12 20:21:23
จากนั้น สร้าง data set นี้จะเป็นการกำหนดชื่อของคอลัมน์ และจะใช้ชื่อนี้อ้างในขั้นตอนต่อไปด้วย****** นะครับ******
Screenshot from 2016-01-12 20:22:24Screenshot from 2016-01-12 20:22:57
หลังการที่สร้าง data set เสร็จจะมาทำการกำหนดการ import สังเกตดูว่าที่คำว่า script จะถูกเลือกเป็น Initialize (มันจะขึ้นมาอยากนิดหน่อย เทคนิก ให้กลับไปคลิกที่แท็บ layout แล้วในหน้านั้นสัก 1-2 ครั้ง แล้วกลับมาคลิกที่แท็บ Script อีกครั้ง) ให้กำหนดเหมือนในภาพนี้Screenshot from 2016-01-12 20:24:44
จากนั้นใหคลิกที่ data sets ที่เราได้สร้างไว้ แล้วคลิกที่แท็บ Script แล้วเลือก list box ให้เป็น open และ fetch ตามลำดับ ให้พิมพ์คำสั่งตามภาพ ตัวแปร delegator ที่ใช้ในการติดต่อหรือจัดการกับข้อมูล ที่นี้จะใช้ดึงข้อมูลจาก entity student มา
Screenshot from 2016-01-12 20:42:12
ใน fetch นี้จะเป็นการนำข้อมูลมาใส่ในตาราง ในคำสั่ง .getString("-")  มี argument  เป็น ชื่อ attribute ของ entity student สักเกต ตัวแปร row['key'] ซึ่งคือ key นั้นจะเป็นชื่อคอลัมน์ที่เราได้กำหนดไว้ใน data set
Screenshot from 2016-01-12 20:42:19
ต่อมาเราจะมาทำตารางตามภาพด้านล่างนี้ ให้คลิกที่แท็บ Layout คลิกชื่อ data sets ที่เราสร้างมาวาง ในหน้ากระดาษของเรา
Screenshot from 2016-01-12 21:09:46
การสร้าง report ของเราเป็นอันเสร็จ ต่อมาเราจะสร้าง ปุ่ม เปิดดู report ที่เราสร้างกัน
เปิดไฟล์ *Screen.xml ที่เราได้สร้างในบทความก่อนหน้านี้ Screen ชื่อว่า main เราจะเพิ่ม link ขึ้นมาอีก 1 link ตามโค้ดนี้
Screenshot from 2016-01-12 21:54:54
ซึ่งมีโค้ดดังนี้
โค้ดปุ่มเก่า
<link target="CreateStudent" text="${uiLabelMap.HelloappCreateStu}" style="buttontext create"/>
โค้ดปุ่มที่กำลังสร้าง
<link target="ReportStudent" text="report student" style="buttontext edit"/>
request map ในไฟล์ controller.xml ให้เพิ่ม
<request-map uri="ReportStudent"><security https="true" auth="true"/><response name="success" type="view" value="ReportStudent"/></request-map>
<view-map name="ReportStudent" type="birt" page="component://helloapp/webapp/helloapp/forms/reports/helloappStudentReport.rptdesign" content-type="application/pdf"/>
สังเกต กำหนด view map จะแตกต่างไปกับการกำหนดที่เคยทำมา type="birt" กำหนด fomat ให้สร้างเป็นไฟล์ pdf ( content-type="application/pdf") เป็นอันสำเร็จ
ผลลัพธ์  ******/ขออภัยด้วยนะครับ ผมกรอกข้อมูลนักศึกษามั่วไปหน่อย
Screenshot from 2016-01-12 22:07:17Screenshot from 2016-01-12 22:08:07
ว้าว มัน ช่างสุดยอดจริงๆ ฝาก แฟนๆ แนะนำเพื่อนให้ติดตาม jokking code ด้วยนะครับ
Read More

Blogroll

About