我正在开发一种解决方案,当用户在 salesforce 上创建记录时,将消息发送到 Slack 通道。我已经通过 Apex SDK for Slack App 并成功将该应用程序与 salesforce 连接起来。
我想在 salesforce 上创建一个触发器,当用户创建记录时,它将调用 Slack.ActionDispatcher 类,
/* 此示例 apex 类扩展了 Slack.ActionDispatcher 并负责 响应“view_opportuniy”、“view_account”中定义的“onsubmit”事件, 和“view_contact”视图。 */ 公共类 ActionDispatcherPostRecordDetailMessage 扩展 Slack.ActionDispatcher {
public override Slack.ActionHandler invoke(Map<String, Object> parameters, Slack.RequestContext context) {
return Slack.ActionHandler.ack(new Handler(parameters, context));
}
public class Handler implements Slack.RunnableHandler {
Map<String, Object> parameters;
Slack.RequestContext context;
public Handler(Map<String, Object> parameters, Slack.RequestContext context) {
this.parameters = parameters;
this.context = context;
}
public void run() {
Slack.App app = Slack.App.ApexSlackApp.get();
Slack.UserClient userClient = app.getUserClientForTeam(this.context.getTeamId(), this.context.getUserId());
String recordId = (String) this.parameters.get('recordId');
String objectApiName = (String) this.parameters.get('objectApiName');
Slack.ViewReference viewReference = Slack.View.record_detail_message.get();
viewReference.setParameter('headerText', objectApiName + ' Record Details');
viewReference.setParameter('recordId', recordId);
viewReference.setParameter('objectApiName', objectApiName);
Slack.ChatPostMessageRequest req = new Slack.ChatPostMessageRequest.builder()
.channel((String) this.parameters.get('channelId'))
//TODO should text be required if you are setting a view reference?
.text('Details for record id' + recordId)
.viewReference(viewReference)
.build();
Slack.ChatPostMessageResponse response = userClient.ChatPostMessage(req);
if (response.getError() != null) {
System.debug(response.getResponseMetadata().getMessages());
}
}
}
} 这是我的触发器
公共静态无效handleOpportunity(列表新机会){ 对于(机会opp:新机会){
ActionDispatcherPostRecordDetailMessage.Handler handler = new ActionDispatcherPostRecordDetailMessage.Handler(
new Map<String, Object>{
'recordId' => opp.Id,
'objectApiName' => 'Opportunity',
'channelId' => 'your_slack_channel_id_here'
},
new Slack.RequestContext()
);
handler.run();
}
}
在触发器中我得到一个方法不可见:void Slack.RequestContext.()错误
我期望当用户创建记录时,会将包含记录详细信息的松弛消息发送到通道。记录进入频道后,我将使用块来更新 salesforce 中的记录。
您似乎遇到了错误,因为 Slack.RequestContext 构造函数在您的上下文中不可见。这可能是因为它不是可公开访问的构造函数。要解决此问题,您可以使用其 builder() 方法创建 Slack.RequestContext 的新实例,而不是直接调用构造函数。您可以通过以下方法修改触发器来解决此问题:
公共静态无效handleOpportunity(列表新机会){
for (机会 opp : newOpportunities) {
ActionDispatcherPostRecordDetailMessage.Handler 处理程序 = new ActionDispatcherPostRecordDetailMessage.Handler(
新地图
handler.run();
}
} 通过使用 builder() 方法,您可以创建 Slack.RequestContext 的新实例,而无需直接调用其构造函数,这应该可以解决可见性问题。这应该允许您的触发器运行而不会遇到“方法不可见”错误。