none
Externer Datentyp, Sekundärfelder setzen RRS feed

  • Frage

  • Hi, ich habe folgendes Anliegen,

    ich habe eine Dokumentenbibliothek "List1" mit einer Spalte in dieser Bibliothek mit dem Namen EmployeeID (aus der MS SQL northwind DB, Tabelle Employees), des weiteren benutze ich einen externen Inhaltstyp der zu der zu einer Tabelle gemappt ist, die die EmployeeID und einige andere Spalten aus dieser Tabelle darstellt.

    Dieser externe Inhaltstyp wurde zu einer Bibliothek/Liste als externe Spalte hinzugefügt.

    Ich möchte nun mit Hilfe von Visual Studio 2010, C# den Wert der externen Spalte in der Dokumentenbibliothek setzen, damit er auf einen anderen Datensatz in der gemappten Tabelle Employees aus der northwind DB zeigt . So wie es aussieht funktioniert dies, jedoch werden die anderen ausgewählten Felder aus der gemappten Tabelle wie beispielsweise Employee.lastname, Employees.Firstname,... nicht aktualisiert.

    Wenn nun ein Element dieser Dokumentenbibliothek/Liste angewählt wird, und mit Hilfe des unten beschiebenen Codes die EmployyeID/Employee_ID zwar mit der korrekten ID beschrieben, jedoch werden die weiteren ausgewählten Felder wie Lastname, Firstname nicht aktualisiert.

    Wie können nun die "Sekundärfelder" aktualisiert werden, damit die Liste mit den gemappten Feldern in Sharepoint korrekt und aktualisiert dargestellt wird.

    Code:

    ...

    using (SPSite site = new SPSite("http://myinet"))
    {
        using (SPWeb web = site.OpenWeb())
        {
               web.AllowUnsafeUpdates = true;
               SPList resumesList = web.Lists["List1"];

               foreach (SPListItem item in resumesList.Items)
                {

                      SPBusinessDataField dataField = item.Fields["Adresse"] as SPBusinessDataField;
                      // Setzte nun  "externes" Employee ID field value
                      item["Employee_ID"] = EntityInstanceIdEncoder.EncodeEntityInstanceId(new object[] { "4312" });              //"__bg40005300";
                      item["Title"] = "Employee Information";

                      SetSecondaryFields(item);  //  <---- ??? toDo ???
                      item.UpdateOverwriteVersion();                 

    }}}

    Interessanterweise kann man die aktualisierung von Hand erzwingen, indem via IE die Sharepoint-Liste s.o. List1 angewählt wird, das Element der Liste dessen [Element]_ID geändert wurde angezeigt wird und danach der Button "speichern" angeklickt wird. Sharepoint erkennt dann unmittelbar die geänderte ID und ändert für die Listenansicht die der EmployeeID korrespondierenden Felder (wie beispielsweise Lastname, Firstname usw) entsprechend aktualisert ab.

    Beste Grüße

    M.L

    Mittwoch, 9. Mai 2012 07:13

Alle Antworten

  • Hi M.L.

    Da die Werte programmatisch geändert mit dem obigen Snippet, fehlt das Event was dahinter steckt - welches ausgelöst wird durch klick auf Speichern.

    Für das Update nicht item.UpdateOverwriteVersion();  benutzen sondern item.Update();  mit dem OverwriteVersion wird die aktuelle Version des Elements überschrieben, das Event definitiv nicht gefeuert.

    Ich meine das müsste das ganze nun korrekt ausführen!

    Viele Grüße

    Timo


    Only 10 Choices of SharePoint - you love it or not. Send me Infos about how I can blog for MSDN...

    Mittwoch, 9. Mai 2012 12:07
  • Hallo Timo,

    vielen Dank für die Antwort, aber item.update(); funktioniert leider nicht, und es wird leider auch kein Event abgefeuert, der die "Sekundärfelder" entsprechend einer Upgedateten EmployeeID/Employee_ID (BDC) updatet. Das ID-Feld wird natürlich bei beiden Methoden (item.update/itemOverwriteVersion()) aktualisiert.

    Beste Grüße

    M.L

    Donnerstag, 10. Mai 2012 12:12