Archiv der Kategorie: SharePoint-Entwicklung

Einfache Erklärung: “Wert fällt nicht innerhalb des erwarteten Bereichs.”

UPDATE: Eine anonyme Poster liess eine große Bemerkung über interne Namen. Achten Sie darauf, es zu lesen.

Beim Arbeiten mit Ereignisempfänger und anderen Code, SharePoint-Listenelemente über das Objektmodell verweist, Ich mache oft Fehler, die diesen Fehler zur Laufzeit generieren:

Fehler beim Laden und Ausführen des Ereignisempfängers Conchango.xyzzyEventReceiver in xyzzy, Version = 1.0.0.0, Kultur = Neutral, PublicKeyToken = 0dc50a750396c3ac. Weitere Informationen finden sich unter. : Wert fällt nicht innerhalb des erwarteten Bereichs.

Ich denke, dass dies ein ziemlich allgemeiner Fehler ist, der potenziell viele verschiedene Arten verursacht wird. Jedoch, eine einfache Erklärung ist, dass ich falsch auf ein Feld verweisen bin. Wenn der Name im Feld "Fälligkeitsdatum", Ich muss es wie folgt in einen Ereignisempfänger verweisen:

Eigenschaften.ListItem["Due Date"]

Wenn ich falsch schreiben oder die falsche Schreibweise zu verwenden, wenn Sie auf das Feld verweisen, SharePoint generiert die oben erwähnte Laufzeitfehler. Zum Beispiel, Das ist falsch:

Eigenschaften.ListItem["due Date"]

</Ende>

Onnieren Sie meinen Blog ab.

Technorati Tags:

Schnell & Einfach: Erstellen Sie einen Ordner und ordnen einen Content-Type (Oder, Haben Sie Ihre KPIs und Essen sie auch)

Um ein KPI-Problem zu umgehen Ich schrieb hier, Ich habe einige Tests und entdeckt, dass KPI Arbeit gegen Ordner mit Meta-Daten auf die gleiche Weise, dass sie gegen Dokumente arbeiten oder Listenelemente. Ich bewies es heraus, indem Sie einen neuen Inhaltstyp erstellen basierend auf den Ordner Content-Type und dann ein paar Felder hinzugefügt. Ich habe einige Indikatoren und bewies mir, die KPIs erwartungsgemäß. Das war die erfreuliche Nachricht. Es ist nicht perfekt, Da die Drilldown-Sie von bekommen ist der KPI gegen die Ordner nicht genau was Sie wollen. Das ist zu viel ein Nachteil in meinem Fall nicht, weil 1) die Endbenutzer nicht besser wissen und 2) die Drill-Down geht in einen Ordner. Klicken sie den Namen des Ordners, und sie sind das Element. Es ist zwei Klicks statt einer, Das ist nicht das Ende der Welt.

Diese flossen schön mit der Arbeit, die ich tat. Ich erstelle einen Ordner für jedes Dokument, die hochgeladen wird. Dies geschieht über einen Ereignisempfänger. Als Folge, Es ist ein Stück Kuchen zu halten die des übergeordneten Ordners Meta-Daten synchron mit den KPI-gesteuerte Meta-Daten aus der Datei selbst, da die Installateure bereits vorhanden ist. This allows me to have my KPI’s and eat them too 🙂

Ich änderte die Ereignissenke, um den Ordner hinzuzufügen, und legen Sie dann diesen neuen Ordner Content-Type auf meine benutzerdefinierten Inhaltstyp KPI-freundliche. Dieses Stück Code hat den trick:

 SPFolderCollection SrcFolders = targetWeb.GetFolder("Dokumente").Unterordner;
  SPFolder AddedFolder = srcFolders.Add(Eigenschaften.ListItem.ID.ToString());
  SPContentTypeId KpiCT = Neu SPContentTypeId("0x0120002A666CAA9176DC4AA8CBAA9DC6B4039F");
  addedFolder.Item["Content-Type-ID"] = kpiCT;
  addedFolder.Item.Update();

