2009-06-10 23 views
5

SharePointリストに問題があります。表示フォーム、新規アイテムフォーム、およびリスト設定ページに2回表示されるフィールドもあります。どちらのフィールドも同じIDと同じプロパティページ(同じURL)を持っているため、一方を隠すと他方が隠れます。
使用するSharePoint Managerフィールドは1つしか表示されませんが、間違った場所を見たことがありますか? 誰かが似たような経験をしたことがありますか?この問題を解決するにはどうすればよいですか?Sharepoint - 表示/新規アイテムにフィールドが2回表示される

答えて

4

コンテンツタイプを作成するXMLを更新することは賢明ではありません。後でコンテンツタイプにフィールドを追加する場合は、新しい機能を使用してください(このリンクを参照)。あなたがインストールされて、そのコンテンツタイプをアクティブ化した後

MSDN Article

注いかなる状況下では、次のテキスト

あなたはコンテンツタイプのコンテンツタイプ定義ファイルを更新する必要があります。 Windows SharePoint Servicesは、コンテンツタイプ定義ファイルの変更を追跡しません。したがって、サイトコンテンツタイプの変更を子コンテンツタイプにプッシュダウンする方法はありません。 インストールおよびアクティブ化されているコンテンツタイプを変更する際のベストプラクティスについては、「コンテンツタイプの更新」を参照してください。

+0

問題は生産上に存在し、実際のデータがありました。新しい列を作成し、その列にデータをコピーし、複製された列を削除しました。ですから、あなたの解決策は私たちがやったことです。 :-) – Kobi

5

Yepp、リストに追加されたコンテンツタイプで問題が発生しました。私がcontenttypesの更新を何とかしたら、私は時には重複してしまった。私がそれらを見たとき、彼らは同じIDと名前のようですが、IDは実際に異なっています。

コンテンツタイプのフィールドリンクを、コンテンツタイプを含む実際のxmlファイル(フィーチャー)のフィールドリンクと比較することが、私が使用したソリューションです(少なくともコンテンツタイプで動作します)。同じ数のフィールドリンクでない場合は、重複を削除するアクションを実行します。

+0

こんにちはヨハン、ありがとう!あなたは絶対に正しいです、btw、これは、フィーチャーによってリストに追加されたコンテンツタイプです(しかし、私のものではありません)。これらのフィールドリンクはどこにありますか?それは計画的に行われていますか? – Kobi

+0

あなたがそれらを知っていれば私はを意味します。 contenttypeで使用されるフィールドへのリンク。実際の機能にアクセスできないので、この場合はColinのソリューションをお勧めします。私の解決策は実際にはサポートされていませんが、とにかく... SharePointでは、とにかく障害を回避する必要があります...-) –

7

私はリスト定義で列を追加した後、新しい/編集/表示項目フォームに2回表示されます。リストの設定で列の順序を変更しただけで問題は解決しました。

+2

面白い回避策、ありがとう。私は実際にSharePointのいくつかの問題を正確に解決することができることを知っている... – Kobi

2

使用dublicatesをきれいにするために、この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() 
2

1)まず、私は私がMOSS 2013 MOSSとの互換性が私のMOSS 2007ソリューションパッケージを作るに向けて取り組んでいたとして、私はこの問題に出くわしたことを言及したかったです2013年は重複するフィールド名が好きではないようです。したがって、MOSS 2013に付属するフィールドと同じ名前のカスタムフィールドがある場合は、重複するフィールド名にエラーが見つかりました。

2)これにより、私はカスタムフィールドとコンテンツタイプを更新して更新する必要がありました。私は、フィールド名の重複を引き起こしていたカスタムフィールドを変更した後に、フィールド名が複数回現れているという問題を発見しました。

3)ビュー、新規、編集フォームにフィールドが複数回表示される問題を解決するために、Webフォームページを作成しました。確認したいリストを指定するためにコードを変更するだけです。このバージョンでは、フィールドリファレンスの最初のインスタンスが削除され、2番目のインスタンスが保持されます。

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

    } 
} 
+0

これはちょうどクレイジーな男、fu * k Micro $ oft – krtek

関連する問題