none
Champs qui s'incrémente automatiquement RRS feed

  • Question

  • Bonjour,

     

    il y a un champ de type ID dans les bibliothèques SharePoint. Ce que je voudrais c'est simplement de pouvoir avoir un champ référence qui s'incrémente automatiquement comme les ID.

     

    Malheureusement je ne peux pas utiliser un champ de type Valeur Calculée car j'ai l'impression que ce dernier se calcule avant la création de l'id, donc si je fait une valeur calculée du genre XXX&[ID] il ne me fera apparaitre que XXX (sauf si je redefini à chaque fois la valeur du champ, là il va tout me mettre bien)...

     

    En résumé : est il possible d avoir un champ auto incrémenter "simplement" avec SharePoint ? Peut on récupérer le nb d'éléments dans un champs de type Valeur Calculée ou quelle est la solution ?

     

     

    Merci.

    mardi 22 avril 2008 15:04

Réponses

  • Sans problème, nous sommes ici pour partager les informations, bon commence par faire une recherche sur CAML, c'est un langage de requête dédié aux listes sharepoints.
    Bon, pour ton cas tu peux ajouter un champ date création dans ta  liste qui prend pour valeur la date actuelle du système.
    Puis dans ton code, tu te connecte sur cette liste et tu récupère les éléments que tu veux dans ta page load et tu fait ta requete.
    Voila un exemple :


       
    Code Snippet

    SPSite objSPSite;
        SPWeb objSPWeb;
        SPList objSPList;
        SPListItem objSPListItem;
        SPListItemCollection objSPListItemCollection;

        protected void Page_Load(object sender, EventArgs e)
        {


                 objSPSite = SPContext.Current.Site;
                objSPWeb = objSPSite.OpenWeb();
                objSPList = objSPWeb.Lists["Le nom de ta liste"];
                objSPListItemCollection = objSPList.Items;

                 SPQuery objSPQuery = new SPQuery();

            objSPQuery.ViewFields =         // ICI les champs que tu veux les récupérer
                 @"
                   <FieldRef Name='ID' />
                   <FieldRef Name='NomTache'/>
                   ";

            objSPQuery.Query =
                @"
                   <OrderBy>
                      <FieldRef Name='DateDebutTache' Ascending='False' />
                   </OrderBy>";
            objSPListItemCollection = objSPList.GetItems(objSPQuery);
        }


    Puis après la récupération des données dans objSPListItemCollection tu peux avoir l'enregistrement souhaité, voir la méthode GetDataTable()
    mercredi 23 avril 2008 08:09

Toutes les réponses

  • Salut, il n'existe pas dans sharepoint la notion de l'incrémentation automatique sauf pour l'element ID.
    Mais tu peux coder la valeur de ton champ :
    Par exemple, tu initialise la valeur de ta colonne du  1 er enregistrement puis quand tu va insérer d'autre enregistrement, tu récupère toujours le dernier enregistrement, tu charge la valeur de la colonne de cet enregistrement puis tu l'incrémente et tu auras une nouvelle valeur que tu peux l'insérer dans ton champ.
    mardi 22 avril 2008 15:15
  • Merci pour cette réponse, mais comment faire pour récupérer le dernier enregistrement si je ne connais pas l'id ? Sans passer par un event bien sûr, est il possible de récupérer le dernier enregistrement par un champ calculé ou autre ?

    mardi 22 avril 2008 15:41
  • Tu peux récupérer le dernier élément par une requête CAML et tu fait un trie décroissant exemple :

     SPQuery objSPQuery = new SPQuery();

            objSPQuery.ViewFields =
                 @"
                   <FieldRef Name='ID' />";
                

            objSPQuery.Query =
                @"
                   <OrderBy>
                      <FieldRef Name='DateDebutTache' Ascending='False' /> // ton champ date
                   </OrderBy>";
    mardi 22 avril 2008 18:35
  • Je te remercie beaucoup pour ces informations. Malheureusement je ne suis pas du tout familier avec ce mécanisme et je n'ai aucune idée de comment le mettre en place : comment puis je utiliser ce genre de requete ? Est il possible de le faire dans un champ ?

     

    Peut etre que si tu as un lien avec un exemple cela me permettra de comprendre sans trop te déranger Wink

     

    Merci.

     

    mercredi 23 avril 2008 07:40
  • Sans problème, nous sommes ici pour partager les informations, bon commence par faire une recherche sur CAML, c'est un langage de requête dédié aux listes sharepoints.
    Bon, pour ton cas tu peux ajouter un champ date création dans ta  liste qui prend pour valeur la date actuelle du système.
    Puis dans ton code, tu te connecte sur cette liste et tu récupère les éléments que tu veux dans ta page load et tu fait ta requete.
    Voila un exemple :


       
    Code Snippet

    SPSite objSPSite;
        SPWeb objSPWeb;
        SPList objSPList;
        SPListItem objSPListItem;
        SPListItemCollection objSPListItemCollection;

        protected void Page_Load(object sender, EventArgs e)
        {


                 objSPSite = SPContext.Current.Site;
                objSPWeb = objSPSite.OpenWeb();
                objSPList = objSPWeb.Lists["Le nom de ta liste"];
                objSPListItemCollection = objSPList.Items;

                 SPQuery objSPQuery = new SPQuery();

            objSPQuery.ViewFields =         // ICI les champs que tu veux les récupérer
                 @"
                   <FieldRef Name='ID' />
                   <FieldRef Name='NomTache'/>
                   ";

            objSPQuery.Query =
                @"
                   <OrderBy>
                      <FieldRef Name='DateDebutTache' Ascending='False' />
                   </OrderBy>";
            objSPListItemCollection = objSPList.GetItems(objSPQuery);
        }


    Puis après la récupération des données dans objSPListItemCollection tu peux avoir l'enregistrement souhaité, voir la méthode GetDataTable()
    mercredi 23 avril 2008 08:09
  • Ok je crois que je commence à comprendre !

     

    Une dernière question : quand est ce que ce code est exécuté ? Il faut que j'ajoute un event listener et que je déclenche ce code à chaque ajout d'un élément ?

     

    Merci beaucoup en tous cas !

     

    mercredi 23 avril 2008 08:36
  • Non, tu l'éxécutes dans la page_load de création d'un nouveau enregistrement.
    C'est à dire dans cet événement tu stocke la valeur de ton champ dans une variable puis lors du clique sur un bouton d'ajout tu affecte à ton nouveau champ la valeur stockée.
    Bon, regarde ce lien

    http://msdn2.microsoft.com/en-us/library/ms467435.aspx



    Finalement, n'oublie pas de marquer ma réponse si tout va bien merci
    mercredi 23 avril 2008 09:01