在Ribbon中添加新Tab
本文参考自http://www.cnblogs.com/wsdj-ITtech/archive/2012/03/07/2279774.html
根据上述文章的内容自身实践后写的一些自己的理解,如有不同见解,望讨论!
先贴一段新建Tab的代码
<Elements xmlns="http://schemas.microsoft.com/sharepoint/"> <CustomAction Id="MyCustomRibbonTab" Location="CommandUI.Ribbon.ListView" RegistrationId="0x0101010045E25FD930B6D74DB794CC4D2D7D029D" RegistrationType="ContentType"> <CommandUIExtension> <CommandUIDefinitions> <CommandUIDefinition Location="Ribbon.Tabs._children"> <Tab Id="Ribbon.CustomTabExample" Title="My Custom Tab" Description="This holds my custom commands!" Sequence="1001"> <Scaling Id="Ribbon.CustomTabExample.Scaling"> <MaxSize Id="Ribbon.CustomTabExample.MaxSize" GroupId="Ribbon.CustomTabExample.CustomGroupExample" Size="OneLargeTwoMedium"/> <Scale Id="Ribbon.CustomTabExample.Scaling.CustomTabScaling" GroupId="Ribbon.CustomTabExample.CustomGroupExample" Size="OneLargeTwoMedium" /> </Scaling> <Groups Id="Ribbon.CustomTabExample.Groups"> <Group Id="Ribbon.CustomTabExample.CustomGroupExample" Description="This is a custom group!" Title="Custom Group" Sequence="52" Template="Ribbon.Templates.CustomTemplateExample"> <Controls Id="Ribbon.CustomTabExample.CustomGroupExample.Controls"> <Button Id="Ribbon.CustomTabExample.CustomGroupExample.HelloWorld" Command="CustomTabExample.HelloWorldCommand" Sequence="15" Description="Says hello to the World!" LabelText="Hello, World!" TemplateAlias="cust1"/> <Button Id="Ribbon.CustomTabExample.CustomGroupExample.GoodbyeWorld" Command="CustomTabExample.GoodbyeWorldCommand" Sequence="17" Description="Says good-bye to the World!" LabelText="Good-bye, World!" TemplateAlias="cust2"/> <Button Id="Ribbon.CustomTabExample.CustomGroupExample.LoveWorld" Command="CustomTabExample.LoveWorldCommand" Sequence="19" Description="Says I love the World!" LabelText="I love you, World!" TemplateAlias="cust3"/> </Controls> </Group> </Groups> </Tab> </CommandUIDefinition> <CommandUIDefinition Location="Ribbon.Templates._children"> <GroupTemplate Id="Ribbon.Templates.CustomTemplateExample"> <Layout Title="OneLargeTwoMedium" LayoutTitle="OneLargeTwoMedium"> <Section Alignment="Top" Type="OneRow"> <Row> <ControlRef DisplayMode="Large" TemplateAlias="cust1" /> </Row> </Section> <Section Alignment="Top" Type="TwoRow"> <Row> <ControlRef DisplayMode="Medium" TemplateAlias="cust2" /> </Row> <Row> <ControlRef DisplayMode="Medium" TemplateAlias="cust3" /> </Row> </Section> </Layout> </GroupTemplate> </CommandUIDefinition> </CommandUIDefinitions> <CommandUIHandlers> <CommandUIHandler Command="CustomTabExample.HelloWorldCommand" CommandAction="javascript:alert('Hello, world!');" /> <CommandUIHandler Command="CustomTabExample.GoodbyeWorldCommand" CommandAction="javascript:alert('Good-bye, world!');" /> <CommandUIHandler Command="CustomTabExample.LoveWorldCommand" CommandAction="javascript:alert('I love you, world!');" /> </CommandUIHandlers> </CommandUIExtension> </CustomAction> </Elements>
接下来对每个部分进行剖析
<?xml version="1.0" encoding="utf-8"?> <Elements xmlns="http://schemas.microsoft.com/sharepoint/"> <CustomAction Id="MyCustomRibbonTab" Location="CommandUI.Ribbon.ListView" //自定义项显示的位置(列表、编辑表单、新建表单等) RegistrationId="101" //在什么结构下显示(文档库、通用列表、表单库、日历等) RegistrationType="List"> //注册类型(ContentType,FileType,List,ProgId)
Location定义在何处应用自定义项,详请见下图
在做到这步的时候对RegistrationId和 RegistrationType有些疑问,进一步研究后,发现两者共同作用于Tab显示时机
例:
RegistrationId="101" RegistrationType="List" 在文档库下显示
RegistrationId="115" RegistrationType="List" 在表单库下显示
RegistrationId="100" RegistrationType="List" 在列表下显示
RegistrationId="0x0101010045E25FD930B6D74DB794CC4D2D7D029RegistrationType="ContentType" 在内容类型ID为RegistrationId时显示
一篇国外的博客在这方面写的很好: http://blog.alexboev.com/2011/12/registrationtype-registrationid-in.html
接下来定义Tab
<CommandUIExtension> <CommandUIDefinitions> <CommandUIDefinition Location="Ribbon.Tabs._children"> //定义呈现的位置,当前呈现在Tabs集合中 <Tab Id="Ribbon.CustomTabExample" Title="My Custom Tab" Description="This holds my custom commands!" Sequence="501"> //定义相对其他Tabs的位置,sharepoint默认是用100的倍数,所以最好使用非100倍数的数字。 //数字越大,位置越靠右
在创建Tab是需要定义控件的缩放:
<Scaling //定义控件的缩放
Id="Ribbon.CustomTabExample.Scaling"> <MaxSize //组中控件的最大大小 Id="Ribbon.CustomTabExample.MaxSize" GroupId="Ribbon.CustomTabExample.CustomGroupExample" Size="OneLargeTwoMedium"/> <Scale //组在不同的情况下进行缩放 Id="Ribbon.CustomTabExample.Scaling.CustomTabScaling" GroupId="Ribbon.CustomTabExample.CustomGroupExample" //绑定缩放的group Size="OneLargeTwoMedium" /> //有GroupTemplate中的Layout元素定义 </Scaling>
对Tab定义后,进一步对Group定义
<Groups Id="Ribbon.CustomTabExample.Groups"> //定义Group
<Group Id="Ribbon.CustomTabExample.CustomGroupExample" Description="This is a custom group!" Title="Custom Group" Sequence="52" //sharepoint默认是10的倍数 Template="Ribbon.Templates.CustomTemplateExample"> //每个Group都需要对应一个Template <Controls Id="Ribbon.CustomTabExample.CustomGroupExample.Controls"> <Button Id="Ribbon.CustomTabExample.CustomGroupExample.HelloWorld" Command="CustomTabExample.HelloWorldCommand" Sequence="15" Description="Says hello to the World!" LabelText="Hello, World!" TemplateAlias="cust1"/>
注意:sharepoint规定每一个Group都要有Template与之对应,Sequence属性与上面的作用一样,用来确定与其他Group的位置。
<CommandUIDefinition Location="Ribbon.Templates._children"> <GroupTemplate Id="Ribbon.Templates.CustomTemplateExample"> //定义组显示结构 <Layout Title="OneLargeTwoMedium" //对应MaxSize和Scale中的Size属性 LayoutTitle="OneLargeTwoMedium"> <Section Alignment="Top" Type="OneRow"> <Row> <ControlRef DisplayMode="Large" TemplateAlias="cust1" /> //‘cust1’与control中的 TemplateAlias对应 </Row> </Section> <Section Alignment="Top" Type="TwoRow"> <Row> <ControlRef DisplayMode="Medium" TemplateAlias="cust2" /> </Row> <Row> <ControlRef DisplayMode="Medium" TemplateAlias="cust3" /> //用来定义显示的样式 </Row> </Section> </Layout> </GroupTemplate> </CommandUIDefinition> </CommandUIDefinitions>
最后是CommandUIHandlers 元素的定义,用来相应用户的操作
<CommandUIHandlers> //定义如何响应用户操作,对应控件Command属性
<CommandUIHandler Command="CustomTabExample.HelloWorldCommand" CommandAction="javascript:alert('Hello, world!');" /> <CommandUIHandler Command="CustomTabExample.GoodbyeWorldCommand" CommandAction="javascript:alert('Good-bye, world!');" /> <CommandUIHandler Command="CustomTabExample.LoveWorldCommand" CommandAction="javascript:alert('I love you, world!');" /> </CommandUIHandlers>
这样,定义的过程就完成了,部署后查看效果
![](data:image/png;base64,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)
CommandAction定义的操作可以是ECMAScript(JavaScript、JScript)、URL 或 UrlAction 元素中以前包含的任意内容。
这里我给出一个ECMAScript的例子:
<CommandUIHandlers> <CommandUIHandler Command="emailContacts" CommandAction="javascript: function getItemIds() { var itemIds = ''; var items = SP.ListOperation.Selection.getSelectedItems(); var item; for(var i in items) { item = items[i]; if(itemIds != '') { itemIds = itemIds + ','; } itemIds = itemIds + item.id; } return itemIds; } function handleReadyStateChange() { if (client.readyState == 4) { if (client.status == 200) { // client.responseText is mailto string window.location = ('mailto:' + client.responseText); } } } function invokeEmailContacts() { var params = 'itemids=' + getItemIds(); // Posting to EmailContacts.ashx to get the mailto string var site='{SiteUrl}'; var url = site + '/_layouts/emailcontacts.ashx?listId={ListId}'; client = null; client = new XMLHttpRequest(); client.onreadystatechange = handleReadyStateChange; client.open('POST', url, true); client.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); client.setRequestHeader('Content-length', params.length); client.send(params); } invokeEmailContacts();" EnabledScript="javascript: function enableEmailContacts() { var items = SP.ListOperation.Selection.getSelectedItems(); return (items.length > 0); } enableEmailContacts();"/> </CommandUIHandlers>