Die eigentliche Inhaltstyp-ID suchen, Ich dieses Inhaltstyps über Websiteeinstellungen abgerufen und kopieren/einfügen es aus der URL wie gezeigt:

Bild

</Ende>

Onnieren Sie meinen Blog ab!

Technorati Tags: ,

Schnell und einfach: Holen Sie sich die SPFolder ein SPListItem in einen Ereignisempfänger

Ich hasse es zugeben, aber ich kämpfte mit diesem einen Tag. Mein Ereignisempfänger muss ein Feld von seinem übergeordneten Ordner aktualisieren. Das bisschen zeigt wie es:

Privat privatevoid UpdateParentFolder(SPItemEventProperties Eigenschaften)
{

SPFolder ThisItemFolder = Eigenschaften.ListItem.File.ParentFolder;
thisItemFolder.Item["ZZ Genehmigungsstatus"] = "Good news, Alle!";
thisItemFolder.Item.Update();


} // UpdateParentFolder

In diesem Fall, Ich arbeite mit einer Dokumentbibliothek und die Eigenschaften kommen aus einem ItemAdded-Ereignis.

Der Trick ist, dass Sie die SPFolder des Elements direkt aus dem Element selbst nicht (dh. Eigenschaften.ListItem.Folder ist null). Stattdessen, das Listenelement zugeordneten Datei gehen Sie und bekommen Sie die Datei Ordner.

</Ende>

Onnieren Sie meinen Blog ab!

Technorati Tags:

Noch ein weiteres Ereignisempfänger Debuggen Trick

Ich bin sicher, dass ich nicht die erste Person, die mit diesem kommen. Jedoch, Ich habe nicht bemerkt, dass jemand einen Trick, wie dies zu veröffentlichen, da ich begann nahe Aufmerksamkeit auf der Gemeinschaft im Juli. Also, Ich dachte, ich würde es post, diese schnelle und einfache Debug-Tipp.

Ich arbeite gerade an einen Ereignisempfänger, die damit begonnen, diese Fehler in der 12 Bienenkorb:

Fehler beim Laden und Ausführen des Ereignisempfängers Conchango.xyzzyEventReceiver in xyzzy, Version = 1.0.0.0, Kultur = Neutral, PublicKeyToken = Blahbalhbalh. Weitere Informationen finden sich unter. : Objektverweis nicht auf eine Instanz eines Objekts festgelegt.

Ich wusste nicht, wo ich dieser Bug eingeführt hatte, weil ich, zu viele Dinge in einem mein Code/bereitstellen/Test-Zyklen getan hatte.

Ich habe versucht Diese Lösung zu meiner Pdb dort mit der Hoffnung, dass SharePoint erhalten 12 Bienenkorb würde die Stapelüberwachung anzeigen, aber kein Glück. Ich weiß nicht, ob es möglich ist, und wenn jemand tut, Bitte lassen Sie mich wissen 🙂

Ich weiß, dass es möglich ist Schreiben Sie Ihren eigenen Log-Meldungen zu den 12 Bienenkorb. Ehrlich gesagt, Ich wollte etwas ein wenig weniger beängstigend und schneller zu implementieren.

Es fiel mir ein, dass ich zumindest einige grundlegende Ablaufverfolgungsinformationen bekommen konnte, durch Abfangen und Auslösen von generische Ausnahmen wie folgt:

  versuchen {
    UpdateEditionDate(Eigenschaften);
  }
  fangen (Ausnahme e)
  {
    werfen Neu Ausnahme("Dispatcher, UpdateEditionDate(): Ausnahme: [" + e.ToString() + "].");
  }

Dies zeigte sich der 12 auf diese Weise Bienenstock:

