Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Integration Services (SQL Server 2005) et application web

5 réponses
Avatar
Matthy
Bonjour à tous,

Je viens ici poser une question sur SSIS (DTS)...

Voici la problématique: une entreprise, plusieurs filiales; un serveur SQL
central chez la maison-mère, contenant le budget de toutes les filiales.
Tous les mois, chaque filiale a besoin d'un fichier xls contenant son
budget; elle le traite, le modifie, etc, et le renvoie à la maison-mère pour
intégration à SQL via SSIS.

Ce schéma fonctionne; problème, c'est lourd, très lourd... Il faudrait
automatiser la tâche; j'ai pensé qu'il serait bien pratique que les filiales
téléchargent ou envoient leurs fichiers xls via une application web basée à
la maison-mère...

Petit problème: je ne sais pas comment "appeler" SSIS à distance et lui
envoyer des arguments pour recevoir des données (ou l'inverse).

Je suppose qu'avec dotnet, on doit pouvoir faire des appels de dll, mais je
dois avouer que je suis plus à l'aise avec php. Je me demande donc s'il
serait possible de faire interagir php et SSIS, par exemple en utilisant un
socket...?

Je n'ai pas trouvé beaucoup de doc sur le sujet (c'est un euphémisme),
peut-être pourrez-vous m'aider ?...

Merci d'avance et bonne fin de journée !

Matthieu

5 réponses

Avatar
Rudi Bruchez
Matthy a écrit:

Petit problème: je ne sais pas comment "appeler" SSIS à distance et lui
envoyer des arguments pour recevoir des données (ou l'inverse).



Bonjour,

L'idéal serait que les filiales n'aient pas à modifier le fichier excel,
mais aient à disposition une page web qui leur permettent de poster
directement dans la base le résultat des modifications. Ainsi tu
centralises le traitement et tu t'évites les imports de données avec
erreurs potentielles.

Si ce n'est pas possible, une solution peut être de faire uploader les
fichiers via un upload http par exemple, sur un serveur de la maison-mère.
Ensuite, pour détecter l'arrivée du fichier, trois solutions :
- le package SSIS est lancé régulièrement par un job et teste la présence
du fichier
- tu utilises les événements WMI dans le package pour détecter les nouveaux
fichiers dans le répertoire (tâche WMI Event Watcher)
- tu fais lancer le package par script dans la page web qui reçoit l'upload

Ensuite tu traites le fichier, tu envoies un mail d'erreur à la filiale si
le format est incorrect, etc.

--
Rudi Bruchez, MCDBA
http://www.babaluga.com/
Avatar
Rudi Bruchez
Matthy a écrit:

Je suppose qu'avec dotnet, on doit pouvoir faire des appels de dll, mais je
dois avouer que je suis plus à l'aise avec php. Je me demande donc s'il
serait possible de faire interagir php et SSIS, par exemple en utilisant un
socket...?



Ah, j'ai péché par lecture incomplète de ton message...

Pour ça, tu peux par exemple faire un EXEC sp_start_job ... du job qui
lance le package SSIS depuis ton code PHP, simplement en requête SQL.

--
Rudi Bruchez, MCDBA
http://www.babaluga.com/
Avatar
Matthy
Merci pour ta réponse...
Faire un EXEC, oui c'est une bonne idée, mais peut-on passer des arguments ?
Car le problème, c'est que chaque utilisateur doit travailler sur SON fichier
excel, en fonction de la date, etc...
Exemples:
- l'utilisateur ABCD télécharge les données de juin 2006 de la filiale XYZ
- l'utilisateur EFGH envoie les données de mai 2006 de la filiale UVW
Donc il faudrait, je crois qu'il y ait un "dialogue" entre le serveur web et
SSIS...

"Rudi Bruchez" <"rudi#nospam#[at]babaluga" a écrit :

Matthy a écrit:

> Je suppose qu'avec dotnet, on doit pouvoir faire des appels de dll, mais je
> dois avouer que je suis plus à l'aise avec php. Je me demande donc s'il
> serait possible de faire interagir php et SSIS, par exemple en utilisant un
> socket...?

Ah, j'ai péché par lecture incomplète de ton message...

Pour ça, tu peux par exemple faire un EXEC sp_start_job ... du job qui
lance le package SSIS depuis ton code PHP, simplement en requête SQL.

--
Rudi Bruchez, MCDBA
http://www.babaluga.com/



Avatar
Rudi Bruchez
Matthy a écrit:

Faire un EXEC, oui c'est une bonne idée, mais peut-on passer des arguments ?
Car le problème, c'est que chaque utilisateur doit travailler sur SON fichier
excel, en fonction de la date, etc...
Exemples:
- l'utilisateur ABCD télécharge les données de juin 2006 de la filiale XYZ
- l'utilisateur EFGH envoie les données de mai 2006 de la filiale UVW
Donc il faudrait, je crois qu'il y ait un "dialogue" entre le serveur web et
SSIS...



Tu peux passer des arguments, bien sûr. Le job va lancer le package en
ligne de commande, et tu peux lui faire passer des arguments, en faisant
plusieurs jobs, ou un job avec un step par filiale, et en appelant le bon
step dans sp_start_job.

Autre solution : dans l'édition de ton package, cliques avec le bouton
droit n'importe où sur une surface vide, tu vas avoir l'option "Package
Configurations..." qui te permet d'attribuer dynamiquement des valeurs à
ton package, à partir d'un fichier XML, de variables d'environnement, d'une
table SQL...

Pour le lancer avec un sp_start_job, tu peux par exemple écrire la config
(chemin du fichier...) dans une table SQL, et lancer le job. C'est le
package qui récupérera les infos de la table.

Ici il me semble que ton problème de toute manière est de nommer le fichier
Excel. S'ils ont tous le même nom, tu risques d'avoir un problème d'upload
concurrent. Ce que tu pourrais faire et de les uploader dans des
répertoires séparés, ou de changer le nom. Et du nom tu peux déduire la
filiale, ou tu passes aussi le nom de la filiale en paramètre dans ta
table.

Tu as aussi la possibilité d'utiliser les événements WMI. Ton package
attend, teste des répertoires. Quand un fichier arrive, le processus est
déclenché, et le package connaît la filiale grâce au nom du répertoire...

--
Rudi Bruchez, MCDBA
http://www.babaluga.com/
Avatar
Romelard Fabrice [MVP]
Bonjour,

Ceci me semble bien complexe comme architecture :
- difficilement évolutif
- dangereux au niveau de la validité des données
- risquée pour les erreurs de chargement des données

Pourquoi ne pas revoir directement votre process qui étaient sans doute
adapté au début, mais qui maintenant devient limité

Vous pouvez en effet être force de proposition et réfléchir autour d'une
architecture telle que :
- Enregistrement des données des filiales depuis un formulaire Infopath
- Enregistrement direct dans la base (plus besoin de traitement
d'alimentation)
- Passage des affichages de la maison mère par un site WSS
- ...

Il est à vous de réfléchir autour de la solution la plus adaptée.
Quoi qu'il en soit, bien que dans la théorie cela soit possible, le passage
par PHP est plutôt risqué et dangereux pour la pérénitée de la solution.

--
Cordialement.

Romelard Fabrice [MVP]

"Matthy" a écrit dans le message de news:

Bonjour à tous,

Je viens ici poser une question sur SSIS (DTS)...

Voici la problématique: une entreprise, plusieurs filiales; un serveur SQL
central chez la maison-mère, contenant le budget de toutes les filiales.
Tous les mois, chaque filiale a besoin d'un fichier xls contenant son
budget; elle le traite, le modifie, etc, et le renvoie à la maison-mère
pour
intégration à SQL via SSIS.

Ce schéma fonctionne; problème, c'est lourd, très lourd... Il faudrait
automatiser la tâche; j'ai pensé qu'il serait bien pratique que les
filiales
téléchargent ou envoient leurs fichiers xls via une application web basée
à
la maison-mère...

Petit problème: je ne sais pas comment "appeler" SSIS à distance et lui
envoyer des arguments pour recevoir des données (ou l'inverse).

Je suppose qu'avec dotnet, on doit pouvoir faire des appels de dll, mais
je
dois avouer que je suis plus à l'aise avec php. Je me demande donc s'il
serait possible de faire interagir php et SSIS, par exemple en utilisant
un
socket...?

Je n'ai pas trouvé beaucoup de doc sur le sujet (c'est un euphémisme),
peut-être pourrez-vous m'aider ?...

Merci d'avance et bonne fin de journée !

Matthieu