0

この質問は、「 「連鎖」機能は GAS で使用できますか?」の拡張です。

私は似たようなことをする必要があります...前の質問に答えたコード例をコピー/貼り付けます:

var app = null;
function firstHandler(e) {
  if( app == null )
    app = UiApp.getActiveApplication();
  //do your thing
  //now, instead "return app;" you return the second handler
  return secondHandler(e);
}

function secondHandler(e) {
  if( app == null )
    app = UiApp.getActiveApplication();
  //do your job
  return app;
}

ここで、firstHandler() はボタンのクリック ハンドラーです。この例と私がしなければならないことの違いは、私の場合、 secondHandler() がフォームから情報を取得する必要があるということです。具体的には、リスト ボックスから選択した値を取得する必要があります。

通常、secondHandler() でその情報を取得する方法は、リスト ボックスを含む親オブジェクトを関数に渡し、次のような行を作成することです。

var value = eventInfo.parameter.listBoxName;

ただし、リスト ボックスが含まれるグリッドを secondHandler() に渡すのに問題があります。これが私が試したことです:

var app = null;
function firstHandler(e) {
  if( app == null )
    app = UiApp.getActiveApplication();
  //do your thing
  //get the object now, pass it into the chained function
  var myGrid = app.getElementById("gridId");
  return secondHandler(myGrid);
}

function secondHandler(e) {
  if( app == null )
    app = UiApp.getActiveApplication();
  var value = e.parameter.listBoxName.toString();
  //do your job
  return app;
}

しかし、これは機能していません。また、firstHandler() 内でグリッドを secondHandler() に渡す必要がないように、secondHandler() を完全に引数なしに変更しようとしました。

var app = null;
function firstHandler(e) {
  if( app == null )
    app = UiApp.getActiveApplication();
  //do your thing
  return secondHandler(e);
}

function secondHandler(e) {
  if( app == null )
    app = UiApp.getActiveApplication();
  var value = app.getElementById('listBoxId').value;
  //do your job
  return app;
}

これも機能しません... "app.getElementById('listBoxId').value" は何も返さないようです。なぜそうしないのかわかりません:(

これを行う方法について何か考えはありますか?app.getElementById の回避策が期待どおりに動作しない理由を知っている人はいますか? すべての助けに感謝します!!!

4

1 に答える 1

0

これを試して。

function firstHandler(e) {
  var app = UiApp.getActiveApplication();
  //do your thing
  return secondHandler(e);
}

function secondHandler(e) {
  var app = UiApp.getActiveApplication();
  var value = e.parameter.listBoxName;
  //do your job
  return app;
}

ハンドラーを作成するときは、必ずこれを使用してください。

app.createServerHandler("firstHandler").addCallbackElement(gridContainingListBox);

ページから値を取得する場合は、適切なコールバック要素を追加するときに適切に設定されたものを使用する必要があります。e.parameterUI の要素を変更する場合は、確かに を使用できますが、 などapp.getElementById(...).whateverFunction()を呼び出すことはできないことに注意してください。getValue()

于 2013-02-06T23:32:17.177 に答える