salesforce case 创建时提取 description 中的链接自动下载并且保存在 attachment 中

发布于:2024-06-08 ⋅ 阅读:(142) ⋅ 点赞:(0)

要在Salesforce中实现创建案例时提取描述中的链接并自动下载并保存在附件中,可以使用Apex触发器结合HttpRequest和HttpResponse类来实现:

步骤概述

  1. 创建触发器:当案例(Case)被创建时触发。
  2. 编写Apex类:提取链接,下载文件,并将其保存为附件。

具体实现

1. 创建触发器
trigger CaseLinkAttachmentTrigger on Case (after insert) {
    for (Case newCase : Trigger.new) {
        if (newCase.Description != null) {
            LinkAttachmentHelper.processCaseLinks(newCase);
        }
    }
}
2. 编写Apex Helper类
public class LinkAttachmentHelper {
    @future(callout=true)
    public static void processCaseLinks(Case caseRecord) {
        // 提取描述中的链接
        List<String> links = extractLinks(caseRecord.Description);
        for (String link : links) {
            try {
                // 下载文件并保存为附件
                HttpRequest req = new HttpRequest();
                req.setEndpoint(link);
                req.setMethod('GET');
                Http http = new Http();
                HttpResponse res = http.send(req);
                
                if (res.getStatusCode() == 200) {
                    // 创建附件
                    Attachment attachment = new Attachment();
                    attachment.ParentId = caseRecord.Id;
                    attachment.Name = getFileNameFromUrl(link);
                    attachment.Body = res.getBodyAsBlob();
                    attachment.ContentType = res.getHeader('Content-Type');
                    insert attachment;
                }
            } catch (Exception e) {
                System.debug('Error processing link: ' + link + ' Error: ' + e.getMessage());
            }
        }
    }

    private static List<String> extractLinks(String description) {
        List<String> links = new List<String>();
        Pattern linkPattern = Pattern.compile('(https?://[^\\s]+)');
        Matcher matcher = linkPattern.matcher(description);
        while (matcher.find()) {
            links.add(matcher.group(1));
        }
        return links;
    }

    private static String getFileNameFromUrl(String url) {
        String[] parts = url.split('/');
        return parts[parts.length - 1];
    }
}

解释

  1. 触发器 CaseLinkAttachmentTrigger

    • 在案例创建时触发。
    • 调用 LinkAttachmentHelper.processCaseLinks 方法处理案例中的链接。
  2. Apex Helper类 LinkAttachmentHelper

    • processCaseLinks 方法:使用 @future(callout=true) 注解,以允许异步HTTP调用。
    • extractLinks 方法:使用正则表达式提取描述中的链接。
    • getFileNameFromUrl 方法:从URL中提取文件名。
    • HTTP请求:下载链接中的文件并保存为附件。

注意事项

  • 异步处理:由于需要进行HTTP调用,因此使用 @future(callout=true) 进行异步处理。
  • 错误处理:在下载和保存文件时添加错误处理,以便捕获并记录可能的错误。
  • 性能考虑:对于大量链接或大文件下载,需要考虑Salesforce的限制(如DML操作次数、内存使用等)。

完成这些步骤后,系统将自动提取案例描述中的链接,下载文件并将其保存为附件。这确保了所有相关文件自动与案例关联,方便用户查看和管理。


网站公告

今日签到

点亮在社区的每一天
去签到