如何获取组织中运行Apex代码的用户列表及对应许可证类型?
获取运行Apex代码的用户及对应许可证类型
以下是几种可行的实现方案:
方案一:通过Apex日志关联用户与许可证信息
- 开启用户的Apex日志追踪:在Setup中找到Debug Logs,为需要追踪的用户启用日志,或者设置日志级别覆盖规则捕获所有用户的Apex执行日志。
- 使用SOQL查询关联日志、用户及许可证数据:
SELECT Id, LogUserId, (SELECT Id, Name, Profile.UserLicense.Name FROM User WHERE Id = LogUserId) FROM ApexLog WHERE Operation LIKE '%Apex%' GROUP BY Id, LogUserId
这个查询会返回所有执行过Apex操作的用户ID,以及对应用户的许可证名称(比如“Salesforce Administrator”、“Partner Community User”等)。
方案二:利用Setup Audit Trail结合用户数据
- 从Setup的Setup Audit Trail中导出包含Apex相关操作的记录(比如“Apex Class created/modified”、“Apex Trigger executed”等),这些记录会包含操作的用户ID。
- 用SOQL查询这些用户的许可证信息:
SELECT Id, Name, Profile.UserLicense.Name FROM User WHERE Id IN ('用户ID1', '用户ID2')
通过Profile关联的UserLicense对象,可以直接获取用户的许可证类型。
方案三:自定义Apex执行跟踪机制
如果需要长期、精准追踪所有Apex执行的用户,可以创建一个自定义对象(比如ApexExecutionTracker__c),包含字段User__c(关联用户)、ExecutionTime__c(执行时间)等。
然后在全局Apex类中添加一个通用的跟踪方法,或者通过Apex触发器(针对Apex相关对象的操作),在Apex执行时自动记录用户信息到自定义对象中。后续直接查询这个自定义对象即可获取所有执行过Apex的用户,再关联许可证信息:
SELECT User__r.Name, User__r.Profile.UserLicense.Name FROM ApexExecutionTracker__c GROUP BY User__r.Id, User__r.Name, User__r.Profile.UserLicense.Name
内容的提问来源于stack exchange,提问作者aidonsnous
相关产品推荐
相关产品推荐

