Basically, the enabling behavior all boils down to the following few lines of code:
EnabledScript="javascript:function singleEnable() { var items =
SP.ListOperation.Selection.getSelectedItems(); var ci = CountDictionary(items); return (ci == 1); } singleEnable();"
SP.ListOperation.Selection.getSelectedItems(); var ci = CountDictionary(items); return (ci == 1); } singleEnable();"
What this does is query to get the dictionary of selected items, and if the size of the dictionary is 1 it returns true (enable), otherwise it will return false (disable). Technically, I should have used Script on Demand to call into the SP.* namespace, but since I’m calling this from the Ribbon I have a high confidence that SP.js has been loaded already.
With nothing selected:
With one item selected:
The full CustomAction code for a sample Ribbon button which enables when one item is selected is at the end of this post. The code assumes the following:
- You want to add this button to the New group on the Documents tab. If you want to add the button to another location, you should change the Location attribute of the CommandUIDefinition element (as well as change any appropriate attributes in the Button element, such as Id and Sequence, to match the new location).
- You have an icon image at LAYOUTS/SharePointProject1/DemoButton.jpg. If that’s not the case, you should either put an icon at that location or change the Image32x32 attribute to a valid icon path.
CustomAction code:
<CustomAction Id="EnableSingleSelectButton" Location="CommandUI.Ribbon" > <CommandUIExtension> <CommandUIDefinitions>
<CommandUIDefinition Location="Ribbon.Documents.New.Controls._children"> <Button Id="Ribbon.Documents.New.EnableSingleSelectButton" Alt="Button enabled on single selection" Sequence="35" LabelText="Single Select"
Image32by32="/_layouts/SharePointProject1/DemoButton.png" Command="SingleSelectButton" TemplateAlias="o1" /> </CommandUIDefinition> </CommandUIDefinitions> <CommandUIHandlers> <CommandUIHandler Command="SingleSelectButton" CommandAction="javascript:alert('There is only one thing selected!');" EnabledScript="javascript:function singleEnable()
{ var items = SP.ListOperation.Selection.getSelectedItems(); var ci = CountDictionary(items); return (ci == 1); } singleEnable();" /> </CommandUIHandlers> </CommandUIExtension> </CustomAction>
<CommandUIDefinition Location="Ribbon.Documents.New.Controls._children"> <Button Id="Ribbon.Documents.New.EnableSingleSelectButton" Alt="Button enabled on single selection" Sequence="35" LabelText="Single Select"
Image32by32="/_layouts/SharePointProject1/DemoButton.png" Command="SingleSelectButton" TemplateAlias="o1" /> </CommandUIDefinition> </CommandUIDefinitions> <CommandUIHandlers> <CommandUIHandler Command="SingleSelectButton" CommandAction="javascript:alert('There is only one thing selected!');" EnabledScript="javascript:function singleEnable()
{ var items = SP.ListOperation.Selection.getSelectedItems(); var ci = CountDictionary(items); return (ci == 1); } singleEnable();" /> </CommandUIHandlers> </CommandUIExtension> </CustomAction>
No comments:
Post a Comment