2

以下のコードでは、名前と ID を持つ TextBox を定義しています。ボタン ハンドラは正常に動作しますが、TextBox に入力された値を取得できません。msgBox は表示されますが、e.parameter.matchValue表示はundefined.

アプリの他の部分でも同じロジックを使用していますが、ListBox を使用すると正常に動作します。

私は何を間違っていますか?

function chooseColumnValueToMatch() {
  var app = UiApp.createApplication().setHeight(150).setWidth(250);
  var ss = SpreadsheetApp.getActiveSpreadsheet();

  var columnName = ScriptProperties.getProperty("columnNameToMatch");

  var h1Line = app.createHTML("<h2>Value to match "+columnName+":</h2>");
  var textPara = app.createHTML("<p>Type the VALUE that the <b>"+columnName+"</b> column must match EXACTLY to send the message.</p>");
  var selectionHandler = app.createServerHandler('chooseColumnValueToMatchSelectionHandler');
  var valueInputBox = app.createTextBox()
      .setTitle("Match value for "+columnName)
      .setName("matchValue")
      .setId("matchValue");
  var submitBtn = app.createButton("Submit", selectionHandler);

  app.add(h1Line)
    .add(textPara)
    .add(valueInputBox)
    .add(submitBtn);
  ss.show(app);
}
function chooseColumnValueToMatchSelectionHandler(e){
  var app = UiApp.getActiveApplication();
  var columnName = ScriptProperties.getProperty("columnNameToMatch");

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var msg = e.parameter.matchValue;

  Browser.msgBox("Value to match "+columnName+" column is:", msg, Browser.Buttons.OK);

  return app;
}
4

2 に答える 2

6

ServerHandler.addCallbackElementメソッドを使用する必要があります。次のコードはそれを示しています。メソッド呼び出しは、パラメーターとして指定されたウィジェットの値をハンドラーに渡す必要があることを GAS 内部に「伝えます」。

ハンドラーによって処理される複数のウィジェットがある場合、すべてのウィジェットで を呼び出す代わりに、すべてのコントロールをパネルに配置し、メソッド パラメーターaddCallbackElementとしてパネルのみをポイントすることができます。このチュートリアルのポイント 4.4addCallbackElementのコードは、この方法を示しています。

function doGet(e) {
  var app = UiApp.createApplication();
  var valueInputBox = app.createTextBox()
      .setTitle("Match value for XXX")
      .setName("matchValue")
      .setId("matchValue");
  var selectionHandler = app.createServerHandler('chooseColumnValueToMatchSelectionHandler');
  selectionHandler.addCallbackElement(valueInputBox);
  var submitBtn = app.createButton("Submit", selectionHandler);
  var output = app.createLabel().setId("output"); 
  app.add(valueInputBox).add(submitBtn).add(output);  
  return app;
}

function chooseColumnValueToMatchSelectionHandler(e){
  var app = UiApp.getActiveApplication();
  var output = app.getElementById("output");

  var msg = e.parameter.matchValue;

  output.setText("Value to match XXXX column is: " + msg);

  return app;
}
于 2012-10-11T05:46:14.047 に答える
2

ハンドラーに callbackElement を追加するのを忘れたようです

あなたはこのように試すことができます:

selectionHandler.addCallbackElement(valueInputBox)

submitBtn 定義の直後

于 2012-10-11T05:22:55.127 に答える