Integration Services (SQL Server 2005) et application web
5 réponses
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 ?...
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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/
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.
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/
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/
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.
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/
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/
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.
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/
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/
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...
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/
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
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" <Matthy@discussions.microsoft.com> a écrit dans le message de news:
68CEAAB4-0F17-4D59-802E-81D6C238FB31@microsoft.com...
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 ?...
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 ?...