La bonne façon de détecter si un ClientObject propriété est déjà récupéré/initialisé
Si vous êtes en utilisant le Modèle Objet Client à partir de SharePoint et d'accéder à des propriétés qui n'ont pas été initialisée ou déjà récupéré par un
Context.Load(property);
Context.ExecuteQuery();
vous obtenez par exemple un:
Microsoft.SharePoint.Client.PropertyOrFieldNotInitializedException
ou
La collection n'a pas été initialisé. Il n'a pas été demandé ou
la demande n'a pas été exécuté.
Exception.
Est-il un bon moyen de vérifier avant d'accéder à ces propriétés si elles sont déjà initialisé/extrait? Sans un Try/Catch approche. Je n'aime pas que l'on est.
Je veux vérifier avant une Exception a été levée et le gérer.
J'ai déjà vérifié la
Méthodes, mais ils n'aident pas vraiment. IsPropertyAvaiable
vérifie uniquement les propriétés scalaires et ne donnera pas un résultat, par exemple Web.Lists
et IsObjectPropertyInstantiated
retourne true pour Web.Lists
bien que Web.Lists
n'a pas été initialisé.
Vous devez vous connecter pour publier un commentaire.
Je dirais à votre question contient déjà la réponse correcte dans une certaine mesure.
Afin de déterminer si la propriété de l'objet est chargée ou non, les méthodes suivantes sont disponibles:
le spécifiée scalaire propriété a été récupéré ou défini
si la propriété spécifiée de l'objet client est instancié
Tests
Cas de Test 1: charger la propriété scalaire seulement
Cas de Test 2: charge composite de la propriété seulement
Cas de Test 3: charger les scalaires et les propriétés des composites
Comment déterminer dynamiquement si la propriété de l'objet est chargé ou pas?
Depuis ClientObject.IsPropertyAvailable et ClientObject.IsObjectPropertyInstantiated méthodes d'attendre le nom de la propriété à être spécifié comme une chaîne de valeur et qui pourrait conduire à des fautes de frappe, d'habitude, je préfère les suivantes méthode d'extension:
Utilisation
EnsureProperty
etEnsureProperties
méthodes.Les tests fournis par Vadim Gremyachev seulement couvrir la moitié des scénarios où vous utilisez ctx.De la charge. Mais lorsque vous utilisez le ctx.LoadQuery le résultat des changements:
Donc, une fois que le LoadQuery a été appelé sur une collection, vous ne pouvez plus voir si la collection est actuellement disponible.
Seul moyen dans ce cas est de détecter que l'exception se produit.
L'idée d'utiliser une extension est grande, mais seulement fonctionne très bien avec les listes. L'extension peut choisir entre "objet" et "scalaire" propriétés. Je pense que l'extension sera mieux de cette façon: