Dokumendiliikide ja metadata väljade update
Nõnda, täiendasin seda esialgset koodi paari reaga.
Nimelt kui ülalkirjeldatud originaalkoodi kasutada siis listi juures jääb metada väljadel Display Name uuendamata, seega lisasin funktsiooni UpdateListFields juurde omapoolse täienduse mis on näha allpool kommentaariga //Set display name inside list. Kopeerisin terviklikuse huvides kogu selle updatemise funktsiooni.
Jõudu kasutamisel.
Et antud kood töötaks, peavad olema Content Type’d ja Metadata väljad olema kirjeldatud siintoodud alustel.
Kuidas põhmõtteliselt metadata väljade manageerimine ja uuendamine toimub, on kirjeldasin siin.
private void UpdateListFields(SPList list, SPContentType listCT,
SPContentType sourceCT) {
Log("Starting to update fields ", false);
foreach (SPFieldLink sourceFieldLink in sourceCT.FieldLinks) {
//has the field changed? If not, continue.
if (listCT.FieldLinks[sourceFieldLink.Id]!= null
&& listCT.FieldLinks[sourceFieldLink.Id].SchemaXml
== sourceFieldLink.SchemaXml) {
Log("Doing nothing to field \"" + sourceFieldLink.Name
+ "\" from contenttype on :" + list.ParentWebUrl + "/"
+ list.Title, false);
continue;
}
if (!FieldExist(sourceCT, sourceFieldLink)) {
Log(
"Doing nothing to field: " + sourceFieldLink.DisplayName
+ " on list " + list.ParentWebUrl
+ "/" + list.Title + " field does not exist (in .Fields[])"
+ " on source content type", false);
continue;
}
if (listCT.FieldLinks[sourceFieldLink.Id] != null) {
Log("Deleting field \"" + sourceFieldLink.Name
+ "\" from contenttype on :" + list.ParentWebUrl + "/"
+ list.Title, false);
listCT.FieldLinks.Delete(sourceFieldLink.Id);
listCT.Update();
}
Log("Adding field \"" + sourceFieldLink.Name
+ "\" from contenttype on :" + list.ParentWebUrl
+ "/" + list.Title, false);
listCT.FieldLinks.Add(new SPFieldLink(
sourceCT.Fields[sourceFieldLink.Id]));
//Set displayname, not set by previus operation
listCT.FieldLinks[sourceFieldLink.Id].DisplayName
= sourceCT.FieldLinks[sourceFieldLink.Id].DisplayName;
listCT.Update();
Log("Done updating fields ");
}
foreach (SPFieldLink sourceFieldLink in sourceCT.FieldLinks)
{
//Set displayname inside list
SPField field = list.Fields[sourceFieldLink.Id];
field.Title = sourceCT.FieldLinks[sourceFieldLink.Id].DisplayName;
field.Update();
Log("Done updating field Display Name");
}
}
Ja muide nii ilusat värvilist koodi saab Visual Studiost siia (ehk Windows Live Writerisse) eriti mugavalt selle väikese utiliidi abil.