Нужно реализовать возможность копирования данных из другой системы в 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 ?
Нравится
Добрый день
Вам нужно работать с моделью, а не с 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);
В этом случае будет сгенерировано событие