2016-09-22 2 views
1

In SharePoint Online habe ich Probleme beim Festlegen einer Website verwaltete Metadaten Spalte Standardwert mit CSOM (C#). Der Kürze halber habe ich die Ausnahmebehandlung nicht in meinen Code aufgenommen. Hier ist, was ich habe:SharePoint Online-CSOM-Website Spalte Standardwert

// Code snippet for what I'm trying to achieve 
using (ClientContext ctx = NewCtx(SiteInfo.Url)) // NewCtx is just a static member I use to return a ClientContext object 
{ 
    Field taxColumn = (Field)ctx.Web.Fields.GetByTitle("myMMColumnName"); 
    ctx.Load(taxColumn); 
    ctx.ExecuteQuery(); 
    TaxonomyFieldValue termField = new TaxonomyFieldValue(); 
    termField.Label = "My MM Term"; 
    termField.TermGuid = "b269aef7-6f47-4b02-bf80-7edfb7166a30"; 
    termField.WssId = -1; 
    taxColumn.DefaultValue = value; 
    // Place holder for added code (see below) 
    taxColumn.Update(); 
    ctx.Load(taxColumn); 
    ctx.ExecuteQuery(); 
} 

Der Wert erscheint in der Benutzeroberfläche unter Websitespalten, aber kein zugehöriges Element in dem TaxonomyHiddenList erstellt, was Sinn macht, da die Nachschlag-WssId auf „-1“ nicht lösen und Daher hat der Standardwert keine Nachschlagefunktion und erscheint in der Spalte auf Listen- und Bibliotheksebene leer.

Die nächste gefundene Auflösung war ein Artikel (wenn auch nicht CSOM und unten verlinkt) schlug vor, ein "dummy" Listenelement (gegen eine Liste, die die MM-Spalte verbraucht) zu erstellen. Dies würde die Erstellung des Elements in der TaxonomyHiddenList auslösen, aber der Artikel schlägt vor, die Erstellung des Dummy-Elements nicht zu übernehmen. Ich habe das auch versucht, scheint aber keine Wirkung zu haben. Dies ist der Code, den ich an die Platzhalter in dem vorherigen Codeblock erwähnt hinzugefügt:

List myList = ctx.Web.Lists.GetByTitle("My List"); 
ctx.Load(myList); 
ctx.ExecuteQuery(); 
TaxonomyField taxField = ctx.CastTo<TaxonomyField>(myList.Fields.GetByTitle("myMMColumnName")); 
ListItemCreationInformation newItemInfo = new ListItemCreationInformation(); 
ListItem newItem = myList.AddItem(newItemInfo); 
newItem["myMMColumnName"] = termField; 
taxField.SetFieldValueByValue(newItem, termField); 

Der Artikel verwendet die .SetFieldValue Methode, die in CSOM nicht verfügbar ist, so kann ich auch nicht richtig angenommen habe, dass .SetFieldValueByValue ist vergleichbar.

Danke fürs Lesen!

Referenzen: Artikel - http://sharepointificate.blogspot.com/2014/04/setting-managed-metadata-column-default.html

Antwort

1

SetFieldValue Method zu TaxonomyField Klasse gehört, bedeutet es die Zeile:

Field taxColumn = (Field)ctx.Web.Fields.GetByTitle(taxFieldTitle); 

Bedürfnisse ersetzt werden:

var taxColumn = ctx.CastTo<TaxonomyField>(ctx.Web.Fields.GetByTitle(taxFieldTitle)); 

oder

TaxonomyField taxColumn = ctx.CastTo<TaxonomyField>(ctx.Web.Fields.GetByTitle(taxFieldTitle)); 

Sobald TaxonomyField initialisiert wird, kann der Standardwert wie unten gezeigt eingestellt werden:

//get taxonomy field 
var taxColumn = ctx.CastTo<TaxonomyField>(ctx.Web.Fields.GetByTitle(taxFieldTitle)); 
ctx.Load(taxColumn); 
ctx.ExecuteQuery(); 
//initialize taxonomy field value 
var defaultValue = new TaxonomyFieldValue(); 
defaultValue.WssId = -1; 
defaultValue.Label = termLabel; 
defaultValue.TermGuid = termId.ToString(); 
//retrieve validated taxonomy field value 
var validatedValue = taxColumn.GetValidatedString(defaultValue); 
ctx.ExecuteQuery(); 
//set default value for a taxonomy field 
taxColumn.DefaultValue = validatedValue.Value; 
taxColumn.Update(); 
ctx.ExecuteQuery(); 

Anmerkung: TaxonomyField.GetValidatedString method für Validierung der Taxonomie Feldwert verwendet, was wiederum die Lösung von WssId Wert enthält

aktualisieren

Verwenden Field.UpdateAndPushChanges method changesto alle Listen propagieren, die das Feld

So verwenden, ersetzen:

taxColumn.Update(); 
ctx.ExecuteQuery(); 

mit:

taxColumn.UpdateAndPushChanges(true); 
ctx.ExecuteQuery(); 
+1

Hallo Vadim. Das ist eine großartige Antwort und ich danke Ihnen, dass Sie mir erklärt haben, was ich vermisst habe. Ich kann jetzt das zugeordnete Element in der TaxonomyHiddenList sehen und die Site-Spalten sehen gut aus. Wenn ich jedoch ein neues Element in einer Liste erstelle, die die Site-Spalte erbt, ist der Standardwert immer noch leer. Muss ich dies auch gegen die Listen/Bibliotheken implementieren? – feganmeister

+0

Sie müssen wahrscheinlich die Methode 'Update' durch' UpdateAndPushChanges' ersetzen. Für weitere Details folgen Sie der aktualisierten Antwort (Update-Abschnitt) –

+1

Fantastisch, alles funktioniert wie erhofft! Danke Vadim = D – feganmeister

Verwandte Themen