grimboite/old/2014-02-02-sp-calculated-va...

3.2 KiB

Title: Calculated values

Il m'a été récemment demandé de proposer un code d'identification auto-incrémenté pour des documents dans une librairie SharePoint.

L'idéal aurait (évidemment) été de se baser sur la valeur d'identifiant de chacun de ces documents attribuée directement par SharePoint, sauf que comme nous avons choisi de personnaliser cet identifiant, on se retrouve avec un préfixe devant chaque valeur. Pour info, la personnalisation de cet identifiant s'obtient depuis la page située à l'emplacement /_layouts/15/DocIdSettings.aspx:

{<1>}

En résumé, chaque document se voit attribuer un identifiant préfixé par le libellé choisi, et suffixé par l'identifiant de la bibliothèque-tiret-l'identifiant du document. Par exemple: TEST-1-2 pour le deuxième document de la première bibliothèque.

Du coup, pour choper un identifiant auto-incrémenté pour chaque document, il suffit de trancher dans l'identifiant officiel SharePoint pour ne garder que la partie qui nous intéresse. Une solution est de passer par les valeurs calculées, pour déduire une valeur depuis un calcul à partir d'autres colonnes.

C'est là qu'est le piège (bien que je ne garantis pas qu'il soit seul...): les valeurs calculées sont un subset de ce qu'Excel permet (autorise?), et doivent donc être ... traduites. J'en vois qui vomissent au fond de la salle.

J'ai mon identifiant qui est sous la forme TEST-14-19, et je veux supprimer le préfixe, voire ne garder que le dernier identifiant, je peux sortir les formules suivantes: =RIGHT(MyField,LEN(MyField)-INT(FIND("-",MyField))) ou =RIGHT(MyField,LEN(MyField)-INT(SEARCH("-",MyField, 8))).

En langage Excel, cela signifie:

  1. Que je cherche la position du premier tiret dans la valeur du champ MyField, qu'on convertit cette valeur en entier, et qu'on soustrait cette même valeur à la longueur de la valeur du champ pour ne prendre que la partie qui se trouve à droite.
  2. Même principe, sauf que la fonction search permet de définir à partir de quel index on commence la recherche (et de ne commencer qu'à la huitième position dans cet exemple).

Dans le premier cas, cela permet de trouver le premier index pour le tiret (et donc ne garder que 14-19), tandis que la seconde option permet d'uniquement conserver le 19.

La partie amusante arrive maintenant: suivant la version de SharePoint utilisée (anglaise, francophone, ...), la syntaxe est différente. Pour les formules ci-dessus, la version belge ressemble à ceci: =DROITE(MyField;NBCAR(MyField)-ENT(TROUVE("-";MyField)))

Oui, c'est moche. Le pire étant que la syntaxe belge est différente de la syntaxe française, dans la mesure où les virgules ont été remplacées par des points-virgules.

Pour plus d'infos sur les fonctions disponibles, rendez-vous ici, et pour la traduction, c'est par ici pour la version francophone.

En conclusion, tapez vos formules en anglais quand c'est possible, et passez par SharePoint Designer quand votre installation de SharePoint est dans une autre langue.