Traiter les messages de notification pour effectuer des tâches spécifiques dans SQL à l’aide de BizTalk Server
Vous pouvez utiliser l’adaptateur SQL pour recevoir des notifications pour les modifications apportées à SQL Server tables de base de données. Toutefois, l’adaptateur vous envoie uniquement une notification indiquant que certains enregistrements ont été insérés, mis à jour ou supprimés dans une certaine table de base de données. Tout post-traitement sur ces enregistrements doit être géré par les applications clientes elles-mêmes. Cette rubrique présente une description basée sur un scénario sur la façon de traiter les enregistrements dans la table en fonction du type de notification reçu de la base de données SQL Server.
Scénarios d’exécution d’actions suivantes après réception de la notification
Voici quelques scénarios dans lesquels les clients de l’adaptateur doivent effectuer certaines tâches post-notification.
Scénario 1. Envisagez un scénario dans lequel le client d’adaptateur doit effectuer certaines tâches en fonction du type de notification que vous recevez de SQL Server. Par exemple, l’application cliente doit mettre à jour les enregistrements de la table « A » si les enregistrements sont insérés dans la table « B ». De même, l’application cliente doit supprimer des enregistrements de la table « A » si les enregistrements sont supprimés de la table « B ».
Dans ce scénario, à partir du message de notification reçu, les clients de l’adaptateur doivent extraire le type de notification pour déterminer si la notification était destinée à une opération d’insertion ou de suppression. Une fois le type de notification déterminé, les clients de l’adaptateur doivent effectuer les actions suivantes pour insérer ou mettre à jour les tables appropriées.
Scénario 2. Envisagez un scénario où l’emplacement de réception qui reçoit des messages de notification pour les modifications apportées à une table tombe en panne. Lorsque l’emplacement de réception est arrêté, certains enregistrements sont ajoutés à la table. Toutefois, pour ces enregistrements, le client d’adaptateur ne reçoit aucune notification. Lorsque l’emplacement de réception est sauvegardé, l’adaptateur avertit le client en envoyant un message spécifique, puis l’application cliente doit rechercher tous les enregistrements qui ont été insérés dans la table de base de données pendant que l’emplacement de réception était en panne.
Dans ce scénario, à partir du message de notification reçu, les clients d’adaptateur doivent extraire les informations relatives à la modification d’une table de base de données ou à l’emplacement de réception. Si la notification concerne l’emplacement de réception qui démarre, les clients de l’adaptateur doivent implémenter la logique pour traiter les enregistrements qui ont pu être insérés, mis à jour ou supprimés pendant que l’emplacement de réception était arrêté.
Notes
Voici quelques exemples de scénarios répertoriés pour une meilleure compréhension de l’utilisation de la fonctionnalité de notification dans l’adaptateur SQL. Toutefois, l’ensemble de tâches de base requis pour extraire le type de notification reçue sera similaire dans tous les scénarios. Cette rubrique fournit des instructions sur la façon d’extraire le type de notification d’un message de notification.
Comment cette rubrique illustre la réception de messages de notification et l’extraction du type de notification
Dans cette rubrique, pour montrer comment traiter les messages de notification pour effectuer des tâches suivantes, nous considérons un scénario de base où un client d’adaptateur utilise l’application BizTalk pour recevoir des messages de notification pour les modifications apportées à la table Employee. Une fois la notification reçue, le client filtre le type de notification reçue et effectue l’action suivante. Pour illustrer un scénario très basique, considérons que le client d’adaptateur copie les messages de notification dans différents dossiers en fonction du type de notification reçu. Donc :
Si le message de notification concerne une opération d’insertion ou de mise à jour, le client d’adaptateur copie le message dans le dossier C :\TestLocation\UpsertNotification.
Si le message de notification concerne toute autre opération, par exemple Supprimer, le client d’adaptateur copie le message dans le dossier C :\TestLocation\OtherNotificaiton.
Pour ce faire dans le cadre d’une application BizTalk, l’orchestration doit contenir les éléments suivants :
Port de réception unidirectionnel pour recevoir des messages de notification.
Forme Expression qui contient une requête xpath pour extraire les informations sur le type de message de notification reçu.
Forme Décider pour inclure un bloc de décision dans l’orchestration. Dans ce bloc de décision, l’application décide des opérations suivantes à effectuer en fonction du message de notification reçu.
Deux ports d’envoi unidirectionnel qui reçoivent enfin les messages de notification.
Configuration des notifications avec les propriétés de liaison de l’adaptateur SQL
Le tableau suivant récapitule les propriétés de liaison de l’adaptateur SQL que vous utilisez pour configurer la réception de notifications à partir de SQL Server. Vous devez spécifier ces propriétés de liaison lors de la configuration du port de réception dans la console Administration BizTalk Server.
Notes
Vous pouvez choisir de spécifier ces propriétés de liaison lors de la génération du schéma pour l’opération notification , même si ce n’est pas obligatoire. Dans ce cas, le fichier de liaison de port généré par le complément Consume Adapter Service dans le cadre de la génération de métadonnées contient également les valeurs que vous spécifiez pour les propriétés de liaison. Vous pouvez importer ultérieurement ce fichier de liaison dans la console d’administration BizTalk Server pour créer le port de réception WCF-custom ou WCF-SQL avec les propriétés de liaison déjà définies. Pour plus d’informations sur la création d’un port à l’aide du fichier de liaison, consultez Configurer une liaison de port physique à l’aide d’un fichier de liaison de port pour utiliser l’adaptateur SQL.
Binding, propriété | Description |
---|---|
InboundOperationType | Spécifie l’opération entrante que vous souhaitez effectuer. Pour recevoir des messages de notification, définissez-le sur Notification. |
NotificationStatement | Spécifie l’instruction SQL (procédure> stockée SELECT ou EXEC<) utilisée pour l’inscription aux notifications de requête. L’adaptateur reçoit un message de notification de SQL Server uniquement lorsque le jeu de résultats de l’instruction SQL spécifiée change. |
NotifyOnListenerStart | Spécifie si l’adaptateur envoie une notification aux clients d’adaptateur lorsque l’écouteur est démarré. |
Pour obtenir une description plus complète de ces propriétés, consultez En savoir plus sur l’adaptateur BizTalk pour SQL Server propriétés de liaison de l’adaptateur. Pour obtenir une description complète de l’utilisation de l’adaptateur SQL pour recevoir des notifications de SQL Server, lisez plus loin.
Comment recevoir des messages de notification à partir de la base de données SQL Server
L’exécution d’une opération sur la base de données SQL Server à l’aide de l’adaptateur SQL avec BizTalk Server implique les tâches procédurales décrites dans Blocs de construction pour développer des applications BizTalk avec l’adaptateur SQL. Pour configurer l’adaptateur pour recevoir des messages de notification, ces tâches sont les suivantes :
Créez un projet BizTalk, puis générez le schéma pour l’opération de notification entrante. Si vous le souhaitez, vous pouvez spécifier des valeurs pour les propriétés de liaison InboundOperationType et NotificationStatement .
Créez un message dans le projet BizTalk pour recevoir une notification à partir de la base de données SQL Server.
Créez une orchestration comme décrit dans la section précédente.
Générez et déployez le projet BizTalk.
Configurez l’application BizTalk en créant des ports d’envoi et de réception physiques.
Notes
Pour les opérations entrantes, comme la réception de messages de notification, vous devez uniquement configurer un port de réception unidirectionnel WCF-Custom ou WCF-SQL. Les ports de réception bidirectionnel WCF-Custom ou WCF-SQL ne sont pas pris en charge pour les opérations entrantes.
Démarrez l’application BizTalk.
Cette rubrique fournit des instructions pour effectuer ces tâches.
Génération d’un schéma
Vous devez générer le schéma pour l’opération entrante notification . Pour plus d’informations sur la façon de générer le schéma, consultez Récupération des métadonnées pour les opérations SQL Server dans Visual Studio à l’aide de l’adaptateur SQL. Effectuez les tâches suivantes lors de la génération du schéma. Ignorez la première étape si vous ne souhaitez pas spécifier les propriétés de liaison au moment de la conception.
Spécifiez une valeur pour les propriétés de liaison InboundOperationType et NotificationStatement lors de la génération du schéma. Pour plus d’informations sur cette propriété de liaison, consultez En savoir plus sur l’adaptateur BizTalk pour SQL Server propriétés de liaison de l’adaptateur. Pour obtenir des instructions sur la façon de spécifier des propriétés de liaison, consultez Configurer les propriétés de liaison pour l’adaptateur SQL.
Sélectionnez le type de contrat service (opérations entrantes).
Générez le schéma pour l’opération notification .
Définition des messages et des types de messages
Le schéma que vous avez généré précédemment décrit les « types » requis pour les messages dans l’orchestration. Un message est généralement une variable, dont le type est défini par le schéma correspondant. Une fois le schéma généré, vous devez le lier aux messages de la vue Orchestration du projet BizTalk.
Pour cette rubrique, vous devez créer un message pour recevoir des notifications de la base de données SQL Server.
Effectuez les étapes suivantes pour créer des messages et les lier au schéma.
Pour créer des messages et créer un lien vers le schéma
Ajoutez une orchestration au projet BizTalk. Dans le Explorateur de solutions, cliquez avec le bouton droit sur le nom du projet BizTalk, pointez sur Ajouter, puis cliquez sur Nouvel élément. Tapez un nom pour l’orchestration BizTalk, puis cliquez sur Ajouter.
Ouvrez la fenêtre d’affichage d’orchestration du projet BizTalk, s’il n’est pas déjà ouvert. Cliquez sur Affichage, pointez sur Autres fenêtres, puis cliquez sur Vue d’orchestration.
Dans la vue Orchestration, cliquez avec le bouton droit sur Messages, puis cliquez sur Nouveau message.
Cliquez avec le bouton droit sur le message nouvellement créé, puis sélectionnez Fenêtre Propriétés.
Dans le volet Propriétés de Message_1, procédez comme suit :
Propriété Pour Identificateur Tapez NotifyReceive
.Type de message Dans la liste déroulante, développez Schémas, puis sélectionnez Process_Notification.Notification, où Process_Notification est le nom de votre projet BizTalk. Notification est le schéma généré pour l’opération de notification .
Configuration de l’orchestration
Vous devez créer une orchestration BizTalk pour utiliser BizTalk Server pour recevoir des messages de notification de la base de données SQL Server, puis effectuer des tâches en fonction du type de notification reçu. Dans cette orchestration, l’adaptateur reçoit le message de notification basé sur l’instruction SELECT spécifiée pour la propriété de liaison NotificationStatement . La requête xpath spécifiée dans la forme Expression extrait le type de notification dans une variable, par exemple NotificationType. La forme Décider utilise la valeur de cette variable pour déterminer le type de notification reçue et prend le « chemin » approprié pour effectuer les opérations suivantes. Comme mentionné dans la section précédente, l’orchestration effectue les opérations suivantes en fonction du type de message de notification reçu.
Si le message de notification concerne une opération d’insertion ou de mise à jour, le client de l’adaptateur copie le message dans le dossier C :\TestLocation\UpsertNotification.
Si le message de notification concerne une autre opération, par exemple Supprimer, le client de l’adaptateur copie le message dans le dossier C :\TestLocation\OtherNotificaiton.
Par conséquent, votre orchestration doit contenir les éléments suivants :
Port de réception unidirectionnel pour recevoir des messages de notification.
Forme Expression qui contient une requête xpath pour extraire le type de notification reçue.
Forme Décider pour inclure un bloc de décision dans l’orchestration. Dans ce bloc de décision, l’application décide des opérations suivantes à effectuer en fonction du message de notification reçu.
Deux ports d’envoi unidirectionnel qui reçoivent finalement les messages de notification.
Recevoir la forme.
Un exemple d’orchestration ressemble à ce qui suit.
Ajout de formes de message
Veillez à spécifier les propriétés suivantes pour chacune des formes de message. Les noms répertoriés dans la colonne Forme sont les noms des formes de message affichées dans l’orchestration qui vient d’être mentionnée.
Forme | Type de forme | Propriétés |
---|---|---|
ReceiveNotification | Recevoir | - Définissez Nom sur ReceiveNotification - Définissez Activer sur True |
Ajout d’une forme d’expression
L’objectif de l’inclusion d’une forme Expression dans l’orchestration est d’avoir une requête xpath pour extraire le type de message de notification reçu. Avant de créer une requête xpath, examinons le format d’un message de notification. Un message de notification classique ressemble à ce qui suit :
<Notification xmlns="http://schemas.microsoft.com/Sql/2008/05/Notification/">
<Info>Insert</Info>
<Source>Data</Source>
<Type>Change</Type>
</Notification>
Comme vous le voyez, les informations sur le type de notification sont disponibles dans la <info>
balise, dans la balise parente <Notification>
. Ainsi, dans le cadre de cette forme d’expression, vous devez :
Créez une variable qui contient la valeur dans la
<Info>
balise et définissez son type sur System.String. Pour plus d’informations sur la création de variables, consultez Utilisation de variables dans les orchestrations.Pour cette rubrique, nommez la variable NotificationType.
Créez une requête xpath pour extraire la valeur de la <balise Info> . La requête xpath ressemble à ce qui suit :
NotificationType = xpath(NotifyReceive,"string(/*[local-name()='Notification']/*[local-name()='Info']/text())");
Dans cette requête xpath, NotifyReceive est le message que vous avez créé pour recevoir des messages de notification. L’extrait dans la
string
fonction indique que la requête doit extraire la valeur dans la<Info>
balise, qui se trouve à son tour dans la<Notification>
balise. Enfin, la valeur extraite par la requête est affectée à la variable NotificaitonType .
Ajout d’une forme Decide
L’objectif de l’ajout d’une forme Décider est d’inclure un bloc de décision dans l’orchestration pour décider des opérations suivantes à effectuer en fonction du type de message de notification reçu. La décision est prise sur la base de la valeur de la variable NotificationType . Dans cette rubrique, l’orchestration prend une décision en fonction du type de message de notification reçu. Par conséquent, la condition dans la forme Règle est spécifiée comme suit :
NotificationType.Equals("Insert") | NotificationType.Equals("Update")
Cette condition suggère que si la valeur de la variable NotificaitonType est Insert ou Update, l’orchestration effectue un ensemble de tâches. Si la valeur de la variable NotificationType est autre chose, l’orchestration effectue d’autres ensembles de tâches.
Comme mentionné dans les sections précédentes, pour illustrer une approche simple, l’orchestration copie les messages dans différents dossiers en fonction du type de message de notification. Par conséquent, dans les blocs Règle et Else, vous devez ajouter des formes d’envoi pour envoyer les messages à différents ports. Pour cette rubrique, nommez la forme d’envoi dans le bloc Règle SendUpsertNotification et la forme Send dans le bloc Else sendothernotification.
Ajout de ports
Vous devez maintenant ajouter les ports logiques suivants à l’orchestration :
Port de réception unidirectionnel pour recevoir des messages de notification de SQL Server.
Port d’envoi unidirectionnel pour envoyer des messages de notification pour les opérations d’insertion et de mise à jour dans un dossier spécifique.
Port d’envoi unidirectionnel pour envoyer des messages de notification pour toutes les autres opérations dans un dossier spécifique.
Veillez à spécifier les propriétés suivantes pour chacun des ports logiques. Les noms répertoriés dans la colonne Port sont les noms des ports affichés dans l’orchestration.
Port | Propriétés |
---|---|
SQLNotifyPort | - Définissez Identificateur sur SQLNotifyPort - Définissez Type sur SQLNotifyPortType - Définir le modèle de communication sur Unidirectionnel - Définir le sens de la communication sur Réception |
NotificationUpsertPort | - Définissez Identifier sur NotificationUpsertPort - Définissez Type sur NotificationUpsertPortType - Définir le modèle de communication sur Unidirectionnel - Définir le sens de la communication sur Envoyer |
OtherNotificationPort | - Définissez Identifier sur OtherNotificationPort - Définissez Type sur OtherNotificationPortType - Définir le modèle de communication sur Unidirectionnel - Définir le sens de la communication sur Envoyer |
Spécifier des messages pour les formes d’action et se connecter aux ports
Le tableau suivant spécifie les propriétés et leurs valeurs que vous devez définir pour spécifier des messages pour les formes d’action et lier les messages aux ports. Les noms répertoriés dans la colonne Forme sont les noms des formes de message affichées dans l’orchestration mentionnée précédemment.
Forme | Propriétés |
---|---|
ReceiveNotification | - Définissez Message sur NotifyReceive - Définissez Opération sur SQLNotifyPort.Notify.Request |
SendUpsertNotification | - Définissez Message sur NotifyReceive - Définissez Opération sur NotificationUpsertPort.Upsert.Request |
SendOtherNotification | - Définissez Message sur Sélectionner - Définissez Opération sur OtherNotificationPort.Other.Request |
Une fois que vous avez spécifié ces propriétés, les formes et les ports de message sont connectés et votre orchestration est terminée.
Vous devez maintenant générer la solution BizTalk et la déployer sur un BizTalk Server. Pour plus d’informations, consultez Génération et exécution d’orchestrations.
Configuration de l’application BizTalk
Une fois que vous avez déployé le projet BizTalk, l’orchestration que vous avez créée précédemment est répertoriée sous le volet Orchestrations de la console d’administration BizTalk Server. Vous devez utiliser la console d’administration BizTalk Server pour configurer l’application. Pour obtenir une procédure pas à pas, consultez Procédure pas à pas : déploiement d’une application BizTalk de base.
La configuration d’une application implique :
Sélection d’un hôte pour l’application.
Mappage des ports que vous avez créés dans votre orchestration à des ports physiques dans la console d’administration BizTalk Server. Pour cette orchestration, vous devez :
Définissez un port de réception unidirectionnel de WCF-Custom physique ou WCF-SQL. Ce port écoute les notifications provenant de la base de données SQL Server. Pour plus d’informations sur la création de ports, consultez Configurer manuellement une liaison de port physique à l’adaptateur SQL. Veillez à spécifier les propriétés de liaison suivantes pour le port de réception.
Important
Vous n’avez pas besoin d’effectuer cette étape si vous avez spécifié les propriétés de liaison au moment du design. Dans ce cas, vous pouvez créer un port de réception WCF-custom ou WCF-SQL, avec les propriétés de liaison requises définies, en important le fichier de liaison créé par le complément Consume Adapter Service. Pour plus d’informations, consultez Configurer une liaison de port physique à l’aide d’un fichier de liaison de port pour utiliser l’adaptateur SQL.
Binding, propriété Valeur InboundOperationType Définissez cette valeur sur Notification. NotificationStatement Définissez cette valeur sur :
SELECT Employee_ID, Name FROM dbo.Employee WHERE Status=0
Note: Vous devez spécifier spécifiquement les noms de colonnes dans l’instruction, comme indiqué dans cette instruction SELECT. En outre, vous devez toujours spécifier le nom de la table ainsi que le nom du schéma. Par exemple :dbo.Employee
.NotifyOnListenerStart Définissez cette valeur sur True. Pour plus d’informations sur les différentes propriétés de liaison, consultez En savoir plus sur l’adaptateur BizTalk pour SQL Server propriétés de liaison de l’adaptateur.
Notes
Nous vous recommandons de configurer le niveau d’isolation des transactions et le délai d’expiration de la transaction lors de l’exécution d’opérations entrantes à l’aide de l’adaptateur SQL. Vous pouvez le faire en ajoutant le comportement du service lors de la configuration du port de réception WCF-Custom ou WCF-SQL. Pour obtenir des instructions sur l’ajout du comportement du service, consultez Configurer le niveau d’isolation des transactions et le délai d’expiration des transactions avec SQL.
Définissez un emplacement sur le disque dur et un port de fichier correspondant où l’orchestration BizTalk supprimera les messages de notification de la base de données SQL Server pour les opérations d’insertion et de mise à jour. Configurez ce port pour supprimer les messages de notification dans le dossier C :\TestLocation\UpsertNotification.
Définissez un emplacement sur le disque dur et un port de fichier correspondant où l’orchestration BizTalk supprimera les messages de notification de la base de données SQL Server pour toutes les autres opérations. Configurez ce port pour supprimer les messages de notification dans le dossier C :\TestLocation\OtherNotification.
Démarrage de l’application
Vous devez démarrer l’application BizTalk pour recevoir des messages de notification à partir de la base de données SQL Server et pour effectuer les opérations de sélection et de mise à jour suivantes. Pour obtenir des instructions sur le démarrage d’une application BizTalk, consultez Guide pratique pour démarrer une orchestration.
À ce stade, assurez-vous que :
La WCF-Custom ou le port de réception unidirectionnel WCF-SQL, qui reçoit les messages de notification de la base de données SQL Server est en cours d’exécution.
Les deux ports d’envoi FILE, qui reçoivent des messages de SQL Server, sont en cours d’exécution.
L’orchestration BizTalk pour l’opération est en cours d’exécution.
Exécution de l’opération
Après avoir démarré l’orchestration BizTalk, l’ensemble d’actions suivant a lieu :
Étant donné que la propriété de liaison NotifyOnListenerStart a la valeur True, vous recevez le message suivant :
<?xml version="1.0" encoding="utf-8" ?> <Notification xmlns="http://schemas.microsoft.com/Sql/2008/05/Notification/"> <Info>ListenerStarted</Info> <Source>SqlBinding</Source> <Type>Startup</Type> </Notification>
Notez que la valeur dans la
<Info>
balise est « ListnerStarted ». Par conséquent, ce message est reçu dans le dossier C :\TestLocation\OtherNotification.Insérez un enregistrement dans la table Employee. Vous recevrez un message de notification semblable à ce qui suit :
<?xml version="1.0" encoding="utf-8" ?> <Notification xmlns="http://schemas.microsoft.com/Sql/2008/05/Notification/"> <Info>Insert</Info> <Source>Data</Source> <Type>Change</Type> </Notification>
Notez que la valeur dans la
<Info>
balise est « Insert ». Par conséquent, ce message est reçu dans le dossier C :\TestLocation\UpsertNotification.Mettez à jour un enregistrement dans la table Employee. Vous recevrez un message de notification semblable à ce qui suit :
<?xml version="1.0" encoding="utf-8" ?> <Notification xmlns="http://schemas.microsoft.com/Sql/2008/05/Notification/"> <Info>Update</Info> <Source>Data</Source> <Type>Change</Type> </Notification>
Notez que la valeur dans la
<Info>
balise est « Update ». Par conséquent, ce message est reçu dans le dossier C :\TestLocation\UpsertNotification.Supprimer un enregistrement de la table Employee. Vous recevrez un message de notification semblable à ce qui suit :
<?xml version="1.0" encoding="utf-8" ?> <Notification xmlns="http://schemas.microsoft.com/Sql/2008/05/Notification/"> <Info>Delete</Info> <Source>Data</Source> <Type>Change</Type> </Notification>
Notez que la valeur dans la
<Info>
balise est « Delete ». Par conséquent, ce message est reçu dans le dossier C :\TestLocation\OtherNotification.
Bonnes pratiques
Une fois que vous avez déployé et configuré le projet BizTalk, vous pouvez exporter les paramètres de configuration vers un fichier XML appelé fichier de liaison. Une fois que vous avez généré un fichier de liaison, vous pouvez importer les paramètres de configuration à partir du fichier, de sorte que vous n’avez pas besoin de créer les ports d’envoi et de réception pour la même orchestration. Pour plus d’informations sur les fichiers de liaison, consultez Réutiliser les liaisons d’adaptateur.
Exécution d’opérations complexes après la réception de messages de notification
Par souci de simplicité et de compréhension, l’orchestration de cette rubrique copie les messages dans différents dossiers en fonction du type de notification. Toutefois, dans des scénarios réels, vous souhaiterez peut-être effectuer des opérations plus complexes. Vous pouvez effectuer des procédures similaires à celles fournies dans cette rubrique et les utiliser pour effectuer les opérations souhaitées. Par exemple, vous pouvez modifier l’orchestration pour insérer des enregistrements dans une autre table si vous recevez un message de notification pour une opération d’insertion sur la table Employee. Dans ce cas, vous pouvez apporter les modifications appropriées dans la forme Décider.
L’un de ces scénarios est expliqué en détail dans tutoriel 2 : Employé - Processus de bon de commande à l’aide de l’adaptateur SQL.
Voir aussi
Recevoir des notifications de requête SQL à l’aide de BizTalk Server