0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

intra-martスクリプト開発 ファイルダウンロード後に自画面をリロード

Last updated at Posted at 2020-01-14

はじめに

intra-martスクリプト開発にて、嵌ったことを未来の自分あてに情報共有できればと考えています。
※なおQiitaへの投稿は初めてなので、多少見苦しかったらすみません・・・。

やりたいこと

  • 画面には、出力日時を表示するラベル、ならびに、出力ボタンが存在している
  • 出力ボタンでファイルを作成し、Storageに保存する
  • 作成したファイルを即座にダウンロード
  • ダウンロードできたら自画面をリロードして、出力日時ラベルを更新

はまった現象

HTML側からformのaction属性にて指定した関数を呼び出し、
同関数内でファイルを作成⇒ファイルのダウンロードまではできたが、
自画面のリロードは行われず、出力日時が更新されなかった

原因

ダウンロードをするのに使用したAPI(Module.download.send)は
現在実行中のプログラムを中断してダウンロード処理を行うため、
当該APIをコールした時点で処理が中断され、ファンクションコンテナのinit関数もコールされなかったもよう・・・。
https://www.intra-mart.jp/apidoc/iap/apilist-ssjs/doc/platform/Module.download/index.html#method-send_4

対応策

  • 【HTML】formをファイル作成用、ダウンロード用の2つに分けます。
    1つめのformに出力ボタンを、2つめのformの隠し項目として、作成したファイルのパス、ファイル名をバインド変数にて設定します。(初回アクセス時は空です)

  • 【JS】出力ボタンを押下した際にコールされる関数では、ファイル作成のみ行います。

  • ファイル作成ができたら、作成したファイルのパス、名称、ファイル作成フラグ、出力日時を引数のrequestオブジェクトに設定しましょう。

  • 【JS】init関数にて、requestオブジェクトから上記4つ(ファイルパス、ファイル名、ファイル作成フラグ、出力日時)を取得し、バインド変数に設定します。

  • 【HTML】onload時、ファイル作成フラグが立っている場合、ダウンロード用formをsubmit

  • 【JS】コールされた関数内で、引数のrequestにファイルパス、ファイル名が渡ってくるので、ここでようやくModule.download.sendを実行

備考

自画面にリロードするために「imart type="form"」を使っていましたが、どうやら非推奨のようです。。。
https://www.intra-mart.jp/apidoc/iap/apilist-jssp-tagdoc/doc/imart_tag_api/form/index.html

それと、今気づいたのですが、タイトル詐欺ですね・・・
結局の対応策は、自画面をリロード後にファイルをダウンロードでした。。

以上です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?