Après avoir lu cet article jusqu'au bout, vous pourrez:
--Définir l'API Salesforce (Activer les paramètres OAuth)
Exemple de code
python_sfdc_get_user.py
sf = Salesforce(username=USERNAME, password=PASSWORD,
security_token=SECURITY_TOKEN, sandbox=False)
res = sf.query(
'SELECT Id, Name, LastLoginDate FROM User WHERE Name =\'nsuhara\'')
print(json.dumps(res, indent=4))
«Résultat de l’exécution»
python_result.json
{
"totalSize": 1,
"done": true,
"records": [
{
"attributes": {
"type": "User",
"url": "/services/data/v38.0/sobjects/User/0056F000006StK9QAK"
},
"Id": "0056F000006StK9QAK",
"Name": "nsuhara",
"LastLoginDate": "2019-05-18T13:07:00.000+0000"
}
]
}
environnement | Ver. | Note |
---|---|---|
macOS Mojave | 10.14.4 | OS |
Salesforce | Spring'19 | SaaS |
Python | 3.7.3 | Python |
simple-salesforce | 0.74.2 | Python |
requests | 2.22.0 | Python |
Java | 1.8.0_192 | Java |
httpclient | 4.5.6 | Java |
json | 20180813 | Java |
jackson-databind | 2.9.8 | Java |
Je pense que vous pouvez approfondir votre compréhension en suivant réellement le contenu de l'implémentation et le code source. Veuillez l'utiliser par tous les moyens.
Paramètres> Créer> Applications> Applications connectées> Cliquez sur Nouveau
nom de l'article | Définir la valeur |
---|---|
Nom de l'application connectée | Sample |
Nom de référence de l'API | Sample |
Email du contact | [email protected] |
Activer les paramètres OAuth | TRUE |
URL de rappel | https://sample.auth0.com/login/callback |
Plage OAuth sélectionnée | Accès aux informations de base |
Secret de flux du serveur Web requis | TRUE |
`Veuillez attendre 2 à 10 minutes pour que les modifications prennent effet sur le serveur avant d'utiliser l'application connectée. ''
Nom de variable | La description | Remarques |
---|---|---|
HOST | Production: login.salesforce.com, Sandbox: test.salesforce.com | |
CLIENT_ID | La clé du consommateur | Référence 1 |
CLIENT_SECRET | Secret du consommateur | Référence 1 |
USERNAME | Nom d'utilisateur Salesforce | |
PASSWORD | Mot de passe Salesforce | |
SECURITY_TOKEN | Jeton de sécurité Salesforce | Référence 2 |
PASSWORD_AND_SECURITY_TOKEN | Mot de passe Salesforce+Jeton de sécurité |
** (Référence 1) **
** (Réf 2) **
Les jetons de sécurité peuvent être réémis à partir de Mes paramètres> Personnel> Réinitialiser mon discours de sécurité
.
shell_script_sfdc_get_user.sh
#!/bin/sh
export HOST='<Référence des paramètres>'
export CLIENT_ID='<Référence des paramètres>'
export CLIENT_SECRET='<Référence des paramètres>'
export USERNAME='<Référence des paramètres>'
export PASSWORD_AND_SECURITY_TOKEN='<Référence des paramètres>'
export INSTANCE_URL=`curl -s https://$HOST/services/oauth2/token -d "grant_type=password" -d "client_id=$CLIENT_ID" -d "client_secret=$CLIENT_SECRET" -d "username=$USERNAME" -d "password=$PASSWORD_AND_SECURITY_TOKEN" | awk 'BEGIN{FS="instance_url\":"}{print $2}' | awk 'BEGIN{FS=","}{print $1}' | sed -e 's/\"//g'`
export ACCESS_TOKEN=`curl -s https://$HOST/services/oauth2/token -d "grant_type=password" -d "client_id=$CLIENT_ID" -d "client_secret=$CLIENT_SECRET" -d "username=$USERNAME" -d "password=$PASSWORD_AND_SECURITY_TOKEN" | awk 'BEGIN{FS="access_token\":"}{print $2}' | awk 'BEGIN{FS=","}{print $1}' | sed -e 's/\"//g'`
export SOQL="SELECT+Id,Name,LastLoginDate+FROM+User+WHERE+Name='nsuhara'"
curl $INSTANCE_URL/services/data/v45.0/query?q=$SOQL -H "Authorization: OAuth $ACCESS_TOKEN" -H "X-PrettyPrint:1"
shell_script_result.json
{
"totalSize": 1,
"done": true,
"records": [
{
"attributes": {
"type": "User",
"url": "/services/data/v45.0/sobjects/User/0056F000006StK9QAK"
},
"Id": "0056F000006StK9QAK",
"Name": "nsuhara",
"LastLoginDate": "2019-05-18T14:04:05.000+0000"
}
]
}
python_sfdc_get_user.py
import json
from simple_salesforce import Salesforce
USERNAME = '<Référence des paramètres>'
PASSWORD = '<Référence des paramètres>'
SECURITY_TOKEN = '<Référence des paramètres>'
def main():
sf = Salesforce(username=USERNAME, password=PASSWORD,
security_token=SECURITY_TOKEN, sandbox=False)
res = sf.query(
'SELECT Id, Name, LastLoginDate FROM User WHERE Name =\'nsuhara\'')
print(json.dumps(res, indent=4))
if __name__ == '__main__':
main()
python_result.json
{
"totalSize": 1,
"done": true,
"records": [
{
"attributes": {
"type": "User",
"url": "/services/data/v38.0/sobjects/User/0056F000006StK9QAK"
},
"Id": "0056F000006StK9QAK",
"Name": "nsuhara",
"LastLoginDate": "2019-05-18T14:06:19.000+0000"
}
]
}
java_App.java
package rest_api;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.Header;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.message.BasicHeader;
import org.apache.http.util.EntityUtils;
import org.json.JSONException;
import org.json.JSONObject;
import org.json.JSONTokener;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
public class App {
static final String HOST = "<Référence des paramètres>";
static final String CLIENT_ID = "<Référence des paramètres>";
static final String CLIENT_SECRET = "<Référence des paramètres>";
static final String USERNAME = "<Référence des paramètres>";
static final String PASSWORD_AND_SECURITY_TOKEN = "<Référence des paramètres>";
static final String GRANT_SERVICE = "/services/oauth2/token?grant_type=password";
public static void main(String[] args) {
String UA = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36";
List<Header> headers = new ArrayList<Header>();
headers.add(new BasicHeader("User-Agent", UA));
HttpClient httpClient = HttpClientBuilder.create().setDefaultHeaders(headers).build();
String loginURL = "https://" + HOST + GRANT_SERVICE + "&client_id=" + CLIENT_ID + "&client_secret="
+ CLIENT_SECRET + "&username=" + USERNAME + "&password=" + PASSWORD_AND_SECURITY_TOKEN;
HttpPost httpPost = new HttpPost(loginURL);
HttpResponse response = null;
try {
response = httpClient.execute(httpPost);
} catch (ClientProtocolException cpException) {
// Handle protocol exception
} catch (IOException ioException) {
// Handle system IO exception
}
final int statusCode = response.getStatusLine().getStatusCode();
if (statusCode != HttpStatus.SC_OK) {
System.out.println("Error authenticating to Force.com: " + statusCode);
// Error is in EntityUtils.toString(response.getEntity())
return;
}
String getResult = null;
try {
getResult = EntityUtils.toString(response.getEntity());
} catch (IOException ioException) {
// Handle system IO exception
}
JSONObject jsonObject = null;
String loginAccessToken = null;
String loginInstanceUrl = null;
try {
jsonObject = (JSONObject) new JSONTokener(getResult).nextValue();
loginInstanceUrl = jsonObject.getString("instance_url");
loginAccessToken = jsonObject.getString("access_token");
} catch (JSONException jsonException) {
// Handle JSON exception
}
System.out.println(response.getStatusLine());
httpPost.releaseConnection();
try {
final URIBuilder builder = new URIBuilder(loginInstanceUrl);
final String SOQL = "SELECT Id, Name, LastLoginDate FROM User WHERE Name = \'nsuhara\'";
builder.setPath("/services/data/v45.0/query/").setParameter("q", SOQL);
final HttpGet get = new HttpGet(builder.build());
get.setHeader("Authorization", "Bearer " + loginAccessToken);
final HttpResponse queryResponse = httpClient.execute(get);
ObjectMapper mapper = new ObjectMapper();
final JsonNode queryResults = mapper.readValue(queryResponse.getEntity().getContent(), JsonNode.class);
System.out.println("queryResults:" + queryResults);
} catch (Exception e) {
// Handle exception
}
}
}
java_result.json
{
"totalSize": 1,
"done": true,
"records": [
{
"attributes": {
"type": "User",
"url": "/services/data/v45.0/sobjects/User/0056F000006StK9QAK"
},
"Id": "0056F000006StK9QAK",
"Name": "nsuhara",
"LastLoginDate": "2019-05-18T14:09:31.000+0000"
}
]
}
apex_SampleRestApi.cls
@RestResource(urlMapping='/sample/restapi/*')
global without sharing class SampleRestApi {
@HttpGet
global static List<User> getUsers() {
return [SELECT Id, Name, LastLoginDate FROM User WHERE Name = 'nsuhara' LIMIT 1];
}
}
Paramètres> Gérer les utilisateurs> Jeu de privilèges (ou profil)> Modifier Privilège système
Paramètres> Gérer les utilisateurs> Ensemble d'autorisations (ou profil)> Modifier l'accès aux classes Apex`
python_requests_sfdc.py
import requests
HOST = '<Référence des paramètres>'
CLIENT_ID = '<Référence des paramètres>'
CLIENT_SECRET = '<Référence des paramètres>'
USERNAME = '<Référence des paramètres>'
PASSWORD_AND_SECURITY_TOKEN = '<Référence des paramètres>'
def main():
params = {
'grant_type': 'password',
'client_id': CLIENT_ID,
'client_secret': CLIENT_SECRET,
'username': USERNAME,
'password': PASSWORD_AND_SECURITY_TOKEN
}
res_post = requests.post(
'https://{}/services/oauth2/token'.format(HOST), params=params)
access_token = res_post.json().get('access_token')
instance_url = res_post.json().get('instance_url')
services_url = '/services/apexrest/sample/restapi'
headers = {
'Content-type': 'application/json',
'Accept-Encoding': 'gzip',
'Authorization': 'Bearer {}'.format(access_token)
}
res_get = requests.request(method='get', url=instance_url+services_url,
headers=headers, params={'xxx': 'yyy'}, timeout=10)
print(res_get.status_code)
print(res_get.json())
if __name__ == '__main__':
main()
python_result.json
[
{
"attributes": {
"type": "User",
"url": "/services/data/v45.0/sobjects/User/0056F000006StK9QAK"
},
"Id": "0056F000006StK9QAK",
"Name": "nsuhara",
"LastLoginDate": "2019-05-18T14: 11: 22.000+0000"
}
]
Considérez le modèle de mise en œuvre en fonction de l'environnement et des conditions
No. | Conditions d'examen | Modèle d'implémentation | échantillon |
---|---|---|---|
1 | Si un package pour Salesforce est disponible | Implémenter à l'aide d'un package | Échantillon Python |
2 | Lorsque le résultat de l'exécution de SOQL est suffisant | Implémenter à l'aide d'une requête HTTP | Exemple de script Shell,Échantillon Java |
3 | Autre que ce qui précède | Implémenter les services Web Apex REST | Exemple d'implémentation de service Web REST |
Recommended Posts