IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

InfoPath .NET Discussion :

Modifier le XML joint dans l'envoi [IP-2007]


Sujet :

InfoPath .NET

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 16
    Points : 11
    Points
    11
    Par défaut Modifier le XML joint dans l'envoi
    Bonjour,

    Jusqu'à présent je réalise des formulaires InfoPath publiés sur un serveur SharePoint 3.0. Concrètement, une personne lambda remplit une demande via un formulaire internet qui est envoyé ensuite par mail à son destinataire (via l’environnement d’hebergement).

    Je voudrais maintenant faire en sorte que lorsque le destinataire du mail double clic sur le fichier XML reçu, il ouvre InfoPath et puisse continuer à enrichir le formulaire puis le renvoyer à l’émetteur de la demande, sachant que en local, il dispose d’InfoPath et du formulaire.
    Mon problème est qu’en double cliquant sur ce fichier XML joint au mail, le formulaire tente de se connecter au serveur SharePoint. Je pense que c’est du à l’entête du fichier XML ou la balise Href indique l’adresse du serveur distant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?mso-infoPathSolution …  href="https://monserveur.fr/formulaire.xsn" language="fr-FR"?>
    Comment modifier ce lien dans le fichier xml en quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    href="c:\\monchemin\\monformulairelocal.xsn"
    Y aurait-il une autre solution ?

    Merci de vos réponses

  2. #2
    Membre éprouvé
    Homme Profil pro
    Référent technique
    Inscrit en
    Juillet 2007
    Messages
    834
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Référent technique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 834
    Points : 1 219
    Points
    1 219
    Par défaut
    Tu as bien ciblé le problème...

    Il s'agit en fait de modifier dans la processing-instruction l'attribut href...
    Le bloc <?mso-infoPathSolution > dans le xml permet de dire d'ouvir le xml dans infopath à partir du template dans l'url ou l'uri est dans le href.

    si tu le fait coté serveur avant ton envoi (moyennant un peu de code), cela implique que ton template xsn doit être situé au même endroit sur toutes les machines et à priori que ce soit la bonne version...

    Donc si c'est dans une même entreprise, un lecteur réseau est à préconiser...

    Sinon, c'est pas gagné...

    Cordialement.
    Rémi
    Rémi MATAYRON
    N'hésitez pas à visiter mon blog dédié à InfoPath et SharePoint : http://rmatayron.blogspot.com/

    Pour plus de visibilité sur le forum, marquer la question en [Résolu] lorsque la réponse fournie vous convient.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    ... cela implique que ton template xsn doit être situé au même endroit sur toutes les machines et à priori que ce soit la bonne version...
    Oui c'est certain. Les internautes accèdent sur Internet à une liste de formulaire de demande d'infos. Lorsqu'une demande est faite, elle est redirigée vers une collectivité par mail, avec le fichier xml joint.
    En fonction de la demande, la collectivité fournit les informations et les stockent (localement) et se constitue une base de données au fil de l'eau.
    Ensuite elle renvoit la demande à l'intéresse.

    Globalement le processus fonctionne correctement. Je jongle avec 3 formulaires, chacun décrivant une partie : la demande, le renseignement et stockage puis l'envoi vers l'émetteur de la demande. Entre chaque partie du processus, je stocke un fichier xml temporaire (dans une arborescence pré-établi) qui devient une sources de données secondaire pour le processus suivant. (je sais pas si c'est très clair).
    Par exemple, lorsque la collectivité reçoit un formulaire de demande, sa source de données principale est la base de données MSSQL et la demande internet est en source de données secondaire.

    Pour l'instant, j'en suis là, Mais j'ai encore avec un soucis pour le mail (car je possède office 2003 et infopath 2007)... et l'envoi de mail nécessite outlook2007

    Pour en revenir à mon problème, changer la reference :

    Le bloc <?mso-infoPathSolution > dans le xml permet de dire d'ouvir le xml dans infopath à partir du template dans l'url ou l'uri est dans le href.
    J'avoues ne pas trop savoir comment intervenir sur ce fichier. Pourrais tu m'en dire plus ?

  4. #4
    Membre éprouvé
    Homme Profil pro
    Référent technique
    Inscrit en
    Juillet 2007
    Messages
    834
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Référent technique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 834
    Points : 1 219
    Points
    1 219
    Par défaut
    Ah ce projet me dit quelque chose en fait, ça ressemble au web connector... j'aurais du le deviner à ton login!!!

    Tout à fait tu as besoin d'outlook 2007 sur le poste.
    Par contre, petite question : pourquoi as tu besoin du xml dans le mail?
    Pour le modifier? pour l'afficher?

    Si c'est uniquement pour l'afficher, il est possible d'avoir tout simplement le rendu de ton formulaire en html dans ton outlook 2007...
    ça ressemblera exactement au formulaire d'origine.

    Si c'est pour le modifier, c'est sûr il te faudra modifier le href dans la processing-instruction...
    Cela se fait facilement par un peu de code lors de l'envoi du mail (par code managé).
    Tu récupères ton fichier (tu fais genre un doc.load() en c#) et par une expression régulière ou par du xpath (ou simplement un remplacer...), tu vas modifier ton url internet en uri locale.

    En espèrant avoir été assez clair.
    Cordialement.
    Rémi MATAYRON
    N'hésitez pas à visiter mon blog dédié à InfoPath et SharePoint : http://rmatayron.blogspot.com/

    Pour plus de visibilité sur le forum, marquer la question en [Résolu] lorsque la réponse fournie vous convient.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    Le web connector ne m'est pas etrangé ... même si j'ai pas tout saisi à propos de ce projet. Je travaille depuis peu dans l'asso.

    Lorsque la collectivité recoit la demande par mail, elle voit une vue du formulaire et le fichier xml joint. En double cliquant sur le fichier xml, Infopath est lancé par defaut. Cela m'a semblé le moyen le plus simple pour débuter le traitement de la demande.

    Si c'est pour le modifier, c'est sûr il te faudra modifier le href dans la processing-instruction...
    Cela se fait facilement par un peu de code lors de l'envoi du mail (par code managé).
    Tu récupères ton fichier (tu fais genre un doc.load() en c#) et par une expression régulière ou par du xpath (ou simplement un remplacer...), tu vas modifier ton url internet en uri locale.
    Si je comprend bien, je ne vais pas pouvoir echappé au code. L'action "envoyer" lier au bouton de validation de la demande de l'internaute sera remplacé par du code, qui devra faire le patch de l'URL puis l'envoi
    J'ai dejà fait une modifs analogue pour changer le contenu d'une balise xml en recupérant des bouts de codes, mais c'etait en Jscript.
    Et coté serveur, Je vais devoir m'investir dans C# que je ne connais pas.

    P.S : Apres avoir tester le processus sur un poste equipé Infopath 2007 et Outlook 2007. Tout fonctionne à merveille. Reste ce problème d'URL et faire des beaux formulaires (ce qui va etre un travail de longue haleine)

  6. #6
    Membre éprouvé
    Homme Profil pro
    Référent technique
    Inscrit en
    Juillet 2007
    Messages
    834
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Référent technique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 834
    Points : 1 219
    Points
    1 219
    Par défaut
    Oui il me semble que tu ne pourras pas y échapper...

    Mais si tes personnes ont accès au template qui est sur ton site, tu ne devrais pas avoir de soucis, si? ('https://monserveur.fr/formulaire.xsn')...

    Sinon tu as une jolie classe mail de virgul (sur ce même forum) qui te gères l'envoi du mail... Et si tu vas dans le forum C#, tu auras toute les explications nécessaires pour modifier ton fichier à la volée.

    Cordialement.
    Rémi MATAYRON
    N'hésitez pas à visiter mon blog dédié à InfoPath et SharePoint : http://rmatayron.blogspot.com/

    Pour plus de visibilité sur le forum, marquer la question en [Résolu] lorsque la réponse fournie vous convient.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    J'avoues que j'ai failli baisser les bras, car je ne suis pas familier d'Infopath ni de Visual Studio et du C#.

    Pour reformaliser le problème :
    Un internaute doit pouvoir remplir un formulaire disponible sur un serveur.
    Lorsque l'internaute valide sa demande, elle est envoyée par mail avec un fichier joint xml.
    Lors de la réception, le destinataire double clic sur le fichier joint(xml) et lance l'application infopath, avec son formulaire en local.

    Le premier problème est la processing instruction presente dans le fichier xml qui doit lancer Infopath et le formulaire local, et le 2eme d'envoyer un fichier joint par mail.

    Pour l'instant j'ai résolu le 2eme problème, joindre un fichier au mail :
    http://www.developpez.net/forums/d69...e/#post4222881

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    Plutot que de modifier la processing instruction de mon fichier xml joint au mail, j'ai opté pour une autre solution :
    J'ai un formulaire (disponible sur internet) à 2 vues : une vue normale avec le bouton "Submit" et une "VueImprimable" avec un bouton "repondre".
    Le destinataire reçoit la "VueImprimable". Dans le bouton repondre j'ai placé du code managé qui copie le schema xml du formulaire sur le disque en local et lance l'application Infopath.
    Tout fonctionne correctement et je publie donc le formulaire sur le serveur Sharepoint avec le projet C#.

    Lors du test en ligne, lorsque le destinataire recoit le mail, il ne se passe rien lorsqu'il clique sur le bouton repondre. Pourquoi? Dois-je ouvrir le mail dans Outlook pour que le code managé fonctionne?

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    J'oublies l'idée du post precedent et je suis reparti sur l'idee premiere :
    Du code managé Lors du clique sur un bouton :

    Voici le resultat :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
     
    using Microsoft.Office.InfoPath;
    using System;
    using System.Text;
    using System.Xml;
    using System.Xml.XPath;
    using System.Diagnostics;
     
    namespace EC_user_internet
    {
     
        public partial class FormCode
        {
     
            public void InternalStartup()
            {
                ((ButtonEvent)EventManager.ControlEvents["BTN_ENVOYER"]).Clicked += new ClickedEventHandler(BTN_ENVOYER_Clicked);
            }
     
     
     
            public void BTN_ENVOYER_Clicked(object sender, ClickedEventArgs e)
            {
     
                // Fichier XML qui sera attaché au mail
                string sFileTempo = "C:\\mon_chemin\\temp.xml";
     
                // Nettoyage fichier Tempo
                if (System.IO.File.Exists(sFileTempo)) {
                    System.IO.File.Delete(sFileTempo);
                }
                // Navigateur du schema du document
                XPathNavigator Navigator = this.MainDataSource.CreateNavigator();
                // Creation du Flux
                StringBuilder Flux = new StringBuilder();
                // Entete - Patch de la processing Instruction
                Flux.Append("<?mso-infoPathSolution name=\"urn:schemas-microsoft-com:office:infopath:EC-User:http---www-tempuri-org-ec-\" solutionVersion=\"1.0.0.47\" productVersion=\"12.0.0\" PIVersion=\"1.0.0.0\" href=\"C:\\\\mon_chemin\\\\mon_formulaire.xsn\" language=\"fr-FR\"?><?mso-application progid=\"InfoPath.Document\" versionProgid=\"InfoPath.Document.2\"?>");
                //Schema
                Flux.Append(Navigator.SelectSingleNode("/ns1:Mon_premier_noeud_du_schema", this.NamespaceManager).OuterXml);
     
                // Ecriture du fichier XML
                System.IO.StreamWriter file = new System.IO.StreamWriter(sFileTempo, true);
                file.Write(Flux);
                file.Close();
     
                // 
                string sEmail = Navigator.SelectSingleNode("/ns1:Mon_noeud_de_mon_mail", this.NamespaceManager).Value;
     
                // Envoi du mail - Class Mail de Virgul
                Mail.Mail NewMail = new Mail.Mail("Serveur Sharepoint Internet", "no_response@domaine_serveur.fr", "", sEmail, "Un titre", "Un texte", true, sFileTempo);
                //true défini si le contenu du mail est en HTML ou pas
     
                bool Sending = NewMail.Send();
                if (Sending == true)
                {
                    //Cela veut dire que le mail a bien été envoyé
                }
            }
        }
    }

    A ce projet, j'ajoutes bien sur la classe Mail de Virgul avec ma petite modif concernant le fichier attaché.

    Le resultat correspond donc à mon attente : En double cliquant sur le fichier joint dans le mail, le destinataire lance en local, son Infopath avec les données du fichier XML.


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Envoi de plusieurs pièces jointes dans Lotus Notes
    Par chants1707 dans le forum VBA Access
    Réponses: 0
    Dernier message: 19/04/2011, 22h14
  2. Envoi d'une piéce jointe dans un e-mail
    Par koKoTis dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 16/03/2009, 09h44
  3. Envoi plusieurs pièces jointes dans mail
    Par baime dans le forum ODS et reporting
    Réponses: 2
    Dernier message: 10/03/2009, 13h59
  4. Probleme d'envoi de piece jointe dans un mail
    Par pottiez dans le forum C++Builder
    Réponses: 5
    Dernier message: 03/06/2007, 16h02
  5. piece jointe dans envoie de Fax
    Par ston dans le forum Access
    Réponses: 15
    Dernier message: 17/10/2005, 11h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo