2009-05-05 16 views
1

J'ai créé une fonction CustomAction pour ajouter un bouton au menu "Actions" d'une liste. Lorsque je ne spécifie pas les attributs ControlAssembly/ControlClass, le bouton apparaît. Lorsque je spécifie ces attributs, le bouton n'apparaît pas. J'ai essayé d'ajouter un élément SafeControl correspondant dans le site web.config. J'utilise VSeWSS. MISE À JOUR - lien supprimé à une autre question - je ne sais pas comment j'ai fait cela. Ma question est quelqu'un peut-il me dire pourquoi mon bouton CustomAction n'apparaît pas lorsque je spécifie les attributs ControlAssembly et ControlClass?Aide à l'ajout d'un bouton dans le menu "Actions" d'une liste

MISE À JOUR 2 - RegenConfigTemp hérite réellement de WebControl, désolé! Ma machine avec accès web est différente de ma machine de dev et il n'y a aucun moyen de déplacer les fichiers entre eux à moins de graver un CD.

voici mes fichiers:

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

j'ajouté ce qui suit à la web.config

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

+0

est-ce censé être une réponse à cette question? –

+0

Voter pour fermer comme une vraie question –

Répondre

1

Il s'avère que le problème était dans Module.xml. Je manque le signe 'égal' après 'version' dans ce (corrigé) en ligne: ControlAssembly = "WebFeature, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = myPKTokenHere"

je suis arrivé sur la piste droite b/c J'ai découvert la journalisation de diagnostic de Sharepoint, et le premier commentaire sur ce blog: http://blog.lostparticles.net/?p=23 était mon problème exactement.

Merci de votre aide. MISE À JOUR: J'ai également dû corriger la ligne web.config. J'ai fini par mettre la ligne safecontrol dans le manifeste au lieu de directement dans le web.config; merci JMD. (BTW, pourquoi VSeWSS ne fait-il pas cela pour moi, quand c'est le cas pour les composants web?)

0

Etes-vous sûr que votre code est censé rendre quelque chose? De quelle classe héritez-vous et où est votre code de rendu? Avez-vous vérifié le journal SharePoint pour toute exception?

Ceci n'est pas une réponse à votre question, mais vous pouvez placer votre balise SafeControl dans le manifeste au lieu du fichier web.config.

0

Sûrement RegenConfigTemp devrait hériter de quelque chose? À l'heure actuelle, vous n'ajoutez aucun contrôle, donc si vous surchargez un contrôle vide, ce serait pour cela que vous ne voyez rien. Si rien d'autre, essayez de définir un point d'arrêt ou d'ajouter un suivi de diagnostic à CreateChildControls() pour voir si le code est en cours d'exécution.

Questions connexes