Silk UI WebのJavaScript出力用Function(1)

OutSystemsは公式サイト上に動画の講座が結構あり、そのなかの

「JavaScript and jQuery in Web Applications」(https://www.outsystems.com/learn/lesson/1135/javascript-and-jquery-in-web-applications/)

を見ていたら、Silk UIの中にある、JavaScriptをページに埋め込むためのFunctionが紹介されていました。

たくさんの機能があるわけではないですが、直接JavaScriptを書くよりも、

  1. LowCodeで書くほうがOutSystemsらしい
  2. 将来ブラウザの変更などで別の書き方が必要になったときにOutSystems側で対応(Functionの内部実装を返ることで)されることを期待できる

ので、動作を確認してみました。

大体、「Script(Ready(js_click(elementId)))」の様に使う感じみたいです。

小さな機能なので、便利だという実感はあまりないかもしれませんが、Silk UIを使ってJavaScriptを埋め込むならなるべく使っていったほうがいいかもしれません。

長くなったので、全部で7つあるFunctionの内、最も基本的なScriptとReadyのみこの記事で他のFunctionは分けました。

バージョン情報:

https://<ホスト>/WebPatterns/ で確認するとSilk UIは「Version 3.2.1 – OutSystems10」です。

利用方法

Silk UIの中に含まれています。

Service Studioの、Logic>Server Actions>Web Patterns>JavaScriptに表示されます。

なければ、Manage Dependencies(Ctrl + Q)でProducer:WebPatternsの中から、JavaScriptフォルダの下のアクションを選択してOKをクリック。

API Referenceが見つかりませんでしたが、動画の説明とFunctionであることから、ExpressionのValueあたりで、関数として使うことになると思います。

対象Function一覧

Service Studioの、Logic>Server Actions>Web Patterns>JavaScriptにある以下の赤枠内のAction(全てIs FnctionがTrueなので、Function)です。

WebPatternsのModuleをクローンして覗いてみると、中身はすべてシンプルなAssignでJavaScript(jQuery)の決まった形の文字列を構築しているだけですね。

  1. Script(渡したJavaScriptをscriptタグで囲む)・Ready(渡したJavaScriptをDOM準備ができたタイミングで実行する処理で囲む)
  2. js_addClass(指定要素にCSSのクラスを追加)
  3. js_click(指定要素をクリック)
  4. js_hide(指定要素を非表示に)
  5. js_setIframeSrc(指定要素の子孫にあるiframeのsrcを差し替え)
  6. js_show(指定要素を表示する)

書いていたら長くなったので2以降の動作確認は別の記事にします。

動作確認

テスト方法

テスト用の画面に以下のウィジェットを配置して各Functionを呼んだとき何が返るのか、動作させるにはどうするのかを調べます。。

1:Escape Content = Yes(デフォルト)にしたExpression。ValueにJavaScript Functionの結果を設定します。これにより、どのようなタグ、コードが出力されるか確認します。

2:Escape Content = NoにしたExpression。Valueは1と同じ。JavaScriptを実際に動作させる役目。

3:2のJavaScriptコードの結果を書き込むためのContainer。

Script・Ready

まずは、3の位置に文字列を書く処理をScriptだけで実装してみます。

1,2のValueの設定:

ResultText.Idの部分は、OutSystemsのスクリーン上に配置したウィジェットの、HTMLとして描画された際のidを取得するための処理です。設計時にはidが確定されない(実行時に動的に設定される)ためにこの書き方となるのです。

Script("document.getElementById('" + ResultText.Id + "').innerText = 'hit';")

1の位置に表示される文字列=Script関数の戻り値:

3のテキストが変更されていないのは、2(ページ内で3より上)の位置でJavaScriptを実行しているために、実行時に3がないからです。

そこで、Script関数のパラメータをReady関数で囲み、DOMの準備ができてから処理を開始するように変更。

Script(Ready("document.getElementById('" + ResultText.Id + "').innerText = 'hit';"))

今度は3の位置にちゃんと「hit」という文字列が設定されました。

これは、jQueryのreadyですね。Readyなしの処理を「$(document).ready(function(){}」で囲っています。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする