Traitement des instructions d'objet métier

Cette section décrit les aspects suivants du traitement des instructions d'un objet métier :

Détermination des instructions

Un objet métier de niveau supérieur et chacun de ses objets métier enfant individuels peuvent contenir leurs propres instructions. Par conséquent, un courtier d'intégration peut transmettre au connecteur un objet métier doté d'instructions différentes pour les objets métier parent et enfant. Lorsque cela se produit, le connecteur utilise l'instruction de l'objet métier parent de niveau supérieur pour déterminer le mode de traitement de l'ensemble de l'objet métier. Pour plus d'informations, voir Traitement des instructions.

Images postérieures et deltas

Une image postérieure représente l'état d'un objet métier après que toutes les modifications ont été apportées. Un delta est un objet métier utilisé dans une opération de mise à jour qui contient uniquement les valeurs de clés et les données à modifier. Dans la mesure où le connecteur prend uniquement en charge les images postérieures, dès réception d'un objet métier pour sa mise à jour, le connecteur suppose que l'objet métier représente l'état souhaité des données après mise à jour.

Par conséquent, lorsqu'un courtier d'intégration envoie au connecteur un objet métier avec l'instruction Update, le connecteur modifie la représentation actuelle de l'objet métier dans la base de données de sorte qu'elle corresponde exactement à l'objet métier source. Pour ce faire, le connecteur modifie les valeurs d'attribut simple et ajoute ou supprime des objets métier enfant.

Par exemple, supposons que l'état actuel de l'objet métier Contract 2345 dans la base de données soit le suivant :

Supposons également que le courtier d'intégration transmette au connecteur l'objet métier suivant :

Pour procéder à la mise à jour, le connecteur applique les modifications suivantes à la base de données :

Dans la mesure où le connecteur suppose que chaque objet métier provenant du courtier d'intégration représente une image postérieure, il est important de veiller à ce que chaque objet métier envoyé à ce connecteur pour la mise à jour contienne des objets métier enfant existants et valides. Même si aucun des attributs simples d'un objet métier n'a été modifié, l'objet métier enfant doit être inclus dans l'objet métier source.

Vous avez toutefois la possibilité d'empêcher certains connecteurs de supprimer les objets métier enfant manquants au cours d'une opération de mise à jour. Vous pouvez utiliser les informations d'application relatives à l'attribut représentant l'enfant ou le tableau d'enfants pour demander au connecteur de conserver les objets métier enfant qui ne sont pas inclus dans l'objet métier source. Pour ce faire, attribuez au paramètre KEEP_RELATIONSHIP la valeur true. Pour plus d'informations, voir Spécification de la clé étrangère d'un attribut.

Traitement des instructions

Cette section présente les étapes réalisées par le connecteur lors de la création, l'extraction, la mise à jour ou de la suppression d'un objet métier envoyé par un courtier d'intégration. Le connecteur traite les objets métier hiérarchiques de manière récursive. En d'autres termes, il procède aux mêmes étapes pour chaque objet métier enfant jusqu'à ce qu'il ait traité tous les objets métier individuels.

Remarque :
Un objet métier de niveau supérieur correspondant à un encapsuleur prend en charge les instructions de création, d'extraction, de mise à jour et de suppression. La seule différence avec le traitement d'un objet encapsuleur réside dans le fait que seuls les objets contenus dans l'objet encapsuleur sont traités et non l'objet lui-même.

Comparaison des objets métier

A différents points du traitement décrit ci-après, le connecteur compare deux objets métier pour voir s'ils sont identiques. Par exemple, au cours d'une opération de mise à jour, le connecteur détermine si un objet métier spécifique existe dans un tableau d'objets métier. Pour effectuer cette vérification, le connecteur compare l'objet métier concerné avec chaque objet métier du tableau. Pour que deux objets métier soient considérés comme identiques, les deux conditions suivantes doivent être remplies :

Opérations de création

Lors de la création d'un objet métier, le connecteur renvoie l'état VALCHANGE si l'opération a réussi (que l'opération ait entraîné ou non des modifications à l'objet métier) ou FAIL si l'opération a échoué.

Lors de la création d'un objet métier hiérarchique, le connecteur procède aux étapes suivantes :

  1. Il insère de manière récursive chaque objet métier enfant de type cardinalité simple contenu avec des droits de propriété dans la base de données. En d'autres termes, le connecteur crée l'enfant et tous les objets métier enfant que l'enfant et ses enfants contiennent.

    Si la définition d'objet métier spécifie qu'un attribut représente un objet métier enfant de type cardinalité simple et que cet attribut est vide, le connecteur ignore l'attribut. Toutefois, si la définition d'objet métier requiert que l'attribut représente un enfant et que ce n'est pas le cas, le connecteur renvoie un message d'erreur et met fin au traitement.

  2. Il traite chaque objet métier enfant de type cardinalité simple contenu avec des droits de propriété comme suit :
    1. Il tente de manière récursive d'extraire l'enfant de la base de données à l'aide des valeurs de clé transmises par le courtier d'intégration.
    2. Si l'extraction échoue, indiquant ainsi que l'enfant n'existe pas actuellement dans la base de données, le connecteur renvoie un message d'erreur et met fin au traitement. Si l'extraction réussit, le connecteur met à jour l'objet métier enfant de manière récursive.

    Remarque :
    Pour permettre à cette approche de fonctionner correctement lorsque l'objet métier enfant existe déjà dans la base de données de l'application, veillez à ce que les renvois aux attributs de clé primaire contenus dans les objets métier enfant soient corrects dans les opérations de création. Si l'objet métier enfant n'existe pas déjà dans la base de données de l'application, affectez aux attributs de clé primaire la valeur CxBlank.
  3. Il insère l'objet métier de niveau supérieur dans la base de données comme suit :
    1. Il affecte à chaque valeur de clé étrangère les valeurs de clé primaire de l'objet métier enfant correspondant représenté avec le type cardinalité simple. Dans la mesure où les valeurs des objets métier enfant peuvent être définies par des compteurs ou des séquences de base de données ou par la base de données elle-même lors de la création de l'enfant, cette étape garantit la validité des valeurs de clé étrangère dans le parent avant que ce dernier ne soit inséré dans la base de données par le connecteur.
    2. Il génère une nouvelle valeur d'ID unique pour chaque attribut défini automatiquement par la base de données. Le nom du compteur ou de la séquence de base de données est stocké dans les informations spécifiques à l'application de l'attribut. Si un attribut possède un compteur ou une séquence de base de données qui lui est associé, la valeur générée par le connecteur remplace toute valeur transmise par le courtier d'intégration. Pour plus d'informations sur la spécification d'un compteur ou d'une séquence de base de données, voir UID=AUTO dans Informations spécifiques à l'application pour les attributs simples.
    3. Il copie la valeur d'un attribut sur la valeur d'un autre attribut comme indiqué par le paramètre CA (CopyAttribute) des informations d'application de l'attribut. Pour plus d'informations sur l'utilisation du paramètre CA, voir CA=set_attr_name dans Informations spécifiques à l'application pour les attributs simples.
    4. Il insère l'objet métier de niveau supérieur dans la base de données.

    Remarque :
    Un objet métier de niveau supérieur correspondant à un encapsuleur ne sera pas inséré dans la base de données.
  4. Il traite chaque objet métier enfant de type cardinalité simple qui stocke la relation parent-enfant dans l'enfant, comme suit :
    1. Il définit les valeurs de clé étrangère dans l'enfant pour faire référence à la valeur contenue dans les attributs de clé primaire correspondants dans le parent. Dans la mesure où les valeurs de clé primaire du parent ont été générées au cours de la création du parent, la validité des valeurs de clé étrangère dans chaque enfant est ainsi garantie avant que l'enfant ne soit inséré dans la base de données.
    2. Il insère l'enfant dans la base de données.
  5. Il traite chaque objet métier enfant de type cardinalité multiple comme suit :
    1. Il définit les valeurs de clé étrangère dans chaque enfant pour faire référence à la valeur contenue dans les attributs de clé primaire correspondant dans le parent. Dans la mesure où les valeurs de clé primaire du parent ont été générées au cours de la création du parent, la validité des valeurs de clé étrangère dans chaque enfant est ainsi garantie avant que l'enfant ne soit inséré dans la base de données.
    2. Il insère chaque objet métier enfant de type cardinalité multiple dans la base de données.

Opérations d'extraction

Lors de l'extraction d'un objet métier hiérarchique, le connecteur procède aux étapes suivantes :

  1. Il supprime tous les objets métier enfant de l'objet métier de niveau supérieur reçu du courtier d'intégration.
  2. Il extrait l'objet métier de niveau supérieur de la base de données.

    Remarques :

    1. Un objet métier peut avoir des attributs qui ne correspondent à aucune colonne de la base de données, tels que les attributs d'espace réservé. Lors de l'extraction, le connecteur ne modifie pas ces attributs dans l'objet métier de niveau supérieur : ils conservent les valeurs reçues du courtier d'intégration. Dans les objets métier enfant, le connecteur affecte à ces attributs leurs valeurs par défaut lors de l'extraction.

    2. Un objet métier de niveau supérieur correspondant à un encapsuleur doit contenir toutes les valeurs d'attribut des objets situés au niveau inférieur immédiat de l'objet encapsuleur car ces valeurs seront nécessaires pour extraire les objets, notamment les clés et les attributs d'espace réservé. L'ensemble des clés et attributs d'espace réservé doit être renseigné dans l'objet encapsuleur. Les attributs simples de l'objet encapsuleur qui seront utilisés en tant que clés étrangères dans les objets d'un niveau inférieur à l'encapsuleur devront être signalés en tant que clés dans l'objet encapsuleur.
  3. Il extrait de manière récursive tous les objets métier enfant de type cardinalité multiple.
    Remarque :
    Le connecteur n'impose pas le caractère unique des valeurs lors du remplissage d'un tableau d'objets métier. Il en va de la responsabilité de la base de données d'assurer cette unicité. Si la base de données renvoie des objets métier enfant en double, le connecteur renvoie à son tour des enfants en double.
  4. Il extrait de manière récursive chaque enfant de type cardinalité simple, que l'objet métier enfant soit contenu avec ou sans droits de propriété.
    Remarque :
    Tous les objets métier enfant de type cardinalité simple sont traités en fonction des occurrences dans l'objet métier et avant le traitement de l'objet métier parent. La propriété ou la non-propriété des objets enfant ne détermine pas la séquence de traitement mais en détermine le type.

Opérations d'extraction par contenu

Une instruction RetrieveByContent est applicable uniquement pour l'objet métier de niveau supérieur car le connecteur réalise une extraction en fonction des attributs contenus uniquement dans l'objet métier de niveau supérieur.

Si un objet métier de niveau supérieur utilise l'instruction RetrieveByContent, tous les attributs (y compris les attributs non clés) dont la valeur n'est pas null sont utilisés comme critères d'extraction.

Si plusieurs lignes sont renvoyées, le connecteur utilise la première ligne en tant que ligne de résultat et renvoie la valeur MULTIPLE_HITS.

Remarque :
Une instruction RetrieveByContent n'est pas applicable pour un objet métier de niveau supérieur correspondant à un encapsuleur.

Opérations de mise à jour

Lors de la mise à jour d'un objet métier, le connecteur renvoie l'état VALCHANGE si l'opération a réussi (que l'opération ait entraîné ou non des modifications à l'objet métier) ou FAIL si l'opération a échoué. Lors de l'utilisation d'une base de données Oracle, le connecteur verrouille les données lors de leur extraction afin de garantir leur intégrité.

Lors de la mise à jour d'un objet métier hiérarchique, le connecteur procède aux étapes suivantes :

  1. Il utilise les valeurs de clé primaire de l'objet métier source pour extraire l'entité correspondante de la base de données. L'objet métier extrait est une représentation exacte de l'état en cours des données dans la base de données.
  2. Il met à jour de manière récursive tous les enfants de type cardinalité simple de l'objet métier de niveau supérieur.

    Si la définition d'objet métier nécessite qu'un attribut représente un objet métier enfant, l'enfant doit exister à la fois dans l'objet métier source et dans l'objet métier extrait. Dans le cas contraire, la mise à jour échoue et le connecteur renvoie un message d'erreur.

    Le connecteur gère les enfants de type cardinalité simple contenus avec des droits de propriété de l'une des manières suivantes :

    Pour les enfants de type cardinalité simple contenus sans droits de propriété, le connecteur tente d'extraire chaque enfant de la base de données présent dans l'objet métier source. S'il parvient à le faire, le connecteur alimente l'objet métier enfant sans le mettre à jour dans la mesure où les enfants de type cardinalité simple contenus sans droits de propriété ne peuvent être modifiés par le connecteur.

  3. Pour les objets métier enfant de type cardinalité simple qui stockent la relation dans le parent, le connecteur affecte à chaque valeur de clé étrangère dans le parent la valeur de la clé primaire contenue dans l'objet métier enfant de type cardinalité simple correspondant. Cette étape est nécessaire dans la mesure où des enfants de type cardinalité simple peuvent avoir été ajoutés à la base de données au cours des étapes précédentes, entraînant ainsi la création d'ID uniques supplémentaires.
  4. Il met à jour tous les attributs simples de l'objet métier extrait à l'exception de ceux dont l'attribut correspondant dans l'objet métier source contient la valeur CxIgnore.

    Dans la mesure où l'objet métier mis à jour doit être unique, le connecteur vérifie qu'une seule ligne est traitée en retour. Il renvoie un message d'erreur si plusieurs lignes sont traitées.

  5. Il affecte à toutes les valeurs de clé étrangère dans chaque enfant qui stocke la relation parent-enfant dans l'enfant (de type cardinalité multiple et simple) la valeur de clé primaire de l'objet métier parent correspondant. Lorsqu'InterChange Server est utilisé en tant que courtier d'intégration, ces valeurs sont généralement mises en référence croisée au cours du mappage des données. Toutefois, cette étape est importante pour garantir la validité des valeurs de clé étrangère des nouveaux enfants qui stockent la relation dans l'enfant avant que le connecteur mette à jour ces enfants.
  6. Il traite chaque enfant de type cardinalité multiple de l'objet métier extrait de l'une des manières suivantes :

Remarque :
Le courtier d'intégration doit veiller à ce que les objets métier contenus avec une cardinalité multiple dans l'objet métier source soient uniques (en d'autres termes, un tableau ne doit pas contenir plusieurs copies d'un même objet métier). Si le connecteur extrait un objet métier en double dans un tableau source, il traite l'objet métier deux fois, ce qui peut entraîner des résultats incertains.

Opérations de mise à jour delta

Le traitement de l'instruction DeltaUpdate est différent du traitement de l'instruction Update sur les points suivants :

  1. Avec une instruction DeltaUpdate, aucune extraction n'est réalisée avant la mise à jour, contrairement au traitement de l'instruction Update.
  2. Aucune comparaison n'est effectuée entre l'objet métier entrant et l'objet métier contenu dans la base de données.
  3. Tous les enfants sont traités en fonction de l'instruction définie dans chaque objet enfant. Si aucune instruction n'est définie pour l'un des enfants, le connecteur renvoie un message d'erreur.

Lors de la mise à jour delta d'un objet métier, le connecteur renvoie l'état VALCHANGE si l'opération a réussi (que l'opération ait entraîné ou non des modifications à l'objet métier) ou FAIL si l'opération a échoué.

Lors de la mise à jour delta d'un objet métier hiérarchique, le connecteur procède aux étapes suivantes :

  1. Il traite de manière récursive tous les enfants de type cardinalité simple de l'objet parent. Si un enfant est signalé par la valeur IsRequired dans la spécification de l'objet métier, il doit être présent dans l'objet des communications entrantes. Dans le cas contraire, la mise à jour delta échoue et le connecteur renvoie un message d'erreur.
  2. Il affecte à toutes les valeurs de clé étrangère dans le parent qui fait référence aux attributs contenus dans les enfants de type cardinalité simple les valeurs des enfants correspondants. Cette étape est nécessaire dans la mesure où des enfants de type cardinalité simple peuvent avoir été ajoutés à la base de données au cours des étapes précédentes, entraînant ainsi la création de valeurs de séquence supplémentaires.
  3. Il met à jour l'objet courant en cours de traitement via une instruction SQL UPDATE ou une procédure stockée. Tous les attributs simples de l'objet métier individuel sont mis à jour, à l'exception des attributs ayant la valeur IsIgnore dans l'objet métier des communications entrantes. Le connecteur ne compare pas l'objet des communications entrantes avec l'objet courant en fonction des attributs pour déterminer les attributs devant être ajoutés à l'instruction de mise à jour : ils sont tous mis à jour. Dans la mesure où l'objet mis à jour doit être unique, le connecteur vérifie qu'une seule ligne est traitée en retour. Un message d'erreur est renvoyé si plusieurs lignes sont traitées.
  4. Il affecte à toutes les valeurs de clé étrangère dans tous les enfants de cardinalité N de l'objet courant qui fait référence aux attributs parent les valeurs parent correspondantes. En règle générale, ces valeurs ont déjà été renvoyées au cours du mappage des données. Cela peut toutefois ne pas être le cas pour les nouveaux enfants dans les conteneurs de cardinalité N. La validité de toutes les valeurs de clé étrangère dans tous les enfants de cardinalité N est ainsi garantie avant la mise à jour de ces enfants.
  5. Il met à jour tous les conteneurs de cardinalité N de l'objet courant.

Lors du traitement des objets enfant, chaque instruction d'enfant est prise en compte et l'opération appropriée est réalisée. Les instructions autorisées sur un enfant dans une instruction DeltaUpdate sont les suivantes : Create, Delete et DeltaUpdate.

Opérations de suppression

Lors de la suppression d'un objet métier, le connecteur renvoie l'état SUCCESS si l'opération a réussi ou FAIL si l'opération a échoué. L'objet métier parent est tout d'abord extrait. Ensuite, l'adaptateur supprime de manière récursive tous les enfants de type cardinalité simple ayant une relation avec droits de propriété avec le parent, puis l'objet métier parent lui-même et enfin tous les enfants de cardinalité N. Les enfants de type cardinalité simple sans droits de propriété ne sont jamais supprimés. Si aucun objet métier n'existe, le connecteur renvoie le message FAIL.

Le connecteur prend en charge la suppression logique et physique, selon la valeur SCN (Status Column Name) dans les informations spécifiques à l'application de l'objet. Si la valeur SCN est définie, le connecteur procède à une suppression logique. Si la valeur SCN n'est pas définie, le connecteur procède à une suppression physique.

Suppression physique

Lors de la suppression physique d'un objet métier hiérarchique, le connecteur procède aux étapes suivantes :

  1. Il supprime de manière récursive tous les objets métier enfant de type cardinalité simple contenus avec droits de propriétés.
  2. Il supprime l'objet métier de niveau supérieur.
  3. Il supprime de manière récursive tous les objets métier enfant de type cardinalité multiple.

Remarque :
Un objet métier de niveau supérieur correspondant à un encapsuleur ne dispose d'aucune table de base de données correspondante : il ne sera, par conséquent, pas supprimé de la base de données. Toutes les valeurs d'attributs simples d'un encapsuleur seront ignorées.

Suppression logique

