[Vtiger CRM] Khắc phục một số lỗi khi dùng REST API

Không rõ bản Enterprise thế nào chứ bản Open source của vTiger CRM vô cùng là buggy. Ở đây tôi nói đến bản 6.5.0 là phiên bản tôi đang sử dụng, còn phiên bản mới hơn thì tôi chưa thử vì rất rủi ro khi upgrade.

[Vtiger CRM] Khắc phục một số lỗi khi dùng REST API
Lôi sai tham số khi dùng API convertlead

API xử lý và phản hồi rất chậm

Nhiều khả năng là do PHP 5 chưa được cấu hình đúng để phục vụ được vTigerCRM vì mã nguồn này đòi hỏi rất nhiều resource.

Bạn cần bổ sung cấu hình sau vào php.ini

display_errors = On
max_execution_time = 0
memory_limit = 512m
post_max_size = 40m
upload_max_filesize = 40m
error_reporting = E_WARNING & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT
log_errors = Off
short_open_tag = Off
session.gc_maxlifetime = 86400

Đối với Debian Linux, hãy tạo một file có tên vtigercrm.ini trong thư mục /etc/php5/mods-available có nội dung như trên, sau đó chạy lệnh sau để kích hoạt.

sudo phpenmod vtigercrm

Cuối cùng khởi động lại Web server.

sudo systemctl restart apache2

Lỗi DATABASE_QUERY_ERROR khi thực hiện thao tác “create” hoặc “update”

Lỗi này xảy ra khi sử dụng hệ thống CSDL MariaDB phiên bản từ 10.2.4. Phiên bản này có sự thay đổi lớn ở SQL_MODE, theo đó quy tắc kiểm tra ERROR_FOR_DIVISION_BY_ZERO được bật mặc định.

Bạn có thể thử kiểm tra bằng cách login vào MariaDB qua dòng lệnh sau:

sudo mysql -uroot -p

Trong console của lệnh mysql, gõ lệnh sau để kiểm tra SQL Mode

SELECT @@SQL_MODE, @@GLOBAL.SQL_MODE;

Bạn sẽ thấy kết quả như sau:

+-------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------+
| @@SQL_MODE                                                                                | @@GLOBAL.SQL_MODE                                                                         |
+-------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------+
| STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION | STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------+

Nhiều trường hợp Web Service đã vi phạm quy tắc trên khi thực hiện thao tác create hoặc update, đặc biệt khi có trường nào đó bị bỏ trống – mặc dù hợp lệ theo specification.

Để khắc phục, ta tắt hết các quy tắc kiểm tra đi bằng cách thêm đoạn cấu hình sau vào /etc/mysql/my.ini hoặc module cấu hình của nó (ví dụ trong Debian là /etc/mysql/mariadb.conf.d/50-server.cnf)

[mariadb]
sql_mode=

Sau đó khởi động lại MariaDB service.

systemctl restart mariadb.service

Một lần nữa, bạn hãy thử login vào MariaDB qua dòng lệnh và kiểm tra SQL Mode như nêu trên, nếu hiển thị như sau là đạt yêu cầu.

+------------+-------------------+
| @@SQL_MODE | @@GLOBAL.SQL_MODE |
+------------+-------------------+
|            |                   |
+------------+-------------------+

Lỗi sai tham số khi dùng API ‘convertlead’

Tham số truyền cho REST API ‘convertlead’ khác với mô tả trong API Documentation. Nguyên nhân có thể do người làm API specs và người viết code chả có liên hệ gì với nhau.

Trường hợp bạn chưa cài đặt Vtiger CRM

Sửa file mã nguồn DefaultDataPopulator.php xóa bớt các tham số không liên quan để cho giống với Documentation.

modules/Users/DefaultDataPopulator.php

...

'convertlead' => array(
    "include" => array(
        "include/Webservices/ConvertLead.php"
    ),
    "handler" => "vtws_convertlead",
    "prelogin" => 0,
    "type" => "POST",
    'params' => array(
        //'leadId' => 'String',
        //'assignedTo' => 'String',
        //'accountName' => 'String'
        //'avoidPotential' => 'Boolean',
        //'potential' => 'Encoded'
        "element" => "Encoded"
    )
),

...

Trường hợp bạn đã cài đặt Vtiger CRM

Sửa database xóa các tham số không liên quan và chèn thêm tham số đúng bằng các lệnh sau:

DELETE FROM `vtiger_ws_operation_parameters` WHERE operationid = 13;
INSERT INTO `vtiger_ws_operation_parameters`(`operationid`, `name`, `type`, `sequence`) VALUES (13, 'element', 'Encoded', 1);

Phản hồi về bài viết

Cùng thảo luận chút nhỉ!

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.