Selectors
Ein Nachrichtenselektor ist eine Zeichenfolge variabler Länge, mit der sich eine Anwendung für den Empfang nur solcher Nachrichten registriert, deren Eigenschaften die als Auswahlzeichenfolge dargestellte SQL-Abfrage (Structured Query Language) erfüllen.
Auswahl mithilfe der Funktionsaufrufe MQSUB und MQOPEN
Für eine Auswahl mithilfe der Aufrufe MQSUB und MQOPEN verwenden Sie die Struktur SelectionString. Dabei handelt es sich um eine Struktur des Typs MQCHARV.
Mit der Struktur SelectionString wird eine Auswahlzeichenfolge variabler Länge an den Warteschlangenmanager übergeben.
Die ID des codierten Zeichensatzes, die der Selektorzeichenfolge zugeordnet ist, wird über das Feld VSCCSID der MQCHARV-Struktur festgelegt. Für die ID des codierten Zeichensatzes muss ein Wert verwendet werden, der für Selektorzeichenfolgen unterstützt wird. Eine Liste der unterstützten Codepages finden Sie unter Codepagekonvertierung .
Die Angabe einer CCSID, für die keine von IBM® MQ unterstützte Unicode-Konvertierung vorhanden ist, führt zu einem Fehler von MQRC_SOURCE_CCSID_ERROR. Dieser Fehler wird gemeldet, wenn der Selektor an den Warteschlangenmanager übergeben wird, also beim Aufruf MQSUB, MQOPEN oder MQPUT1.
Der Standardwert für das Feld VSCCSID lautet MQCCSI_APPL. Dies bedeutet, dass die ID des codierten Zeichensatzes der Auswahlzeichenfolge mit der ID des codierten Zeichensatzes des Warteschlangenmanagers bzw. des Clients (falls die Verbindung über einen Client erfolgt) identisch ist. Die Konstante MQCCSI_APPL kann jedoch vor der Kompilierung durch eine Anwendung in einer erneuten Definition überschrieben werden.
Falls der MQCHARV-Selektor eine NULL-Zeichenfolge darstellt, wird für diesen Nachrichtenkonsumenten keine Auswahl getroffen. Stattdessen werden die Nachrichten zugestellt, als ob kein Selektor verwendet worden wäre.
Die maximale Länge einer Auswahlzeichenfolge wird lediglich durch die Festlegung des MQCHARV-Felds VSLength begrenzt.
Die Auswahlzeichenfolge ('SelectionString') wird in der Ausgabe eines MQSUB-Aufrufs mit der Subskriptionsoption MQSO_RESUME zurückgegeben, wenn ein Puffer bereitgestellt wird und in 'VSBufSize' eine positive Puffergröße angegeben ist. Wird kein Puffer bereitgestellt, wird nur die Länge der Auswahlzeichenfolge im Feld 'VSLength' der MQCHARV-Struktur zurückgegeben. Ist der bereitgestellte Puffer kleiner als der für die Rückgabe des Feldes erforderliche Speicherplatz, werden nur VSBufSize-Bytes im bereitgestellten Puffer zurückgegeben.
- MQOPEN
- Schließen Sie die geöffnete Kennung mit MQCLOSE und geben Sie dann in einem nachfolgenden MQOPEN-Aufruf eine neue Auswahlzeichenfolge an.
- MQSUB
- Schließen Sie die zurückgegebene Subskriptionskennung (hSub) mit MQCLOSE und geben Sie dann in einem nachfolgenden MQSUB-Aufruf eine neue Auswahlzeichenfolge an.

Ein Selektor kann einem MQSUB-Aufruf über das Feld SelectionString der MQSD-Struktur übergeben werden. Die Übergabe eines Selektors im Aufruf MQSUB bewirkt, dass in der Zielwarteschlange nur Nachrichten zur Verfügung gestellt werden, die zu dem subskribierten Thema veröffentlicht werden und einer angegebenen Auswahlzeichenfolge entsprechen.

Ein Selektor kann einem MQOPEN-Aufruf über das Feld SelectionString der MQOD-Struktur übergeben werden. Die Übergabe eines Selektors im Aufruf MQOPEN bewirkt, dass nur die Nachrichten in der geöffneten Warteschlange an den Nachrichtenkonsumenten zugestellt werden, die einem Selektor entsprechen.
Der Selektor im Aufruf MQOPEN wird hauptsächlich bei einer Punkt-zu-Punkt-Übermittlung verwendet, bei der eine Anwendung festlegen kann, dass nur die Nachrichten in einer Warteschlange empfangen werden sollen, die einem Selektor entsprechen. Das vorherige Beispiel veranschaulicht ein einfaches Szenario, bei dem zwei Nachrichten in eine mit MQOPEN geöffnete Warteschlange eingereiht werden. Es wird jedoch nur eine Nachricht von der Zielanwendung empfangen, da lediglich diese Nachricht einem Selektor entspricht.
Beachten Sie, dass bei nachfolgenden MQGET-Aufrufen der Code MQRC_NO_MSG_AVAILABLE ausgegeben wird, da die Warteschlange keine weiteren Nachrichten enthält, die dem angegebenen Selektor entsprechen.