Exécuter des opérations composites sur SQL Server à l’aide de BizTalk Server
L’adaptateur SQL permet aux clients de l’adaptateur d’effectuer des opérations composites sur la base de données SQL Server. Une opération composite peut inclure :
Opérations d’insertion, de mise à jour et de suppression. Une opération Select n’est pas prise en charge dans le cadre d’une opération composite.
Procédures stockées exécutées en tant qu’opérations.
Une seule opération composite peut avoir n’importe quel nombre de ces opérations, dans n’importe quel ordre. Par exemple, vous pouvez avoir deux opérations d’insertion suivies d’une opération Delete et enfin d’une exécution de procédure stockée. En outre, vous pouvez avoir différentes opérations ciblant différentes tables ou vues de base de données. Pour plus d’informations sur la façon dont l’adaptateur prend en charge les opérations composites, consultez Exécuter des opérations composites dans SQL Server à l’aide de l’adaptateur SQL. Pour plus d’informations sur la structure du message SOAP pour les opérations composites, consultez Schémas de message pour les opérations composites.
Notes
Si vous effectuez une opération sur des tables qui ont des colonnes de types définis par l’utilisateur, veillez à vous reporter à Opérations sur les tables et les vues avec des types User-Defined à l’aide de l’adaptateur SQL avant de commencer à développer votre application.
Comment effectuer des opérations composites sur SQL Server
L’exécution d’une opération sur SQL Server à l’aide de l’adaptateur SQL avec BizTalk Server implique des tâches procédurales décrites dans Blocs de construction pour développer des applications BizTalk avec l’adaptateur SQL. Pour effectuer des opérations composites sur la base de données SQL Server, ces tâches sont les suivantes :
Créez un projet BizTalk et générez le schéma pour toutes les opérations que vous souhaitez appeler.
Créez manuellement un fichier de schéma qui inclut des références à tous les schémas que vous avez générés à l’étape précédente.
Créez des messages dans le projet BizTalk pour l’envoi et la réception de messages à partir de la base de données SQL Server. Ces messages doivent être conformes au schéma de demande et de réponse que vous avez créé à l’étape précédente.
Créez une orchestration pour appeler l’opération composite sur la base de données SQL Server.
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.
Démarrez l’application BizTalk.
Cette rubrique fournit des instructions sur la façon d’effectuer ces tâches.
Exemple basé sur cette rubrique
Un exemple, CompositeOperations, basé sur cette rubrique, est fourni avec le pack d’adaptateurs BizTalk. Pour plus d’informations, consultez Exemples pour l’adaptateur SQL.
Génération du schéma
Dans cette rubrique, pour montrer comment effectuer des opérations composites, les tâches suivantes sont effectuées dans l’ordre spécifié :
Insérez un enregistrement dans la table EMPLOYEE.
Récupérez toutes les colonnes du dernier enregistrement inséré en appelant la procédure stockée GET_LAST_EMP_DATA.
Supprimez l’enregistrement de la table EMPLOYEE.
Exécutez les scripts fournis avec les exemples pour créer la table EMPLOYEE. Pour plus d’informations sur les exemples, consultez Exemples de schémas.
Vous devez créer un projet BizTalk et utiliser le complément Consume Adapter Service pour générer le schéma pour ces opérations. Pour plus d’informations sur la génération de schémas, consultez Récupération de métadonnées pour les opérations SQL Server dans Visual Studio à l’aide de l’adaptateur SQL.
Création d’une définition de schéma composite
Vous devez maintenant créer un schéma composite qui référence les schémas que vous avez créés pour les opérations individuelles. Effectuez les étapes suivantes pour créer une définition de schéma composite.
Pour ajouter une définition de schéma composite
Ajoutez un fichier de schéma au projet BizTalk. Cliquez avec le bouton droit sur le nom du projet, pointez sur Ajouter, puis cliquez sur Nouvel élément. Dans la boîte de dialogue Ajouter un nouvel élément , dans la zone Catégories , cliquez sur Fichiers de schéma. Dans la zone Modèles , cliquez sur Schéma. Spécifiez un nom pour le fichier de schéma, puis cliquez sur OK.
Pour cet exemple, spécifiez le nom du fichier de schéma sous la forme
CompositeSchema.xsd
.Ajoutez des références au schéma généré pour les différentes opérations que vous souhaitez effectuer. Dans cet exemple, les différents schémas générés pour les opérations sont les suivants :
TableOperation.dbo.Employee.xsd, pour les opérations d’insertion et de suppression.
Procedure.dbo.xsd, pour la procédure stockée GET_LAST_EMP_DATA.
Pour ajouter des références :
Cliquez avec le bouton droit sur le nœud schéma> racine< dans CompositeSchema.xsd, puis cliquez sur Propriétés.
Dans la zone Propriété , cliquez sur le bouton de sélection (...) par rapport à la propriété Imports .
Dans la boîte de dialogue Importations , dans la liste Importer un nouveau schéma en tant que , sélectionnez Importation XSD, puis cliquez sur Ajouter.
Dans la boîte de dialogue Sélecteur de types BizTalk , développez le nœud nom du projet BizTalk, développez Schémas, puis sélectionnez le schéma que vous souhaitez importer. Pour cet exemple, sélectionnez <BizTalk_project_name>. TableOperation_dbo_Employee. Cliquez sur OK.
Répétez cette étape pour importer <BizTalk_project_name>. Procedure_dbo aussi.
Dans la boîte de dialogue Importations , cliquez sur OK.
Ajoutez deux nœuds enfants au nœud de schéma racine. Un nœud enfant correspond au schéma de requête pour l’exécution de l’opération composite. L’autre nœud enfant correspond au schéma de réponse. Le nœud qui correspond au schéma de requête peut avoir n’importe quel nom. Le nœud qui correspond au schéma de réponse doit être appelé <request_schema_node>Response. Pour cet exemple, nous allons appeler le nœud de schéma de requête en tant que Requête. Ainsi, le nœud de schéma de réponse est appelé RequestResponse.
Notes
Par défaut, un nœud racine est également ajouté à un nouveau fichier de schéma. Vous pouvez renommer le nœud racine en Requête. Pour renommer un nœud, cliquez avec le bouton droit sur le nom du nœud, puis cliquez sur Renommer.
Pour ajouter un nœud sous le <nœud Schéma> :
Cliquez avec le bouton droit sur le <nœud Schéma> , pointez sur Insérer un nœud de schéma, puis cliquez sur Enregistrement enfant.
Renommez le nouveau nœud en RequestResponse.
Ajoutez des nœuds enfants sous le nœud Requête qui correspondent au schéma de requête pour chaque opération que vous allez effectuer dans le cadre de l’opération composite. Pour cet exemple, vous devez ajouter des nœuds enfants correspondant aux éléments suivants :
Opérations d’insertion et de suppression sur la table EMPLOYEE.
GET_LAST_EMP_DATA procédure stockée.
Important
Vous devez ajouter les nœuds dans le même ordre que celui dans lequel vous souhaitez effectuer les opérations. Par exemple, si vous souhaitez insérer un enregistrement, exécuter une procédure stockée, puis supprimer un enregistrement, vous devez d’abord ajouter un nœud pour l’opération Insert, suivi d’un nœud pour la procédure stockée et enfin d’un nœud pour l’opération Delete.
Pour ajouter des nœuds enfants au nœud Requête :
Cliquez avec le bouton droit sur le nœud Requête , pointez sur Insérer un nœud de schéma, puis cliquez sur Enregistrement enfant.
Renommez l’enregistrement pour qu’il corresponde à un schéma de requête pour une opération que vous effectuez dans le cadre de l’opération composite. Par exemple, renommez le nœud en « Insert ».
Mappez le nœud Insert au schéma de demande pour l’opération Insert sur la table EMPLOYEE. Pour ce faire, cliquez avec le bouton droit sur le nœud Insérer , puis cliquez sur Propriétés. Dans la zone Propriétés, dans la liste Type de structure de données, sélectionnez Insérer (Référence).
Répétez ces étapes pour ajouter des nœuds pour les schémas de requête pour GET_LAST_EMP_DATA procédure stockée et l’opération Delete. Spécifiez les noms de nœuds et mappez-les au schéma correspondant, comme indiqué dans le tableau suivant.
Nom du nœud Mappé au schéma GET_LAST_EMP_DATA GET_LAST_EMP_DATA (référence) Supprimer Supprimer (référence)
Ajoutez des nœuds enfants sous le nœud RequestResponse qui correspondent au schéma de réponse pour chaque opération que vous effectuerez dans le cadre de l’opération composite. Pour cet exemple, vous devez ajouter des nœuds enfants correspondant aux éléments suivants :
Opérations d’insertion et de suppression sur la table EMPLOYEE.
GET_LAST_EMP_DATA procédure stockée.
Important
Vous devez ajouter les nœuds enfants dans le même ordre que les nœuds enfants sous le nœud Requête .
Pour ajouter des nœuds enfants au nœud RequestResponse :
Cliquez avec le bouton droit sur le nœud RequestResponse , pointez sur Insérer un nœud de schéma, puis cliquez sur Enregistrement enfant.
Renommez l’enregistrement pour qu’il corresponde à un schéma de réponse pour une opération que vous effectuez dans le cadre de l’opération composite. Par exemple, renommez le nœud « InsertResponse ».
Mappez le nœud InsertResponse au schéma de réponse de l’opération Insert sur la table EMPLOYEE. Pour ce faire, cliquez avec le bouton droit sur le nœud InsertResponse , puis cliquez sur Propriétés. Dans la zone Propriétés , dans la liste Type de structure de données , sélectionnez InsertResponse (Référence) .
Répétez ces étapes pour ajouter des nœuds pour les schémas de réponse pour la procédure stockée GET_LAST_EMP_DATA et l’opération Delete. Spécifiez les noms de nœuds et mappez-les au schéma correspondant, comme indiqué dans le tableau suivant.
Nom du nœud Mappé au schéma GET_LAST_EMP_DATAResponse GET_LAST_EMP_DATAResponse (référence) DeleteResponse DeleteResponse (Référence)
Enregistrez le fichier CompositeSchema.xsd .
Définition des messages et des types de messages
Le schéma composite que vous avez créé à la dernière étape décrit les « types » requis pour les messages dans une orchestration. Un message est généralement une variable, dont le type est défini par le schéma correspondant. Vous devez maintenant créer des messages pour l’orchestration et les lier au schéma que vous avez créé à l’étape précédente.
Pour créer des messages et créer un lien vers le schéma
Ajoutez une orchestration au projet BizTalk. À partir 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.
Si la fenêtre Vue Orchestration du projet BizTalk n’est pas déjà ouverte, ouvrez-la. Pour ce faire, 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 du Message_1, procédez comme suit :
Propriété Pour Identificateur Saisissez Request
Type de message Dans la liste déroulante, développez Schémas, puis sélectionnez CompositeOp.CompositeSchema.Request, où CompositeOp est le nom de votre projet BizTalk. CompositeSchema est le schéma que vous avez créé manuellement pour les opérations composites. Répétez l’étape 2 pour créer un message. Dans le volet Propriétés du nouveau message, procédez comme suit :
Propriété Pour Identificateur Saisissez Response
Type de message Dans la liste déroulante, développez Schémas, puis sélectionnez CompositeOp.CompositeSchema.RequestResponse.
Configuration de l’orchestration
Vous devez créer une orchestration BizTalk à utiliser BizTalk Server pour effectuer des opérations composites sur SQL Server. Dans cette orchestration, vous supprimez un message de demande à un emplacement de réception défini. Le message de demande doit être conforme au schéma composite que vous avez créé précédemment. L’adaptateur SQL consomme ce message et le transmet à SQL Server. La réponse de SQL Server est enregistrée à un autre emplacement. Vous devez inclure des formes Envoyer et Recevoir pour envoyer des messages à SQL Server et recevoir des réponses, respectivement. Une orchestration de base pour l’exécution d’opérations composites 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 |
---|---|---|
ReceiveMessage | Recevoir | - Définissez Nom sur ReceiveMessage - Définissez Activer sur True |
SendMessage | Envoyer | - Définissez Nom sur SendMessage |
ReceiveResponse | Recevoir | - Définissez Nom sur ReceiveResponse - Définissez Activer sur False |
SendResponse | Envoyer | - Définissez Name sur SendResponse |
Ajout de ports
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 |
---|---|
MessageIn | - Définissez Identifier sur MessageIn - Définissez Type sur MessageInType - Définir le modèle de communication sur Unidirectionnel - Définir le sens de la communication sur Réception |
LOBPort | - Définissez Identifier sur LOBPort - Définissez Type sur LOBPortType - Définir le modèle de communication sur Requête-réponse - Définir le sens de la communication sur Envoyer-Recevoir |
ResponseOut | - Définissez Identifier sur ResponseOut - Définissez Type sur ResponseOutType - 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 les connecter aux ports
Le tableau suivant spécifie les propriétés et leurs valeurs que vous devez définir pour spécifier les 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, comme indiqué dans l’orchestration mentionnée précédemment.
Forme | Propriétés |
---|---|
ReceiveMessage | - Définir message sur Requête - Définissez Opération sur MessageIn.CompositeOp.Request |
SendMessage | - Définir message sur Requête - Définissez Opération sur LOBPort.CompositeOp.Request |
ReceiveResponse | - Définir message sur Réponse - Définissez Opération sur LOBPort.CompositeOp.Response |
SendResponse | - Définir message sur Réponse - Définissez Opération sur ResponseOut.CompositeOp.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 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 aux ports physiques dans la console Administration BizTalk Server. Pour cette orchestration, vous devez :
Définissez un emplacement sur le disque dur et un port de fichier correspondant où vous allez supprimer un message de demande. L’orchestration BizTalk consomme le message de requête et l’envoie à la base de données SQL Server.
Définissez un emplacement sur le disque dur et un port de fichier correspondant où l’orchestration BizTalk supprime le message de réponse contenant la réponse de la base de données SQL Server.
Définissez un port d’envoi WCF-Custom physique ou WCF-SQL pour envoyer des messages à la base de données SQL Server. Étant donné que les opérations qui font partie de l’opération composite sont exécutées dans une transaction unique, assurez-vous que la propriété de liaison UseAmbientTransaction a la valeur True.
Vous devez également spécifier l’action dans le port d’envoi. L’action d’une opération composite est « CompositeOperation ». Pour plus d’informations sur la création de ports, consultez Configurer manuellement une liaison de port physique à l’adaptateur SQL. Pour plus d’informations sur la spécification d’actions pour les ports, consultez Configurer l’action SOAP pour l’adaptateur SQL.
Notes
La génération du schéma à l’aide du complément De projet BizTalk du service Consume Adapter crée également un fichier de liaison qui contient des informations sur les ports et les actions à définir pour ces ports. Vous pouvez importer ce fichier de liaison à partir de la console d’administration BizTalk Server pour créer des ports d’envoi (pour les appels sortants) ou de réception (pour les appels entrants). 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. Si vous importez ce fichier de liaison, l’action sur le port d’envoi WCF-Custom ou WCF-SQL est définie sur une action dynamique impliquant toutes les opérations que vous avez sélectionnées dans le complément Consumer Adapter Service lors de la génération du schéma. Pour une opération composite, vous devez remplacer l’action dynamique par « CompositeOperation ».
Démarrage de l’application
Vous devez démarrer l’application BizTalk pour effectuer des opérations composites sur la base de données SQL Server. 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 :
Le port de réception FILE pour recevoir les messages de demande pour l’orchestration est en cours d’exécution.
Le port d’envoi FILE pour recevoir les messages de réponse de l’orchestration est en cours d’exécution.
Le port d’envoi WCF-Custom ou WCF-SQL pour envoyer des messages à la base de données SQL Server est 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 exécuté l’application, vous devez supprimer un message de demande à l’emplacement de réception FILE. Le schéma du message de demande doit être conforme au schéma pour les opérations composites que vous avez créées précédemment. Par exemple, un message de demande qui insère un enregistrement dans la table EMPLOYEE, appelle la procédure stockée GET_LAST_EMP_DATA et supprime un enregistrement de la table EMPLOYEE est :
<Request xmlns="http://CompositeTest.CompositeSchema">
<Insert xmlns="http://schemas.microsoft.com/Sql/2008/05/TableOp/dbo/Employee">
<Rows>
<Employee xmlns="http://schemas.microsoft.com/Sql/2008/05/Types/Tables/dbo">
<Name>John</Name>
<Designation>Manager</Designation>
<Salary>100000</Salary>
</Employee>
</Rows>
</Insert>
<GET_LAST_EMP_DATA xmlns="http://schemas.microsoft.com/Sql/2008/05/Procedures/dbo" />
<Delete xmlns="http://schemas.microsoft.com/Sql/2008/05/TableOp/dbo/Employee">
<Rows>
<Employee xmlns="http://schemas.microsoft.com/Sql/2008/05/Types/Tables/dbo">
<Name>John</Name>
</Employee>
</Rows>
</Delete>
</Request>
Consultez Schémas de message pour les opérations composites pour plus d’informations sur le schéma de message de requête pour l’exécution d’opérations composites sur la base de données SQL Server à l’aide de l’adaptateur SQL.
L’orchestration consomme le message et l’envoie à la base de données SQL Server. La réponse de la base de données SQL Server est enregistrée à l’autre emplacement FILE défini dans le cadre de l’orchestration. Par exemple, la réponse de la base de données SQL Server pour le message de demande précédent est :
<?xml version="1.0" encoding="utf-8" ?>
<RequestResponse xmlns="http://CompositeTest.CompositeSchema">
<InsertResponse xmlns="http://schemas.microsoft.com/Sql/2008/05/TableOp/dbo/Employee">
<InsertResult>
<long xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays">10080</long>
</InsertResult>
</InsertResponse>
<GET_LAST_EMP_DATAResponse xmlns="http://schemas.microsoft.com/Sql/2008/05/Procedures/dbo">
<GET_LAST_EMP_DATAResult>
<DataSet xmlns="http://schemas.datacontract.org/2004/07/System.Data">
<xs:schema id="NewDataSet" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element msdata:IsDataSet="true" name="NewDataSet">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="NewTable">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="Employee_ID" type="xs:int" />
<xs:element minOccurs="0" name="Name" type="xs:string" />
<xs:element minOccurs="0" name="DOJ" type="xs:dateTime" />
<xs:element minOccurs="0" name="Designation" type="xs:string" />
<xs:element minOccurs="0" name="Job_Description" type="xs:string" />
<xs:element minOccurs="0" name="Photo" type="xs:base64Binary" />
<xs:element minOccurs="0" name="Rating" type="xs:string" />
<xs:element minOccurs="0" name="Salary" type="xs:decimal" />
<xs:element minOccurs="0" name="Last_Modified" type="xs:base64Binary" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
<diffgr:diffgram xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
<NewDataSet xmlns="">
<NewTable>
<Employee_ID>10080</Employee_ID>
<Name>John</Name>
<Designation>Manager</Designation>
<Salary>100000.00</Salary>
<Last_Modified>AAAAAAAAF40=</Last_Modified>
</NewTable>
</NewDataSet>
</diffgr:diffgram>
</DataSet>
</GET_LAST_EMP_DATAResult>
<ReturnValue>0</ReturnValue>
</GET_LAST_EMP_DATAResponse>
<DeleteResponse xmlns="http://schemas.microsoft.com/Sql/2008/05/TableOp/dbo/Employee">
<DeleteResult>1</DeleteResult>
</DeleteResponse>
</RequestResponse>
La réponse précédente contient plusieurs jeux de résultats correspondant aux différentes opérations effectuées dans le cadre de l’opération composite. Par exemple, l’élément InsertResult
contient 10080, qui est l’identificateur unique de l’enregistrement nouvellement ajouté.
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 des éléments tels que des ports d’envoi et des ports de réception pour la même orchestration. Pour plus d’informations sur les fichiers de liaison, consultez Réutiliser les liaisons d’adaptateur.