Más contenido relacionado
La actualidad más candente (20)
Similar a スクリプト実行可能なサーバーサイド拡張(SSE)の実装例とその応用 - Node.js編 (20)
Más de QlikPresalesJapan (20)
スクリプト実行可能なサーバーサイド拡張(SSE)の実装例とその応用 - Node.js編
- 7. サーバーサイド拡張のデータ送受信の特徴
ストリーミング形式でデータを送受信
引数や戻り値は、数値型(64bit倍精度浮動小数点数)または文字列型で、「複数列x複数行」の表形式(BundledRows x N個)
データ以外の様々な情報を、gRPCのメタデータ(ヘッダー領域)で送受信
QlikエンジンがSSEの処理結果をキャッシュとして保持するか否か、関数名や、データの型など
サービス定義のprotoファイルはGitHubから取得
https://github.com/qlik-oss/server-side-extension/raw/master/proto/ServerSideExtension.proto
Qlikエンジン SSEサービス
call GetCapabilities()
return Capabilities
GetCapabilities(Qlikエンジンから一度だけ呼び出される)
SSEサービスの機能(数式の関数定義や、EvaluateScriptサポートの有無)を返す
ExecuteFunction
SSEサービスが各関数ごとにデータを受信し、処理して結果を返す
EvaluateScript(オプショナル)
SSEサービスが任意の文字列とデータを受信し、処理して結果を返す
●
●
●
BundledRows
BundledRows
BundledRows
BundledRows
- 8. Qlik Sense Desktopで動作を確認
1. Qlik Sense Desktopをインストール
サーバーサイド拡張(SSEサービス)の開発時は、証明書によるセキュア(TLS)なgRPCサーバーが
必須ではない「Qlik Sense Desktop」が便利
「Qlik Sense Enterprise for Windows」は証明書(後述)が必須
2. SSEサービスを起動
node SSE_Example.js
3. SSEサービスへの接続設定(例として、SSEエンジン名はColumn)
C:Users[user]DocumentsQlikSenseSettings.ini を編集
4. Qlik Sense Desktopを起動
function getCapabilities(call, callback){...} が呼び出されるのをログ出力で確認
- 10. Qlik Sense Extension開発の参考資料
[Qlik Sense Extension開発 - Extensionの概要から実際の開発詳細まで]
https://www.slideshare.net/QlikPresalesJapan/qlik-sense-extension-extension
[Qlik Sense Extension開発 第2弾 - プログラミング可能な汎用エクステンションのご紹介]
https://www.slideshare.net/QlikPresalesJapan/qlik-sense-extension-2
[汎用エクステンションの実装例]
https://github.com/ttcodegear/QS_JavaScriptButton_Extension
- 14. 実装方式/パターンと考察
1. Qlik Senseサーバーと画像ファイル配信サーバーを別々に用意
アプリと画像は異なるドメインのURLで提供?
リバースプロキシを置き、2つのサーバーをまとめてアクセスさせる?
✘ 画像ファイルのURLアクセス時に、Qlik Senseサーバーと同じ認証を強制するのが難しい
2. Qlik Senseサーバー内に静的コンテンツとして画像ファイルを登録
✘ QMCで、すべてのファイルを個々に管理しなくてはならず、かなり面倒
3. アプリの.qvfファイル内に、Base64形式で画像データを取り込んでおく
✘ 画像ファイルデータをBase64に変換してリロードして同期する必要があり、アプリも巨大化
✘ <img src=“data:image/png;base64,xxxxx...” /> で表示するエクステンションが必要
4. サーバーサイド拡張(SSE)から画像データを返信し、エクステンションで表示する
SSEを利用して、QlikエンジンのバックエンドからWebブラウザに画像データを返信可能!!
汎用的なサーバーサイド拡張の開発が必要になる 今回のポイント!!
- 19. 汎用的なサーバーサイド拡張の例(Node.js版) – 続き
起動方法(Linux,macOSまたはWindows)
[ScriptEval(Ex),ScriptAggr(Ex)StrのSSE実装例 : gRPC_Nodejs_sse_eval_imageloader.zip]
$>wget
https://github.com/ttcodegear/gRPC_Nodejs_QS_SSE/raw/main/gRPC_Nodejs_sse_eval_imag
eloader.zip
$>unzip gRPC_Nodejs_sse_eval_imageloader.zip
$>cd gRPC/sse_eval_imageloader
$>node --version
v14.18.0
$>npm install -g grpc-tools
$>npm list -g
+-- grpc-tools@1.11.2
$>grpc_tools_node_protoc --js_out=import_style=commonjs,binary:./ --
grpc_out=grpc_js:./ ./ServerSideExtension.proto
$>npm install @grpc/proto-loader google-protobuf @grpc/grpc-js undercore
$>node SSE_Example.js