Classe NTiProgramParameter
Description
La classe NTiProgramParameter
représente un paramètre de prgramme IBM i ou d'API système IBM i. Il peut être d'entrée, sortie ou d'entrée/sortie.
Propriétés
Nom | Type | Valeur par défaut | Description |
---|---|---|---|
InputData |
byte[] |
Données d'entrée du paramètre | |
OutputData |
byte[] |
Données de sortie du paramètre | |
Direction |
System.Data.ParameterDirection |
ParameterDirection.InputOutput |
Direction du paramètre: ParameterDirection.InputOutput : Entrée/Sortie ParameterDirection.Input : Entrée ParameterDirection.Output / ParameterDirection.ReturnValue : Sortie |
Constructeurs
1. Nouveau paramètre vide
Syntaxe | Description |
---|---|
new NTiProgramParameter() |
Crée un paramètre vide avec la direction InputOutput . |
new NTiProgramParameter(ParameterDirection direction) |
Crée un paramètre vide avec une direction spécifique (Input , Output , ou InputOutput ). |
new NTiProgramParameter(); // Paramètre vide (InputOutput)
new NTiProgramParameter(ParameterDirection.Input); // Paramètre d'entrée uniquement
2. Nouveau paramètre de type binaire brut
Syntaxe | Description |
---|---|
new NTiProgramParameter(byte[] value) |
Crée un paramètre avec des données binaires d'entrée (byte[] ). |
new NTiProgramParameter(byte[] value, ParameterDirection direction) |
Crée un paramètre binaire avec une direction spécifique (Input , Output , ou InputOutput ). |
new NTiProgramParameter(new byte[] {0x00}); // Paramètre binaire initialisé avec un tableau de bytes
new NTiProgramParameter(new byte[] {0xFF}, ParameterDirection.Input); // Paramètre binaire d'entrée uniquement
3. Nouveau paramètre de type caractères
Le paramètre length
correspond à la longueur attendue par le programme pour ce paramètre. Value sera soit tronqué soit paddée par des blancs (0x40).
Syntaxe | Description |
---|---|
new NTiProgramParameter(string value, int length) |
Crée un paramètre chaîne de caractères tronqué ou complété à length caractères (remplissage avec des blancs 0x40 ). |
new NTiProgramParameter(string value, int length, ParameterDirection direction) |
Crée un paramètre chaîne avec une direction spécifique. |
new NTiProgramParameter(string value, int length, int ccsid) |
Spécifie un ccsid pour l'encodage des caractères. |
new NTiProgramParameter(string value, int length, int ccsid, ParameterDirection direction) |
Spécifie un ccsid et une direction. |
new NTiProgramParameter("Hello", 10); // Chaîne de caractères tronquée/paddée sur 10 caractères
new NTiProgramParameter("World", 10, 1208); // Avec encodage CCSID spécifique
4. Nouveau paramètre de type tableau de caractères
Le paramètre length
correspond à la longueur finale de chaque valeur.
Syntaxe | Description |
---|---|
new NTiProgramParameter(string[] values, int length) |
Crée un paramètre avec un tableau de chaînes de caractères, chaque chaîne ayant une longueur fixe de length caractères. |
new NTiProgramParameter(string[] values, int length, ParameterDirection direction) |
Crée un tableau de chaînes de caractères avec une direction spécifique. |
new NTiProgramParameter(string[] values, int length, int ccsid) |
Crée un tableau de chaînes de caractères avec un encodage spécifique (CCSID). |
new NTiProgramParameter(string[] values, int length, int ccsid, ParameterDirection direction) |
Crée un tableau de chaînes avec un encodage et une direction spécifiques. |
new NTiProgramParameter(IEnumerable<string> values, int length) |
Utilise une collection IEnumerable pour créer un tableau de chaînes de caractères de longueur fixe. |
new NNTiProgramParameter(IEnumerable<string> values, int length, ParameterDirection direction) |
Utilise une collection IEnumerable avec une direction spécifique. |
new NTiProgramParameter(IEnumerable<string> values, int length, int ccsid) |
Utilise une collection IEnumerable avec un encodage CCSID. |
new NTiProgramParameter(IEnumerable<string> values, int length, int ccsid, ParameterDirection direction) |
Utilise une collection IEnumerable avec un encodage CCSID et une direction spécifique. |
new NTiProgramParameter(new[] {"QTIME", "QDATE"}, 10); // Tableau de chaînes avec une longueur fixe de 10 caractères
new NTiProgramParameter(new[] {"QTIME", "QDATE"}, 10, ParameterDirection.Input); // Tableau de chaînes avec une direction d'entrée uniquement
new NTiProgramParameter(new[] {"QTIME", "QDATE"}, 10, 1208); // Tableau de chaînes avec un encodage CCSID spécifique
new NTiProgramParameter(new[] {"QTIME", "QDATE"}, 10, 1208, ParameterDirection.Input); // Tableau de chaînes avec un encodage CCSID et une direction d'entrée uniquement
new NTiProgramParameter(new List {"QTIME", "QDATE"}, 10); // Utilisation d'une collection IEnumerable avec une longueur fixe
new NTiProgramParameter(new List {"QTIME", "QDATE"}, 10, ParameterDirection.Input); // Utilisation d'une collection IEnumerable avec une direction d'entrée uniquement
new NTiProgramParameter(new List {"QTIME", "QDATE"}, 10, 1208); // Utilisation d'une collection IEnumerable avec un encodage CCSID
new NTiProgramParameter(new List {"QTIME", "QDATE"}, 10, 1208, ParameterDirection.Input); // Utilisation d'une collection IEnumerable avec un encodage CCSID et une direction d'entrée
5. Nouveau paramètre de type entier
Entier 32 bits (4 octets):
Syntaxe | Description |
---|---|
new NTiProgramParameter(int value) |
Crée un paramètre avec un entier 32 bits (Binary(4)). |
new NTiProgramParameter(int value, ParameterDirection direction) |
Crée un paramètre entier avec une direction spécifique. |
new NTiProgramParameter(100); // Entier 32 bits
16 bits (2 octets):
Syntaxe | Description |
---|---|
new NTiProgramParameter(short value) |
Crée un paramètre avec un entier 16 bits (Binary(2)). |
new NTiProgramParameter(short value, ParameterDirection direction) |
Crée un paramètre entier avec une direction spécifique. |
new NTiProgramParameter((short)50); // Entier 16 bits
6. Nouveau paramètre de type tableau d'entiers
Entiers 32 bits (4 octets):
Syntaxe | Description |
---|---|
new NTiProgramParameter(int[] values) |
Crée un paramètre avec un tableau d'entiers 32 bits. |
new NTiProgramParameter(int[] values, ParameterDirection direction) |
Crée un tableau d'entiers 32 bits avec une direction spécifique. |
new NTiProgramParameter(IEnumerable<int> values) |
Utilise une collection IEnumerable |
new NTiProgramParameter(IEnumerable<int> values, ParameterDirection direction) |
Utilise une collection IEnumerable |
new NTiProgramParameter(new int[] { 100, 200, 300 }); // Tableau d'entiers 32 bits
new NTiProgramParameter(new int[] { 100, 200, 300 }, ParameterDirection.Input); // Tableau d'entiers 32 bits, direction entrée uniquement
new NTiProgramParameter(new List { 100, 200, 300 }); // Collection IEnumerable d'entiers 32 bits
new NTiProgramParameter(new List { 100, 200, 300 }, ParameterDirection.Output); // Collection IEnumerable d'entiers 32 bits avec direction sortie
Entiers 16 bits (2 octets):
Syntaxe | Description |
---|---|
new NTiProgramParameter(short[] values) |
Crée un paramètre avec un tableau d'entiers 16 bits. |
new NTiProgramParameter(short[] values, ParameterDirection direction) |
Crée un tableau d'entiers 16 bits avec une direction spécifique. |
new NTiProgramParameter(IEnumerable<short> values) |
Utilise une collection IEnumerable |
new NTiProgramParameter(IEnumerable<short> values, ParameterDirection direction) |
Utilise une collection IEnumerable |
new NTiProgramParameter(new short[] { 10, 20, 30 }); // Tableau d'entiers 16 bits
new NTiProgramParameter(new short[] { 10, 20, 30 }, ParameterDirection.Output); // Tableau d'entiers 16 bits, direction sortie uniquement
new NTiProgramParameter(new List { 10, 20, 30 }); // Collection IEnumerable d'entiers 16 bits
new NTiProgramParameter(new List { 10, 20, 30 }, ParameterDirection.Input); // Collection IEnumerable d'entiers 16 bits avec direction entrée
7. Nouveau paramètre de type décimal (PACKED(precision, scale))
Syntaxe | Description |
---|---|
new NTiProgramParameter(decimal value, int precision, int scale) |
Crée un paramètre décimal PACKED avec une précision et une échelle spécifiques. |
new NTiProgramParameter(decimal value, int precision, int scale, ParameterDirection direction) |
Crée un paramètre décimal PACKED avec une direction spécifique. |
new NTiProgramParameter(123.45, 7, 2); // Paramètre décimal PACKED avec précision 7, échelle 2
new NTiProgramParameter(678.90, 9, 3, ParameterDirection.Input); // Paramètre décimal PACKED avec direction entrée uniquement
Méthodes
1. Append() Append(...)
La méthode Append
permet de compléter la valeur des données d'entrée d'un paramètre existant. Cette méthode est utile lorsqu'un paramètre a une structure complexe composée de plusieurs données éventuellement de types différents.
Les paramètres et l'utilisation sont analogues aux constructeurs ci-dessus.
Variante | Description |
---|---|
Append(byte[] value) |
Ajoute les données value à la suite des données du paramètre sans modification |
Append(string value, int length) Append(string value, int length, int ccsid) |
Ajoute une chaîne de caractères value de longueur fixe length en utilisant le CCSID du job QZRCSRVS en cours ou en spécifiant le CCSID utilisé pour l'encodage des caractères |
Append(string[] values, int length) Append(IEnumerable<string> values, int length) Append(string[] values, int length, int ccsid) Append(IEnumerable<string> values, int length, int ccsid) |
Ajoute une chaînes de caractères values , chacune de longueur fixe length en utilisant le CCSID du job QZRCSRVS en cours ou en spécifiant le CCSID utilisé pour l'encodage des caractères |
Append(int value) |
Ajoute un entier 32 bits value |
Append(short value) |
Ajoute un entier 16 bits value |
Append(int[] value) Append(IEnumerable<int> value) |
Ajoute une collection d'entiers 32 bits values |
Append(short[] value) Append(IEnumerable<short> value) |
Ajoute une collection d'entiers16 bits values |
Append(decimal value, int precision, int scale) |
Ajoute un nombre décimal value au format PACKED(precision, scale) |
La méthode
Append()
retoure une référence au paramètre et peut ainsi être appelée en chaîne pour construire des structures de données complexes.
Exemple://parm ci-dessous est composé ainsi: // -CHAR(10) = "QTEMP" // -CHAR(10) = "LIBTMP" // -BYTE(4) = 10 (integer) // -BYTE(1) = 0x00 var parm = new NTiProgramParameter("QTEMP", 10).Append("LIBTMP", 10).Append(10).Append(new byte[]{0x00});
2. GetString() string GetString(...)
La méthode GetString
permet de récupérer du texte dans les données de sortie d'un paramètre existant. On utilise cette méthode après l'exécution d'un programme pour lire dans les données retournées par le programme.
Variante | Description |
---|---|
GetString() GetString(int ccsid) |
Retourne l'intégralité des données de sortie du paramètre sous forme de texte (string ) en utilisant le CCSID du job QZRCSRVS en cours ou en spécifiant le CCSID utilisé pour l'encodage des caractères |
GetString(int offset, int length) GetString(int offset, int length, int ccsid) |
Retourne length caractères à partir de la position offset dans les données de sortie du paramètre sous forme de texte (string ) en utilisant le CCSID du job QZRCSRVS en cours ou en spécifiant le CCSID utilisé pour l'encodage des caractères |
param.GetString(0, 64); // Récupère 64 caractères à partir de l'offset 0
3. GetInt() int GetInt(...)
La méthode GetInt
permet de récupérer un nombre entier dans les données de sortie d'un paramètre existant. On utilise cette méthode après l'exécution d'un programme pour lire dans les données retournées par le programme.
Variante | Description |
---|---|
GetInt() |
Retourne les 4 premiers octets des données de sortie sous forme d'un entier (int ) |
GetInt(int offset) |
Retourne les 4 octets à partir de la position offset dans les données de sortie sous forme d'un entier (int ) |
param.GetInt(4); // Récupère un entier à partir de l'offset 4
4. GetBytes() byte[] GetBytes(...)
La méthode GetBytes
permet de récupérer les données de sortie d'un paramètre existant sous forme binaire brute. On utilise cette méthode après l'exécution d'un programme pour lire dans les données retournées par le programme.
Variante | Description |
---|---|
GetBytes() |
Retourne l'intégralité des données de sorties du paramètre sous forme binaire brute (byte[] ) |
GetBytes(int offset, int length) |
Retourne length octets à partir de la position offset dans les données de sorties du paramètre sous forme binaire brute (byte[] ) |
param.GetBytes(0, 10); // Récupère 10 octets à partir de l'offset 0
Extensions du type
IList<NTiProgramParameter>.Add(...)
La méthode Add()
des éléments de type IList<NTiProgramParameter>
est étendue pour reprendre les mêmes fonctionnalités que les constructeurs.
AsOutput()
, AsInput()
, AsInputOutput()
Les méthodes AsOutput()
, AsInput()
et AsInputOutput()
permettent respectivement de definir la direction d'un paramètre à ParameterDirection.Output
, ParameterDirection.Input
et ParameterDirection.InputOutput
.
Elles s'appliquent au paramètre directement et renvoient une référence à ce même paramètre.
Exemple d'utilisation
Cet exemple présente l'exécution d'un programme MYPGM
de la bibliothèque MYLIB
dont les paramètres sont les suivants:
Description | Type | Direction | Valeur |
---|---|---|---|
Texte 1 | CHAR(10) | Input | Hello |
Texte 2 | CHAR(10) | Input | World |
Position de départ | BYTE(1) | Input | 0x00 |
Longueur de la variable retour | BYTE(4) | Input | 128 |
Variable retour | CHAR(128) | Output | vide |
Code d'erreur | CHAR(50) | InputOutput | vide |
On souhaite lire différentes valeurs dans la variable retour composée ainsi:
Offset | Longueur | Description |
---|---|---|
0 | 64 | Message 1 |
64 | 64 | Message 2 |
L'appel serait réalisé avec le code suivant:
//Ouverture d'une connexion NTi:
NTiConnection conn = new NTiConnection(connectionString);
conn.Open();
//Création de la liste de paramètres:
List parms = new List() {
new NTiProgramParameter("Hello", 10).AsInput(),
new NTiProgramParameter("World", 10).AsInput(),
new NTiProgramParameter(new byte[] {0x00}).AsInput(),
new NTiProgramParameter(128).AsInput(),
new NTiProgramParameter("", 128).AsOutput(),
new NTiProgramParameter("", 50)
};
//Appel du programme
conn.CallProgram("MYLIB", "MYPGM", parms);
//Récupération des données dans la variable retour (paramètre n°5)
string message1 = parms[4].GetString(0, 64);
string message2 = parms[4].GetString(64, 64);