カスタムコントロール内でDocumentデータソースのフィールドを動的に定義する方法
カスタムコントロールをより汎用的なパーツ化したい
共通パーツ化の目的でカスタムコントロールを作成することが多いと思います。
今回のブログは、カスタムコントロール内で文書フィールドをハードコードせず、カスタムコントロールを呼び出し側のXPAGEがプロパティ定義でフィールド指定してやる方法です。
この方法を使うと、カスタムコントロール内で複雑なロジックを持ったフィールド、例えば
- 社内Emailアドレスのみを許可する入力チェックを行うフィールドの汎用化
- リピートコントロール内で動的にフィールドを定義してスコープ変数に格納する
といった方法が可能になります。
自分の場合はリッチテキストフィールドに対して常に素のJSONデータのみを格納するように振る舞うフィールド定義をしたいケースがあり実装した経緯がありました。その際、作成したカスタムコントロールは呼び出し側が指定したフィールド名に対して動的にデータバインドを行うようになるのが今回の主旨です、その名もダイナミック データバインディング!(勝手に呼んでますw)
毎度のごとく、トピックがニッチなので(笑)百聞は一見に如かず、カスタムコントロールのコードを見てみます。
まず、カスタムコントロールの前準備として今回の例では「fieldName (String値)」というプロパティ定義をしています。
以下がサンプルコードです。
重要な点はハイライトされている5行目に尽きます。
valueの値に対して、"${javascript:'#{document1.' + compositeData.fieldName + '}';}" と複雑な記述になっています。
まず着目してほしいのが、'#{document1.' + compositeData.fieldName + '}'の部分は文字列生成をしているということです。
もし直接データバインドをした場合、value="#{document1.Email}" となるところをあえてSSJS経由で渡してやることでこのように動的に記述することを可能にしています。
最後にこちらが呼び出し元のXPageです。
鋭い人は「document1」がハードコードでは?と気づいたと思います。
前述のとおり'#{document1.' + compositeData.fieldName + '}'の部分は文字列を生成しているだけなのでfieldNameプロパティに「document1.Email」を指定し、'#{' + compositeData.fieldName + '}' としても動作します。
種明かしをするとなんだ~、と以外と簡単なのですが場合によってとても重宝する記述方法なので覚えておいてもらえればと思います。
参考
http://stackoverflow.com/questions/9913331/dynamic-data-binding
【2017/5/17-19】Notes/Dominoソリューション2017:Aveedoのご紹介
「Notes/Domino ソリューション 2017」と題して2017年5月17-19日の3日間、東名阪の3拠点でNotes/Domino一色のイベントが開催されます。
弊社からも既存NSFアプリをウィザード操作でカンタンWEB化できるソリューション「Aveedo」をご紹介させて頂きます。
弊社を合わせまして、以下の6社による共催となります。
- 有限会社アクセル(OnTime Group Calendar Direct Shop)
- ケートリック株式会社
- チームスタジオジャパン株式会社
- 株式会社ライブネス
- リコージャパン株式会社
- 日本アイ・ビー・エム株式会社
(五十音順)
Notes/Dominoを使い倒すための様々なソリューションを一挙に知ることが出来るこちらのイベントに是非ご参加ください。
皆様とお会いできることを楽しみにしています。
【 東京開催について 】
開催日時: 2017年5月17日(水) 13:10~17:00(受付:12:30~)
開催場所: IBMイノベーション・センター東京都中央区日本橋箱崎町19-21(日本IBM箱崎事業所内)
お申込みURL:http://www.nds2017.jp/top.nsf/pages/tokyo
【 大阪開催について 】
開催日時: 2017年5月18日(木) 13:10~17:00(受付:12:30~)
開催場所: 日本IBM大阪事業所大阪府大阪市西区靱本町1-10-10
お申込みURL:http://www.nds2017.jp/top.nsf/pages/osaka
【 名古屋開催について 】
開催日時: 2017年5月19日(金) 13:10~17:00(受付:12:30~)
開催場所: 日本IBM名古屋事業所愛知県名古屋市中区錦3-1-1 十六銀行名古屋ビル
お申込みURL:http://www.nds2017.jp/top.nsf/pages/nagoya
【2017/4/21 (金) 】テクテクLotusセッション:Aveedoのご紹介 - IBM Notes/Domino Modernization の実現を支援する海外ソリューション
Aveedo - IBM Notes/Domino Modernization の実現を支援する海外ソリューションのご紹介
既存NSFアプリをウィザード操作でカンタンWEB化できるソリューション「Aveedo」の開発元であるWe4ITからはCEO Stefan Sucker 氏 が直接、製品紹介をデモを交えて発表してくれます。(通訳は弊社から田付が担当します)
当日のアジェンダは以下のようになっています。
- 6:00PM – 6:25PM: Panagenda – ApplicationInsights
- 6:25PM – 6:50PM: Sapho
- 6:50PM – 7:00PM: <休憩>
- 7:00PM – 7:25PM: We4IT – Aveedo
- 7:25PM – 7:50PM: Darwino
- 7:50PM – 8:00PM: Q&A