生成されたアプリケーションで標準の URL クエリ コンポーネント スタイル (各パラメーターをその名前で識別) を使用するか、サポートされている別のスタイルを使用するかを決定します。
Named | URL に含まれるパラメーターには名前が指定され、アンパサンド (&) で区切られます。 |
Positional | URL に含まれるパラメーターは位置が決まっていて、コンマ (,) で区切られます。 |
ジェネレーター: .NET、
.NET Framework、
Javaレベル: 環境
新しい環境では、パラメーターは、既定で名前が指定されます。これは共通または標準的な URL 記述スタイルに従うもので、Web Application Firewall (WAF) の構成を容易にするなどのメリットがあります。
[ Parameters Style ] プロパティの値が Named の場合、パラメーターは URL のクエリ文字列に次のように現れます:
?ParameterName1=value1&ParameterName2=value2...&ParameterNameN=valueN
また、クエリ文字列に現れる順序は重要ではありません。コードは次のとおりです:
?ParameterName1=value1&ParameterName2=value2
これは次の記述と同等です:
?ParameterName2=value2&ParameterName1=value1
[ Parameters Style ] プロパティの値が Positional の場合、パラメーターは URL のクエリ文字列に次のように現れます:
?value1,value2,..valueN
- このプロパティの値が Named の場合でも、プログラムは受け取ったパラメーターを位置が決まっているスタイルで読み取ることができます。
- 動的な呼び出しや動的リンクはこのプロパティには影響されず、URL を位置が決まっているスタイルで使用したり作成したりします。
- 暗号化されたパラメーターを使用するプログラムの URL は、このプロパティには影響されません。
値を Positional から Named に変更する場合の考慮事項
このプロパティの値を Positional から Named に変更しても、GeneXus で記述したすべてのコードは通常どおりに動作し続けるはずです。
クエリ文字列で名前を指定するパラメーターを使うと予想されている場合 (「例 2: 値を Positional から Named に変更する際の互換性の問題」を参照)、これは当てはまりません。
その他の留意点:
- WAF のルールの構成
- URL のクエリ文字列を確認する UI テスト
- URL の長さ (現在では長くなっています)
このプロパティは設計時にのみ適用されます。
次のルールを持つ「Client」オブジェクトがあるとします:
Parm(&Mode,&ClientId);
これが example.com で実行され、別のオブジェクトによって次のように呼び出されるとします:
Client('UPD',1)
この場合、URL に次のように現れます:
- 「http://www.example.com/Client?Mode=UPD&ClientId=1」( [ Parameters Styles ] プロパティの値が Named に設定されている場合):
- 「http://www.example.com/Client?UPD,1」( [ Parameters Style ] プロパティの値が Positional に設定されている場合)
例 2: 値を Positional から Named に変更する際の互換性の問題
2 つのオブジェクトがあり、その 1 つが別のオブジェクトを次のような行で呼び出すとします:
MyWebObject(!"Parm1=MyValue")
MyWebObject:
parm(in:&MyParameter);
ソース:
&ParameterValueStartPosition = &MyParameter.IndexOf(!"=");
&ParameterValue = &MyParameter.SubString(&ParameterValueStartPosition+1)
msg(&ParameterValue)
[ Parameters Style ] プロパティが Positional に設定されている場合、メッセージ「MyValue」が表示されます。Named のパラメーターを使用する場合、"MyValue" を再度表示するには、呼び出し側のコードを以下のように変更する必要があります:
MyWebObject(!"Parm1%3DMyValue")
プロパティに値を設定したときに、それに対応する変更を適用するには、任意のオブジェクトをビルドします。