Thursday, March 20, 2008

Sharepoint: Accessing a List with it's Internal Name

Le problème pour accéder aux listes SharePoint est qu'on doit utiliser le nom "public" de la liste, le Title, et non le nom interne:

Si je crée une liste en lui donnant le nom "MaListe"  puis je renomme cette liste en "Ma Liste", alors la liste a deux noms:

  • Le nom interne, MaListe (le premier créé)
  • Le nom public, Ma Liste, suite au renommage.

Si je veux accéder à la liste par programme, je vais utiliser:

SPList list = web.Lists["Ma Liste"];

car la string demandée par la Lists correspond au champs Title de la liste

Mais si on considère que toute liste est un folder, alors on peut contourner le problème en passant par le SPFolder:

public enum ListType { CustomList, Document };
static public SPList GetListName(SPWeb web, ListType type, string InternalName) {
            try {
                SPFolder folder = null;
                switch (type) {
                    case ListType.CustomList:
                        folder = web.Folders["Lists"].SubFolders[InternalName];
                        break;
                    case ListType.Document:
                        folder = web.Folders[InternalName];
                        break;
                    default:
                        break;
                }
                SPList realList = web.Lists[folder.ParentListId];
                return realList;
            }
            catch (Exception x) {
                return null;
            }
        }

Lorsque vous créez une liste, le premier nom que vous donnez devient le nom du folder et donc le nom interne qui ne changera plus. Ensuite, vous pouvez modifier le nom de la liste, mais c'est le champ Title qui est affecté.

J'ai ici mis en avant l'accès aux listes de type "Custom List", qui sont des sous-folder de "Lists", et des listes de type "Document", dont le folder est directement en web root.
Une fois qu'on a le folder, il suffit de récupérer son ParentListId pour obtenir la liste associée.

No comments: