【问题标题】:Workaround for DML Operation after HTTP ResponseHTTP 响应后 DML 操作的解决方法
【发布时间】:2021-08-24 01:25:12
【问题描述】:

我需要发出一个 http 请求并在成功响应时创建并插入一条记录。这是代码的sn-p

public static Collaboration__c createGroupCollaboration(Sub_Folder__C folder, String groupId, string role, String ProfId){
    Box__c box = Box__c.getInstance();
    HttpRequest req = new HttpRequest();
    req.setEndpoint('https://test.api');
    req.setMethod('POST');
    req.setHeader('Authorization','Bearer '+box.BoxAccess_Token__c);
    req.setBody('{"item": { "id": "'+folder.CF_box_folder_id__c+'", "type": "folder"}, "accessible_by": { "id": "'+groupId+'", "type": "group" }, "role": "'+role+'"}');
    HTTPResponse res = new Http().send(req);
    if(res.getStatuscode() >= 200 && res.getStatusCode() <= 299){
        Collaborationwrapper cw = new Collaborationwrapper();
        cw = (Collaborationwrapper)JSON.deserialize(res.getBody(),Collaborationwrapper.class);
        Collaboration__c resCollab = new Collaboration__c(BoxCollaboration_Id__c = cw.Id,Role__c= cw.role,BoxFolder_Id__c= folder.CF_box_folder_id__c,Sub_folder__c= folder.id,BoxGroup_Id__c=groupId,SFUser_Email__c = 'group@test.com',SFProfile_Id__c = ProfId);
        return resCollab;
    }else {
        return null;
    }
}

这个类返回一个将被插入的协作。当我评论插入时,一切正常。但是,当我启用插入时,我收到以下错误:您有未提交的工作待处理。请在调用前提交或回滚。

只有在操作成功时才​​需要插入这些记录。

我也需要为删除执行此操作,但我认为相同的方法将适用于两个操作。

我知道您不应该在标注后执行 DML...但是如果成功响应,我还能如何创建记录?

【问题讨论】:

    标签: salesforce apex


    【解决方案1】:

    不,你有其他方式。您可以先进行标注,然后再进行 DML。

    您在 SF 中做某事 = 您开始交易。它必须提交(成功)或回滚。如果你做 DML - 你会在数据库中获得一个锁。也许在单张唱片上,也许在整张桌子上。然后你想发出标注?您将在外部系统的支配下将数据库作为人质长达 2 分钟。此表中没有其他 DML 会成功。所以SF故意屏蔽了它。

    但可以先进行标注,然后进行 DML。

    你试过独立运行这个吗?对于 1 条记录(文件或其他任何内容)。如果您收到错误,您可能会在循环中调用它,然后第二次迭代就是抛出的那个。仔细查看调试日志。

    或者也许在这段代码之前确实有一个插入,例如,如果你从触发器运行它......在这种情况下,你需要异步顶点(@future、Queueable、批处理作业等)

    【讨论】:

    • 这很值得深思。此类运行机会触发器......但每当我注释掉触发器中的插入时,它运行时没有错误。但是,有一个循环。我会做一些调查,但现在你的回答满足了我的问题。
    猜你喜欢
    • 2012-02-02
    • 2019-11-05
    • 1970-01-01
    • 2020-10-02
    • 1970-01-01
    • 2019-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多