Проблемы с добавлением значения из пользовательского мода в Google Script - PullRequest
3 голосов
/ 15 января 2020

У меня есть функция, которая должна выполнять следующие действия:

  1. Вызывать выпадающий html модальный и передавать то, что пользователь выбирает, в функцию замены, которая ...
  2. находит экземпляр «Классификация документов: НЕ УКАЗАНО» в презентации Google и заменяет его «Классификацией документов: selectValue из модального окна».

Однако, когда я регистрирую selectValue, все, что он делает это получить "Выбранное значение: не определено" и заменяет "Классификация документов: не определено". Что здесь происходит.

function AddValuesFromModal(selectValue) {
  var documentId = SlidesApp.getActivePresentation().getId();
    var htmlDlg = HtmlService.createHtmlOutputFromFile("HTML_myHtml")
    .setSandboxMode(HtmlService.SandboxMode.IFRAME)
    .setWidth(200)
    .setHeight(150);

  var modal = SlidesApp.getUi();
  modal.showModalDialog(htmlDlg, "Document Classification");
  console.log("Getting document log...");
  var body2 = SlidesApp.openById(documentId);
  console.log("Got document!");
  console.log("Selected value: " + selectValue);
  console.log("Start setting value....");
  SlidesApp.getActivePresentation().replaceAllText("Document Classification: UNDEFINED", "Document Classification: " + selectValue, true);
  console.log("Value has been set!");
}
<form id="docType">
<select id="selectDocumentType" name="documentClass">
  <option value="PUBLIC">Public</option>
  <option value="INTERNAL">Internal</option>
  <option value="CONFIDENTIAL">Confidential</option>
  <option value="SECRET">Secret</option>
</select>

<hr/>
 <input type="button" onClick="formSubmit();" value="Submit" />
</form>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js">
    </script>
    <script>a
    function formSubmit(){
    Submit();
    closeIt();
    }
   
    
    function Submit() {
    var selectedValue = $('#selectDocumentType').val();
    console.log(selectedValue);
      google.script.run
        .withSuccessHandler(closeIt)
        .AddValuesFromModal(selectedValue);
      };
      
    function closeIt(){
      google.script.host.close();
    };
    </script>

1 Ответ

3 голосов
/ 16 января 2020

2 шага, которые вы описали, должны быть реализованы как отдельные функции.

Я собрал небольшой пример, первоначально основанный на вашем примере, но немного исправленный.

Требуемый поток программы:

  1. На стороне сервера вызовите функцию showDialog() для отображения диалогового окна (через меню или иным способом)
  2. Вкл. на стороне клиента вызовите функцию updateDocumentClassification() через google.script.run и передайте элемент формы для обработки на стороне сервера (который будет преобразован в объект )

Вот пример :

Code.gs

function showDialog() {
  var dialog = HtmlService.createHtmlOutputFromFile('dialog')
      .setSandboxMode(HtmlService.SandboxMode.IFRAME)
      .setWidth(200)
      .setHeight(150);
  SlidesApp.getUi()
      .showModalDialog(dialog, 'Document Classification');
}

function updateDocumentClassification(formObject) {
  var classification = formObject.documentClass;
  SlidesApp.getActivePresentation().replaceAllText(
      'Document Classification: UNDEFINED', 
      'Document Classification: ' + classification,
      true);
}

function onOpen() {
   SlidesApp.getUi()
       .createMenu('Replace Test')
       .addItem('Replace Text...', 'showModalDialog')
       .addToUi();
}

. html

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
    <form id="docType" onSubmit="handleFormSubmit(this)">
      <select id="selectDocumentType" name="documentClass">
        <option value="PUBLIC">Public</option>
        <option value="INTERNAL">Internal</option>
        <option value="CONFIDENTIAL">Confidential</option>
        <option value="SECRET">Secret</option>
      </select>    
      <hr/>
      <input type="submit" value="Submit" />
    </form>
  </body>

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

<script>

function handleFormSubmit(formObject) {
  google.script.run
      .withSuccessHandler(closeDialog)
      .updateDocumentClassification(formObject);
  $('#formDocumentType :submit').attr('disabled', true);
}

function closeDialog(){
  console.log('Closing dialog...');
  google.script.host.close();
}

</script>

</html>

...