Fehler beim Laden und Ausführen des Ereignisempfängers Conchango.xyzzyEventReceiver in xyzzy, Version = 1.0.0.0, Kultur = Neutral, PublicKeyToken = Blahblahblah. Weitere Informationen finden sich unter. : Verteiler, UpdateEditionDate(): Ausnahme: [NullReferenceException-System.: Objektverweis nicht auf eine Instanz eines Objekts festgelegt. bei Conchango.xyzzyManagementEventReceiver.UpdateEditionDate(SPItemEventProperties-Eigenschaften) bei Conchango.xyzzyManagementEventReceiver.Dispatcher(SPItemEventProperties-Eigenschaften, String eventDescription)].

Das gab mir alle Details, die ich brauchte, um dieses besondere Problem aufzuspüren und ich erwarte, dass es geht viel weiter verwenden.

</Ende>

Onnieren Sie meinen Blog ab!

Lösung: SPQuery sucht nicht Ordner

Letzte Woche war ich Umsetzung einer "entwickelt" Lösung für einen Client, der BDC und SPQuery verwendet und lief in einige Schwierigkeiten bei der Verwendung von SPQuery gegen eine Dokumentbibliothek mit Ordnern. Fazit: "rekursive zuweisen" die Ansicht-Attribut der Abfrage.

Mein Szenario:

  • Am Montag, Ich ein Dokument uploaden und geben Sie einige Metadaten.
  • In der folgenden Woche, Ich hochladen ein neues Dokument. Ein Großteil dieses neue Dokument-Metadaten basiert auf das Dokument, das ich am Montag hochgeladen (Wir nennen das "master-Dokument").
  • Wir haben eine Web-Service-Fassade erstellt, die eine BDC-freundliche Schnittstelle zu der Liste bereitstellt, so dass Benutzer problemlos das Montag-Dokument über eine Titelsuche finden können.
  • Eine Datenspalte BDC bietet eine benutzerfreundliche Oberfläche. (Dies ist Teil von meinem Versuch mit BDC für ein freundlicher Nachschlagefeld).

Der letzte BDC Fassade Service verwendet eine Abfrage wie folgt für die Suche:

 // U2U Tool zur Unterstützung bei der Erstellung dieser CAML-Abfrage verwendet.
      oQuery.Query =
        "<Wo>";

      If (titleFilter.Length > 0)
        oQuery.Query  =
          "  <Und>";

      oQuery.Query  =
        "    <Und>" +
        "      <GEQ>" +
        "        <FieldRef Name =  "DocumentId" />" +
        "        <Werttyp =  "Text">" + minId + "</Wert>" +
        "      </GEQ>" +
        "      <Leq>" +
        "        <FieldRef Name =  "DocumentId" />" +
        "        <Werttyp =  "Text">" + maxId + "</Wert>" +
        "      </Leq>" +
        "    </Und>";

      If (titleFilter.Length > 0)
        oQuery.Query  =
          "    <Enthält>" +
          "      <FieldRef Name =  "Title" />" +
          "      <Werttyp =  "Text">" + titleFilter + "</Wert>" +
          "    </Enthält>" +
          "  </Und>";
      oQuery.Query  =
        "</Wo>";

Während der Anfangsphase der Entwicklung, Dieses wirkten groß. Jedoch, wir eingeführt Ordner in das Verzeichnis, einige Probleme zu lösen und plötzlich, Mein BDC-Farbauswahl würde nicht keine Ergebnisse zurück.. Ich verfolgt dies daran, dass der SPQuery nie zu keinem Ergebnis würde. Wir verwendeten Ordner in erster Linie um mehrere Dateien mit demselben Namen hochgeladen werden, aber mit verschiedenen Meta-Daten zu ermöglichen. Beim Hochladen der Datei, Wir erstellen Sie einen Ordner auf das Listenelement-ID basiert, und verschieben Sie dann die Datei dort (Ich schrieb über die Hier; Wir hatten gemischte Ergebnisse mit diesem Ansatz, aber im großen und ganzen, Es funktioniert gut). Der Benutzer zum Erstellen von Ordnern und in der Tat interessieren nicht, verstehen Sie nicht wirklich, dass es keine Ordner. Wir haben alle Ansichten auf der Bibliothek zum Anzeigen der Elemente ohne Rücksicht auf Ordner konfiguriert..

