Vous avez ajouté un bouton au ruban office d’une bibliothèque de document:
1: <Elements xmlns="http://schemas.microsoft.com/sharepoint/">
2: <CustomAction
3: Id="MyCustomAction"
4: RegistrationId="101"
5: RegistrationType="List"
6: Location="CommandUI.Ribbon"
7: Sequence="1"
8: Title="Do my stuff">
9: <CommandUIExtension>
10: <CommandUIDefinitions>
11: <CommandUIDefinition Location="Ribbon.Documents.Manage.Controls._children">
12: <Button
13: Id="Ribbon.Handler.Button"
14: Alt="Do my stuff"
15: Sequence="1"
16: Command="my_command_button"
17: LabelText="Do my stuff" />
18: </CommandUIDefinition>
19: </CommandUIDefinitions>
20: <CommandUIHandlers>
21: <CommandUIHandler
22: Command="my_command_button"
23: CommandAction="javascript:RunMyCode();"
24: EnabledScript="javascript:EnableMyButton();"/>
25: </CommandUIHandlers>
26: </CommandUIExtension>
27: </CustomAction>
28:
29: </Elements>
Ce bouton s’active uniquement si vous avez une et une seule sélection de faite (ligne 24 ci-dessus):
1: function EnableMyButton() {
2: var items = SP.ListOperation.Selection.getSelectedItems();
3: var count = CountDictionary(items);
4: return (count == 1);
5: }
Cette fonction renvoie “TRUE” si seulement un document est sélectionné, et si tel est le cas, le bouton sur le ruban se dégrise et devient actif.
Au clic de ce bouton du ruban, vous voulez effectuer une opération en fonction du type de contenu du document (igne 23 du code XML ci-dessus).
Ci-dessous, le bout de code permettant d’arriver à ça:
1: function RunMyCode() {
2:
3: var context = SP.ClientContext.get_current();
4: var web = context.get_web();
5: var listId = SP.ListOperation.Selection.getSelectedList();
6: var sdlist = web.get_lists().getById(listId);
7: var items = SP.ListOperation.Selection.getSelectedItems(context);
8: var itemid = items[0];
9: listItem = sdlist.getItemById(itemid.id);
10: spitemcontenttype = listItem.get_contentType();
11: context.load(spitemcontenttype);
12:
13: context.executeQueryAsync(function (s, a) {
14:
15: var docContentType = spitemcontenttype.get_name();
16: alert(docContentType);
17:
18: });
19: }
Entre les lignes 3 et 9, je récupère l’élément de la blibliothèque que je sélectionne, puis de cet élément je récupère le type de contenu (ligne 10). Je charge enfin cet objet dans le contexte, puis j’exécute la requête. Dans le callback (ligne 13), j’affiche dans un pop-up ce type de contenu.
Et voila, une fois l’API JavaScript mise à disposition nous permet de faire pas mal de chose. Bien entendu, tout ça et “Office 365 compliant” …