2017-06-01 2 views
0

Salut, je suis nouveau avec moodle et je reçois une erreur lors de l'appel du service web.Moodle reste post erreur de retour avec la fonctionnalité core_user_get_users_by_field

Actuellement j'essaie de récupérer un utilisateur de moodle avec la fonction suivante core_user_get_users_by_field et j'utilise le service de repos pour le faire. J'ai déjà réussi à créer un utilisateur, donc je suis authentifié pour utiliser le service.

l'erreur que je reçois est

manquant clé requise dans la structure unique: champ

Le soufflet est le code a été utilisé pour créer un utilisateur. le problème que j'ai obtenu de l'erreur est que le paramètre que j'ai besoin d'envoyer pour la publication n'est pas bien formaté. Est-ce que quelqu'un sait comment rechercher correctement avec cette méthode ou toute autre méthode.

 String token = "token"; 

     String postData = "username=username"; 

     string createRequest = string.Format("http://domain/webservice/rest/server.php?wstoken={0}&wsfunction={1}&moodlewsrestformat=json", token, "core_user_get_users_by_field"); 

     // Call Moodle REST Service 
     HttpWebRequest req = (HttpWebRequest)WebRequest.Create(createRequest); 
     req.Method = "POST"; 
     req.ContentType = "application/x-www-form-urlencoded"; 

     // Encode the parameters as form data: 
     byte[] formData = 
      UTF8Encoding.UTF8.GetBytes(postData); 
     req.ContentLength = formData.Length; 

     // Write out the form Data to the request: 
     using (Stream post = req.GetRequestStream()) 
     { 
      post.Write(formData, 0, formData.Length); 
     } 


     // Get the Response 
     HttpWebResponse resp = (HttpWebResponse)req.GetResponse(); 
     Stream resStream = resp.GetResponseStream(); 
     StreamReader reader = new StreamReader(resStream); 
     string contents = reader.ReadToEnd(); 

     // Deserialize 
     JavaScriptSerializer serializer = new JavaScriptSerializer(); 
     if (contents.Contains("exception")) 
     { 
      // Error 
      MoodleException moodleError = serializer.Deserialize<MoodleException>(contents); 
     } 
     else 
     { 
      // Good 

     } 

Répondre

1

webservice core_user_get_users_by_field a besoin d'un tableau associatif donné comme paramètre avec la clé suivante: valeurs
« champ »: « id »
« valeurs »: tableau d'entiers (doit être un tableau, peut-être avec juste une valeur)

En PHP, il serait, par exemple:

$parameters = array('field' => 'id', 'values' => array(13)); 

cela signifie: l'utilisateur dont « id » a la valeur 13. Bien entendu, vous pouvez utiliser d'autres par ameters aussi: ('field' => 'lastname', 'values' => array ('Smith'))
Les paramètres que vous pouvez choisir sont les champs de la table 'utilisateur' de Moodle. Essayez de construire ces paramètres dans votre variable postData.

+0

remerciements qui ont beaucoup aidé –

0

est ici URL qui fonctionne avec mon mettre cette URL dans postier et définir la méthode http pour poster méthode

hostname/webservice/rest/server.php?wstoken=any_token&wsfunction=core_user_get_users_by_field&field=email&values[0][email protected] 
&moodlewsrestformat=json