Заполнение нескольких полей из фрейма приложения Битрикс24

Рейтинг: 2.7804  
Новая
Предложил Пользователь 264441 08.08.2018 07:56:31

Заполнение нескольких полей из фрейма приложения Битрикс24

Выполняю интеграцию автозаполнения с внешнего сервиса dadata кастомного поля, созданного мной. В приложении заполняется поле, из него забирается значение и записывается стандартным способом в форму сделки для последующего сохранения
//автозаполнение
        $("#ddata").suggestions({
            token: "my_token",
            type: "ADDRESS",
            /* Вызывается, когда пользователь выбирает одну из подсказок */
            onSelect: function(suggestion) {
                var newSuggestion = suggestion.value + '\n' + suggestion.data.region_with_type + '\n' +
                   suggestion.data.city + '\n' + suggestion.data.street_with_type + '\n' + suggestion.data.metro + '\n'
                    + suggestion.data.geo_lat + '\n' + suggestion.data.geo_lon;
                
                $("#ddata").val(newSuggestion);
                BX24.placement.call('setValue', $("#ddata").val().split('\n'));
            },
       });
Этот метод позволяет заполнить только одно кастомное поле, то, которое и вызывает данный фрейм.
Но из сервиса dadata я получаю объект со многими данными, и хотелось быть заполнить ими сразу несколько полей, например, адрес - в адрес, метро - в метро и так далее.
Автозаполнение и получение данных из dadata происходит в данном конкретном случае именно при выборе города, то есть во фрейме кастомного поля "город". И хотелось бы прямо из этого фрейма заполнить не только вызвавшее этот фрейм поле сделки "город", но и другие поля.  Нужен какой-нибудь метод, аналогичный BX24.placement.call, но заполняющий сразу несколько разных полей в карточке сделки!
Можно, конечно, вызывать в приложении crm.deal.update, но тогда, чтобы увидеть новые данные в заполненных полях, придется перезагрузить карточку crm.

Рейтинг: 0  
Пользователь 215959 02.06.2019 19:46:09
Можно, конечно, вызывать в приложении crm.deal.update, но тогда, чтобы увидеть новые данные в заполненных полях, придется перезагрузить карточку crm.
Наверное, в таком случае надо вызывать:
BX24.placement.call('reloadData', function(){console.log('reload call')});
https://dev.1c-bitrix.ru/rest_help/application_embedding/application_embedding/js_interface.php
Рейтинг: 0  
Пользователь 264441 03.06.2019 20:05:11
Этот вызов ничего не даст. В данном случае, когда поле кастомное и реализуется через встройку,  вы находитесь во фрейме, в который загружены данные из вашего внешнего сервера, где размещено приложение. А остальные поля - в самой карточке сделки. Методами JS вы ничего не сделаете из фрейма. Нужен метод REST API, в который дополнительными средствами передается какой-то уникальный идентификатор именно вашей открытой сейчас карточки сделки. И тогда метод теоретически смог бы или перезагрузить карточку, или по аналогии с reloadData обновить поля.