Ich traf dieses doppelt so die technische Umsetzung entwickelt und löste es anders bei jedem problem. Zum ersten Mal, Ich war nicht den CONTAINS-Operator in der Abfrage verwenden.. Ohne ein CONTAINS-operator, Ich konnte das Problem lösen, indem Sie die Ansicht auf das SPQuery-Konstruktor angeben. Statt mit dem Standardkonstruktor:

SPList oList = Web.Listen["Dokumente"];

SPQuery oQuery = Neu SPQuery();

Ich habe stattdessen einen Konstruktor, der eine Ansicht angegeben:

SPList oList = Web.Listen["Dokumente"];

SPQuery oQuery = Neu SPQuery(oList.Views["Alle Dokumente"]);

Dass das Problem gelöst und ich fing an, meine Ergebnisse zu erhalten.

Ich habe dann den CONTAINS-Operator in die Mischung und es brach wieder. Es stellt sich heraus, dass den CONTAINS-operator, soweit ich das beurteilen kann, funktioniert nicht mit dem Blick auf die gleiche Weise wie die eine einfachere GEQ / LEQ-Operatoren. Ich habe einige Suche und erfuhr, dass die Abfrage ViewAttributes zum "Rekursiv" gesetzt werden muss, wie in:

oQuery.ViewAttributes = "Umfang = "Recursive"";

Das löste das Problem für CONTAINS. Tatsächlich, Dies auch meine ursprünglichen Suche Problem gelöst und ich hatte die rekursive angegeben Attribut das erste Mal, Ich möchte nicht in die Frage erneut ausgeführt haben.

Die Tatsache, die dass eine Ansicht basierenden SPQuery für einige Operatoren funktioniert (GEQ/LEQ) und andere nicht (ENTHÄLT), gepaart mit der Tatsache, die KPIs scheinen nicht zu wirken überhaupt mit Ordner-haltigen Dokument Bibliotheken führt mich zu glauben, dass SPQuery einige Probleme Orthogonalität hat.

Besonderer Dank:

  • Die guten Leute auf U2U und ihre Abfragetool.
  • Michael Hoffer groß "Learning by doing" Blog-post, Kommentare und Antworten.

</Ende>

Onnieren Sie meinen Blog ab!

MOSS KPI-Fehler? Liste Anzeige auf Dokumentbibliothek mit Ordnern gebunden

UPDATE 02/29/08: Ich löste dieses Problem durch einen Ordner erstellen und dann einen Inhaltstyp auf den Ordner hat die Meta-Daten brauche ich für die KPIs zuweisen. Ich beschrieben, dass hier ein wenig ausführlicher.

Wir haben eine technische Lösung umgesetzt, wo Benutzer Dokumente in einer Dokumentbibliothek hochzuladen. Ein Ereignisempfänger erstellt ein Verzeichnis und verschiebt die Datei in diesem Verzeichnis (mit Hilfe einer Technik ähnlich, was ich über schrieb Hier). Wir haben erfolgreich navigiert, um die mögliche Probleme verursacht durch Ereignisempfänger, die hochgeladene Dateien umbenennen (vor allem, weil Benutzer nie ihr Dokument durch Klicken auf "neu starten" aber stattdessen erstellen Sie die Dokumentation lokal und dann hochladen).

Die Meta-Daten für diese Dokumente beinhaltet einen ja/keine Websitespalte namens "Urgent" und eine andere Websitespalte namens "Status". Wir brauchen eine Geschäftsanforderung zu erfüllen, die den Prozentsatz der "Urgent zeigt" Dokumente mit dem Status "Pending" ist.

Dies ist in der Regel einfach zu tun und beschriebenen etwas sehr viel auf der SharePoint-Beagle mit vielen der Screenshots, wenn Sie interessiert sind.

In aller Kürze, Ich habe Folgendes:

  • Erstellen Sie eine Ansicht auf die Doc-Bibliothek namens "Pending".
  • Konfigurieren Sie die Ansicht, um die Ordnerstruktur ignorieren.
  • Erstellen einer KPI-Liste.
  • Erstellen Sie einen Indikator in der Liste, die auf die Doc-Lib und dass zeigt "Pending" Ansicht.

