前言
lwc是Salesforce的新一代基于ES6的组件库,在它们的CRM系统上普遍应用于Lightning框架。
由于项目需要,我需要开发一个和它们标准关注按钮一样的按钮,尽可能实现一样的效果。
思路
既然是已经有的标准按钮,那么我们可以先看一下它的行为。
在关注之前,这个按钮长这样。
关注之后,按钮的背景色消失,在发生hover(mouseover)事件之后,按钮的文字、图标都发生变化。
样式上大致明白了,在开发者模式下,把两种状态下的按钮样式记录下来(因为是标准按钮我们可以直接借鉴官方样式,不用自己写)
关注前:slds-button slds-button--neutral not-selected slds-not-selected uiButton
关注后:slds-button slds-button--neutral is-selected slds-is-selected uiButton
接下来就是按钮的逻辑coding。
首先我们要知道在salesforce系统里,“关注”是什么用途、怎么实现的。
略微查阅了官方文档之后,我得知,关注基本上是用于chatter、record、user等一众功能的状态follow。基本上等于微博、微信等的关注逻辑。
比如我们关注一个记录之后,在chatter tab内部,我们可以看到这个记录发生的变化等等:
知道了Follow的逻辑,之后验证按钮逻辑就知道如何验证了。接下来是代码级别的实现。
同样的,在salesforce apex develop文档内,我们可以找到如何用Apex关注、解除关注一个record:
关注:
ChatterUsers.ConnectApi.Subscription subscriptionToRecord = ConnectApi.ChatterUsers.follow(null, 'me', '001RR000002G4Y0');
解关:
ConnectApi.Chatter.deleteSubscription(null, '0E8RR0000004CnK0AU');
当然官方文档上就只有这两个简单的示例代码,我们需要找到SFDB中保存关注关系的数据结构,再深入查找一下,果然,它藏在文档的另一处地方😆:
订阅实体:
EntitySubscription
- ParentId
- SubscriberId
- NetworkId (不重要)
- Id
好了,万事俱备,只欠东风,我们开始构造自己的关注按钮
开发
首先我们构造一个lwc组件,目前lwc组件是不能在salesforce自带的开发工具中开发、查阅的。因此我们需要用到在ide中创建。(目前比较流行的是vscode的官方开发者工具和sublime上的haoide)
创建一个followButton组件。
在html文件中,写入一下代码:
<template>
<template if:false={following}>
<button onclick={handleFollow} class="slds-button slds-button--neutral not-selected slds-not-selected uiButton">
<lightning-icon size="xx-small" class="slds-button__icon slds-button__icon--left forceIcon slds-icon-utility-check" icon-name="utility:add">
</lightning-icon>
<lightning-formatted-text value="フォローする"></lightning-formatted-text>
</button>
</template>
<template if:true={following}>
<button onclick={handleUnfollow} onmouseover={mouseOver} onmouseout={mouseOut} data-id="follow" class