0

我正在关注下一个项目:http ://www.thorntontechnical.com/tech/sharepoint/sharepoint-2010-context-menu-item-with-custom-code

元素.XML

   <?xml version="1.0" encoding="utf-8"?>
   <Elements xmlns="http://schemas.microsoft.com/sharepoint/">
     <CustomAction Id="SPTest.CustomMenuItem.ButtonClicked"
             RegistrationType="FileType"
            RegistrationId="dtsx"
            Location="EditControlBlock"
            ImageUrl="/_layouts/IMAGES/DOCLINK.GIF"
            Sequence="600"
            Title="Execute Package"
            Description="Executed Selected Package"
            ControlAssembly="SPTest.CustomMenuItem, Version=1.0.0.0, Culture=neutral,    PublicKeyToken=beb14bc625e99e7f"
            ControlClass="SPTest.CustomMenuItem.CustomItemAction"
            >
<UrlAction Url="javascript:__doPostBack('SPTest.CustomMenuItem.CustomItemAction',  {ItemId});" />
</CustomAction>
 </Elements>

包.模板.XML

    <?xml version="1.0" encoding="utf-8"?>
 <Solution xmlns="http://schemas.microsoft.com/sharepoint/">
 <Assemblies>
  <Assembly Location="SPTest.CustomMenuItem.dll"  DeploymentTarget="GlobalAssemblyCache">
    <SafeControls>
      <SafeControl Assembly="SPTest.CustomMenuItem, Version=1.0.0.0, Culture=neutral, PublicKeyToken=beb14bc625e99e7f" 
                 Namespace="SPTest.CustomMenuItem" TypeName="*" Safe="True"        SafeAgainstScript="False" />
    </SafeControls>
  </Assembly>
</Assemblies>
</Solution>

所以... 在 Web.config 文件中,我们可以在 SafeControl 中找到我们的程序集

执行类

   using System.IO;
   using System;
   using System.Collections.Generic;
   using System.Linq;
   using System.Text;
   using Microsoft.SharePoint;
   using Microsoft.SharePoint.WebControls;

    namespace SPTest.CustomMenuItem
    {
        public class CustomItemAction : SPLinkButton
        {
            protected override void OnLoad(EventArgs e)
            {
                this.EnsureChildControls();
                base.OnLoad(e);
                if (this.Page.Request["__EVENTTARGET"] ==   "SPTest.CustomMenuItem.ButtonClicked")
                {
                    int itemId = Convert.ToInt32(this.Page.Request["__EVENTARGUMENT"]);
                    System.IO.TextWriter writer = new  StreamWriter(@"C:\XXXXX\XXXXX\XXXXX\custommenuoutput.txt", true);
                    writer.WriteLine("Event Fired at:" + DateTime.Now.ToLongTimeString() + ": Item ID:" + itemId.ToString());
                    writer.Close();
                }
            }
        }
    } 

如您所见,目标是执行在 Sharepoint 上分配的 SSIS 包。带有 Execute Package 选项的 ECB 菜单出现在所有具有 dtsx 类型的文件中。因此,当我单击此底部时,该事件不起作用......我不知道我必须做什么......任何帮助将不胜感激。

4

2 回答 2

0

尝试在 SiteAction 菜单中创建单独的操作:

<CustomAction Id="SPTest.CustomMenuItem.CustomActionsDispatcher" GroupId="SiteActions" Location="Microsoft.SharePoint.StandardMenu"
Sequence="1000" Title="自定义操作调度程序"
ControlAssembly="SPTest.CustomMenuItem, Version=1.0.0.0, Culture=neutral, PublicKeyToken=beb14bc625e99e7f"
ControlClass="SPTest.CustomMenuItem.CustomItemAction">
</CustomAction>

ECB 菜单是使用异步请求动态填充的,因此在发布页面时,不会创建 ECB 菜单控件并且不会触发它们的事件。虽然始终呈现站点操作控件,但也可以处理回发。

于 2012-02-13T19:24:34.157 回答
0

重新访问您提到的页面:

http://www.thorntontechnical.com/tech/sharepoint/sharepoint-2010-context-menu-item-with-custom-code

他的编辑(16/02/2012)修复了这个问题(“我们还需要告诉 SharePoint 加载控件”):

<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<Control ControlAssembly="SPTest.CustomMenuItem, Version=1.0.0.0, Culture=neutral, PublicKeyToken={PublicKeyToken}"
ControlClass="SPTest.CustomMenuItem.CustomItemAction" Sequence="50" Id="AdditionalPageHead"/>
<CustomAction ...

然后,您可以省略元素中的属性ControlAssembly和。这不是在他的帖子中完成的,而是在评论中提到的(我试过了,它有效)。ControlClassCustomAction

另请注意他的博客文章中的其他评论:“缺点是控件现在将加载到任何地方,因此您必须确保没有其他代码,除了您使用 __EVENTTARGET 触发的过滤代码。” 这已经在他的示例中实现,但仍然值得注意。

于 2012-10-26T10:49:44.660 回答