Unité d’Enseignement en Informatique Année 2015-2016
2è année ESTIA – Étudiants
Examen de Système d’Information – Première Session du 11 Mars 2016 (durée 2h00, aucun document autorisé)
– – CORRECTION – –
Remarque : Ce document ne présente que des éléments de correction. Les variantes possibles sont nombreuses.
Exercice 2 : Transfert de données (10 points) Partie 1. Topologie d’infrastructure logicielle (5 points)
Une entreprise utilise 7 progiciels de gestion pour gérer son activité. Cette entreprise hésite entre deux topologies possibles pour moderniser son système d’information. Ces deux topologies sont représentées graphiquement ci-dessous.
Conn.
Gestion de production
E-commerce Conn.
Conn.
Conn.
Gestion de stock Conn.
Conn.
Conn.
Conn.
Conn.
Conn.
Concentrateur E.A.I.
Comptabilité, Achats, Paie,
Facturation
Conn.
Gestion commerciale
Conn.
Conception assistée par ordinateur Gestion des
données techniques
Conn.
Conn.
Topologie 1
Les possibilités de stockage et d’échange d’information de ces 7 progiciels sont les suivants :
Progiciel S tockage Export Import Echange
Comptabilité, Achats, Paie, Facturation Fichiers PNM XLSX XLSX
Gestion de production Base de données (Oracle) Webservice (XM L-RPC)
Gestion des données techniques Base de données (M ySQL) Webservice (XM L)
Conception Assistée par Ordinateur Fichiers PRT IGES IGES
Gestion Commerciale Base de données (M ySQL)
Gestion de stock Base de données (PostgreSQL) XLSX ; CSV
E-commerce Base de données (M ySQL) Webservice (JSON)
1) Dans la topologie 2, afin de faire communiquer les deux progiciels de E-commerce et de Gestion Commerciale, deux connecteurs sont nécessaires. Quel langage pouvez-vous utiliser pour écrire les deux scripts qui joueront le rôle de connecteur ? Décrivez les grandes étapes du fonctionnement de chacun de ces scripts.
Un langage de script, comme par exemple PHP, est un choix commun pour ce genre de connecteurs.
L’avantage est un temps de développement relativement court. De plus, PHP permet de se connecter à des bases de données MySQL (avec MySQLi ou PDO) et de traiter des fichiers JSON.
Le premier script fera des requêtes SELECT dans la base de données MySQL du progiciel de Gestion Commerciale puis, analysera les données. Ensuite, soit le script fera des requêtes INSERT, UPDATE ou DELETE dans la base de données MySQL du logiciel de E-Commerce ou bien écrire un fichier texte formaté en JSON avec les données destinées au logiciel de E-Commerce.
Dans le sens inverse, le deuxième script pourra obtenir des données soit en faisant des requêtes SELECT dans la base de données MySQL du progiciel de E-Commerce, soit en lisant un fichier texte JSON provenant du progiciel de E-commerce. Ensuite, le script fera des requêtes INSERT, UPDATE ou DELETE dans la base de données MySQL du logiciel de Gestion Commerciale.
2) Toujours dans la topologie 2, comment développer les connecteurs pour faire communiquer les deux progiciels de Conception Assistée par Ordinateur et de Gestion des données techniques ?
Conn.
E-commerce Conn.
Conn.
Conn.
Comptabilité, Achats, Paie,
Facturation
Conn.
Conn.
Conn.
Conn.
Conn.
Conn.
Conn.
Gestion de production
Gestion de stock Gestion
commerciale
Conn.
Conn. Conn. Conn.
Gestion des données techniques
Conception assistée par ordinateur
Topologie 2
Nous pouvons écrire un deuxième script qui fera des requêtes SELECT dans la base de données MySQL du progiciel de SGDT, analysera les données, puis écrira des fichiers IGES que le progiciel de CAO pourra importer.
3) Avec la topologie 1, combien d’écritures et de lectures sont nécessaires pour transférer un bon de commande entre le progiciel de E-commerce et le progiciel de Gestion commerciale ? Et avec la topologie 2 ?
Avec la topologie 1 : 4 écritures et 4 lectures Avec la topologie 2 : 2 écritures et 2 lectures
4) Quelle topologie est la plus efficace en termes de nombre de calculs pour transférer une donnée ? Justifiez.
Selon le cas, l’une ou l’autre des topologies se révèle plus efficace.
Avec la topologie 1, la distance maximale entre deux logiciels reste constante. Il faut toujours au plus 4 écritures et 4 lectures entre deux logiciels. Sauf pour le cas du progiciel de CAO, mais celui-ci n’a pas vraiment vocation à communiquer avec d’autres progiciels que le SGDT.
Avec la topologie 2, la distance maximale entre deux logiciels est variable. Elle peut tantôt être de seulement 2 écritures et 2 lectures, mais parfois bien au-delà avec par exemple 8 écritures et 8 lectures entre les progiciels de CAO et de E-Commerce. Dans ce cas, la transmission d’information peut être accélérée, mais au prix de nouveaux connecteurs à créer et à maintenir.
5) Quels seraient les avantages à programmer un logiciel concentrateur de type E.A.I ?
Par exemple, il est plus facile d’ajouter ou remplacer des logiciels, cela permet une meilleure évolution du système d’information dans le long terme.
Exercice 3 : Service web XML
Partie 1. Développement d’un service web (8 points) Vous avez appris à utiliser PHP
pour différentes utilisations (script en ligne de commande, traitement d’un formulaire, traitement d’un fichier, consulter une base de données) et notamment pour générer un flux HTML depuis un serveur web.
Aussi, il n’y a qu’un pas à franchir pour réutiliser cette compétence pour mettre en place un service web. La seule différence étant qu’au lieu de produire des balises HTML, ce sont des balises XML qui sont produites.
Considérons un progiciel de Gestion des stocks propose une fonctionnalité d’exportation des données au format CSV. Chaque ligne de ce fichier correspond à un produit en stock, décrit par son numéro (id), son libellé (label) et la quantité en stock (quantity). Chaque information est séparée par un point-virgule. Ce qui donne par exemple :
Nous souhaitons rendre ces informations accessibles au travers d’un service web. Ainsi, elles pourront être consultées par les employés depuis un smartphone grâce à l’application de l’entreprise.
Nous allons écrire le script en_stock.php qui fournit une réponse dans un format XML qui sera compréhensible par l’application smartphone. Par exemple, pour retrouver les informations sur le produit avec le numéro 160, le script (hébergé sur le serveur web de l’entreprise) sera appelé comme suit par l’application smartphone :
https://www.monentreprise.fr/webservices/en_stock.php?id=160
et la réponse au format XML reçue par le smartphone sera :
<?xml version="1.0"?>
<product id="160">
<label type="string">Rondelle acier zingue 8-12</label>
<quantity type="integer">8000</quantity>
</product>
NB : Remarquez bien les 3 informations qui ont été insérées dans la réponse.
Dans le cas où le produit recherché n’est pas trouvé dans le fichier CSV, la réponse sera alors :
<?xml version="1.0"?>
<product id="400">
<error/>
</product>
1) D’après ce que vous venez de lire, par quelle méthode le id du produit recherché sera-t-il communiqué au script en_stock.php ?
Comme montré par l’URL, le id sera communiqué par la méthode GET.
2) Si WAMP est installé sur le serveur de l’entreprise, dans quel répertoire allez-vous enregistrer le script en_stock.php ?
Dans le répertoire racine de WAMP, comme par exemple en TP : C:\wamp\www\
3) Ecrivez le script en_stock.php qui va retrouver dans le fichier stock.csv la ligne qui correspond au produit recherché et envoyer la réponse (en écrivant avec des echo) formatée en XML. Attention de ne pas oublier de gérer le cas où le produit n’est pas trouvé dans le fichier (et d’envoyer la réponse XML adaptée).
stock.csv - Bloc notes
12;Boulon acier zingue 10x40;2500;
14;Ecrou acier zingue 10;6500;
80;Tige filetee laiton 4;800;
84;Tige filetee laiton 8;900;
140;Entretoise acier inox 8-10x4;100;
141;Entretoise acier inox 8-10x6;80;
160;Rondelle acier zingue 8-12;8000;
230;Circlips interieur acier brut 12;0;
240;Circlips exterieur acier brut 12;2;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
<?php
$id = $_GET['id'] ;
$fd = fopen ('stock.csv', 'r') ; if (!$fd) {
die ('Erreur ouverture du fichier en lecture') ; }
$resp = ' <error/>'."\r\n" ; while (!feof($fd)) {
$line = fgets ($fd) ;
$tab = explode (';', $line) ; if ($tab[0] == $id) {
$resp = ' <label type="string">'.$tab[1].'</label>'."\r\n" ;
$resp .= ' <quantity type="integer">'.$tab[2].'</quantity>'."\r\n" ; }
}
fclose ($fd) ;
echo '<?xml version="1.0"?>'."\r\n" ; echo '<product id="160">'."\r\n" ; echo $resp ;
echo '</product>'."\r\n" ;
?>