Lors de la suppression logique d'un objet métier, le connecteur procède aux étapes suivantes :

  1. Il émet une instruction UPDATE qui affecte à l'attribut d'état de l'objet métier la valeur spécifiée par les informations d'application de l'objet métier. Le connecteur vérifie que la mise à jour concerne une seule ligne de la base de données puis renvoie un message d'erreur dans le cas contraire.
  2. Il supprime logiquement tous les enfants de type cardinalité simple contenus avec droits de propriété et tous les enfants de type cardinalité multiple de manière récursive. Le connecteur ne supprime pas les enfants de type cardinalité simple contenus sans droits de propriété.

Instructions SQL

Le connecteur peut utiliser des instructions SQL simples pour les opérations de sélection, de mise à jour, d'extraction ou de suppression. Les noms des colonnes relatives aux instructions SQL proviennent de la propriété AppSpecificInfo d'un attribut. Chaque requête couvre une seule table, à moins qu'elle ne désigne une vue.

Procédures stockées

Une procédure stockée est un groupe d'instructions SQL formant une unité logique et réalisant une tâche spécifique. Une procédure stockée rassemble un ensemble d'opérations ou de requêtes que le connecteur doit exécuter sur un objet dans un serveur de base de données.

Le connecteur fait appel aux procédures stockées dans les cas suivants :

Lors du traitement d'un objet métier hiérarchique, le connecteur peut utiliser une procédure stockée pour traiter l'objet métier de niveau supérieur ou l'un de ses objets métier enfant. Toutefois, chaque objet métier ou tableau d'objets métier doit avoir sa propre procédure stockée.

Spécification d'une procédure stockée

Cette section décrit les étapes à entreprendre pour obliger le connecteur à utiliser une procédure stockée pour un objet métier. Elle contient les sections suivantes :

Ajout d'attributs à l'objet métier

Vous devez ajouter une catégorie spécifique d'attributs à l'objet métier pour chaque type de procédure stockée traitée par le connecteur. Ces attributs représentent uniquement le type de procédure stockée et les informations spécifiques à l'application qui la définissent. Ces attributs n'utilisent pas les paramètres des informations spécifiques à l'application disponibles pour un attribut simple standard.

Nommez l'attribut en fonction du type de procédure stockée à utiliser. Par exemple, pour obliger le connecteur à utiliser les procédures stockées AfterUpdate et BeforeRetrieve, ajoutez les attributs AfterUpdateSP et BeforeRetrieveSP.

Le connecteur reconnaît les noms d'attributs d'objets métier suivants :

BeforeCreateSP
 AfterCreateSP
 CreateSP
 BeforeUpdateSP
 AfterUpdateSP
 UpdateSP
 BeforeDeleteSP
 AfterDeleteSP
 DeleteSP
 BeforeRetrieveSP
 AfterRetrieveSP
 RetrieveSP
 BeforeRetrieveByContentSP
 AfterRetrieveByContentSP
 RetrieveByContentSP
 BeforeRetrieveUpdateSP
 AfterRetrieveUpdateSP
 RetrieveUpdateSP
 BeforeDeltaUpdateSP
 AfterDeltaUpdateSP
 DeltaUpdateSP
 

Remarque :
Créez un attribut uniquement pour les procédures stockées que vous souhaitez que le connecteur exécute. Utilisez les informations spécifiques à l'application ou le mappage (uniquement si InterChange Server est utilisé en tant que courtier d'intégration) pour spécifier les valeurs de ces attributs avant que l'objet métier ne soit envoyé au connecteur. Le connecteur doit être redémarré pour prendre en compte les modifications apportées à ces valeurs pour les appels ultérieurs sur un objet métier.

Syntaxe d'une procédure stockée

La syntaxe utilisée pour spécifier une procédure stockée est la suivante :

SPN=StoredProcedureName;RS=true|false[;IP=Attribute_Name1[:Attribute_Name2[:...]]]
 [;OP=Attribute_Name1| RS[:Attribute_Name2| RS[:...]]]
 [;IO=Attribute_Name1[:Attribute_Name2[:...]]]
 

où :

StoredProcedureName
Nom de la procédure stockée.

RS
A la valeur true si la procédure stockée renvoie un ensemble de résultats, ou false dans le cas contraire. La valeur par défaut est false. Si la valeur est true, la propriété ColumnName contenue dans les informations d'application d'un attribut désigne la colonne appropriée dans l'ensemble de résultats. Si le paramètre RS fait partie de la liste des paramètres de sortie, ce paramètre spécifique renvoie un ensemble de résultats. Un seul paramètre OUT pour l'ensemble de résultats est pris en charge. Si plusieurs ensembles de résultats sont renvoyés sous la forme d'un paramètre OUT, seul le premier ensemble de résultats est renvoyé et les autres sont ignorés. Actuellement, cette fonction est prise en charge pour Oracle 8i et versions ultérieures et pour les procédures stockées qui utilisent le pilote JDBC Oracle. Pour la procédure stockée dans la base de données, le paramètre correspondant doit renvoyer un type REFCURSOR.