Das funktioniert einfach nicht. Der KPI zeigt mein Ziel (zB. fünf dringende Dokumente) aber zeigt immer die tatsächliche Anzahl der urgent-Dokumente als 0 (null). Paradoxerweise, Wenn Sie einen zu den Details Drilldown, Es zeigt die fünf dringende Dokumente in der Liste. Ich habe ein sehr einfaches Szenario mit zwei Dokumente, ein in einen Ordner und eine nicht. Hier ist der Screenshot:

Bild

Der obige Screenshot zeigt deutlich gibt es zwei Dokumente in der Ansicht jedoch den Wert"" ist eine. Die CamlSchema"" leeres Dokument-Id ist im Root-Ordner und das andere ist in einen Ordner namens "84".

Es scheint mir, dass, obwohl Sie eine Ansicht angeben, der KPI nicht zu Ehren der "alle Elemente ohne Ordner anzeigen" einstellen und stattdessen, beschränkt sich auf den Stammordner.

Wenn ich mich irre, Bitte schickt mir eine Mail oder einen Kommentar hinterlassen.

</Ende>

Onnieren Sie meinen Blog ab!

Technorati Tags:

Lösung für Problem: “FileNotFoundException” Mit meinem Featureempfänger.

Ich arbeitete an einem Feature letzte Woche, die einige Ereignisempfänger eine bestimmte Listeninstanz hinzufügen würde. (Ich ein bisschen gebloggt die Liste Empfänger hier).

Mithilfe der Befehlszeile, Ich konnte die Funktion ohne Fehler installieren. (siehe unten für den versteckten Fehler). Als ich versuchte, die Funktion auf der Website bereitstellen, MOSS klagte über eine "FileNotFoundException" Fehler. Dieser Blog-Eintrag beschreibt, wie ich es gelöst.

Das ist der Fehler, den MOSS mir im Web-Browser zeigte:

