Sharepoint - поле появляется дважды на View / New Item - PullRequest
5 голосов
/ 10 июня 2009

У меня проблема в списке SharePoint - некоторые поля появляются дважды в форме отображения, форме нового элемента и на странице настроек списка. Оба поля имеют одинаковый идентификатор и одну и ту же страницу свойств (один и тот же URL), поэтому скрытие одного скрывает другое.
Используя SharePoint Manager Я вижу только одно поле, но, может быть, я посмотрел не в том месте? Кто-нибудь испытывал нечто подобное, и как я могу решить эту проблему?

Ответы [ 5 ]

7 голосов
/ 22 августа 2011

У меня возникла та же проблема, после добавления столбца в определение списка, они начинают появляться дважды в новых / редактировать / просматривать элементы формы. Я просто изменил порядок столбцов в настройках списка, и проблема была решена.

5 голосов
/ 10 июня 2009

Да, у меня были проблемы с работой с типами контента, добавленными в списки. Когда я как-то обновлял типы контента, я иногда получал дубликаты. Когда я смотрю на них, они кажутся одинаковыми идентификаторами и именами, но на самом деле идентификаторы разные.

Решение, которое я использовал (по крайней мере, работает с типами контента), заключается в сравнении ссылок на поля на типах контента сайта с полевыми ссылками в реальном XML-файле (функция), который содержит тип контента. Если они не совпадают по количеству полевых ссылок ... выполните действия по удалению дубликатов.

4 голосов
/ 10 июня 2009

Нет смысла обновлять xml, который создает тип контента. Если вы хотите позже добавить поля к типу контента, сделайте это с помощью новой функции, см. Эту ссылку.

MSDN Артикул

Обратите внимание на следующий текст

Ни при каких обстоятельствах не обновляйте файл определения типа контента для типа контента после того, как вы установили и активировали этот тип контента. Службы Windows SharePoint Services не отслеживают изменения, внесенные в файл определения типа контента. Следовательно, у вас нет способа отменить изменения, внесенные в типы контента сайта, в дочерние типы контента. Информацию о рекомендациях по внесению изменений в типы контента, которые были установлены и активированы, см. В разделе Обновление типов контента.

2 голосов
/ 07 мая 2015

1) Во-первых, я хотел бы упомянуть, что столкнулся с этой проблемой, работая над созданием пакета решений MOSS 2007, совместимого с MOSS 2013. Похоже, что MOSS 2013 не любит повторяющиеся имена полей. Таким образом, если у вас есть настраиваемые поля, имена которых совпадают с полями, входящими в MOSS 2013, вы получите сообщение об обнаружении дублированного имени поля.

2) Это заставило меня вернуться и обновить свои настраиваемые поля и типы контента. Я столкнулся с проблемой, когда имена моих полей появлялись несколько раз после внесения изменений в настраиваемые поля, которые вызывали проблему с повторяющимися именами полей.

3) Я написал страницу веб-форм, чтобы решить проблему с многократным отображением поля в вашем представлении, новых и редактируемых формах. Вам просто нужно изменить код, чтобы указать список, который вы хотите проверить. Эта версия удалит первый экземпляр fieldref и сохранит второй экземпляр:

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

    }
}
2 голосов
/ 26 ноября 2013

Используйте этот скрипт powershell для очистки дубликатов:

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...