2012-02-13 2 views
0

я после следующего проекта: http://www.thorntontechnical.com/tech/sharepoint/sharepoint-2010-context-menu-item-with-custom-codedoPostBack не стреляя

Elements.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> 

PACKAGE.TEMPLATE.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(); 
       } 
      } 
     } 
    } 

Как вы можете видеть, целью является выполнение пакета SSIS, который выделяется на Sharepoint. Меню ECB с параметром Execute Package появилось во всех файлах с типом dtsx. Поэтому, когда я щелкнул в этом дне, событие не работает ... Я не знаю, что мне нужно делать ... Любая помощь будет унаследована. Благодаря!!

ответ

0

Попытка создать отдельное действие в меню SiteAction:

< CustomAction Id = "SPTest.CustomMenuItem.CustomActionsDispatcher" GroupID = "SiteActions" Location = "Microsoft.SharePoint.StandardMenu"
Sequence =» 1000" Название = "Пользовательские действия грузоотправитель"
ControlAssembly = "SPTest.CustomMenuItem, Version = 1.0.0.0, культура = нейтральная, PublicKeyToken = beb14bc625e99e7f"
ControlClass = "SPTest.CustomMenuItem.CustomItemAction" >
</CustomAction >

Меню ECB заполняется динамически с помощью запроса асинхронной, так когда страница размещена, для управления меню ECB не создаются и событие для них не уволили. Несмотря на то, что элементы управления сайтами всегда отображаются, они могут обрабатывать обратную передачу.

+0

Я заменяю свой код на ваш и ничего не происходит ... В группе SiteActions не появляется опция –

+0

Опция не должна быть видимой в группе SiteActions - она ​​должна быть там, но невидимой. Чтобы сделать его видимым, вы должны предоставить ему название. Обновляется ли страница, когда вы выбираете свое собственное действие (действительно ли оно опубликовано)?Если да, попробуйте добавить ** protected override void OnInit (EventArgs e) ** в CustomItemAction и установить точку останова внутри - если точка останова не запускается при обновлении страницы, это означает, что CustomItemAction не является деревом управления страницами и не может обрабатывать постбэк. –

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 и ControlClass в элементе CustomAction. Это не делается в его сообщении, но упоминается в комментарии (я пробовал это, и он работает).

Также обратите внимание на то, что другие комментарии в его сообщении в блоге говорят: «Недостатком является то, что элемент управления будет загружаться повсюду, поэтому вы должны убедиться, что никакого другого кода, кроме кода, который вы фильтруете, с помощью __EVENTTARGET срабатывает». Это уже реализовано в его примере, но все-таки noteworty.

Смежные вопросы