Обнаружить изменение в поле даты suitecrm - PullRequest
0 голосов
/ 01 апреля 2019

Я пытаюсь определить, когда дата изменилась в обычном поле "дата"

Видел несколько сообщений на форуме о том, как это можно сделать с помощью текстовых полей и выпадающих списков, но это не работает для полей даты.

Также пробовал:

'displayParams' => массив ( 'javascript' => 'onchange = "checkStatusOption (this)"', ),

В editviewdefs.php, но это не сработало (хотя и работает с текстовыми полями)

Самое близкое, что у меня есть, это просто отслеживание каждого клика на экране и проверка состояния поля даты до и после, но это, очевидно, не очень элегантное решение

Вот код из расширенного режима редактирования

    function display() {

        parent::display();

        $js = <<<EOT
<script type="text/javascript" language="JavaScript">

        // Capture initial state
        calendar_before = document.getElementById("contract_date_c").value;

       // Wait for any click to take place anywhere on the screen
        $(document).click(function() {

            // Capture state after we clicked somewhere
            calendar_after = document.getElementById("contract_date_c").value;

            // Compare the before and after
            if(calendar_before != calendar_after) {

                // Change detected
                alert("Something's changed eh?" + calendar_before +" "+ calendar_after);
            }

            // Set the new state of the before_calendar
            calendar_before = document.getElementById("contract_date_c").value;


        });

    }

</script>
EOT;

// now I output the javascript
        echo $js;

    }

UPDATE:

Я также попробовал предлагаемое решение

1) Создает файл custom / modules / un_inventory / contract_date_c_change.js и помещает в него следующее:

function yourCustomFunction(formElement){
    console.log(formElement);
}

2) Включил ссылку на этот файл в файле метаданных (убедился, что он загружается):

array (
    'file' => 'custom/modules/un_inventory/contract_date_c_change.js',
),

3) Прикрепил обновление Обратный звонок к полю:

    array (
        'name' => 'contract_date_c',
        'label' => 'LBL_CONTRACT_DATE',
        // Checks if this field got filled up and shows hidden form field
        'displayParams' =>
            array (
                'updateCallback' => 'yourCustomFunction();',
            ),
    ),

Но ничего не происходит, когда я изменяю это поле даты

1 Ответ

1 голос
/ 01 апреля 2019

Проверьте это (только что протестировано в SuiteCRM 7.11) для поля даты и времени, для других полей посмотрите этот ответ на другой SO вопрос

Сначала включите свой пользовательский JS вeditviewdefs.php (пример для модуля Учетные записи)

'includes' => 
      array (
        0 => 
        array (
          'file' => 'modules/Accounts/Account.js',
          'file' => 'custom/modules/Accounts/myCustomFile.js',
        ),
      ),

Создайте пользовательский файл JS custom/modules/Accounts/myCustomFile.js.

function yourCustomFunction(formElement){
  console.log(formElement); 
}

Затем обновите поле, которое вы хотите отслеживать на предмет изменений (contractigned_c впример), используя следующий код в editviewdefs.php:

array (
            'name' => 'contractsigned_c',
            'label' => 'LBL_CONTRACTSIGNED',
            'displayParams' =>
             array (
              'updateCallback' => 'yourCustomFunction(this)',
          ),
          ),

Теперь сделайте Repair and Rebuild внутри раздела Admin / Repair и вуаля, это должно работать :)

Вы можете добавитьфункция JS на function display(), если хотите, то же самое, функция будет вызываться сразу после нативного combo update.Это будет выглядеть так combo_contractsigned_c.update(); yourCustomFunction(this)

...