通过外部API请求自动创建和删除用户



我在APEX中没有编码经验,所以我非常感谢您在这个问题上的帮助和支持!

如果SF用户被删除,我想找出一种自动删除Aircall用户的方法。让我们假设每个SF用户都有一个Aircall ID,该ID存在于他们的用户配置文件中,存储在一个名为"Aircall ID"的字段中。这就是我形成删除请求所需要的。

我希望在Salesforce上删除用户时,它会触发对Aircall的删除请求,将之前存储在Aircall ID字段中的值发送到有问题的特定端点。

我需要帮助弄清楚如何编写一个APEX触发器,将Aircall ID发送到类(在删除用户后触发(,以及最终如何在收到ID后自动触发该类的执行,以便在Aircall的平台上完成用户删除。

public class deleteAirCallUser {
Http http = new Http();
HttpRequest request = new HttpRequest();

request.setMethod('DELETE');

string encodedCredentials = 'apikey';
String authorizationHeader = 'Basic ' + encodedCredentials;
request.setHeader('Content-Type', 'application/json;charset=UTF-8');
request.setHeader('Authorization', authorizationHeader);
string AircallUserId = //should be the Aircall userID from the deleted profile
request.setBody(AircallUserId);
request.setEndpoint('https://api.aircall.io/v1/users/'+ Aircall userID);

HttpResponse response = http.send(request);

if (response.getStatusCode() == 200) {


Map<String, Object> results = (Map<String, Object>) JSON.deserializeUntyped(response.getBody());

System.debug(results);}

else{

Map<String, Object> results_2 = (Map<String, Object>) JSON.deserializeUntyped(response.getBody());

System.debug(results_2);

}
}

谢谢你的帮助!

https://developer.salesforce.com/docs/atlas.en-us.api.meta/api/sforce_api_objects_user.htm

"不能在用户界面或API中删除用户。您可以在用户界面中停用用户;您可以在用户界面或API中停用或禁用客户门户或合作伙伴门户用户。因为用户永远不会被删除,我们建议您在创建用户时要小心">

对于停用,你需要这样的东西。(它不是根据最佳实践编写的,理想情况下,触发器是"瘦"的,实际处理被卸载到助手类。此外,它还假设你一次最多更新10个用户,因为这是调用的限制。

trigger UserTrigger on User (after update){
Set<String> toSend = new Set<String>();
for(User u : trigger.new){
User oldUser = trigger.oldMap.get(u.Id);
// have we deactivated them?
if(!u.isActive && oldUser.isActive && String.isNotBlank(u.AirCallId__c)){
toSend.add(u.AirCallId__c);
}
}
if(!toSend.isEmpty()){
sendAirCallDeletes(toSend);
}

// This should be in a helper class, it looks bizarre to have functions defined in trigger's body
@future
static void sendAirCallDeletes(Set<String> toSend){
Http http = new Http();
HttpRequest request = new HttpRequest();
request.setMethod('DELETE');
String encodedCredentials = 'apikey';
String authorizationHeader = 'Basic ' + encodedCredentials;
request.setHeader('Content-Type', 'application/json;charset=UTF-8');
request.setHeader('Authorization', authorizationHeader);
for(String airCallId : toSend){
request.setBody(airCallId);
request.setEndpoint('https://api.aircall.io/v1/users/'+ airCallId);
try{
HttpResponse response = http.send(request);
System.debug(response.getStatusCode());
System.debug(response.getBody());
System.debug((Map<String, Object>) JSON.deserializeUntyped(response.getBody());
} catch(Exception e){
System.debug(e);
}
}
}
}

你可能想读一读关于";命名凭证";(不要将api密钥等存储在代码中(,为什么我们需要"未来";技巧当我们想从触发器调用时,如何检查您在单个事务中可以调用的限制。。。但这应该是一个开始吗?

最新更新