2012-02-29 8 views

Odpowiedz

2

cóż, nie o tym wiem. Nie ma to jednak wiele do życzenia, w zależności od tego, czy chcesz go używać po stronie klienta, czy po stronie serwera, używaj metody javascript (jak udokumentowano w restapi) lub po prostu po stronie serwera.

Sprawdź Dan's .NET blog

+0

Dzięki za odpowiedź. Będę go używać po stronie serwera do integracji z innymi systemami. Byłem naprawdę nadzieję na coś, co będzie analizować WebResponse do klas reprezentujących zasoby SF zwrócone i mają stałą obsługę błędów - nużące rzeczy :) –

+0

jeśli chcesz silnego pisania, powinieneś pójść drogą WSDL i korzystać z usług sieciowych. REST sam w sobie jest pomysłem architektonicznym, a nie ustalonym protokołem, który może prowadzić do uniwersalnego generowanie kodu, to nawet nie wymaga użycia JSON, którego używa restApi sf i nie zawiera żadnych standardowych metadanych, które można sparsować i utworzyć klasy. Teoretycznie możesz użyć/sobjects/'nazwa_obiektu'/opis, aby pobrać metadane jak najszybciej rt procesu rozwoju, następnie utwórz dla niego klasy i użyj 'JavaScriptSerializer.Deserialize '. HOWever, to brzmi i naprawdę jest ból :) – mmix

3

Byłem naprawdę nadzieję na coś, co będzie analizować WebResponse do klas reprezentujących zasoby SF wrócił, i mieć solidną obsługę Error - nużące stuff :)

To istnieje - nazywa się to API SOAP :) Poważnie jednak, jeśli robisz integrację po stronie serwera i chcesz pisać wygenerowane klasy i stałe obsługę błędów, SOAP jest twoim kucykiem.

3

Używam RestSharp, aby uprościć połączenia i rozszyfrować obiekty, ale nadal musisz obsługiwać wszystkie kody błędów Salesforce. Ma również wbudowaną funkcjonalność OAuth, ale wersja, której używam (około 2 miesięcy), nie obsługuje bardzo dobrze OAuth 2. To wciąż ból, ale warto, jeśli wyciągasz dużo danych.

+0

Interesujące, przyjrzę się RestSharp. Patrzyłem na przykładowe api ASP w internecie, gdzie rozszerzają się o dostęp do Twittera za pośrednictwem OAuth2: http://code.msdn.microsoft.com/Extending-HttpClient-with-8739f267 –

+0

Dzięki za link, na pewno sprawdzę to na zewnątrz. Czy jest to jednak próbka dla OAuth2? Nie przyjrzałem się temu dokładnie, ale zauważyłem prefiks oauth_, który nie został zaimplementowany w usłudze Salesforce OAuth2. – Sprockincat

0

Oto przykładowy kod za pomocą przepływu pracy hasła. To dostaje żeton dostępu i wysyła zapytanie do API:

public static string Login() 
{ 
    string responseJsonString = string.Empty; 
    StringBuilder str = new StringBuilder(); 
    str.AppendFormat("{0}?grant_type=password&client_id={1}&client_secret={2}&username={3}&password={4}" 
        , LoginOAuthUrl, ClientID, ClientSecret, ClientUserName, ClientPassword); 
    // Request token 
    try 
    { 
     HttpWebRequest request = WebRequest.Create(str.ToString()) as HttpWebRequest; 

     if (request != null) 
     { 
      request.Method = "POST"; 
      using (HttpWebResponse response = request.GetResponse() as HttpWebResponse) 
      { 
       if (response.StatusCode == HttpStatusCode.OK) 
       { 
        // Get the "access_token" and "instance_url" from the response. 
        // Convert the JSON response into a token object 


        // Here we get the response as a stream. 
        using (StreamReader responseStream = new StreamReader(response.GetResponseStream())) 
        { 
         responseJsonString = responseStream.ReadToEnd(); 
         // Deserialize JSON response into an Object. 
         JsonValue value = JsonValue.Parse(responseJsonString); 
         JsonObject responseObject = value as JsonObject; 
         AccessToken = (string)responseObject["access_token"]; 
         InstanceUrl = (string)responseObject["instance_url"]; 
         return "We have an access token: " + AccessToken + "\n" + "Using instance " + InstanceUrl + "\n\n"; 
        } 
       } 
      } 
     } 
     return responseJsonString; 
    } 
    catch (Exception ex) 
    { 
     throw new Exception(string.Format("Unable to login to salesforce: {0}", str), ex); 
    } 
} 

public static string Query() 
{    
    string RequestUrl = InstanceUrl + "/services/data/v28.0/query"; 
    string queryParam = "q=" + QUERY; 
    // Read the REST resources 
    string responseJsonString = HttpGet(RequestUrl, queryParam); 
    return responseJsonString; 
} 

public static string HttpGet(string URI, string Parameters) 
{ 
    // Add parameters to the URI 
    string requestUri = URI + "?" + Parameters; 
    System.Net.WebRequest req = System.Net.WebRequest.Create(requestUri); 
    req.Method = "GET"; 
    req.Headers.Add("Authorization: OAuth " + AccessToken); 

    // Do the GET request 
    System.Net.WebResponse resp = req.GetResponse(); 
    if (resp == null) return null; 
    System.IO.StreamReader sr = new System.IO.StreamReader(resp.GetResponseStream()); 
    return sr.ReadToEnd().Trim(); 
} 
7

Jeśli szukasz REST API biblioteki klientowi Salesforce jest, spojrzeć na SalesforceSharp.

Obsługuje tworzenie, aktualizowanie, usuwanie i wysyłanie zapytań z REST API.

Tworzenie

client.Create("Account", 
    new { Name = "name created", Description = "description created" })); 

Aktualizacja

client.Update("Account", "<record id>", 
    new { Description = "description updated" })); 

Usuń

client.Delete("Account", "<ID">); 

zapytań

var records = client.Query<Account>("SELECT id, name, description FROM Account"); 

Obecnie obsługuje nazwę użytkownika i hasło użytkownika przepływu uwierzytelniania, ale inne przepływy (serwer WWW i agenta użytkownika) może być utworzony i wstrzyknięto.

Powiązane problemy