= CSS 3.1.2 → CSS 3.2.xへのバージョンアップに伴う opi の修正点 = CSS 3.1.2で作成したOPIをCSS 3.2.xで動かすための修正点。 == loc://の初期値設定 == 一番大きな変更点として{{{loc://}}}がある。CSS 3.2.xからは{{{loc://}}}には初期値の設定が必須になっていて、これを設定していないと {{{disconnect}}}になる。[[br]] 修正方法は、{{{loc://xxxx}}}となっているところを、数値なら{{{loc://xxxx(0)}}}、文字列なら{{{loc://xxxx("")}}}のように修正する。[[br]] 一つ一つOPI Editorでやっていくのは面倒なので、OPIファイルを開くときにNavigatorのファイル上で右クリックし、サブメニューを表示して{{{Open with->Text Editor}}}を選択し、テキストエディターで{{{loc://xxxx}}}を検索して{{{loc://xxxx(0)}}}変換した後に、動作がおかしいところを直したほうが早い。 == createPV APIの変更 == 次に問題になるのが、PVUtilのcreatePV API。[[br]] CSS 3.1.2ではunofficalながら {{{ from org.csstudio.utility.pv import PVFactory pv = PVFactory.createPV(pvName) pv.start() }}} と記述することで使用可能だった。 3.2.xからは正式にcreatePVがサポートされたが、引数も使い方もまるっきり違うものになっている。 {{{ from org.csstudio.opibuilder.scriptUtil import PVUtil from org.csstudio.simplepv import IPVListener class MyPVListener(IPVListener): def valueChanged(self, pv): widget.setPropertyValue("text", PVUtil.getString(pv)) pv = PVUtil.createPV("sim://noise", widget) pv.addListener(MyPVListener()) }}} いちいちclassを作らなくてはならないのがjava風だが、それよりも問題なのがwidgetを引き数に追加する必要があること。[[br]] widgetとは全く関係ないclassを作っても、引数にwidgetが必要になってくるので、既存のclassのコンストラクタ等を変更する必要が出てくる。