Richtige Art und Weise zu erkennen, wenn ein ClientObject-Eigenschaft bereits abgerufen/initialisiert
Wenn Sie das Client Objekt Model von SharePoint und access-Eigenschaften, die noch nicht initialisiert oder bereits abgerufen, indem ein
Context.Load(property);
Context.ExecuteQuery();
erhalten Sie zum Beispiel ein:
Microsoft.SharePoint.Client.PropertyOrFieldNotInitializedException
oder
Die Sammlung wurde nicht initialisiert. Es wurde nicht Anfragen oder
die Anforderung wurde nicht ausgeführt.
Ausnahme.
Gibt es eine richtige Art und Weise zu überprüfen, bevor Sie Zugriff auf diese Eigenschaften, wenn Sie bereits initialisiert/abgerufen? Ohne Try/Catch-Konzept. Ich weiß nicht, wie das einem.
Ich möchten zu überprüfen, bevor eine Exception geworfen worden ist, und behandeln es.
Ich bereits überprüft die
Methoden, aber Sie helfen nicht wirklich. IsPropertyAvaiable
prüft nur die skalaren Eigenschaften und wird nicht geben, ein Ergebnis auf zum Beispiel Web.Lists
und IsObjectPropertyInstantiated
gibt true zurück, für Web.Lists
obwohl Web.Lists
wurde nicht initialisiert.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde sagen, Ihre Frage enthält bereits die richtige Antwort zu einem gewissen Grad.
Um zu bestimmen, ob client-Objekt-Eigenschaft geladen wird oder nicht die folgenden Methoden sind verfügbar:
die angegebenen scalar Eigenschaft wurde abgefragt oder gesetzt
ob die angegebene Eigenschaft des client-Objekts instanziiert wird
Tests
Test-Fall 1: Belastung Skalare Eigenschaft nur
Test-Fall 2: laden Sie die zusammengesetzte Eigenschaft nur
Testfall 3: laden Sie beide Skalare und zusammengesetzte Eigenschaften
Wie dynamisch bestimmen, ob client-Objekt-Eigenschaft geladen wird oder nicht?
Seit ClientObject.IsPropertyAvailable und ClientObject.IsObjectPropertyInstantiated Methoden erwarten, dass die Eigenschaft name als string angegeben werden-Wert und führen könnte, um Tippfehler, die ich in der Regel bevorzugen die folgenden extension-Methode:
Nutzung
EnsureProperty
undEnsureProperties
Methoden.Die tests zur Verfügung gestellt von Vadim Gremyachev decken nur die Hälfte der Szenarien - wo Sie mit ctx.Last. Aber wenn man mit ctx.LoadQuery das Ergebnis ändert:
Also erst einmal die LoadQuery genannt wurde, auf eine Sammlung, die Sie nicht mehr sehen können, wenn die Sammlung tatsächlich zur Verfügung steht.
Einzige Möglichkeit in diesem Fall ist zu erkennen, dass die exception Auftritt.
Die Idee, eine Verlängerung ist toll, funktioniert aber nur gut mit Listen. Die Erweiterung kann wählen zwischen "Objekt" und "scalar" - Eigenschaften. Ich denke, als die Erweiterung besser sein wird, auf diese Weise: