Pythonスクリプトの入出力

Pythonスクリプトの入出力に関して

前回、Pythonを使用してメッセージボックスを表示しましたが、
実際に使用する場合はSpotfireからデータを渡したり、Pythonの結果をSpotfireに戻したりする処理が必要になってくることが多いと思います。

今回は入出力のサンプルとして、プロパティの値やカスタム演算式の値をPythonに渡して、
結果をプロパティで受け取りましょう。

やりたい事

まずこのようなグラフがあるとします。
1

途中に大きな外れ値が発生しているようです。
このようなイレギュラーなデータが発生した場合に何かの処理を追加します。

プロパティの作成

プロパティの作成は必須ではないですが、
インタラクティブな操作と非常に相性がいいので使用頻度が多いです。

2

ドキュメントプロパティを新規に作成して上限値を入力し、
それを元に閾値のラインを引くようにしました。
プロパティ名はULで
5.2だとこの辺で、

3

6.0だとここまでです。

1.5

プロパティの作成は、テキストエリアの編集画面で「プロパティコントロールの挿入」で「入力フィールド」を選択します。

1.7

新規作成で今回はULという名前のReal型プロパティを作成します。
初期値は5にしておきます。
これでテキストエリアで入力する事ができるようになります。

18

ちなみに作成したULに連動したラインをチャートに引く場合は
プロパティの「線およびカーブ」から「追加」→「水平線」→「直線」
でカスタム演算式を選択して${UL}のプロパティを指定します。

1.8

Pythonへのインプット

閾値を超えている場合をPythonで判別して、テキストエリアの表示を変更しましょう。
前回作成したPythonを流用します。
ボタンとして埋め込まれているPythonをダブルクリックして編集します。

4

パラメータ設定
プロパティの渡し方

まずはプロパティ変数として上限の閾値を設定します。
スクリプトのパラメータで「追加」を選択
名前は「upperLimit」値は「プロパティ」でULを指定します。
これでSpotfireのULプロパティをPython側ではupperLimitとして扱えます。

6

次は平均値を集計して渡します。
名前はmaxValで、式は「式の編集」から入力する事ができます。
こちらはカスタム演算式で設定します。

8

メッセージボックスで表示する内容を変更してみました。
パラメータとして渡されているulvalとmaxValを使用しています。

9

import clr
clr.AddReference("System.Windows.Forms")
from System.Windows.Forms import MessageBox
MessageBox.Show( "上限閾値は" + str(ulval) + " 最大値は " + str(maxVal) ) 

Pythonへの入力はパラメータを使用しますが、出力はこちらではできません。
今回は新規プロパティを作成し、それをPythonで書き換えましょう。
プロパティを変更する事ができれば、計算カラムやカスタム演算式の内容や、テキストエリアの中身など様々な変更が可能になります。

結果プロパティの作成

テキストエリアの編集から「プロパティの作成」でラベルを選択します。

10

pythonOutputという名前のString型のプロパティを作成しました。
初期値は”デフォルト”にしてみました。

11

作成すると”デフォルト”というラベルがテキストエリアに表示されています。

12

ドキュメントプロパティの変更

再度Pythonを編集します
プロパティをPythonから変更するには
Document.Properties[‘property name’] = ‘変更したい内容’
というAPIを使用します。

今回は分岐で上限値を超えている場合は’閾値オーバー’を表示します。

15

import clr
clr.AddReference("System.Windows.Forms")
from System.Windows.Forms import MessageBox
outputStr = ""

if ulval > maxVal :
	outputStr = ( "閾値オーバー:上限閾値は" + str(ulval) + " 最大値は " + str(maxVal) ) 
else:
	outputStr = ( "上限閾値は" + str(ulval) + " 最大値は " + str(maxVal) ) 

Document.Properties['pythonOutput'] = outputStr

結果です。今回は閾値に引っかかったので、閾値オーバーになっています。

16

閾値をオーバーしない場合の実行結果です。

17

次回は閾値を超えた時にメール送信するようにしてみます。