Funktion "b2cb42e3-4f0a-4380-Aaba-1ef9cd526f20’ konnte nicht installiert werden, da das Laden von Ereignisempfängerassembly "xyzzyFeatureReceiver_0" Fehler: System.IO.FileNotFoundException: Konnte nicht geladen werden Datei oder Assembly ' xyzzyFeatureReceiver_0’ oder eine ihrer Abhängigkeiten. Das System kann die angegebene Datei nicht finden.
Dateiname: ' xyzzyFeatureReceiver_0’
bei System.Reflection.Assembly.nLoad(AssemblyName fileName, Zeichenfolge Codebasis, Beweise assemblySecurity, Montage locationHint, StackCrawlMark& stackMark, Boolesche throwOnFileNotFound, Boolean forIntrospection)
bei System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Beweise assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
bei System.Reflection.Assembly.InternalLoad(String assemblyString, Beweise assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
bei System.Reflection.Assembly.Load(String assemblyString)
bei Microsoft.SharePoint.Administration.SPFeatureDefinition.get_ReceiverObject()
WRN: Assembly Bindung Protokollierung aktiviert ist OFF.
Montage-Bind Fehler Protokollierung, Legen Sie den Registrierungswert [HKLMSoftwareMicrosoftFusion!EnableLog] (DWORD) An 1.
Hinweis: Es gibt einige Leistungseinbußen verbunden mit Montage Bind Fehler Protokollierung.
Um dieses Feature zu deaktivieren, Entfernen Sie den Registrierungswert [HKLMSoftwareMicrosoftFusion!EnableLog].

Behandeln von Problemen mit Windows SharePoint Services.

Ich weiß wie man bewusst, dass Fehler verursachen: nicht die Assembly im GAC zu installieren. Aber, Es war im GAC. Ich installiere normal Assemblys im GAC durch Ziehen in die c:\Windowsassembly Ordner mithilfe von Windows_explorer. Ich habe nie das Gefühl 100% komfortable tun, denn ich immer, dass Sie Gacutil dachte bestand aus einem Grund … Also versuchte ich, die. Es machte keinen Unterschied.

Ich suchte den Internets und fanden diesen Beitrag: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2243677&SiteID=1

Das Plakat geschah das gleiche Wurzel Bit des Codes zu verwenden (aus dem Buch Inside WSS aus dieser Liste) also das war ein Zeichen der Hoffnung. Jedoch, die Anregung der Dekoration der Assembly mit einem [Versammlung: ] Richtlinie machen nicht für mich Sinn.. Ich versuchte es trotzdem und ich hatte Recht. Es machte keinen Unterschied.

Dann bemerkte ich, dass meine Klassendefinition nicht öffentlichen war. Ich es öffentlich gemacht und das machte keinen Unterschied.

Nächste, Ich ging auf die Mühe, das "Versammlung Bind Fehler-Log aktivieren" (Das hilfreiche und genaue Anweisungen zur Verfügung gestellt) und das ist, wo Dinge begonnen, interessant zu werden. Das Protokoll zeigt mir, dass die Common Language Runtime überall auf diesem Server für meine Montage sucht. Es scheint sogar, es in meiner Hausapotheke auf der Suche nach. Aber … Es wird nicht im GAC suchen.

Ich habe auf meine Winterjacke und gehen wieder die Internets suchen und finden, dass jemand dieses Problem auch gehabt hat. Die endlosen Diskussionen in diesem Beitrag peters aus ins nichts und ich kann keine Lösung finden.

Ich bewege meine Montage zu einem der Orte, die das Protokoll behauptet, es ist auf der Suche und ich ein wenig mehr Fortschritte machen. Ich werde belohnt mit einem neuen Fehler im Browser beim Versuch, das Feature aktivieren:

Fehler beim Erstellen der Funktion Empfängerobjekt aus Assembly "xyzzyFeatureReceiver_0", Geben Sie "Conchango.xyzzyFeatureReceiver" für die Funktion b2cb42e3-4f0a-4380-aaba-1ef9cd526f20: System.ArgumentNullException: Wert darf nicht null sein..
Parameternamen: Typ
bei System.Activator.CreateInstance(Typ, Boolean nonPublic)
bei System.Activator.CreateInstance(Typ)
bei Microsoft.SharePoint.Administration.SPFeatureDefinition.get_ReceiverObject()

Behandeln von Problemen mit Windows SharePoint Services.

Zeit für eine letzte Reise zu den Internets!

Diesmal ich herausfinden, vorhersehbar genug, dass MOSS dieser Fehler ausgibt, da die Assembly im GAC nicht ist.

Ich möchte etwas Positives aus dieser erhalten und versuchen, ein wenig stolz, dass ich erstellt habe die Auf der Flucht von MSIL-Assemblys, aber es funktioniert nicht. Ich bin einfach nur genervt. Ich finde mich murmelte "Huhn oder das Ei" unter meinen Atem.

Ich entscheide mich schließlich, punt. Ich ein völlig neues Projekt erstellen und kopieren den Code aus dem incredible-cloaked-from-the-GAC-assembly der arbeitsfreien Projekt über dieses neue Projekt. (Ich Suche ein Build-Flag aufgerufen, so etwas wie "Hide aus Assemblybindung im GAC installiert" aber man kann nicht).

Ich das Feature installieren und aktivieren Sie es und … Es funktioniert! Also, nach all dem, Ich musste im Grunde ' neu starten’ mein Projekt. Dies ist ein weiterer Grund, warum ich Computer hasse.

Ich habe etwas nützliches daraus lernen. Ich hatte die Installation Features mithilfe der Befehlszeile Stsadm ganztägig und benutze den "-zwingen" Möglichkeit aus Gewohnheit. Aus irgendeinem Grund, Ich habe nicht verwenden die - Force-Option aus, wenn ich das neue Projekt angelegt. Dieses Mal, Ich habe, wirklich vergessen Sie, dieses neue Projekt Assembly im GAC kopieren. Als Folge, Ich erhielt die FielNotFoundException"" Fehler. Dieses Mal, Ich habe es von stsadm, nicht, als ich versuchte, das Feature über den Webbrowser aktivieren. Also, -Kraft spielt eigentlich zwei Rollen. Es erlaubt Ihnen, ein vorhandenes KE neu installieren. Darüber hinaus können Sie eine fehlerhafte Funktion zu installieren, die nicht arbeiten durch die Unterdrückung des Fehlers zur Laufzeit. Es sagt wohl so viel in der Hilfe irgendwo aber ich nie bemerkt, dass es.

</Ende>

Schnell & Einfach: Benennen Sie hochgeladene Datei mit SharePoint-Objektmodell über einen Ereignisempfänger

UPDATE: Dies funktioniert aber es gibt erhebliche Einschränkungen, die in den Kommentaren beschrieben werden. Dies kann noch in einigen Umständen nützlich sein.

UPDATE 2: In meinem aktuellen Projekt, Benutzer hochladen immer Dokumente. Als Folge, Ich stoßen nicht auf ein Problem, wo MS Word ausgeführt wird und meint, dass die Datei, darauf umbenannt wurde. Ich auf ein Problem stoßen., "die Datei wurde von einem anderen Benutzer geändert" und dies über einen einfachen Semaphore-Typ-Flag gelöst. Benutzer müssen ein Meta-Datenfeld vom Standardwert auf etwas anderes ändern. Das ItemUpdated-Ereignis() Receiver sucht es einen gültigen Wert vor dem Ausführen der Umbenennung und seitdem, Ich habe keine Probleme gehabt.. Ihre Erfahrungen können variieren.

Ich habe eine Client-Anforderung, die in einer bestimmten Dokumentbibliothek mit einer bestimmten Namenskonvention entspricht hochgeladenen Dateien umbenennen. Die API bietet keine "umbenennen()" Methode. Stattdessen, Wir verwenden "MoveTo(…)". Hier ist ein minimaler Code dazu:

 öffentliche Überschreiben privatevoid ItemAdded(SPItemEventProperties Eigenschaften)
        {
            SPFile f = Properties.ListItem.File;

            f.MoveTo(Eigenschaften.ListItem.ParentList.RootFolder.Url + "/xyzzy.doc");
            f.Update();

        }

Das nur schwierige Bit ist die "Eigenschaften. ListItem.ParentList.RootFolder.Url". Die MoveTo() Methode erfordert eine URL. Das Püree Zeichenfolge Punkte mich ins Stammverzeichnis des aktuellen Dokument Bibliothek. Dies ermöglicht es mir, zu vermeiden, keine harte Codierung in meinem Ereignisempfänger.

Dies ist ein nützlicher Version, die die gleiche Sache tut, aber weist den Namen der Datei auf "Titel":

 öffentliche Überschreiben privatevoid ItemAdded(SPItemEventProperties Eigenschaften)
        {
            DisableEventFiring();

            // Der Name der Datei selbst den Titel dieses Elements zuweisen.
 // HINWEIS: Diese Zuordnung muss stattfinden bevor wir die Datei selbst ändern.
 // Aufruf von update() auf die SPFile scheint ungültig, die Eigenschaften in
 // gewissermaßen.  Aktuelles zu "Titel" konnte bis zu ändern (und update() Aufruf)
 // wurden vor der Änderung in den Dateinamen verschoben.
            Eigenschaften.ListItem["Titel"] = Properties.ListItem.File.Name;

            Eigenschaften.ListItem.Update();

            SPFile f = Properties.ListItem.File;

            // Die Erweiterung der Datei zu erhalten.  Wir brauchen, die später.
 Zeichenfolge SpfileExt = Neu FileInfo(f.Name).Erweiterung;

            // Benennen Sie die Datei in der Listenelement-ID und verwenden die Datei-Endung zu
 // der Teil der es intakt.
            f.MoveTo(Eigenschaften.ListItem.ParentList.RootFolder.Url +
                "/" + Eigenschaften.ListItem["ID"] + spfileExt);

            // Begehen Sie den Umzug.
            f.Update();

            EnableEventFiring();
        }

Quick-Tipp: Webpart für Inhaltsabfragen, Spalte Suchwert und XSL

Ich habe einen Spaltennamen in einem Inhaltstyp namens "Real Estate Lage".

Die Spalte ist vom Typ "Lookup".

Ich habe geändert <CommonViewFields> und ItemStyle.xsl, die Spalte anzeigen.

Eine einfache <XSL:Wählen Sie Wert von =…> Gibt zurück einen internen Wert, der die Ordnungsposition Daten enthält, wie:

1;#Miami

Zum Abrufen des Werts der Menschen-freundlich, Verwenden Sie Xsl Teilzeichenfolge-nach, wie gezeigt:

<XSL:Wählen Sie ValuXSLf = "Substring-after(@ Real_x005F_x0020_Estate_x005F_x0020_Location,’#’)"></XSL:Wert der>

Verwenden Sie dieses Verfahren, wenn Sie mit Nachschlagewerten in XSL-Transformationen arbeiten und den Wert des Menschen-freundlich zu erhalten müssen.

<Ende />

Technorati Tags: , ,

Schnell und einfach: Ermitteln der internen Spaltennamen von einer Websitespalte

UPDATE: Jeremy Thake hat gebloggt dazu und legte einige Code für eine Konsolenanwendung zeigt, dass interne Namen.

Ich war schwierig zu ankommen ein Inhaltsabfrage-Webpart ein Fälligkeitsdatum einer Aufgabe anzuzeigen, und weil die Bildschirm-Bezeichnung "Fälligkeitsdatum" ist, Ich nahm an, dass der Spaltenname in verwenden <CommonViewFields> ist "Due_x0020_Date".

Falsch!

In diesem Fall war die echte Spaltenname "DueDate".

Wie habe ich es gefunden? Ich lese wieder Heather Solomon's Blog-Eintrag zum Ändern von CQWP zusätzliche Spalten mit Daten zeigen. Sie beschreibt diesen Prozess bei Schritt #13. Vertrauen. Es ist richtig. Mindestens, Es war für mich richtig. Ich es zuerst für eine weitere Spalte mit einem viel längeren Namen nicht Vertrauen.

Ich sage "es Vertrauen" weil ich es nicht traute und wahrscheinlich verschwendet nahe zwei Stunden butting meinen Kopf gegen eine Wand. Nachdem ich die "DueDate aufgelöst" Name, Ich wollte ein weiteres Feld hinzufügen <CommonViewFields>. Mithilfe der Solomon-Technik, Ich war immer einen Spaltennamen wie "XYZ_x0020_Project_x0020_Due_x00".

Ich dachte mir, Das ist eindeutig ein gekürzten Namen. Ich ging voran und UN abgeschnittene es ohne Erfolg. Ich habe endlich den scheinbar abgeschnittenen Namen und es funktionierte.

Extra-Tipp: Wenn ich die Arbeit mit den CQWP, Wenn ich einen schlechten internen Namen hinzugefügt <CommonViewFields>, die CQWP würden mir sagen, ob die Abfrage keine Ergebnisse zurückgegeben hatte. Aber, Wenn ich den Feldnamen einen Datentyp hinzugefügt, Es wäre ein Ergebnis zurückzugeben.. Hinzufügen der Daten maskiert Typ tatsächlich ein Problem da ich ein nicht-Existent-Feld verweisen auf war. Ich könnte es hinzufügen, aber als ich versuchte, seinen Wert anzeigen, Ich würde immer eine leere erhalten..

Dies den Fehler nicht maskieren:

<CommonViewFields>Due_x0020_Date;</CommonViewfields>

Dies den Fehler maskieren.:

<CommonViewFields>Due_x0020_Date,DateTime;</CommonViewfields>

</Ende>