SharePoint 2010 i campi publishing RichLinkField non risultano più editabili
Con SharePoint Server 2010 può capitare che in una pagina di tipo publishing, con dei campi RichLinkField, questi scompaiano e non siano più editabili.
In pratica capita che salvando la pagina o cancellando il link dalla ribbon, si perdono i valori di questi campi. Andando poi a vedere bene, in realtà si perde solo il testo assegnato al link, mentre la url è presente e correttamente savata su DB.
Analizzando la pagina html generata in questa situazione si vede che il link è effettivamente presente (/IT/PressMedia/) e il testo associato è blank. Questo rende impossibile cliccare sul tag a (anchor) per andare in edit.
Questo bug è documentato a questo link Link Tools (Ribbon) Remove Link does not delete link.
Si trovano alcuni workaround in internet che consistono in uno script PowerShell per reimpostare il testo del link in modo da renderlo nuovamente editabile.
Ho creato un altro workaround per evidenziare nella pagina i link blank e renderli di nuovo editabili. In pratica, con uno script JQuery inserito nel page layout dove ci sono i campi RichLinkField, cerco tutti i tag a (anchor) blank e imposto la loro dimensione a 40px ed il bordo in rosso in modo da renderli evidenti e poterci cliccare per attivare la ribbon.
Per funzionare lo script richiede la libreria JQuery (ho usato jquery-1.6.1.min.js), consiglio di inserirla nella master page.
Successivamente si può inserire il seguente script nel page layout:
lo script è racchiuso nel tag PublishingWebControls:EditModePanel per fare in modo che venga inserito solo in edit della pagina.
In pratica capita che salvando la pagina o cancellando il link dalla ribbon, si perdono i valori di questi campi. Andando poi a vedere bene, in realtà si perde solo il testo assegnato al link, mentre la url è presente e correttamente savata su DB.
Analizzando la pagina html generata in questa situazione si vede che il link è effettivamente presente (/IT/PressMedia/) e il testo associato è blank. Questo rende impossibile cliccare sul tag a (anchor) per andare in edit.
HTML
<a class=" ms-rtestate-write" contenteditable="true" useinlinestyle="True"
emptypanelid="ctl00_PlaceHolderMain_ctl00_ctl12_ctl00_RichLinkField_EmptyPanel"
allowparagraphformatting="False" allowthemefonts="False" allowhtmlsourceediting="False"
allowimagestyles="False" allowfontcolorsmenu="False" allowlists="False" allowtables="False"
allowimageformatting="False" allowheadings="False"
displaypanelid="ctl00_PlaceHolderMain_ctl00_ctl12_ctl00_RichLinkField_AssetSelectedPanel"
allowimages="False" allowfontsmenu="False" disablebasicformattingbuttons="True"
allowreusablecontent="False" allowfontsizesmenu="False" href="/IT/PressMedia/"
llowhyperlinks="True" allowtextmarkup="False" allowtablestyles="False" allowinsert="False"
allowfonts="False" allowstandardfonts="False" allowimagepositioning="False" rel="sp_DialogLinkIgnore"
disablecustomstyles="True" allowstyles="False"></a>
Questo bug è documentato a questo link Link Tools (Ribbon) Remove Link does not delete link.
Si trovano alcuni workaround in internet che consistono in uno script PowerShell per reimpostare il testo del link in modo da renderlo nuovamente editabile.
Ho creato un altro workaround per evidenziare nella pagina i link blank e renderli di nuovo editabili. In pratica, con uno script JQuery inserito nel page layout dove ci sono i campi RichLinkField, cerco tutti i tag a (anchor) blank e imposto la loro dimensione a 40px ed il bordo in rosso in modo da renderli evidenti e poterci cliccare per attivare la ribbon.
Per funzionare lo script richiede la libreria JQuery (ho usato jquery-1.6.1.min.js), consiglio di inserirla nella master page.
Successivamente si può inserire il seguente script nel page layout:
JavaScript
<PublishingWebControls:EditModePanel runat="server" CssClass="edit-mode-panel">
<script type="text/javascript">
$(document).ready(function(){
$anchors = $('a[emptypanelid*="_RichLinkField_"]');
$anchors.each(function(){
if( $(this).html() == '' )
{
$(this).html(' ');
$(this).css("width","40px");
$(this).css("border","1px dotted red");
}
});
/* a volte anzichè essere balnk c'è un tag span vuoto */
$spans = $('a[emptypanelid*="_RichLinkField_"] span');
$spans.each(function(){
if( $(this).html() == '' )
{
$(this).html(' ');
$(this).css("width","40px");
$(this).css("border","1px dotted red");
}
});
});
</script>
</PublishingWebControls:EditModePanel>
Se ci sono più link della pagina può essere necessario eliminare tutti i link presenti e reinserirli prima di salvare la pagina