IP
Input Parameters (paramètres d'entrée) : liste des attributs d'objets métier dont le connecteur doit utiliser les valeurs en tant que valeurs d'entrée lors de l'exécution de la procédure stockée.

OP
Output Parameters (paramètre de sortie) : liste des attributs d'objets métier auxquels le connecteur doit renvoyer les valeurs après l'exécution de la procédure stockée. Voir le paramètre RS pour obtenir une description de l'ensemble de résultats.

IO
InputOutput Parameters (paramètres d'entrée-sortie) : liste des attributs d'objets métier dont le connecteur doit utiliser les valeurs en tant que valeurs d'entrée et auxquels le connecteur doit renvoyer les valeurs après l'exécution de la procédure stockée.

L'ordre des valeurs StoredProcedureName, RS et des paramètres est important, alors que l'ordre des paramètres entre eux ne l'est pas. En d'autres termes, cela ne fait aucune différence pour le connecteur si la procédure stockée regroupe tous les paramètres de chaque type ou qu'elle disperse les types de paramètre. Lorsque plusieurs paramètres de même type sont regroupés ensemble, séparez les valeurs par deux-points (:). Il n'est pas nécessaire de répéter le type de paramètre pour chaque valeur. Séparez les paramètres de types différents par un point virgule. Lorsque vous indiquez des valeurs de paramètre, n'insérez aucun espace de chaque côté du signe égal (=).

Exemples de procédures stockées renvoyant des ensembles de résultats

Les exemples suivants utilisent les procédures stockées nommées CustomerAddressRetrieve et CustomerAddressRetrieveForOracleDB pour renvoyer un ensemble de résultats qui contient plusieurs adresses et qui est utilisé pour créer un objet métier enfant de cardinalité N.

Remarque :
Les ensembles de résultats sont traités pour l'attribut RetrieveSP uniquement et sont utilisés pour créer un objet métier enfant de cardinalité N.

Pour les bases de données Oracle, l'ensemble de résultats est renvoyé en tant que paramètre de sortie et est traité en conséquence par l'adaptateur. Pour les autres bases de données, l'ensemble de résultats est une valeur de retour provenant de la procédure stockée.

Exemples de procédures stockées ne renvoyant pas d'ensemble de résultats

Les exemples suivants utilisent les procédures stockées nommées CustomerInsert et VendorInsert qui obtiennent des valeurs auprès de deux attributs d'entrée et renvoient ces valeurs à quatre attributs de sortie. Ces exemples illustrent différentes structures de procédures stockées.

Le connecteur prend en charge uniquement les types de données simples pris en charge par le pilote JDBC.

Spécification de la procédure stockée

Il existe deux méthodes pour spécifier le nom de la procédure stockée et ses valeurs de paramètre :

Remarque :
Si une procédure stockée qui gère une opération de création, de mise à jour ou de suppression est exécutée sur un objet métier hiérarchique contenant un tableau d'objets métier enfant, le connecteur traite chaque objet métier enfant individuellement. Par exemple, si le connecteur exécute une procédure stockée BeforeCreate, il ne traite pas le tableau en tant qu'unité mais traite chaque membre de ce tableau. Lorsqu'il traite une procédure stockée BeforeRetrieve, le connecteur agit sur un seul objet métier. Lorsqu'il traite une procédure stockée AfterRetrieve, le connecteur agit sur tous les objets métier renvoyés par l'extraction.

Traitement des objets métier à l'aide des procédures stockées ou des instructions SQL simples

Les sections suivantes expliquent comment le connecteur traite les procédures stockées :

Opérations de création d'objets métier

Une procédure stockée de création renvoie généralement les valeurs utilisées par le connecteur pour renseigner les attributs simples dans l'objet métier de niveau supérieur. Le connecteur procède comme suit lors du traitement des procédures stockées de création (BeforeCreate, Create, AfterCreate) :

  1. Il vérifie que l'objet métier contient un attribut BeforeCreateSP. Le cas échéant, il appelle la procédure stockée BeforeCreate.
  2. Si la procédure stockée renvoie des valeurs via les paramètres de sortie, il utilise ces valeurs pour définir la valeur des attributs simples dans l'objet métier.
  3. Il crée les objets métier enfant de type cardinalité simple.
  4. Il affecte à chacune des valeurs de clé étrangère de l'objet métier de niveau supérieur la valeur de clé primaire de chaque objet métier enfant de type cardinalité simple.
  5. Il vérifie que l'objet métier contient un attribut CreateSP. Le cas échéant, il appelle la procédure stockée Create pour créer l'objet métier de niveau supérieur. Dans le cas contraire, il génère et exécute une instruction INSERT pour créer l'objet métier de niveau supérieur.
  6. Si la procédure stockée Create renvoie des valeurs via les paramètres de sortie, il utilise ces valeurs pour définir la valeur des attributs simples dans l'objet métier.
  7. Il affecte à la valeur de clé étrangère de chaque enfant de type cardinalité multiple la valeur de l'attribut de clé primaire de leur parent.
  8. Il crée les objets métier enfant de type cardinalité multiple.
  9. Il vérifie que l'objet métier contient un attribut AfterCreateSP. Le cas échéant, il appelle la procédure stockée AfterCreate.
  10. Si la procédure stockée renvoie des valeurs via les paramètres de sortie, il utilise ces valeurs pour définir les valeurs des attributs simples dans l'objet métier.

Le connecteur peut utiliser les valeurs renvoyées à l'étape 10 pour modifier les valeurs d'un objet métier créé au cours des étapes 3 ou 5.

Opérations de mise à jour d'objets métier

Une procédure stockée de mise à jour renvoie généralement les valeurs utilisées par le connecteur pour renseigner les attributs simples dans l'objet métier de niveau supérieur. Le connecteur procède comme suit lors du traitement des procédures stockées de mise à jour (BeforeUpdate, Update, AfterUpdate) :

  1. Il vérifie que l'objet métier contient un attribut BeforeUpdateSP. Le cas échéant, il appelle la procédure stockée BeforeUpdate.
  2. Si la procédure stockée BeforeUpdate renvoie des valeurs via les paramètres de sortie, il utilise ces valeurs pour définir la valeur des attributs simples dans l'objet métier.
  3. Il met à jour les objets métier enfant de type cardinalité simple.
  4. Il affecte à chacune des valeurs de clé étrangère de l'objet métier de niveau supérieur la valeur de clé primaire de chaque objet métier enfant contenu de type cardinalité simple.
  5. Il vérifie que l'objet métier contient un attribut UpdateSP. Le cas échéant, il appelle la procédure stockée Update pour mettre à jour l'objet métier de niveau supérieur. Dans le cas contraire, il génère et exécute une instruction UPDATE pour mettre à jour l'objet métier de niveau supérieur.
  6. Si la procédure stockée Update renvoie des valeurs via les paramètres de sortie, il utilise ces valeurs pour définir la valeur des attributs simples dans l'objet métier.
  7. Il définit les valeurs de clé étrangère dans les enfants de type cardinalité multiple pour faire référence à la valeur contenue dans les attributs de clé primaire correspondants dans le parent.
  8. Il met à jour les objets métier enfant de type cardinalité multiple.
  9. Il vérifie que l'objet métier contient un attribut AfterUpdateSP. Le cas échéant, il appelle la procédure stockée AfterUpdate.
  10. Si la procédure stockée renvoie des valeurs via les paramètres de sortie, il utilise ces valeurs pour définir la valeur des attributs simples dans l'objet métier.

Opérations de suppression d'objets métier

Une procédure stockée de suppression ne renvoie pas les valeurs au connecteur. Le connecteur procède comme suit lors du traitement des procédures stockées de suppression (BeforeDelete, Delete, AfterDelete) :

  1. Il vérifie que l'objet métier contient un attribut BeforeDeleteSP. Le cas échéant, il appelle la procédure stockée BeforeDelete.
  2. Il supprime les objets métier enfant de type cardinalité simple.
  3. Il supprime les objets métier enfant de type cardinalité multiple.
  4. Il vérifie que l'objet métier contient un attribut DeleteSP. Le cas échéant, il appelle la procédure stockée Delete pour supprimer l'objet métier de niveau supérieur. Dans le cas contraire, il génère et exécute une instruction DELETE.
  5. Il vérifie que l'objet métier contient un attribut AfterDeleteSP. Le cas échéant, il appelle la procédure stockée AfterDelete.

Opérations d'extraction d'objets métier

Pour les opérations d'extraction simples, les procédures stockées peuvent être utilisées pour l'objet métier de niveau supérieur, pour les enfants de type cardinalité simple ainsi que pour les enfants de type cardinalité multiple. L'ordre des procédures est le suivant :

Le connecteur crée un objet temporaire pour extraire un objet métier enfant de type cardinalité simple ou multiple. Le connecteur applique ensuite la procédure stockée BeforeRetrieve à l'objet métier temporaire. La procédure stockée AfterRetrieve est alors appliquée à chaque objet enfant extrait pour le conteneur.

Le connecteur exécute la procédure stockée AfterRetrieve après avoir exécuté une requête Retrieve générée dynamiquement à partir des métadonnées de l'objet métier ou de la procédure stockée sur l'objet métier.

Selon la spécification JDBC, il existe trois types d'appel StoredProcedure comme suit :

spName désigne le nom de la procédure stockée.

Le connecteur prend en charge les deux premiers types. Il traitera le paramètre ResultSet renvoyé par l'appel StoredProcedure.

Si RS=true dans la syntaxe de la procédure stockée, l'ensemble de résultats provenant de la procédure stockée est traité. Si RS=false, l'ensemble de résultats n'est pas traité. La valeur par défaut du paramètre RS est false. Une fois les valeurs de l'ensemble de résultats traitées, les variables de sortie de la procédure stockée sont traitées. Si RS=true, les enfants de type cardinalité multiple ne peuvent pas spécifier les variables de sortie dans la procédure stockée associée.

Remarque :
Le traitement de l'ensemble de résultats est pris en charge uniquement pour les opérations de l'instruction Retrieve et de l'attribut RetrieveSP.

Traitement de l'ensemble de résultats renvoyé par la procédure stockée d'extraction (RetrieveSP)

Le paramètre ResultSetMetaData est obtenu pour l'ensemble de résultats renvoyé par la procédure stockée. Les valeurs de toutes les colonnes contenues dans l'ensemble de résultats sont obtenues et définies sur l'attribut correspondant de l'objet métier. La propriété ColumnName des informations d'application d'un attribut doit contenir le nom de la colonne ResultSet pour faire correspondre l'attribut et la colonne.

Pour les objets de type cardinalité simple, l'ensemble de résultats correspondant ne doit contenir qu'une seule ligne. Si plusieurs lignes sont renvoyées dans l'ensemble de résultats, un message d'erreur est signalé.

Pour les enfants de type cardinalité multiple, plusieurs lignes peuvent être renvoyées via l'ensemble de résultats. Pour chaque ligne renvoyée, un objet est créé et ajouté au conteneur. Le conteneur est ensuite ajouté à l'objet parent à l'index d'attribut obligatoire.

L'enfant de cardinalité N d'un objet métier encapsuleur possède les attributs de la procédure stockée qui représentent les paramètres d'entrée et les colonnes de l'ensemble de résultats. Le paramètre WRAPPER=true est défini au niveau des informations spécifiques à l'application de l'objet métier. Les informations d'application de l'objet métier enfant ont la valeur TN=dummy.

Opérations d'extraction par contenu d'objets métier

Pour les opérations RetrieveByContent simples, les procédures stockées peuvent uniquement être utilisées pour l'objet métier de niveau supérieur et ses enfants de type cardinalité simple. En d'autres termes, elles ne peuvent pas être utilisées pour renvoyer un ensemble de résultats ou plusieurs lignes. L'ordre des procédures est le suivant :

Le connecteur crée un objet temporaire pour extraire un objet métier enfant de type cardinalité simple ou multiple. Pour les objets métier de type cardinalité multiple, le connecteur applique ensuite la procédure stockée BeforeRetrieveByContent à l'objet métier temporaire. La procédure stockée AfterRetrieveByContent est alors appliquée à chaque objet enfant extrait pour le conteneur.

Le connecteur exécute la procédure stockée AfterRetrieveByContent après avoir exécuté une requête RetrieveByContent générée dynamiquement à partir des métadonnées de l'objet métier ou de la procédure stockée sur l'objet métier. Dans ce cas, bien que l'extraction d'un objet métier hiérarchique entraîne également l'extraction de ses objets métier enfant, le connecteur exécute la procédure stockée AfterRetrieveByContent sur chaque objet métier présent dans le tableau.

Opérations d'extraction pour mise à jour d'objets métier

Les procédures stockées suivantes sont appelées sur l'objet métier de niveau supérieur et extraient tous les objets métier enfant de la même manière que lorsqu'il s'agit de l'instruction simple Retrieve.

L'ordre des procédures est le suivant :

Ces procédures stockées procèdent aux mêmes opérations que les procédures BeforeRetrieve et AfterRetrieve. Elles portent un nom distinctif pour que vous puissiez créer des attributs distincts afin d'obliger le connecteur à exécuter les opérations BeforeRetrieve et BeforeRetrieveUpdate, ainsi que les opérations AfterRetrieve et AfterRetrieveUpdate.

Le connecteur crée un objet temporaire pour extraire un objet métier enfant de type cardinalité simple ou multiple. Pour les objets métier de type cardinalité multiple, le connecteur applique ensuite la procédure stockée BeforeRetrieveUpdate à l'objet métier temporaire. La procédure stockée AfterRetrieveUpdate est alors appliquée à chaque objet enfant extrait pour le conteneur.

Le connecteur exécute la procédure stockée AfterRetrieveUpdate après avoir exécuté une requête RETRIEVE générée dynamiquement à partir des métadonnées de l'objet métier ou de la procédure stockée sur l'objet métier. Dans ce cas, bien que l'extraction d'un objet métier hiérarchique entraîne également l'extraction de ses objets métier enfant, le connecteur exécute la procédure stockée AfterRetrieveUpdate sur chaque objet métier présent dans le tableau.

Validation et annulation de transaction

Chaque fois que le connecteur reçoit un objet métier à traiter, il commence un bloc de transactions. Toutes les instructions SQL que le connecteur exécute lors du traitement de cet objet métier sont regroupées dans le bloc de transactions. Une fois le traitement de l'objet métier terminé, le connecteur valide le bloc de transactions si le traitement est une réussite ou l'annule s'il rencontre une erreur.

Copyright IBM Corp. 1997, 2004