Помогите добавить кнопку в меню «Действия» в списке - PullRequest
1 голос
/ 05 мая 2009

Я создал функцию CustomAction, чтобы добавить кнопку в меню «Действия» в списке. Когда я не указываю атрибуты ControlAssembly / ControlClass, появляется кнопка. Когда я указываю эти атрибуты, кнопка не отображается. Я попытался добавить соответствующий элемент SafeControl на сайте web.config. Я использую VSeWSS.

ОБНОВЛЕНИЕ - удалена ссылка на другой вопрос - не уверен, как я это сделал. Мой вопрос: может ли кто-нибудь сказать мне, почему моя кнопка CustomAction не отображается, когда я задаю атрибуты ControlAssembly и ControlClass?

ОБНОВЛЕНИЕ 2 - RegenConfigTemp фактически наследует от WebControl, извините! Мой компьютер с доступом через Интернет отличается от моего компьютера разработчика, и нет возможности перемещать файлы между ними, кроме записи компакт-диска.

вот мои файлы:

manifest.xml
<?xml version="1.0" encoding="utf-8"?>
<Solution SolutionId="GUIDHERE" xmlns="http://schemas.microsoft.com/sharepoint/">
  <FeatureManifests>
    <FeatureManifest Location="RegenConfigTemp\feature.xml" />
  </FeatureManifests>
  <Assemblies>
    <Assembly Location="WebFeature.dll" DeploymentTarget="GlobalAssemblyCache" />
  </Assemblies>
</Solution>
feature.xml
<Feature Id="GUIDHERE" Title="RegenConfigTemp" Scope="Web" Version="1.0.0.0" Hidden="FALSE" DefaultResourceFile="core" xmlns="http://schemas.microsoft.com/sharepoint/">
  <ElementManifests>
    <ElementManifest Location="RegenConfigTemp\Module.xml" />
  </ElementManifests>
</Feature>
Module.xml
<?xml version="1.0" encoding="utf-8"?>
<Elements Id="GUIDHERE" xmlns="http://schemas.microsoft.com/sharepoint/">
  <CustomAction
    Id="GUIDHERE"
    RegistrationType="List"
    RegistrationId="1981"
    GroupId="ActionsMenu"
    Location="Microsoft.SharePoint.StandardMenu"
    Sequence="1000"
    Title="Regenerate List Contents"
    ControlAssembly="WebFeature, Version=1.0.0.0, Culture=neutral, PublicKeyToken=myPKTokenHere"
    ControlClass="WebFeature.RegenConfigTemp"
  ></CustomAction>
</Elements>
RegenConfigTemp.cs
using System;
using System.Runtime.InteropServices;
using System.Web.UI.WebControls;
using Microsoft.SharePoint.WebControls;

namespace WebFeature
{
    [Guid("GUID HERE MATCHES 1st GUID in Module.xml")]
    public class RegenConfigTemp : WebControl
    {
        protected override void OnLoad(EventArgs e)
        {
            this.EnsureChildControls();
            base.OnLoad(e);
        }
        protected override void CreateChildControls()
        {
            base.CreateChildControls();
        }
    }
}

Я добавил следующее в web.config

<SafeControl Assembly="WebFeature, Version=1.0.0.0, Culture=neutral, PublicKeyToken=myPKTokenHere" Namespace="WebFeature" TypeName="RegenConfigTemp" Safe="True" />

Ответы [ 3 ]

1 голос
/ 12 мая 2009

Оказывается, проблема была в Module.xml. Я пропустил знак «равно» после «Версии» в этой (исправленной) строке: ControlAssembly = "WebFeature, версия = 1.0.0.0, культура = нейтральная, PublicKeyToken = myPKTokenHere"

Я встал на правильный путь, потому что обнаружил диагностические журналы Sharepoint, и первый комментарий в этом блоге: http://blog.lostparticles.net/?p=23 была именно моей проблемой.

Спасибо за помощь.

ОБНОВЛЕНИЕ: Мне также пришлось исправить строку web.config. Я закончил тем, что поместил строку safecontrol в манифест, а не прямо в web.config; спасибо JMD. (Кстати, почему VSeWSS не делает это для меня, когда это делает для веб-частей?)

0 голосов
/ 06 мая 2009

Наверняка RegenConfigTemp должно быть от чего-то наследовать? В настоящее время вы не добавляете никаких элементов управления, поэтому, если вы переопределяете пустой элемент управления, по этой причине вы ничего не видите. Если ничего другого, попробуйте установить точку останова или добавить некоторую диагностическую трассировку в CreateChildControls(), чтобы посмотреть, выполняется ли код.

0 голосов
/ 05 мая 2009

Вы уверены, что ваш код должен что-то отображать? От какого класса вы наследуете и где находится ваш код рендеринга? Вы проверили журнал SharePoint на предмет каких-либо исключений?

Это не ответ на ваш вопрос, но вы можете поместить свой тег SafeControl в манифест вместо web.config.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...