Ho un problema in un elenco di SharePoint: alcuni campi compaiono due volte sul modulo Visualizza, sul modulo Nuovo elemento e sulla pagina delle impostazioni dell'elenco. Entrambi i campi hanno lo stesso ID e la stessa pagina di proprietà (stesso URL), quindi nascondere uno nasconde l'altro.
Utilizzo di SharePoint Manager Posso vedere solo un campo, ma forse ho guardato nei posti sbagliati? Qualcuno ha riscontrato qualcosa di simile e come posso risolvere questo problema?Sharepoint - Il campo viene visualizzato due volte su Visualizza/Nuovo elemento
risposta
Non è consigliabile aggiornare il xml che crea il tipo di contenuto. Se vuoi aggiungere campi in un secondo momento al tipo di contenuto, fallo attraverso una nuova funzione, guarda questo link.
Nota il seguente testo di
In nessun caso si aggiornare il file di definizione del tipo di contenuto per un tipo di contenuto dopo aver installato e attivato tale tipo di contenuto. Windows SharePoint Services non tiene traccia delle modifiche apportate al file di definizione del tipo di contenuto. Pertanto, non esiste un metodo per eliminare le modifiche apportate ai tipi di contenuto del sito ai tipi di contenuto figlio. Per informazioni sulle migliori pratiche quando si apportano modifiche ai tipi di contenuto che sono stati installati e attivati, vedere Aggiornamento dei tipi di contenuto.
Yepp, ho avuto questi problemi lavorando con contenttypes aggiunti agli elenchi. Quando ho fatto aggiornamenti sui tipi di contenuto, in qualche modo, a volte ho ottenuto duplicati. Quando li ho guardati sembrano essere gli stessi Ids e Nomi ma l'id è in realtà diverso.
La soluzione che ho utilizzato (funziona almeno con contenttype) è quella di confrontare i collegamenti di campo sul contenttype del sito con i collegamenti di campo nel file xml effettivo (funzionalità) che contiene il tipo di contenuto. Se non sono lo stesso numero di collegamenti di campo ... prendi provvedimenti per rimuovere i duplicati.
Ciao Johan, grazie! Hai assolutamente ragione, btw, questo è un tipo di contenuto aggiunto alla lista da una funzione (non mia, però). Dove posso trovare questi link? È fatto programmaticamente? – Kobi
Voglio dire
Ho lo stesso problema, dopo aver aggiunto la colonna nella definizione dell'elenco, iniziano a comparire due volte in nuovi/modifica/visualizza i moduli oggetto. Ho appena cambiato l'ordine delle colonne nelle impostazioni dell'elenco e il problema è stato risolto.
Soluzione interessante, grazie. In realtà so di diversi problemi in SharePoint che possono essere risolti esattamente da quello ... – Kobi
Usa questo script PowerShell per pulire dublicates:
Clear-Host
Add-PSSnapin microsoft.sharepoint.powershell -ErrorAction SilentlyContinue
[System.Reflection.Assembly]::Load("Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c")
$web=Get-SPWeb "http://weburl.here"
function cleanFieldLinks($listName){
$list = $web.GetList($listName)
$ct = $list.ContentTypes[0];
$flDub = $ct.FieldLinks | group-object DisplayName | where { $_.Count -gt 1 }
foreach($fl in $flDub) {
$skipFirst = $fl.Group | select-object -skip 1
foreach($flDel in $skipFirst){
$ct.FieldLinks.Delete($flDel.Id)
}
}
$ct.Update()
}
cleanFieldLinks("lists/listurl")
$web.Dispose()
1) In primo luogo, ho voluto dire che mi sono imbattuto in questo problema come stavo lavorando per rendere il mio pacchetto soluzione MOSS 2007 compatibile con MOSS 2013. MOSS Il 2013 non sembra gradire i nomi di campi duplicati. Quindi se hai campi personalizzati che hanno lo stesso nome di un campo che viene fornito con MOSS 2013, otterrai un errore nel nome del campo duplicato.
2) Questo mi ha costretto a tornare indietro e aggiornare i miei campi personalizzati e tipi di contenuto. Mi sono imbattuto nel problema in cui i nomi dei miei campi venivano visualizzati più volte dopo aver apportato le modifiche ai campi personalizzati che causavano il problema del nome del campo duplicato.
3) Ho scritto una pagina di moduli Web per risolvere il problema di visualizzare il campo più volte nella visualizzazione, nuovo e modifica moduli. Dovrai solo modificare il codice per specificare la lista che vuoi controllare. Questa versione eliminerà la prima istanza di fieldref e manterrà la seconda istanza:
using System;
using System.Collections;
using System.Configuration;
using System.Data;
//using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
//using System.Xml.Linq;
using Microsoft.SharePoint;
using System.Text;
using System.Collections.Generic;
public partial class FixDuplicateFieldIssue : Microsoft.SharePoint.WebControls.LayoutsPageBase
{
protected void Page_Load(object sender, EventArgs e)
{
if (SPContext.Current.Web.CurrentUser == null)
{
Response.Write("You must be logged in to view this page.");
Response.End();
return;
}
if (!SPContext.Current.Web.DoesUserHavePermissions(SPBasePermissions.ManageWeb))
{
Response.Write("You do not have permissions to view this page.");
Response.End();
return;
}
lblOutput.Text = "";
StringBuilder sbOutput = new StringBuilder();
using (SPSite site = new SPSite(SPContext.Current.Site.ID))
{
using (SPWeb web = site.OpenWeb(SPContext.Current.Web.ID))
{
try
{
hlBack.NavigateUrl = web.Url;
//open the List **** SPECIFY THE LISTNAME HERE ***
SPList spList = web.Lists["LISTNAME"];
if (spList != null)
{
//Check FieldLinks
sbOutput.Append("<table border='1'>");
foreach (SPContentType ct in spList.ContentTypes)
{
sbOutput.Append("<tr>");
sbOutput.Append("<td>" + ct.Name + "</td>");
sbOutput.Append("<td>");
Dictionary<string, Guid> GuidDictionary = new Dictionary<String, Guid>();
List<Guid> RepeatList = new List<Guid>();
//SEARCH THE CONTENT TYPE FOR REPEAT SPFieldLinks
foreach (SPFieldLink spfl in ct.FieldLinks)
{
if (!GuidDictionary.ContainsKey(spfl.Name.ToLower()))
{
GuidDictionary.Add(spfl.Name.ToLower(), spfl.Id);
}
else if (GuidDictionary[spfl.Name.ToLower()].ToString().ToLower()!=spfl.Id.ToString().ToLower())
{
//Record the GUID of the repeat SPFieldLink you want to delete in the RepeatList. In this case, we're recording the first item. If you want to delete the second one, add the spfl.Id instead.
RepeatList.Add(GuidDictionary[spfl.Name.ToLower()]);
sbOutput.Append("<span style='color:red;'>*</span>");
}
sbOutput.Append(spfl.Name + "," + spfl.Id + "," + spfl.DisplayName +"<br />");
}
sbOutput.Append("</td>");
sbOutput.Append("<td>");
sbOutput.Append("Repeats found: " + RepeatList.Count + "<br />");
//DELETE THE Repeat Field Links
foreach (Guid idToDelete in RepeatList)
{
sbOutput.Append("Deleting FieldRef with ID= " + idToDelete.ToString() + "<br />");
web.AllowUnsafeUpdates = true;
ct.FieldLinks.Delete(idToDelete);
ct.Update();
web.AllowUnsafeUpdates = false;
}
sbOutput.Append("</td>");
sbOutput.Append("</tr>");
}
sbOutput.Append("</table>");
}
}
catch (Exception ex)
{
sbOutput.Append("Error Occurred: " + ex.ToString());
}
}
}
lblOutput.Text = sbOutput.ToString();
}
}
questo è solo un uomo pazzo, fu * k Micro $ oft – krtek
Il problema esisteva sulla produzione e avevamo dati reali. Abbiamo creato nuove colonne e abbiamo copiato i dati su di esse e abbiamo eliminato le colonne duplicate. Quindi, in un certo senso, la tua soluzione è ciò che abbiamo fatto - niente. :-) – Kobi