先日こんな質問を受けました。
「あるWebPanelを呼んでいる画面が複数あるのですが、特定の画面から呼ばれた時だけ項目制御をしたいのですがどうすれば良いですか?」
イメージとしては下記のような感じ。
私の回答としては、X画面を呼ぶ際に各画面から異なったパラメータを渡してあげて、呼び元を判断して項目の制御をかければ良いのではと返したのですが、呼んでいる画面が複数あって全部修正するのは大変だし、どうにかできないかとのことでした。
今回の条件はA~Cの画面からX画面を呼んでいて、パラメータはすべて一緒。
ただX画面ではどこの画面から呼ばれたか判断したい。
これをGeneXusではどうしたら良いかとのことでした。
本来であれば、冒頭に記載した通り、異なるパラメータを渡してあげて判断するのが正しいですが、今回はReferrerを使用して判断する方法を提示しました。
では早速Referrerを使ってどのようにやるのか記載しようと思います。
WebPanelの準備
下記のようにWebPanel_A~CとWebPanel_Xを作成。
A~CのWebLayoutにはXを呼ぶボタンを置き、XにはReferrer(呼び元)を格納する変数を置きました。
A~CのボタンのEventは一律下記のとおりです。
このままではWebPanel_Xではどこから呼ばれたのか判断できないので、XのStartEventで下記のように記載します。
これで実装完了です。
動作確認
WebPanel_AからXを呼びます。
赤枠で囲ったところに呼び元の画面名が記載されてますね。
BとCから呼んだ場合も同様に判断できますね。
あとはReferrerの変数を加工すれば画面名だけ取れて、呼び元のオブジェクト名を取得することができます。
簡易的にやるなら下記のようにReferrerを部分一致や後方一致で条件書いて判断しても良いですが。
このようにHttpRequestのReferrerを使うことによって、どこから呼ばれたかを判断することが可能です。
他にもHttpRequestには画面のホストやポートを取得するプロパティもありますので、良かったら使ってみてください。