SugarCRMで物事を行うにはいくつかの方法があります。これにより、非常に強力で、場合によってはカスタマイズが非常に困難になります。さまざまなオプションを利用できるためです。
[保存]ボタンをクリックしたときに何らかのポップアップやカスタムログを表示するには、を変更するのではなく、以下の解決策をお勧めしますeditviewdefs
。
以下のソリューションでは、コアのSugarCRMファイルを変更する必要がないため、アップグレードしても安全であり、別のインスタンスに簡単にインストールできます。
あなたがする必要があるのは、カスタムインストール可能なパッケージを作成し、モジュールローダーを使用してSugarCRMにインストールすることです。
これは、最終的に最終的に必要になるディレクトリ構造のレイアウトです。
SugarModuelPopUp
->custom
->include
->customPopUps
->custom_popup_js_include.php
->customPopUpContacts.js
->manifest.php
SugarModuelPopUp
このカスタムパッケージのルートとしてサーバーとなるフォルダーを作成します。
の中にSugarModuelPopUp
、という名前の新しいPHPファイルを作成しますmanifest.php
。このファイルは、SugarCRMにパッケージのインストール方法を指示します。
にmanifest.php
、次のコードを貼り付けます。
<?php
$manifest = array(
array(
'acceptable_sugar_versions' => array()
),
array(
'acceptable_sugar_flavors' => array()
),
'readme' => 'Please consult the operating manual for detailed installation instructions.',
'key' => 'customSugarMod1',
'author' => 'Kyle Lowry',
'description' => 'Adds pop-up dialog on save on Contacts module.',
'icon' => '',
'is_uninstallable' => true,
'name' => 'Pop-Up Dialog On Save',
'published_date' => '2013-03-06 12:00:00',
'type' => 'module',
'version' => 'v1',
'remove_tables' => 'prompt'
);
$installdefs = array(
'id' => 'customSugarMod1',
'copy' => array(
array(
'from' => '<basepath>/custom/',
'to' => 'custom/'
)
),
'logic_hooks' => array(
array(
'module' => 'Contacts',
'hook' => 'after_ui_frame',
'order' => 1,
'description' => 'Creates pop-up dialog on save action.',
'file' => 'custom/include/customPopUps/custom_popup_js_include.php',
'class' => 'CustomPopJs',
'function' => 'getContactJs'
)
)
);
次に、custom
フォルダを作成します。その中に、フォルダを作成しinclude
ます。その中に、フォルダを作成しcustomPopUps
ます。
次に、custom_popup_js_include.php
ファイルを作成します。このファイルは、カスタムJavaScriptがページに含まれるタイミングと場所を制御します。以下のコードを貼り付けます。
<?php
// prevent people from accessing this file directly
if (! defined('sugarEntry') || ! sugarEntry) {
die('Not a valid entry point.');
}
class CustomPopJs {
function getContactJs($event, $arguments) {
// Prevent this script from being injected anywhere but the EditView.
if ($_REQUEST['action'] != 'EditView') {
// we are not in the EditView, so simply return without injecting
// the Javascript
return;
}
echo '<script type="text/javascript" src="custom/include/customPopUps/customPopUpContacts.js"></script>';
}
}
次に、ファイルを作成する必要がありcustomPopUpContacts.js
ます。これにより、連絡先モジュールの[保存]ボタンをクリックすると、カスタムポップアップが作成されますEditView
。以下のコードを貼り付けます。
function override_check_form() {
// store a reference to the old form checking function
window.old_check_form = window.check_form;
// set the form checking function equal to something custom
window.check_form = function(formname) {
window.formToCheck = formname;
// you can create the dialog however you wish, but for simplicity I am
// just using standard javascript functions
if (confirm("This dialog will pop-up whenever the user click on the Save button. "
+ "If you click OK, then you can execute some custom code, and then "
+ "execute the old form check function, which will process and submit "
+ "the form, using SugarCRM's standard behavior.")) {
// you have clicked OK, so do some custom code here,
// replace this code with whatever you really want to do.
var customCodeVariable = 5;
customCodeVariable = 55 + (customCodeVariable * 5);
// now that your custom code has executed, you can let
// SugarCRM take control, process the form, and submit
return window.old_check_form(formname);
}
// the user clicked on Cancel, so you can either just return false
// and leave the person on the form, or you can execute some custom
// code or do whatever else you want.
return false;
}
}
// call the override function, which will replace the old form checker
// with something custom
override_check_form();
上記のディレクトリ構造と正しいフォルダ内のファイルを作成したら、プロジェクトのZIPファイルを作成できます。SugarCRMのインストール可能なパッケージの場合、ZIPファイルにはプロジェクトディレクトリ内のすべてのものが含まれている必要があることに注意してください。つまり、フォルダを圧縮するのではSugarModuelPopUp
なく、フォルダ内のすべてを圧縮します。
次に、SugarCRMのモジュールローダーを使用してカスタムパッケージをインストールします。これは次の方法で実行できます。
- SugarCRM管理ページに移動します。
- 「モジュールローダー」をクリックします。
- 「参照」をクリックして、ZIPパッケージを選択します。
- 「アップロード」ボタンをクリックします。
- パッケージがアップロードされたら、インストール可能なパッケージのリストでそのエントリを見つけて、[インストール]をクリックします。標準のSugarCRMインストールプロセスに進みます。
このカスタムパッケージをインストールすると、連絡先モジュールの[保存]ボタンをクリックするたびにEditView
、ダイアログがポップアップ表示されます。ダイアログコードは任意のものに置き換えることができるので、それを構成するコードを変更しないでログに記録します。
さらに、このプロジェクトを、SugarCRMへの将来の機能追加の基盤として使用できるはずですEditViews
。[保存]ボタンをクリックしたときにメソッドを使用するモジュールは、check_form
この種のカスタムロジックを実行できます。
たとえば、アカウントに対してこれを行うには、次のようにします。
logic_hooks
アカウントのmanifest.phpの配列要素にエントリを追加します。
'logic_hooks' => array(
array(
'module' => 'Contacts',
'hook' => 'after_ui_frame',
'order' => 1,
'description' => 'Creates pop-up dialog on save action.',
'file' => 'custom/include/customPopUps/custom_popup_js_include.php',
'class' => 'CustomPopJs',
'function' => 'getContactJs'
),
array(
'module' => 'Accounts',
'hook' => 'after_ui_frame',
'order' => 1,
'description' => 'Creates pop-up dialog on save action.',
'file' => 'custom/include/customPopUps/custom_popup_js_include.php',
'class' => 'CustomPopJs',
'function' => 'getAccountJs'
)
)
AccountsJavaScriptCustomPopJs
のファイルに新しいメソッドを追加します。custom_popup_js_include.php
function getAccountJs($event, $arguments) {
// Prevent this script from being injected anywhere but the EditView.
if ($_REQUEST['action'] != 'EditView') {
// we are not in the EditView, so simply return without injecting
// the Javascript
return;
}
echo '<script type="text/javascript" src="custom/include/customPopUps/customPopUpAccounts.js"></script>';
}
customPopUpAccounts.js
ファイルを作成し、customPopUpContacts.js
必要な機能のベースとしてコードを使用します。
SugarCRMで目標を達成する方法は他にもありますが、これは私が個人的に使用する方法であり、安全にアップグレードでき、他のSugarCRMインスタンスに簡単に移行できるという利点があります。