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

SharePoint .NET Discussion :

[WSS3] Remplissage auto natif de newForm, passage de paramètres [SP-2007]


Sujet :

SharePoint .NET

  1. #1
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 486
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 486
    Points : 2 082
    Points
    2 082
    Par défaut [WSS3] Remplissage auto natif de newForm, passage de paramètres
    Bonjour,

    Je me suis rendu compte qu'à l'utilisation, lorsque l'on passe d'un formulaire à un autre, beaucoup de champs peuvent être pré-remplis pour faciliter la vie de l'utilisateur.

    Mon scénario est tout simple :
    à partir d'une page customisée (vue de données sur un client par exemple) dans Designer, quelle solution a-t-on pour faire en sorte qu'un formulaire type newForm appelé à partir de cette page custom soit pré-remplie sur certains champs, disons pour lui affecter une nouvelle action par exemple (<site>/ListActions/NewForm.aspx)?

    Mes contraintes :
    Pas de MOSS ni d'infopath, pas de dév. si possible

    Mes pistes de recherche :
    1. Customisation de newForm dans Designer, mais on perd l'aspect dynamique de la webpart par défaut (une création de colonne dans ma liste d'actions ne sera pas reflétée dans le newForm customisé).

    2. Donner l'ordre à la webpart conteneur par défaut de newForm de remplir un champ à partir de données récupérées en paramètres (URL par ex.)... Est-ce seulement possible en natif ?

    3. Autres possibilités natives ?

    Merci par avance de bien vouloir éclairer ma lanterne.

  2. #2
    Membre régulier
    Profil pro
    developpeur
    Inscrit en
    Février 2006
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : developpeur

    Informations forums :
    Inscription : Février 2006
    Messages : 69
    Points : 79
    Points
    79
    Par défaut
    Si tu appelles la NewForm.aspx, pourquoi ne pas mettre directement des default value au colonne que tu souhaites?

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 486
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 486
    Points : 2 082
    Points
    2 082
    Par défaut
    Si cette valeur peut être instaurée dynamiquement lors de l'appel à la page, alors ça serait une solution à envisager. Mais il me semble que c'est du statique, non ?

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 486
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 486
    Points : 2 082
    Points
    2 082
    Par défaut
    Je vais essayer de reposer ma question plus clairement. N'hésitez pas à me reformuler si c'est flou.

    Je cherche à savoir si la webpart native ListFormWebPart (notamment dans la page newForm.aspx) contient une méthode d'initialisation dynamique d'un de ses contrôles SPFieldText ou SPFieldChoice.

    Si elle existe, je souhaite savoir si il est possible de la déclencher via un paramètre dans l'url par la gestion des GET/POST native (s'il en est).

    Si rien de tout cela n'existe il faudra peut être que je songe à le coder mais n'ayant ni licence VS ni le temps de le faire tout de suite je souhaite m'appuyer sur une résolution native ou Sharepoint Designer.

    Follow-up de mes pistes de recherche :
    1. Version custom de newForm.aspx :
    • perte de la fonctionnalité "attachement de fichier" lors de la création de l'item.
    • perte du lien de création adaptative des contrôles du formulaire (N colonnes de liste aujourd'hui donnent N champs de formulaire, mais N+1 colonnes de liste demain donneront N champs de formulaire).
    • on se retrouve quand même avec le problème d'initialiser le(s) champ(s) qui m'intéresse(nt).

    2. Piloter l'initialisation via un paramètre (c'est le but de ce post)

    3. Ajouter un javascript à la newForm.aspx native pour faire tout ce que je veux, mon url ressemblerait à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <site>/ListActions/NewForm.aspx?<nomInterneItemX>=<valeurSouhaitéeX>&Source=<urlSource><paramsUrlSource>
    Mon script ferait un parsing des couples (nomInterneItemX;valeurSouhaitéeX) et irait modifier les composans du formulaire. Je ne sais pas encore si je peux le faire "proprement" et j'aimerais que ça reste côté serveur.

    4. Autre possibilités ?

  5. #5
    Membre chevronné

    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 760
    Points : 2 050
    Points
    2 050
    Par défaut
    Salut,
    tu peux pré-remplir tes champs en passant par du javascript.
    Pour savoir comment jouer avec du javascript, jette un oeil ici > http://blogs.coforcert.com/dntamack/...ost.aspx?ID=73

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 486
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 486
    Points : 2 082
    Points
    2 082
    Par défaut
    Salut et merci bien pour le lien

    J'y ai trouvé plein de choses intéressantes qui vont m'aider dans ma quête de customisation javascript. N'ayant pour l'instant pas de VS, je crois que c'est la seule solution viable.

    Petite question supplémentaire, j'ai pour l'instant fait une newForm2.aspx copier-coller de newForm que j'ai mise comme formulaire d'ajout par défaut via SPDesigner. Imaginons que je souhaite maintenant rendre ceci commun à toutes les newForm par défaut (plus génériquement toutes les forms contenant la webpart ListFormWebPart). Quelle serait la meilleure méthode pour déployer ces modifications ?

    Modification de ows.js ? Modif du template global newForm ? Modif de la webpart ?

  7. #7
    Membre chevronné

    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 760
    Points : 2 050
    Points
    2 050
    Par défaut
    Salut,
    Il existe plusieurs facon de procéder.
    la meilleure, je pense, est de créer un nouveau Site Definition pour tes nouveaux sites; et pour les sites existants, utiliser le principe du Feature Stapling.

    Personnellement, j'avais déjà eu à le faire, et j'avais choisi plutot la solution de simplicité : déploiement de ma page dans le dossier layouts + création d'un httphandler pour faire la redirection sur le serveur vers ma nouvelle page.

    Pour la création du handler > http://blogs.coforcert.com/dntamack/...ost.aspx?ID=78

  8. #8
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 486
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 486
    Points : 2 082
    Points
    2 082
    Par défaut
    Salut,

    Ca m'a l'air bien cette solution, merci . Pour tous ceux que le Feature Stapling intéresse : http://msdn.microsoft.com/en-us/library/bb861862.aspx

    Ta solution de redirection est séduisante mais pour l'instant je n'ai pas le droit d'utiliser Visual Studio. Je cherche avant tout à industrialiser tout ça de manière native (au mieux avec Sharepoint Designer), même si ça signifie se prendre la tête.

    Je pense que je ferai un tuto ou un article complet là-dessus quand j'aurai un peu plus de recul, car 99% des cas que j'ai rencontré font appel à du code behind.

  9. #9
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 486
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 486
    Points : 2 082
    Points
    2 082
    Par défaut
    Salut,

    J'ai enfin trouvé une solution sans code behind (au moment où j'ai développé 90% de la mienne , mais ça y ressemble beaucoup sur le principe).

    Bref, Pour ceux qui veulent remplir les champs au chargement grâce à des paramètres situés dans l'url, voici en gros les méthodes Javascript qui vont bien vous aider (à insérer dans votre page newForm, dans placeHolderMain) :

    Code : 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
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    <script type="text/javascript">   
     
    // 'C'est un javascript qui initialise par défaut la valeur d'un lookup 
    // 'identifié par <<FIELD DISPLAY NAME>> avec la valeur stockée dans 
    // 'la variable identifiée par <<QUERYSTRING VARIABLE NAME>>     
     
    // 'Cette fonction ajoute "fillDefaultValues" à une liste de fonctions 
    // 'JS que la page aspx devra exécuter au chargement.
    _spBodyOnLoadFunctionNames.push("fillDefaultValues");   
     
    function fillDefaultValues() {
       //'récupération du champ et de sa valeur dans l'url (GET)
       var qs = location.search.substring(1, location.search.length);
       var args = qs.split("&");
       var vals = new Object();
       for (var i=0; i < args.length; i++) {
         var nameVal = args[i].split("=");
         var temp = unescape(nameVal[1]).split('+');
         nameVal[1] = temp.join(' ');
         vals[nameVal[0]] = nameVal[1];
       }
     
        //'Appel de la fonction de pré-remplissage 
        setLookupFromFieldName("<<FIELD DISPLAY NAME>>", vals["<<QUERYSTRING VARIABLE NAME>>"]);
    }
     
    //'Est utilisée pour le comportement spécifique des lookups
    function setLookupFromFieldName(fieldName, value) {
       if (value == undefined) return;
       var theSelect = getTagFromIdentifierAndTitle("select","Lookup",fieldName);
      // 'si theSelect est null, ça veut dire que la liste voulue contient plus de
      // '20 items, donc le Lookup sera représenté par un élément de type Input.
        if (theSelect == null) {
           var theInput = getTagFromIdentifierAndTitle("input","",fieldName);
           ShowDropdown(theInput.id); //'fonction fournie par SharePoint
           var opt=document.getElementById(theInput.opt);
           setSelectedOption(opt, value);
           OptLoseFocus(opt); //'fonction fournie par SharePoint  
        } else {
         setSelectedOption(theSelect, value);
       }
    }  
     
    // 'Fonction spécifique aux champs de type Select, qui sélectionne 
    // 'la valeur value
    function setSelectedOption(select, value) {
       var opts = select.options;   
       var l = opts.length;
       if (select == null) return;   
       for (var i=0; i < l; i++) {
         if (opts[i].value == value) {
           select.selectedIndex = i;
           return true;
         }
       }
       return false;
    }
     
    // 'La fonction centrale de ce script, permet de retrouver un objet javascript
    // 'via le tagName (input, select), l'identifier (optionnel, voir plus bas), 
    // 'et la propriété title du champ (attention aux caractères non-ascii)
    function getTagFromIdentifierAndTitle(tagName, identifier, title) {
       var len = identifier.length;
       var tags = document.getElementsByTagName(tagName);
       for (var i=0; i < tags.length; i++) {
         var tempString = tags[i].id;
         if (tags[i].title == title && (identifier == "" || tempString.indexOf(identifier) == tempString.length - len)) {
           return tags[i];
         }
       }
       return null;
    }
    </script>
    De plus, ce billet nous fournit la liste des types les plus courants de Sharepoint, ainsi que les "Identifier" et les "tagName" associés (voir le code plus en détail pour comprendre pourquoi ces deux valeurs sont indispensables).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SharePoint Field Type 	identifier 			tagName
    -----------------------------------------------------------------
    Single Line of Text 	TextField 			input
    Multiple Lines of Text 	TextField 			input
    Number 			TextField 			input
    Currency 		TextField 			input
    Choice (dropdown) 	DropDownChoice 			select
    Lookup (single)* 	Lookup 				select
    Lookup (multiple) 	SelectCandidate; SelectResult 	select
    Yes/No 			BooleanField 			input
     
    *Les Lookups sont plus compliqués à gérer car leur rendu diffère selon le nombre 
    d'items contenus (>20 items). C'est d'ailleurs pourquoi le code Javascript
    ci-dessus a une fonction spécifique pour les Lookups.
    Sources :
    - http://sharepointblog.spaces.live.co...ry?sa=95124219
    - http://blogs.msdn.com/sharepointdesi...orm-field.aspx
    Je copie/colle ici les infos pour des questions d'optimisation du référencement de mon problème initial.

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

Discussions similaires

  1. Remplissage auto d'une colonne avec une barre de progression
    Par Chikatilo dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 26/06/2008, 17h07
  2. [Débutant] Remplissage auto. d'un sous-formulaire.
    Par Cyphen dans le forum Access
    Réponses: 11
    Dernier message: 20/06/2008, 15h07
  3. Création d'une macro pour remplissage auto
    Par Laura-c dans le forum Macros et VBA Excel
    Réponses: 25
    Dernier message: 19/06/2008, 16h40
  4. Importation & remplissage auto des cellules
    Par Chikatilo dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 18/06/2008, 10h56
  5. access remplissage auto d'une table
    Par bjornd dans le forum Access
    Réponses: 2
    Dernier message: 09/11/2005, 08h05

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