Показать сообщение отдельно
Старый 25.02.2018, 19:04   #5  
Roman08 is offline
Roman08
Участник
 
93 / 29 (1) +++
Регистрация: 27.02.2008
Адрес: Украина; Житомир
Записей в блоге: 1
Вот обещанные детали реализации. Задача упрощённо - знать, кто последний открывал форму на портале.
1. Тип Entity Form выбрали Edit, иначе копки Approve/Reject не доступны в режиме RеadOnly.
2. При подключении к порталу на стороне портала есть нужная информация про подключившегося - {user.id}, значение webRole etc. Поэтому создано отношение N:1 "Portal User" (client) > Quote, которое хранит ID пользователя портала (контакт в СРМ). Задача - обновить значение этого лукапа (поле new_portalcontactid) в CRM.
3. Рассматривался вариант создания и вызова веб-сервиса, но хотелось чего-то "меньше по весу".
4. Кнопка Submit присутствует на Entity Form по умолчанию, но она была скрыта - потому что пользователь не может менять детали на портале:
X++:
  $(".button[id='UpdateButton']").hide();
5. Поле new_portalcontactid добавлено на форму портала, причём скрыть его - нужнa не одна, а три команды -
X++:
 $("#new_portalcontactid_name").hide();
   $("#new_portalcontactid_label").hide();

   if (IsNull != $("button.btn.btn-default.clearlookupfield")) {
     $("button.btn.btn-default.clearlookupfield").slideUp();
   }
3-я команда для clearlookupfield скрывает большой крестик выбора на поле лукапа, почему-то hide для него не работает, поэтому он исчезает подобно улыбке Чеширского кота (в реальности очень быстро, для пользователя незаметно).
6. Кнопка Submit (#UpdateButton), хотя и скрыта, но вызвать событие её нажатия можно -
X++:
function gridCallBack() {
     if($('table.table-striped.table-fluid').is(':visible')) {
         $("#UpdateButton").trigger("click");
       } else {
           setTimeout(gridCallBack, 200); 
       }
    }
CallBack нужен, чтобы удостовериться, что таблица с дочерними записями подгрузилась на форме, иначе это вызывало ошибку изображения линий.
7. На Entity Form в разделе "On Success Settings" указали, что нужно сделать Redirect на Web Page, и выбран прототип этой же страницы.
8. при загрузке страницы поле new_portalcontactid подгружается из СRМа на форму вместе со всеми остальными,считывается, проверяется на совпадение с текущим {user.id} и если они разные, новые значения лукапа сохраняются и вызывается gridCallBack().
X++:
 if (userID != $("#new_portalcontactid")[0].value) {
          //set field value to  current portal user ID
          $("#new_portalcontactid").val(userID);
          $("#new_portalcontactid_entityname").val(userType);
          gridCallBack();
        }
9. Для пользователя страница перезагружается, это довольно быстрый процесс но почему я и назвал решение не очень элегантным. Если нужны ещё детали - спрашивайте

Последний раз редактировалось Roman08; 25.02.2018 в 19:05. Причина: орф.ошибка