Wednesday, September 08, 2010 |
|
|
|
|
|
|

|
|
vtiger CRM nmduc073 posted on March 14, 2010 06:00::70 view(s) Hồi trước mình cũng đã từng làm với module Users của vtiger rồi và gặp vấn đề với nó. Đến mấy hôm nay, mình lại phải làm việc với nó nữa. Do quên nên bây giờ mất quá nhiều thời gian cho nó quá. Đầu tiên là chuyện thêm 1 field có uitype 56 (checkbox) vào mà cứ tự động checked khi mở trang Create new user. Mất nhiều thời gian thì mình mới phát hiện do đoạn code trong EditViewUI.tpl. Mấy cái if else đã làm cho chỉ có trong users mới bị, còn module khác thì ok. Rồi tiếp nữa, khi save lại thì cái giá trị checkbox đó cứ tự động lưu thành no, tức là không được check, cho dù mình đã check. Điên ruột với nó luôn. Hai bug này làm mình thức từ 10g tối đến 1g sáng mà không biết cách. Đến hôm sau ngồi thêm mấy tiếng thì mới nhớ cách khắc phục bug 2 này. Phải nhập tên field mới nhập vào biến $column_fields trong Users.php. var $column_fields = Array('user_name'=>'','is_admin' =>'','user_password'=>'','confirm_password'=>'',… Phew, chỉ có module này mới lắm chuyện như vậy. Làm mình cứ tưởng như nó bị ma ám chứ. T_T [Read the rest of this article...] nmduc073 posted on March 13, 2010 15:11::30 view(s) Từ tối qua đến giờ mình đang điên đầu với thằng vtiger. Theo các bước thông thường, mình tạo 1 field có uitype trong bảng vtiger_users. Bắt chước những thằng có sẵn, mình chọn kiểu data là varchar với số ký tự là 3. Trong bảng vtiger_field, mình khai báo nó là C~O. Khi view trên form tạo user mới thì thấy field đó xuất hiện. Nhưng vấn đề là nó tự động checked. Bực quá. Mình thử test trên 1 module bình thường thì thấy field dạng uitype 56 đó đâu có bị check mặc định đâu. Không hiểu nổi. Hix. [Read the rest of this article...] nmduc073 posted on February 05, 2010 11:14::58 view(s) Trên file template của vtiger, mình đã comment đoạn code lại như sau: <!-- Commented by Duc Nguyen 12-1-2010 {include file="Inventory/InventoryActions.tpl"} --> Tưởng ngon lành rồi. Test trên FF thấy nó biến mất. Ai dè, đến một thời gian dài sau, bên SQA test và thấy nó. Không tin được điều đó vì xem trên FF không thấy. Nhưng khi thấy nó hiện trên IE thì phải tin. Và mình phải sửa lại như sau: <!-- Commented by Duc Nguyen 12-1-2010 include file="Inventory/InventoryActions.tpl" --> [Read the rest of this article...] nmduc073 posted on February 02, 2010 13:38  ::157 view(s) Khi tạo 1 custom view của 1 module vtiger, nó có list các columns để ta chọn các field sẽ hiển thị trong custom view. Theo yêu cầu của dự án, thì cần phải kiểm soát, không cho hiển thị 2 field contactuser_password và contactuser_confirmpassword khi chọn field để hiển thị trong custom view. Để làm việc đó, mình vào customview.php trong modules\CustomView, tìm đến dòng 379. if($module != 'HelpDesk' || $fieldname !='filename') $module_columnlist[$optionvalue] = $fieldlabel; if($fieldtype[1] == "M") { $this->mandatoryvalues[] = "'".$optionvalue."'"; $this->showvalues[] = $fieldlabel; $this->data_type[$fieldlabel] = $fieldtype[1]; } [Read the rest of this article...] nmduc073 posted on February 01, 2010 14:37  ::65 view(s) Lại bên SQA phát hiện ra 1 vấn đề mới trên Popup của vtiger. Giả sử mình mở Popup của User, hiển thị list các User. Giả sử có 20 user được hiển thị trên 4 page, mỗi page hiển thị 5 item. Vấn đề ở đây là khi click Next để hiển thị đến page thứ 4, rồi click next để hiển thị page tiếp thì nó báo lỗi User not found. Thực tế chỉ được view 4 page thôi. Để khắc phục lỗi đó, mình vào ListViewUtils.php trong include\utils, thêm code sau trong hàm getTableHeaderSimpleNavigation. //Added by Duc Nguyen 1-2-2010 if($navigation_array['verylast']>1) { if($navigation_array['next']>=$navigation_array['verylast']) { $navigation_array['next']=$navigation_array['verylast']; } } //End Duc Nguyen 1-2-2010 Chỉ cần thêm vào đoạn đầu là được rồi. [Read the rest of this article...] nmduc073 posted on January 29, 2010 06:38  ::589 view(s) Trong ListView của module, nó liệt kê các record của module đó. Ví dụ khi view Products module, ta thấy list các item. Và mỗi record, ta thấy ở cuối là các link edit và delete. Ngoài ra, ta còn có thể thấy list này khi view phần More Information của 1 item thuộc module khác. Ví dụ như view phần More Information của item thuộc Leads, bạn có thể thấy 1 list các item thuộc module Products nếu như có add nó vào. Vậy câu hỏi ở đây là nếu bạn muốn điều chỉnh, tác động đến các link edit và delete này thì bạn sẽ phải sửa code ở đâu? Ví dụ như bạn chỉ muốn link edit của Products trong phần More Information của 1 leads item, còn không cần link delete. Hay muốn link delete trong phần ListView ở module chính có thêm 1 hàm javascript của chúng ta và chỉ ở đó là xài hàm đó thôi. Tất cả mọi thứ bạn cần sửa nằm ở file ListViewUtils.php trong include\utils. -function getListViewEditLink($module,$entity_id,$relatedlist,$returnset,$result,$count) Hàm này tạo ra link edit cho các list view. Ví dụ như nó sẽ tạo ra link như sau: http://localhost:82/CRM%20Project/index.php?module=Products&action=EditView&record=1490&return_module=Products&return_action=index&parenttab=Customer&return_viewname=24 -function getListViewDeleteLink($module,$entity_id,$relatedlist,$returnset) Hàm này tạo ra link delete cho các list view. [Read the rest of this article...] nmduc073 posted on January 26, 2010 05:52  ::99 view(s) Tiếp tục với bài viết trước, mình sẽ xóa bỏ cái link cho field svlanguageid khi hiển thị detail view của module QAttribute. Và đây là các bước mình làm: -Mở file DetailViewUtils.php trong include\utils. -Tìm hàm function getDetailViewOutputHtml( -Tìm đến đoạn code trong đó: if($uitype == '10'){ … } [Read the rest of this article...] nmduc073 posted on January 25, 2010 05:51::102 view(s) Giả sử, mình tạo 1 module QAttribute. Trong module đó, có sử dụng 1 field svlanguageid có uitype là 10. Khi view trên listview, thì field svlanguageid đó hiển thị dưới dạng hyperlink. Tuy nhiên, trong yêu cầu khách hàng thì mình phải bỏ cái link đó đi, field đó chỉ hiện dạng text thôi. Để làm được điều đó, mình làm theo các bước sau: -Mở file ListViewUtils.php trong include\utils\. -Tìm đến hàm function getValue(… -Trong đó, ta tìm đến đoạn có if($uitype == '10'){ …. } [Read the rest of this article...] nmduc073 posted on January 23, 2010 05:50::75 view(s) Hôm nay, đọc bug do bên SQA gửi thì mình mới biết được vấn đề này. Khi mở module Question hay bất cứ module nào, tạo 1 record mới. Nhập vào field questionname hay Module_name, với data là 00000. Có thể nhập bao nhiêu số 0 tùy ý. Save vào dữ liệu thì bạn sẽ thấy số 00000 đó trên list view, trên edit view. Nhưng trong detail view thì bạn sẽ chẳng thấy gì cả. Thực sự là 1 điều khó hiểu. Sau mấy tiếng lần mò, thì mình đã phát hiện ra đoạn code làm vấn đề đó tại line 1288 trong file DetailViewUtils.php trong include\utils. if($col_fields[$fieldname]=='0' && $fieldname != 'filedownloadcount' && $fieldname != 'filestatus' && $fieldname != 'filesize') $col_fields[$fieldname]=''; Thực sự không hiểu rõ tại sao vtiger lại có đoạn code đó. Và cũng không dám xóa đoạn code đó. Bị 1 lần là sợ rồi. T_T Và cứ đành để đó làm câu hỏi. [Read the rest of this article...] nmduc073 posted on January 16, 2010 20:03  ::53 view(s) Trong các module vtiger, nó có hỗ trợ việc export các dữ liệu trong module ra file excel. Tuy nhiên, khi trong module đó mà có field có uitype là 10, thì khi export ra, field đó sẽ không có dữ liệu gì cả. Mình đã gặp vấn đề đau đầu với nó khi phải làm những task liên quan đến vấn đề này. Mày mò mãi cũng biết cách khắc phục. Tuy nhiên, do làm lâu rồi nên mình quên mất tại sao làm như thế lại khắc phục được vấn đề. ^_^ Giả sử như field có uitype 10 đó là providerid. Mình sẽ làm các bước sau: -Mở file export.php trong include\utils\. -Tìm đến hàm function sanitizeValues($arr). -Tìm đến dòng elseif($uitype == 10){ Của mình là dòng 295. -Và thêm thông tin vào elseif($uitype == 10 $fieldname!='providerid'){ Vấn đề được giải quyết. Chỉ tức là không nhớ lí do tại sao nữa. T_T [Read the rest of this article...] nmduc073 posted on January 15, 2010 08:24::44 view(s) Khi bạn tạo 1 customized report mới trong module Report, thì bạn sẽ thấy tên report tạo rạ nằm trong 1 folder nào đó mà bạn chọn trước. Tuy nhiên, bên cạnh cái link name, bạn sẽ thấy có icon edit. Nó làm cho user có thể edit được report đó. Đó là điều bạn không muốn. Do đó, bạn phải tìm cách làm cho biến mất nút edit đó.
Ví dụ như mình tạo 1 report có name là Sales Report. Để làm biến mất nút edit, mình sẽ làm các bước sau:
-Mở table vtiger_report.
-Tìm record có reportname là Sales Report.
-Tìm state của record đó hiện giờ là CUSTOM, hãy chuyển nó thành SAVED.
-Lưu lại thay đổi đó.
Giờ bạn hãy refresh lại page. Và link edit đã biến mất.
Rất tiếc là mình không biết có cách nào khác chỉnh trực tiếp trên site không nữa. Chỉ biết cách chỉnh database như vậy thôi.
Thực ra, để làm cho report không thể edit, bạn còn cần làm 1 việc là làm cho nút Customize ở bên trong phần detail của report đó bị biến mất. Mình sẽ nói trong 1 dịp khác. [Read the rest of this article...] nmduc073 posted on January 13, 2010 05:12  ::47 view(s) Mặc định thì giá trị Sharing access của một module vtiger là Public. Để chuyển giá trị của nó sang Private chẳng hạn, ta làm các bước sau: -Đăng nhập site với quyền host. -Vào Settings->Settings. -Bên trái, dưới Users & Access Management, ta click vào Sharing Access. -Click vào button Change Privileges. -Tìm đến module và chuyền giá tttrị về Private chẳng hạn. -Click ok. -Click Recalculate. -Click ok khi có 1 form hiện ra. Vậy là xong. [Read the rest of this article...] nmduc073 posted on January 12, 2010 05:15::93 view(s)
Trong bài viết này, mình dự định cung cấp cho các bạn một cái nhìn sơ lược, theo hiểu biết chủ quan của mình, về những module chính trong vtiger. Thực sự ban đầu mở database của vtiger, mình cảm thấy bị choáng khi thấy nó có đến hơn 400 bảng. Tự hỏi nó làm gì với hơn 400 bảng đó chứ. Trong những bảng đó, thì có một số bảng chính như sau: -vtiger_crmentity: Đây là bảng quan trọng nhất trong các bảng. Nó lien kết các bảng lại với nhau. Từng item trong các table khác đều được ghi nhận trong bảng này. Ví dụ như ta tạo 1 Contacts mới, ngoài việc 1 record được tạo mới trong bảng vtiger_contactdetails, thì có 1 record được tạo mới trong vtiger_crmentity link tới record trong vtiger_contactdetails. Thành ra cái bảng này là trung tâm của cả crm. Mình không hiểu lý do tại sao tác giả làm như vậy. Nhưng mình không nghĩ đó là cách hay khi tập trung tất cả trong 1 table như vậy. Cứ thử nghĩ theo thời gian, số lượng record được tạo ra quá nhiều ra ở đây thì rõ. -vtiger_field: Đây cũng là 1 bảng quan trọng bậc nhất, chứa thông tin chi tiết các field trên tất cả các table. Khi bạn tạo 1 module mới, có table mới với các field id, name, price chẳng hạn. Bạn cần khai báo thêm 1 lần nữa trong vtiger_field với các thông tin phù hợp như uitype, fieldname, block… Nó được dùng để hiển thị field trên các view, -vtiger_fieldmodulerel: Chứa các thông tin lien kết 2 module lại với nhau. Giả sử như trên module Contacts, bạn có 1 field xyz có uitype 10, liên kết tới module Users. Khi đó bạn phải khai báo sự kết nối giữa module Contacts và module Users thông qua fielded của filed xyz. -vtiger_blocks: Chứa thông tin chi tiết về các block được sử dụng trọng các module gồm tên gọi, tabid mà nó liên quan… -vtiger_customview: Chứa tên của các view mặc định và được tạo của tất cả các module trong vtiger. Tất cả được chứa trong đây. Nó có tên view, tên module lien quan… [Read the rest of this article...] nmduc073 posted on January 11, 2010 06:14  ::241 view(s)
Mình là người không biết về PHP trước khi làm vtiger vì dự án bắt buộc. Tất nhiên mình cũng không biết vtiger CRM là gì. Mình cũng mới chỉ biết vtiger được 2 tháng thôi khi viết bài này. Những gì mình học được qua thực tế xin được chia sẻ cùng các bạn mới tìm hiểu. Đầu tiên, tất nhiên là ta cần cài đặt cho được vtiger để chạy trước đã. Đó cũng là 1 vấn đề nếu chưa biết về PHP. Tiếp đến, ta cần chạy vtiger để biết nó có cái gì trong đó. Cứ chạy lung tung trong các tab, mở từng view của các module để biết nó có 3 dạng view chính là List view, edit view và detai lview. Tiếp đến, để code, mình nghĩ không có gì tuyệt vời hơn là bạn dùng module Payslip của vtlib. Đó chính là template đơn giản cho module của vtiger. Hãy lên đây để down nó (http://forge.vtiger.com/frs/?group_id=174&release_id=469). Tập cách cài nó lên site. Chạy nó để hiểu rằng nó làm gì. Bước tiếp theo, bạn cần xem code của module Payslip. Cứ mở code các trang chính ra. Bắt đầu từ ListView.php. rồi tới CreateView.php. EditView.php… Bạn cứ đặt các lệnh echo, print_r, exit… để debug, xem các giá trị của các biến, để hiểu luồng dữ liệu của nó đi như thế nào… Thực sự trong PHP riết rồi mình nghiền cái món debug kiểu này. ^_^ Khi bạn hiểu được luồng dữ liệu trong module đi thế nào rồi thì bạn sẽ làm rất nhanh. Cuối cùng, cách nhanh nhất để bạn nắm được vtiger chính là có 1 task cụ thể và bị dí bởi task đó. Chỉ có trong công việc cụ thể thì bạn bị buộc phải nắm nó thật nhanh. ^_^ Cụ thể là mình. Nếu bảo nghiên cứu khơi khơi thì chắc giờ này vẫn chưa biết gì. Và khi làm, có lẽ đừng cố tìm hiểu hết vtiger, hãy chỉ cần hiểu chỗ mình cần sửa. Tìm chỗ đó, và hiểu nó, và sửa. Nhanh nhất. Site bạn có thể tìm kiếm sự trợ giúp theo mình biết hiện giờ chỉ có forum chính thức của nó: http://forums.vtiger.com/. Có vấn đề gì thì các bạn hãy lên đó hỏi mọi người. Tất nhiên bằng tiếng Anh. ^_^ [Read the rest of this article...] nmduc073 posted on January 09, 2010 05:02::44 view(s) Trong module Products của vtiger, nó liệt kê những product. Click vào 1 item, ta view thông tin của 1 product. Rồi bước tiếp theo, ta click vào nút Duplicate để tạo 1 item mới giống các thông tin như item hiện tại. Tuy nhiên, có 1 vấn đề là trên header nó chỉ hiện dòng chữ: Duplicating “” Đáng lẽ phải có product name như Produc_A chẳng hạn trong đó. Đây là lỗi của vtiger. Nó bị nhóm SQA phát hiện. Dưới đây là cách fix: -Vào module\Products\EditView.php. Tìm đến dòng có $smarty->assign(‘DUPLICATE’, $isduplicate); Ngay sau đó, ta thêm đoạn code sau: if($isduplicate) {
$recordName = array_values(getEntityName($currentModule, $record));
$recordName = $recordName[0];
$smarty->assign('NAME', $recordName);
} Nó xử lý cho name trong trường hợp khi duplicate. [Read the rest of this article...]
|
|
 |
|
|
|
|
|
|
Home TrangIT Forum |
|