Вопрос

Вставка данных на страницу через JS

Нужно реализовать возможность копирования данных из другой системы в bpm'online путем автоматизированного copy-paste из одной вкладки браузера в другую.

Сделал маленький плагин для Crome - считываю данные полей в локальное хранилище браузера, потом пытаюсь вставить их в поля формы bpm'online.

Здесь, собственно, и затык (при вставке):

Делаю 

var storedLegal = chrome.storage.local.get('bpm_copy_storage', function (items) {

    if (items.bpm_copy_storage) {



    document.getElementById("CasePageUsrExternalSystemNumberTextEdit-el").value = items.bpm_copy_storage.src_task_id;

document.getElementById("CasePageSubjectMemoEdit-el").value = items.bpm_copy_storage.src_task_descr;

и т.д.

В результате:

Визуально данные видны в полях формы, но при сохранении их нет.

Если после выполнения скрипта руками пройтись по полям Tab-ом, данные впоследствии успешно сохраняются.

Попытка симитировать активацию/потерю фокуса через focus()/blur() :

 document.getElementById("CasePageUsrExternalSystemNumberTextEdit-el").focus();

document.getElementById("CasePageUsrExternalSystemNumberTextEdit-el").value = items.bpm_copy_storage.src_task_id;

    document.getElementById("CasePageUsrExternalSystemNumberTextEdit-el").blur();

результата не дает.

Вопрос: какой/какие обработчик дергать из JS ?

 

Нравится

4 комментария

Добрый день

Вам нужно работать с моделью, а не с view. В своем примере вы меняете значение контрола, но оно никак не влияет на модель. А вот при изменении фокуса происходит синхронизация. 

Вам нужно что-то вроде этого:

this.set("Name", "....")

после отработки set произойдут изменения в модели, сработают все обработчики и обновится view (в контроле изменится значение)

 

P.S. Считывание данных также реализуйте через модель. Удобнее всего в local storage ложить объект вида:

{
      "<model_attribute_name>": <value>
}

Пример:

{
  "name": "name1",
  "quantity": 1000,
  ...
}

В этом случае при вставке вы всегда перебираете этот объект и делаете set (также можете воспользоваться hasOwnProperty для определения, а есть ли этот атрибут в этой модели, чтоб лишнего не добавлять)

Артем Гура, 

не совсем понял - у меня из плагина как-раз и есть доступ к view (странице), и в данном контексте this - Window. Я могу каким-то образом получить доступ к модели через js страницы ?

Да, я в консоли броузера как-бы вижу в контексте this обьект Terrasoft с кучей свойств, но что конкретно можно дернуть (если можно) - понятия не имею (я в самой bpm'online нифига не смыслю на уровне модели/программирования).

Или имелось ввиду где-то в самой bpm'online что-то дописать (не получится - доступ уровня юзера)?

Теперь стало ясно. Вам действительно нужно сгенерировать событие, которое заставит обновить данные модели. Для это вам нужно отправлять событие иначе

var event = new Event("blur");
element.dispatchEvent(event);

В этом случае будет сгенерировано событие

Да, так работает. Спасибо.

Показать все комментарии