EN VI

Lập Trình SuiteCRM Giỏi Hơn Nếu Bạn Nắm Được Một Số Mẹo Khi Code

Sau một thời gian dài làm việc với SuiteCRM thì mình có rút ra được 1 số mẹo và cách viết code khá hữu ích nên mạnh dạn tạo post này để chia sẻ tới mọi người.

SuiteCRM là gì?

- Đối với người sửa dụng: SuiteCRM là một ứng dụng Quản lý quan hệ khách hàng (CRM) mã nguồn mở miễn phí. SuiteCRM thường được sử dụng để thay thế cho phần mềm CRM độc quyền từ các tập đoàn lớn như Salesforce và các ứng dụng Microsoft Dynamics CRM. SuiteCRM là phần mềm thứ 3 của hệ thống quản lý quan hệ khách hàng phổ biến dựa trên nền tảng của SugarCRM.

- Đối với người lập trình: SuiteCRM là mã nguồn mở, hoàn thiện và có thể tùy chỉnh cao là một hệ thống hoàn hảo để điều chỉnh cho phù hợp với các quy trình quản lý của bạn.

Cách nắm bắt code nhanh hơn

  - Để nắm bắt code nhanh thì theo mình các bạn nên đọc document kết hợp với việc học hiểu source code xem cách tổ chức code như thế nào. 

  - Document thì các bạn nên đọc document ở trang chủ của Suitecrm là chuẩn nhất: Đọc Ngay

  - Việc đọc hiểu source code thì các bạn cần nắm được cơ bản cách tổ chức của 1 module, tạo một module mới, file vardefs, ...

  - Nắm 1 số cách code nhanh, dễ hiểu, ... chỉ dành riêng cho SuiteCRM này.

  - Mộ số bạn thắc mắc: Lập trình SuiteCRM có khó không? thì mình có thể nói rằng: nếu các bạn nắm vững được document cũng như hiểu được source code và nắm được 1 số mẹo khi code thì lập trình SuiteCRM không hề khó chút nào cả.

Một số mẹo khi code SuiteCRM

- Nơi các bạn viết code:

  + Nơi viết code sẽ là thư mục custom. Mọi code mới bạn viết nên viết trong thư mục này, không nên sửa các file sẵn có trong hệ thống vì có thể gây ảnh hưởng đến toàn hệ thống.

  + Các code kiểu dạng tự sinh khi repair thì các bạn nên viết ở thư mục custom\Extension\ để khi repair, code  sẽ tự sinh sang thư mục custom\modules

Cụ thể là viết ở:

custom\Extension\modules\{module}\Ext\Vardefs\{file.php}

 Trong đó {module} là tên thư mục module bạn đang muốn sửa. {file.php} là file php do bạn tạo, sẽ là nơi bạn viết code php.

- Tạo 1 field mới hoặc sửa 1 field đã có cho bảng thuộc module ModuleX:

  + Bạn không nên thao tác thông qua giao diện trên studio trong admin. Vì nếu làm như vậy nó sẽ auto sinh ra 1 bảng nữa, trong khi mình chỉ đang muốn thêm 1 field vào module tức là thêm 1 field vào bảng có sẵn của module này. Nếu bạn thao tác qua giao diện studio như thế thì sau này khi deploy lên server hay sang các máy của các dev khác sẽ cần phải thao tác lại y hệt để sinh ra field (tốn thời gian). Ngoài ra việc tự động thêm bảng sẽ khiến cho việc viết code truy vấn sau này của bạn gặp khó khăn, thay vì viết code lấy dữ liệu từ 1 bảng, giờ phải viết code lấy từ 2 bảng.

=> giải pháp cho vấn đề này là bạn nên viết code tạo field theo link sau (ở đây mình sẽ tạo 1 file php là add_field.php để quản lý việc thêm field cho module đó):

custom\Extension\modules\ModuleX\Ext\Vardefs\add_field.php

  Bên trong file này mình sẽ cần viết code định nghĩa cho field đó(ở đây field mình thêm là username):

<?php
    $dictionary['Account']['fields']['username'] = [
        'name' => 'username',
        'vname' => 'LBL_USERNAME',
        'type' => 'text',
        'isnull' => 'false',
        'module' => 'ModuleX',
        'table' => 'modulex',
        'massupdate' => false,
        'len' => 36,
        'studio' => 'visible'
    ];

=> code ở trên sẽ tùy vào dạng field mà sẽ có chút khác biệt, bạn có thể tham khảo các field đã có trong hệ thống được định nghĩa như thế nào, phần code định nghĩa này nằm ở trong file vardefs.php

=> Sau khi đã định nghĩa cho field xong thì bạn đăng nhập trên giao diện vào admin chọn repair và chọn quick repair. Lúc này sẽ hiện lên 1 trang xác nhận việc thêm field. Bạn ấn đồng ý thì nó sẽ tạo field ra cho bạn.

=> Việc sửa định dạng field cũng tương tự. Nếu đã có code định nghĩ trong file trên thì sửa code, chưa cho thì viết lại 1 phần định nghĩa như trên và chỉ viết nhưng chỗ thay đổi(ví dụ đổi từ type text sang type khác thì khai báo mỗi dòng type thôi). rồi chạy repair như trên.

- Tạo các quan hệ relationship 1-1, 1-n, n-n:

  Tương tự với việc thêm field. Các bạn cũng không nên thao tác trên studio vì nó sẽ tự động sinh bảng không cần thiết. Riêng quan hệ n-n thì các bạn có thể thao tác trên stuido trong giao diện admin cũng được.

=> giải pháp cho vấn đề này là bạn nên viết code tạo relationship theo link sau (ở đây mình sẽ tạo 1 file php là add_relationship.php để quản lý việc thêm relationship với module khác cho module đó):

custom\Extension\modules\ModuleX\Ext\Vardefs\add_relationship.php

  Bên trong file này mình sẽ cần viết code định nghĩa cho relationship đó(ở đây relationship mình thêm là 1-n liên kết từ module ModuleX tới module ModuleY và tên là modulex_moduley_relation thông qua field parent_id ở ModuleY lưu giá trị id của ModuleX):

<?php
    $dictionary['ModuleX']['fields']['modulex_moduley'] = [
'name' => 'modulex_moduley',
'vname' => 'LBL_MODULEX_MODULEY', 'type' => 'link', 'relationship' => 'modulex_moduley_relation', 'module' => 'ModuleY', 'source' => 'non-db', ]; $dictionary['ModuleX']['relationships']['modulex_moduley_relation'] = [
'lhs_module' => 'ModuleX',
'lhs_table' => 'modulex', 'lhs_key' => 'id', 'rhs_module' => 'ModuleY', 'rhs_table' => 'moduley', 'rhs_key' => 'parent_id', 'relationship_type' => 'one-to-many', ];

=> Sau khi đã định nghĩa cho relationship xong thì bạn đăng nhập trên giao diện vào admin chọn repair và chọn quick repair. Như vậy là bạn có thể gọi và sử dụng relationship này 1 thông qua Bean của SuiteCRM như bình thường.

  Tạm thời mình sẽ chỉ viết tới đây, sau này sẽ còn cập nhật thêm. Cảm ơn bạn đã đọc tới đây. Có gì thắc mắc các bạn có thể bình luận đặt câu hỏi.


Rating: 10 (1 Votes)
Comment

Login


Forgot Your Password?

Create Account


Lost your password? Please enter your email address. You will receive a link to create a new password.

Reset Password

Back to login