SPFieldLink - Classe
Représente une référence de colonne (également appelé champ) qui est incluse dans un type de contenu.
Hiérarchie d’héritage
System.Object
Microsoft.SharePoint.SPFieldLink
Espace de noms : Microsoft.SharePoint
Assembly : Microsoft.SharePoint (dans Microsoft.SharePoint.dll)
Syntaxe
'Déclaration
Public Class SPFieldLink
'Utilisation
Dim instance As SPFieldLink
public class SPFieldLink
Remarques
Si vous souhaitez effectuer le suivi de certaines métadonnées d'élément dans un type de contenu, vous pouvez référencer une colonne qui représente les métadonnées. Toutefois, vous ne pouvez pas créer une colonne dans un type de contenu ; Vous devez créer la colonne séparément et ensuite le référencer dans la définition du type de contenu. Par conséquent, lorsque vous ajoutez une colonne à un type de contenu, le type de contenu contient une référence à la colonne (ou champ), au lieu de la colonne (ou champ) lui-même.
Le Guide de référence contient un sous-ensemble des propriétés de la définition de champ complète. Voici les propriétés que vous pouvez personnaliser pour la colonne telle qu'elle existe dans le type de contenu.
Pour plus d’informations, voir Fields and Field References.
L'objet SPContentType contient un SPFieldLinkCollection et un objet SPFieldCollection .
L'objet SPFieldCollection vous offre une vue combinée des attributs d'une colonne, telles qu'elles existent dans le type de contenu spécifié. Chaque objet SPField représente tous les attributs d'une définition de champ ou de colonne, combinée à celles des attributs qui ont été substituées dans la référence de champ pour ce type de contenu.
Lorsque vous accédez à un objet SPField dans un type de contenu, SharePoint Foundation combine la définition de champ avec la référence de champ et renvoie l'objet SPField qui en résulte. Ceci est utile car vous n'avez pas à rechercher une définition de champ et de tous les attributs dans la définition de champ qui sont remplacées par la référence de champ pour ce type de contenu.
Il existe une corrélation de 1 à 1 entre les éléments dans les objets SPFieldLinkCollection et SPFieldCollection . Pour chaque objet SPFieldLink que vous ajoutez à un type de contenu, SharePoint Foundation ajoute un objet SPField correspondant qui représente la vue combinée de cette colonne telle que définie dans le type de contenu.
Notes
SharePoint Foundation ne gère pas l'héritage de la classe SPFieldLink .
Exemples
L'exemple suivant montre une application console qui crée un type de contenu, elle s'applique à une liste et ajoute des références à des champs au niveau du site et de la liste.
Imports System
Imports Microsoft.SharePoint
Module ConsoleApp
Sub Main()
Dim site As SPSite = New SPSite("https://localhost")
Try
Dim web As SPWeb = site.OpenWeb()
Try
Dim contentTypeName As String = "Spec"
Dim listTitle As String = "Product Specs"
Dim docType As SPContentType = web.AvailableContentTypes("Document")
' Create a content type.
Dim siteContentType As New SPContentType(docType, _
web.ContentTypes, contentTypeName)
' Add the content type to the site collection.
siteContentType = web.ContentTypes.Add(siteContentType)
' Change the name of the Title field in the content type.
siteContentType.FieldLinks("Title").DisplayName = "Product"
' Add a field to the site field collection.
Dim siteField As SPField = AddField("Owner", SPFieldType.Text, web.Fields)
' Reference the field in the content type.
AddFieldLink(siteField, siteContentType)
siteContentType.Update()
' Create and configure a document library.
Dim listId As Guid = web.Lists.Add(listTitle, _
"A library of product specifications", _
SPListTemplateType.DocumentLibrary)
Dim library As SPDocumentLibrary = CType(web.Lists(listId), SPDocumentLibrary)
library.OnQuickLaunch = True
library.ContentTypesEnabled = True
library.EnableFolderCreation = False 'Hide "Folder" on the New menu
library.Update()
' Add the site content type to the library.
Dim listContentType As SPContentType = library.ContentTypes.Add(siteContentType)
' Add a field to the list field collection.
Dim listField As SPField = AddField("SKU", SPFieldType.Text, library.Fields)
' Reference the field in the list version of the new content type.
AddFieldLink(listField, listContentType)
listContentType.Update()
' Remove the document content type.
Dim id As SPContentTypeId = library.ContentTypes(docType.Name).Id
library.ContentTypes.Delete(id)
library.Update()
' Review our work.
Console.WriteLine("Site content type")
PrintFieldNames(siteContentType)
Console.WriteLine("List content type")
PrintFieldNames(listContentType)
Finally
web.Dispose()
End Try
Finally
site.Dispose()
End Try
Console.Write("Press ENTER to continue...")
Console.ReadLine()
End Sub
Function AddField(ByVal title As String, ByVal type As SPFieldType, _
ByRef fields As SPFieldCollection) As SPField
' If the field is not in the collection,
If Not (fields.ContainsField(title)) Then
' Add it.
fields.Add(title, type, False)
End If
Return fields.GetField(title)
End Function
Sub AddFieldLink(ByRef field As SPField, ByRef contentType As SPContentType)
' Is the FieldLink in the collection?
Dim fieldLink As SPFieldLink = contentType.FieldLinks(field.Id)
If fieldLink Is Nothing Then ' No, so add it.
fieldLink = New SPFieldLink(field)
contentType.FieldLinks.Add(fieldLink)
End If
End Sub
Sub PrintFieldNames(ByVal contentType As SPContentType)
For Each link As SPFieldLink In contentType.FieldLinks
Dim field As SPField = contentType.Fields(link.Id)
' Screen out system fields.
If field.Reorderable AndAlso field.InternalName <> "FileLeafRef" Then
Console.WriteLine("FieldLink.DisplayName = {0}", link.DisplayName)
End If
Next link
Console.WriteLine()
End Sub
End Module
using System;
using Microsoft.SharePoint;
namespace Test
{
class ConsoleApp
{
static void Main(string[] args)
{
using (SPSite site = new SPSite("https://localhost"))
{
using (SPWeb web = site.OpenWeb())
{
string contentTypeName = "Spec";
string listTitle = "Product Specs";
SPContentType docType = web.AvailableContentTypes["Document"];
// Create a content type.
SPContentType siteContentType = new SPContentType(docType,
web.ContentTypes,
contentTypeName);
// Add the content type to the site collection.
siteContentType = web.ContentTypes.Add(siteContentType);
// Change the name of the Title field in the content type.
siteContentType.FieldLinks["Title"].DisplayName = "Product";
// Add a field to the site field collection.
SPField siteField = AddField("Owner", SPFieldType.Text, web.Fields);
// Reference the field in the content type.
AddFieldLink(siteField, siteContentType);
siteContentType.Update();
// Create and configure a document library.
Guid listId = web.Lists.Add(listTitle,
"A library of product specifications",
SPListTemplateType.DocumentLibrary);
SPDocumentLibrary library = (SPDocumentLibrary)web.Lists[listId];
library.OnQuickLaunch = true;
library.ContentTypesEnabled = true;
library.EnableFolderCreation = false; // Hide "Folder" on the New menu
library.Update();
// Add the site content type to the library.
SPContentType listContentType = library.ContentTypes.Add(siteContentType);
library.Update();
// Add a field to the list field collection.
SPField listField = AddField("SKU", SPFieldType.Text, library.Fields);
// Reference the field in the list version of the content type.
AddFieldLink(listField, listContentType);
listContentType.Update();
// Remove the document content type from the library.
SPContentTypeId id = library.ContentTypes[docType.Name].Id;
library.ContentTypes.Delete(id);
library.Update();
// Review our work.
Console.WriteLine("Site content type");
PrintFieldNames(siteContentType);
Console.WriteLine("List content type");
PrintFieldNames(listContentType);
}
}
Console.Write("Press ENTER to continue...");
Console.ReadLine();
}
static SPField AddField(string title, SPFieldType type, SPFieldCollection fields)
{
// If the field is not in the collection,
if (!fields.ContainsField(title))
{
// Add it.
fields.Add(title, type, false);
}
return fields.GetField(title);
}
static void AddFieldLink(SPField field, SPContentType contentType)
{
// Is the FieldLink in the collection?
SPFieldLink fieldLink = contentType.FieldLinks[field.Id];
if (fieldLink == null) // No, so add it.
{
fieldLink = new SPFieldLink(field);
contentType.FieldLinks.Add(fieldLink);
}
}
static void PrintFieldNames(SPContentType contentType)
{
foreach (SPFieldLink link in contentType.FieldLinks)
{
SPField field = contentType.Fields[link.Id];
// Screen out system fields.
if (field.Reorderable && field.InternalName != "FileLeafRef")
Console.WriteLine("FieldLink.DisplayName = {0}", link.DisplayName);
}
Console.WriteLine();
}
}
}
L'application imprime la sortie suivante sur la console.
Site content type
FieldLink.DisplayName = Product
FieldLink.DisplayName = Owner
List content type
FieldLink.DisplayName = Product
FieldLink.DisplayName = Owner
FieldLink.DisplayName = SKU
Press ENTER to continue...
Cohérence de thread
Tous les membres statique (Partagé dans Visual Basic)s publics de ce type sont thread-safe. Cela n’est pas garanti pour les membres d’instance.
Voir aussi
Référence
Microsoft.SharePoint - Espace de noms