如何解决通过外部 API 请求自动创建和删除用户
我在 APEX 中的编码经验为 0,因此我非常感谢您对这个问题的帮助和支持!
如果 SF 用户被删除,我想找出一种方法来自动删除 Aircall 用户。让我们假设每个 SF 用户都有一个 Aircall ID,该 ID 存在于他们的用户配置文件中,存储在名为“Aircall ID”的字段中。这是我形成删除请求所需的内容。
我希望当用户在 Salesforce 上被删除时,它会触发对 Aircall 的删除请求,将之前存储在 Aircall ID 字段中的值发送到相关的特定端点。
我需要帮助弄清楚如何编写一个将 Aircall ID 发送到类的 APEX 触发器(在用户被删除后触发)以及最终如何在收到 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 密钥等),为什么当我们想要从触发器中调用时需要“@future”技巧,如何检查限制您可以在单笔交易中拨打的电话数量……但应该是一个开始吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。