Communardo Software GmbH, Kleiststraße 10 a, D-01129 Dresden
0800 1 255 255

Sharepoint, ARF - Menü & Open Link in new window

Wohl jeder Sharepoint Entwickler wel­cher sich je mit Barrierefreiheit befasst hat, wird schon ein­mal von dem Alternative Rendering Framework von SPWorks gehört haben. ARF ist ein Open Source Project, wel­ches von Vincent Rothwell ent­wi­ckelt wurde um Sharepoint etwas bar­rie­re­freier zu gestal­ten. Das Framework beinhal­tet mehr als 30 Controls für die Entwicklung bar­rie­re­feier Publishing Seiten. Alle Controls erzeu­gen XML wel­ches mit Hilfe von XSLT letzt­end­lich zu HTML Seiten geren­dert wer­den kann.

Eines die­ser Controls, wel­ches aktu­ell bei uns ver­wen­det wird, ist das ARF Navigations Control. Beim Anlegen einer Überschrift mit Link, kann optio­nal aus­ge­wählt wer­den, ob die Seite in einem neuen oder in dem aktu­el­len Fenster geöff­net wird.  Dabei ist mir auf­ge­fal­len, dass das ARF Menü diese Checkbox schlecht­hin igno­riert.

Properties

Nach kur­zer Forschungsarbeit, haben mein Kollege Vojta und ich den Ursprung des Fehlers gefun­den. In der Menu-Klasse inner­halb des Namespaces "ARF.Web.Controls" befin­det sich die Methode "WriteNavigationNodes", in wel­cher alle XML Attribute, für die spä­tere Ausgabe beschrie­ben wer­den. Das Target Attribut der MenuItems war jedoch stets leer, egal  ob die Checkbox akti­viert war oder nicht.

w.WriteAttributeString("Target", oItem.Target);

Das Problem war schnell gefun­den. Das ARF Menü erbt von der Klasse "System.Web.Ui.Webcontrols.Menu", und nicht von "Microsoft.SharePoint.WebControls.Menu". Aus die­sem Grund wurde die Target Eigenschaft des MenuItems nie beschrie­ben. Da die Sharepoint Menu Klasse auch von "System.Web.Ui.Webcontrols.Menu" erbt, muss­ten die Sharepoint Entwickler dafür sor­gen, dass die ori­gi­na­len Sharepoint MenuItems , dass Target Attribut kon­su­mie­ren kön­nen. Der Zeitpunkt, in dem das Data Binding der Menu Items statt­fin­det, schien uns als per­fekt geeig­net dafür.

Innerhalb des OnMenItemDataBound Events kann über die EventArgs, auf die aktu­elle SiteMapNode zuge­grif­fen wer­den. Dabei han­delt es sich dies­mal jedoch um eine Sharepoint Node. Von die­ser kann jetzt direkt auf das Target Attribut aus­ge­le­sen wer­den (dataItem["Target"]).

protected override void OnMenuItemDataBound(MenuEventArgs e)
        {
            base.OnMenuItemDataBound(e);

            SiteMapNode dataItem = e.Item.DataItem as SiteMapNode;
            if (dataItem != null)
            {
                string str = dataItem["Target"];
                if (!string.IsNullOrEmpty(str))
                {
                    if(e.Item != null)
                    e.Item.Target = str;
                }
            }
        }

Jetzt ist es mög­lich per fol­gen­dem Programmcode, das Target Attribut abzu­ru­fen. Und dies­mal mit Inhalt

w.WriteAttributeString("Target", oItem.Target);

Related Posts

1 Kommentar

Gerade einen Blogbeitrag über #ARF #Menü #Bug in #Sharepoint geschrie­ben. #Communardo #Techblog http://bit.ly/20UBnh
This com­ment was ori­gi­nally pos­ted on Twitter

Comments are closed.

Pin It on Pinterest