Custom viewdefs trong BM
Lời mở đầu
Ở BM cũ khi 1 module có nhiều loại (vd: tờ trình , đề nghị, …). khi muốn hiển thị detail view, edit view của từng loại, ta thường hay dùng js để ẩn hiện các trường khác biệt. điều đó với làm phình code và khá khó để debug. Cho nên với phiên bản SuiteCRM mới đề xuất tách chi tiết các loai ra từng view riêng.
Tạo file controller
Bước đầu tiên ta cần tạo file controller.php trong đường dẫn modudes/<beanName>/controller.php
Ở file này ta tạo các hàm bắt đầu với action_<tên action>. Tên action nằm ở action_view_maps.php nhé. Một số action mặc định: detailview, editview, listview
ví dụ:

ở vd trên thì mình sẽ bắt theo $_REQUEST[‘type’] để điều hướng vào đúng view và viewdefs mình cần, nó sẽ là .view.<$this->view>.php và <$this->view>viewdefs.php để tiếp tục chỉnh sửa.. Lấy vd nếu type mình là test mình sẽ vào view.edit_test.php và edit_testviewdefs.php để tiếp tục chỉnh sửa.
Tạo file view custom
Lấy theo ví dụ trên. Lúc này mình sẽ tạo 1 file view.edit_test.php trong thư mục modules/<beanName>/views
Tại file này chú ý 2 hàm cần thiết: getMetaDataFile và preDisplay:

Hàm getMetaDataFile dùng để dẫn chính xác mình tới file metadata nào.
Trong hàm preDisplay thực chất tương tự như hàm của Sugarview. chỉ khác mình bổ sung vào file tpl để suite cache đúng file tpl. Nếu không có sẽ suite chỉ cache đúng 1 lần 1 loại ko cache loại khác.
P/s: Nhớ khai báo thêm ở file EditViewTest.tpl ở modules/<beanName>/tpl.
Tạo file viewdefs.php
Cuối cùng tạo 1 file edit_testviewdefs.php trong thư mục modules/<beanName>/metadata.
File này giống như editviewdefs.php thông thường ban tùy chỉnh theo docs SuiteCRM.
Kết bài
Đây là các bước cơ bản để custom ra 1 viewdefs riêng. Các detailview và listview cũng tương tự. Trên thực tế nếu nhiều loại bạn nên viết dạng kế thừa để tránh lặp quá nhiều code. Xin cảm ơn đã đọc bài.