SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




SPFieldLookup und XmlSchema Aktualisierung

Unbeantwortet Dieser Beitrag hat 6 Antworten

Ohne Rang
929 Beiträge
Thomas Östreich erstellt 8 Okt. 2010 12:30
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo,

habe das Problem wenn ich im SPFieldLookup das Schema aktualisiere (FeatureActivated) und danach eine List bereistelle welches dieses Feld nutzt, werden nicht die Eigenschaften aus dem List Schema genutzt sondern die die zuvor im XmlSchema geändert wurden.

Folgender Aufbau

  • TestFields Feature
  • TestContentTypes Feature
  • TestList1 Feature -> EventReceiver -> FeatureActivated
    • ListTemplate + ListInstance
  • TestList2 Feature
    • ListTemplate + ListInstance

Field:

  <Field ID="{313aaf89-a8ef-457f-abec-252456847a78}"
         Type="Lookup"
         List="Lists/WTG"
         ShowField="Title"
         DisplaceOnUpgrade="TRUE"
         Name="TTGroup"
         StaticName="TTGroup"
         DisplayName="$Resources:TTX.SM,WorkingTimeGroup;"
         Description="$Resources:TTX.SM,WorkingTimeGroupDesc;"
         Group="$Resources:TTX.SM,Group"
         SourceID="http://schemas.microsoft.com/sharepoint/v3"/>

Schema (Field)

      <Field ID="{313aaf89-a8ef-457f-abec-252456847a78}"
             Type="Lookup"
             List="Lists/WTG"
             ShowField="Title"
             Name="TTGroup"
             StaticName="TTGroup"
             DisplayName="$Resources:TTX.SM,WorkingTimeGroup;"
             Description="$Resources:TTX.SM,WorkingTimeGroupDesc;"
             Mult="FALSE"
             Required="TRUE"
             DisplaceOnUpgrade="TRUE"
             Indexed="TRUE"
             RelationshipDeleteBehavior="Restrict"
             SourceID="http://schemas.microsoft.com/sharepoint/v3"/>

Modification Code:

    SPFieldLookup lookupField = web.Fields.GetFieldByInternalName(fieldName) as SPFieldLookup;
    // Prüfen ob schon eine Guid zur Liste enthalten ist wenn ja dann ende
    if (lookupField == null || lookupField.LookupList.StartsWith("{"))
        return false;

    string msg = string.Format("FixSchema.LookupField: #Field ID: '{0}' List: '{1}' Field Type: '{2}' Field Name: '{3}'#",
                                        lookupField.Id,
                                        lookupField.LookupList,
                                        lookupField.TypeAsString,
                                        lookupField.InternalName);
    // Log to Trace
    Logger.TraceToDeveloper(msg, 0, TraceSeverity.Medium, Constants.UtilitiesCategoryName);

    // Liste ermitteln um die ID zu bekommen
    SPList list = web.GetList(web.ServerRelativeUrl.TrimEnd('/') + "/" + lookupField.LookupList);

    string schema = lookupField.SchemaXmlWithResourceTokens;
    XmlDocument xd = new XmlDocument();
    xd.LoadXml(schema);
    XmlElement xe = xd.DocumentElement;
    xe.Attributes[ListAttribute].Value = list.ID.ToString("B");
    lookupField.SchemaXml = xe.OuterXml;
    // Do not call update here!
    // Quote from MSDN "Do not call the Update method when using the SchemaXml  property to modify a field."

    var lookupField2 = (SPFieldLookup)web.Fields[lookupField.Id];
    lookupField2.LookupWebId = web.ID;
    lookupField2.LookupField = lookupField.LookupField;
    lookupField2.Update(false);

Wenn ich nun in einen Custom Field welches von Lookup abgeleitet ist dies durchführe funktioniert es aber nicht beim Standard Lookup Field. Wenn ich die Aktualisierung weg lasse funktioniert es hat haber den Nachteil das das Field in der SiteCollection (SiteColumn) ungültig ist (Keine ListID).

Ich kann mir nicht erklären warum er die Eigenschaften nicht übernimmt wenn ich vorher das Schema modifziere. Habe auch schon mit den Eigenschaften experimentiert wie DisplaceOnUpgrade, Overwrite, ..

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 8 Okt. 2010 13:16
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ich kann Dir zwar nichts hilfreiches beitragen, aber ich bin schon länger dazu übergegangen Lookup-Felder komplett per FeatureActivated bereitzustellen, also Websitespalten, an Inhaltstypen binden usw.

Mit SharePoint 2010 habe ich es nicht neu getestet, nehme aber an, daß sich eh nichts geändert/gebessert hat.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
929 Beiträge
Thomas Östreich Als Antwort am 8 Okt. 2010 13:48
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Andi Fandrich"]

Mit SharePoint 2010 habe ich es nicht neu getestet, nehme aber an, daß sich eh nichts geändert/gebessert hat.

[/quote]

Gehe mal von Verschlimmbesserung aus ... ;-)

Mal sehen wann der 1 Patch kommt :-)

Kann man eigentlich irgendwo seine Bugs zu SP2010 melden? Auf Connect  habe ich nix gefunden?

PS:

Und wer den FeatureManager im VS2010 Entworfen hat der hat wohl nie mit mehreren Features und Elementen gearbeitet (einfach nur grauenvoll), die Idee ist gut aber die UI dafür geht garnicht einfaches TreeView auf jede seite zum scrollen wäre besser gewesen als das ganze Panel zu scrollen.

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 8 Okt. 2010 15:06
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Thomas Östreich"]Kann man eigentlich irgendwo seine Bugs zu SP2010 melden?[/quote]

Das würde mich auch brennend interessieren. Den einen oder anderen hätte ich da schon...

[quote user="Thomas Östreich"]Und wer den FeatureManager im VS2010 Entworfen hat der hat wohl nie mit mehreren Features und Elementen gearbeitet (einfach nur grauenvoll), die Idee ist gut aber die UI dafür geht garnicht einfaches TreeView auf jede seite zum scrollen wäre besser gewesen als das ganze Panel zu scrollen.[/quote]

Volle Zustimmung. Ich bin inzwischen bei manchen Projekten wieder zum manuellen Editieren der feature.xml übergegangen.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
929 Beiträge
Thomas Östreich Als Antwort am 11 Okt. 2010 08:22
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Andi Fandrich"]Ich bin inzwischen bei manchen Projekten wieder zum manuellen Editieren der feature.xml übergegangen.[/quote]

Nutzt du dann "Generierten XML-Code überschreiben und Manifest im XML-Editor bearbeiten"? Ist es denn dann möglich die ElementManifest Datei dem Package hinzuzufügen? Habe es mal probiert über "Im XML-Editor öffnen" aber dann hat er die ElementManifest-Dateien nicht hinzugefügt!

 

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 11 Okt. 2010 08:57
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Thomas Östreich"]Nutzt du dann "Generierten XML-Code überschreiben und Manifest im XML-Editor bearbeiten"? [/quote]

Ja genau. Leider muß man dann aber alles manuell machen, d.h. es gibt nur entweder - oder. Dafür hat man dann aber die volle Kontrolle...

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
929 Beiträge
Thomas Östreich Als Antwort am 11 Okt. 2010 09:07
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Andi Fandrich"]Leider muß man dann aber alles manuell machen[/quote]

= back to the root ;)