构建可重复使用的闪电组件 – 创建要在Lightning App Builder中使用的组件

创建要在Lightning App Builder中使用的组件

尽管我们使用Lightning组件显示指示器标志(并且在以后的步骤中,我们甚至使用Lightning Data Service来获得没有Apex的记录级数据),但这并不意味着我们不需要Apex。实际上,我们需要使用一些Apex来使我们的指标徽章记录以及其他信息可供我们的Lightning组件使用。

在此步骤中,我们将创建一个可感知对象的Lightning组件,使其可在Lightning App Builder中使用,并使用Apex为该组件提供一个动态的,可感知对象的标签。

创建一个指标徽章组件

  1. 点击齿轮图标(齿轮图标),然后选择开发者控制台
  2. 在开发人员控制台中,选择“文件”>“新建”>“ Lightning Component”
  3. 命名组件IndicatorBadges,选择“闪电记录页面”,然后选择“提交”
  4. 用以下代码替换组件的内容:
    <aura:component implements="force:hasRecordId,force:hasSObjectName,flexipage:availableForRecordHome">
      <aura:attribute name="objLabel" type="String" />
      <aura:attribute name="badgeList" type="Object[]"/>
      <aura:handler name="init" value="{!this}" action="{!c.doInit}"/>
      <lightning:card iconName="standard:coaching" title="{! v.objLabel +' Indicators'}" class="slds-text-title_caps">
        <div class="slds-p-left--medium slds-p-right--medium">
          <lightning:layout verticalAlign="stretch" horizontalAlign="start" multipleRows="true" pullToBoundary="small">
            <aura:iteration items="{!v.badgeList}" var="thisBadge" aura:id="theList">
              <lightning:layoutItem size="2" padding="horizontal-small">
                <!--put Indicator Badge here-->
              </lightning:layoutItem>
            </aura:iteration>
          </lightning:layout>
        </div>
      </lightning:card>
    </aura:component>
  5. 单击文件>保存

代码重点

  • 当您创建一个Lightning组件并选中Available for Record Pages复选框时,开发人员控制台提供了两个界面(即force:hasRecordIdflexipage:availableForRecordHome接口)。我们添加了第三个接口force:hasSObjectName,以使我们的组件能够感知对象和记录。
  • 我们使用Lightning基本组件为最终将成为指标徽章项目的列表创建标题和整洁的布局。我们为该组件提供了一个可识别的图标(“ standard:coaching”)和动态标题,以便用户知道他们正在查看的指示符。

创建指标徽章控制器类

在动态标题中,我们要显示用户期望的对象的名称-force:hasSObjectName接口未提供该值(标签字段)(可以访问对象的API名称)。要访问组件中Label字段的值,我们需要使用Apex。

  1. 在开发者控制台中,单击文件>新建> Apex类
  2. 命名Apex类INDICATOR_Controller
  3. 修改类,如下所示:
    public class INDICATOR_Controller {
      @AuraEnabled
      public static String getSObjectLabel(String sObjName){
        String label = Schema.getGlobalDescribe().get(sObjName).getDescribe().getLabel();
        return label;
      }
    }
  4. 单击文件>保存
  5. 修改IndicatorBadges组件,使其包含在对我们的Apex控制器的引用,方法是将其添加controller="INDICATOR_Controller" access="public"到该组件的第一行中>
  6. 您的组件标记现在应如下所示:
    <aura:component implements="force:hasRecordId,force:hasSObjectName,flexipage:availableForRecordHome" controller="INDICATOR_Controller" access="public">
      <aura:attribute name="objLabel" type="String" />
      <aura:attribute name="badgeList" type="Object[]"/>
      <aura:handler name="init" value="{!this}" action="{!c.doInit}"/>
      <lightning:card iconName="standard:coaching" title="{! v.objLabel +' Indicators'}" class="slds-text-title_caps">
        <div class="slds-p-left--medium slds-p-right--medium">
          <lightning:layout verticalAlign="stretch" horizontalAlign="start" multipleRows="true" pullToBoundary="small">
            <aura:iteration items="{!v.badgeList}" var="thisBadge" aura:id="theList">
              <lightning:layoutItem size="2" padding="horizontal-small">
                <!--Indicator Badge here-->
              </lightning:layoutItem>
            </aura:iteration>
          </lightning:layout>
        </div>
      </lightning:card>
    </aura:component>
  7. 单击右侧组件面板中的“ CONTROLLER”,然后将内容替换为以下代码:
    ({
      doInit : function(component, event, helper) {
        var sObj = component.get("v.sObjectName");
        if(sObj){
          helper.getLabelForRecord(component, sObj);
        }
      },
      //future code here
    })
  8. 点击HELPER在右侧的组件面板,并替换此代码的内容:
    ({
      getLabelForRecord : function(component, sObj){
        var action = component.get("c.getSObjectLabel");
        action.setParams({
          sObjName : sObj
        });
        action.setCallback(this, function(response){
          var state = response.getState();
          if(state === "SUCCESS"){
            var label = response.getReturnValue();
            component.set("v.objLabel", label);
          } else if(state === "ERROR"){
            console.log('Error: ' + JSON.stringify(response.error));
          } else {
            console.log('Unknown problem, state: '+ state + ', error: ' + JSON.stringify(response.error));
          }
        });
        $A.enqueueAction(action);
      },
      //future code here
    })
  9. 单击文件>全部保存

代码重点:

  • 我们使用“ INDICATOR_”作为Apex的类名称前缀,以支持我们的Indicator Badge应用程序和Lightning组件。随着我们的代码变得越来越复杂(将在下一步中执行),此模式将有助于将ZBS代码库保持为清晰的功能组。
  • 通过将controller=属性添加到标记中,我们更新了Lightning组件以了解基于Apex的控制器。
  • 我们组件的客户端控制器具有doInit执行基本健全性检查的功能(确保组件具有有效的API名称以传递给服务器),然后将对服务器的调用和对帮助者的响应处理的协调工作移交给其他人。这种使客户端控制器更简单,将复杂性交给助手的模式在生产就绪的组件中更为典型。我们将在下一步中了解原因。
  • 在我们的Apex控制器中,getSObjectLabel方法使用从Lightning组件传入的对象的API名称来获取更加用户友好的SObject Label。我们通过使用Schema类和相关方法来获取此信息。
  • 使用Schema方法返回的值不仅显示用户期望的标准对象和自定义对象的对象名称,还以该用户的语言环境设置确定的语言显示信息。(如果存在翻译版本。)

向Lightning Experience中的页面添加指示器徽章

在继续之前,我们需要做的最后一件事是将进行中的指标徽章组件放入Lightning Experience中的某些记录页面上。

  1. 在Salesforce中,单击“帐户”选项卡。单击任何记录名称。(如果“最近查看”列表中没有记录,请更改为“所有帐户”列表。)
  2. 单击齿轮图标(齿轮图标),然后选择“编辑页面”以打开Lightning App Builder。
  3. IndicatorBadges自定义组件从“闪电组件”列表拖到页面上,并将其放在“活动”和“颤动”选项卡上方的右列中。
    Lightning App Builder中的帐户记录页面
  4. 点击保存
  5. 点击激活
  6. 点击分配为组织默认值,然后单击下一步,然后保存
  7. 单击背部以退出Lightning App Builder并返回到记录主页。
    帐户记录详细信息页面
    那里!我们可以看到指标徽章组件,并且它了解它应该向我们显示“帐户指标”。让我们将组件放在另一个对象的页面上,看看是否发现任何更改。
  8. 单击联系人选项卡,然后选择任何记录。(同样,如果“最近查看”列表中没有记录,请更改为“全部”列表视图。)
  9. 重复步骤2-7。

晕!在该Contact对象上,我们可以看到该force:hasSObjectName接口和我们的Apex代码的结合,正如该组件告诉我们的那样,我们正在查看“联系指示器”。(现在,减去指标。)我们使组件能够在不同的上下文中正确运行,并开始使用与sObject无关的设计模式。挺棒的。

构建可重复使用的闪电组件 – 准备与对象无关

准备与对象无关

注意

从Spring ’19版本(API版本45.0)开始,您可以使用两个编程模型来构建Lightning组件:Lightning Web组件模型和原始的Aura组件模型。闪电Web组件和Aura组件可以在页面上共存和互操作。此内容涵盖了Aura组件。

有关Lightning Web组件的更多信息,请参见 Build Lightning Web Components路径。

介绍

在该项目中,我们帮助媒体发行公司ZBS(Zippy广播系统)将其出色的DJ,veejay和Podcast主持人与全球粉丝联系起来。为此,我们通过构建Lightning组件来为ZBS代理提供关于其Salesforce系统中的节目,联合组织和其他数据的复杂信息的快速可视化摘要。而且,我们使用自定义元数据来允许ZBS在任何对象中重用这些组件,而无需进行任何代码更改!

您将在此项目中做什么:

  1. 使用自定义元数据类型来定义功能模式。
  2. 创建自定义元数据记录以将该模式链接到业务规则。
  3. 创建一个显示在Lightning App Builder中的IndicatorBadges组件。
  4. 创建一个基于Apex的控制器和服务类,并在Lightning组件中使用它们。
  5. 使用基础的Lightning组件。
  6. 与Lightning Data Service一起使用以响应记录级别的更改。
  7. 创建具有复杂通信模式的控制器和助手标记。
  8. 自定义几个对象的记录主页,并对所有对象使用相同的组件。

创建一个新的Trailhead游乐场

对于此项目,您需要创建一个新的Trailhead Playground。滚动到该页面的底部,单击游乐场名称,然后选择创建游乐场。创建新的Trailhead游乐场通常需要3-4分钟。

注意

是的,我们的意思是全新的Trailhead游乐场!如果您使用现有的组织或游乐场,则可能会遇到无法完成挑战的问题。

安装Trailhead软件包并导入数据

我们需要做的第一件事是了解ZBS数据模型并导入一些样本数据。如果您在组织中看到一个标签为“安装软件包”的标签,那就太好了!请按照以下步骤操作。

如果不是,请从App Launcher(应用启动器)中找到并选择Playground Starter,然后按照步骤进行操作。如果您没有看到Playground Starter应用程序,请复制 此程序包安装链接, 并 在Trailhead帮助上签出“ 安装程序包或应用程序以完成Trailhead挑战”。

  1. 单击安装软件包选项卡。
  2. 粘贴04tB0000000M8Av到字段中。
  3. 点击安装
  4. 选择“仅为管理员安装”,然后单击“安装”。软件包安装完成后,您会看到一个确认页面,并收到一封电子邮件,发送到与您的游乐场关联的地址。
  5. 软件包安装后,我们需要更新其中一个软件包文件。
  6. 点击齿轮图标(设定),然后选择开发者控制台
  7. 在开发人员控制台中,选择“文件”>“打开”,然后选择“类”> ZBSDataLoadController,然后单击“打开”
  8. 用以下代码替换代码:
    global with sharing class ZBSDataLoadController {
      @RemoteAction
      global static void deleteAll() {
         // DELETE [SELECT ID FROM Account WHERE CreatedDate >= THIS_WEEK];    
         // DELETE [SELECT ID FROM property__c];    
         // DELETE [SELECT ID FROM broker__c];
         // DELETE [SELECT ID FROM bot_command__c];
      }
    }
  9. 保存文件。
  10. 在应用启动器(应用启动器)中,找到并选择ZBSLightning
  11. 单击“加载数据”,然后单击“初始化样本数据”以导入您在该项目中使用的数据。
  12. 单击 设定,然后选择设置
  13. Session在“快速查找”框中输入并选择“会话设置”
  14. 滚动到“缓存”部分,然后取消选中“启用安全和持久的浏览器缓存”以提高性能
  15. 点击保存

检查指标标记自定义元数据类型

我们为ZBS构建的解决方案的核心是快速可视化的摘要,我们称之为指示器徽章。支持此指标标志的自定义元数据类型的开头以及我们稍后将介绍的Apex模式的基本形状来自于协作的Big Thinks在Visualforce中构建的名为Weathervane的开源解决方案,该解决方案现在由大船咨询。(非常感谢Christian Carter和Beth Breisnes,这是Big Thinks的大脑!)Weathervane和ZBS的指标徽章的共同主题是能够将复杂的逻辑转换为视觉效果。我们以自定义元数据开始此转换。

自定义元数据类型有两个关键部分:自定义元数据类型和基于自定义元数据类型的记录。自定义元数据类型和自定义元数据记录之间的关系就像杯形蛋糕罐和罐中烘焙的杯形蛋糕之间的关系。每个纸杯蛋糕的形状都由罐子定义,但是蛋糕的味道,糖霜颜色和填充类型等都属于每个纸杯蛋糕,而不是罐子。

ZBS入门包包括一个称为“指示符徽章”的自定义元数据类型。让我们来看看。

  1. 在“设置”的“首页”标签中,Custom Metadata Types在“快速查找”框中输入,然后单击“自定义元数据类型”
  2. 从列表中选择指标徽章
  3. 此页面上的信息告诉我们有关模式的信息,该模式使我们能够从ZBS Salesforce实例中的不同字段和对象中获取值并创建视觉效果。换句话说,这就是我们的蛋糕罐。
  4. 创建良好模式的重要部分是为元数据类型上的字段选择正确的数据类型。您如何确保留有足够的灵活性,使得该模式可以在您的实例中使用,并且可以容忍随着时间的变化?您如何在灵活性与给用户足够的结构避免简单错误之间取得平衡?
  5. 让我们看几个关键字段,看看我们的指标徽章元数据类型如何回答这些问题。

检查指标徽章自定义字段

  1. 在“指示符徽章”自定义元数据详细信息页面上,向下滚动到该Custom Fields部分。
  2. 选择对象字段。
  3. 该字段的数据类型为Metadata Relationship,这意味着我们可以将我们的指标徽章元数据类型链接到ZBS组织元数据的其他部分。如本Metadata Relationship Options节所述,在这种情况下,此字段Entity Definition与ZBS Salesforce实例中的标准对象和自定义对象有关系,或者用更熟悉的话来说。当用户去创建一个“指示符徽章”自定义元数据记录时(我们将在一分钟内完成),“对象”字段将看起来像一个选择列表,其值与组织中可用的标准对象和自定义对象相匹配。自定义元数据类型还可以具有哪些其他类型的关系字段?让我们找出答案。
  4. 单击页面左上方的“返回指示器标志”。
  5. 在“指标徽章”详细信息页面上,再次向下滚动至该Custom Fields部分,然后选择“相关字段”
  6. 该字段也是一个关系字段,但是当查看时Metadata Relationship Options,我们看到该字段具有另一种类型的关系。而不是链接到标准或自定义对象,我们链接到标准和自定义字段。我们还可以看到此自定义字段由我们的对象自定义关系字段控制。这意味着,当用户决定使用Account“对象”字段中的值作为指标标记记录时,“相关字段”将显示“帐户”字段的选择列表。因此,用户不必完全记住(或拼写!)API名称即可将记录与对象和字段连接起来。使用关系字段代替硬编码的字符串还意味着我们可以更改对象或字段的名称,并且我们的记录与任何更改保持同步。
  7. 我们的“指标标志”自定义元数据类型的其余字段可帮助定义逻辑,以确定记录是否应显示指标,以及显示时指标的外观。我们混合使用文本字段和选择列表字段来实现此模式。
  8. 我们的选择列表之一尚未完成。在继续之前,让我们深入研究并解决该问题。

完成徽章颜色选择列表

  1. 从“Custom Fields指示器徽章”详细信息页面的部分中,选择“徽章颜色”选择列表。
  2. 向下滚动到该Values部分,然后选择“新建”
  3. 输入RosyBrown作为值。
  4. 点击保存
  5. 既然我们已经了解了指标徽章的基本形状,并且已经完成了所有字段,那么让我们为自定义元数据记录构建一个列表视图,以帮助我们了解如何将这种自定义元数据类型用于ZBS。

创建一个显示所有指标的列表视图

  1. 在“指标标志”元数据详细信息页面的顶部,单击“管理指标标志”按钮。
  2. 从“指标徽章”列表主页的顶部,选择“创建新视图”
  3. 填写列表视图详细信息。
    • 查看名称: All Indicators
    • 查看唯一名称: All_Indicators
  4. 滚动到步骤3。选择要显示的字段,然后选择以下字段和顺序:
    • 标签
    • 指标徽章名称
    • 目的
    • 相关领域
    • 比较类型
    • 比较值
    • 徽章图标名称
    • 徽章颜色
  5. 点击保存

现在,我们实际上可以看到我们的自定义字段,并看到我们如何使用业务逻辑和特定于ZBS的详细信息填充我们的指标徽章元数据类型创建的模式。(对于您和美食迷来说,这是我们的美味蛋糕!)我们可以看到Active Subscriber记录正在寻找该Active Subscriptions字段中值为1或更大的Accounts 。该Content Advocate记录寻找与在一个2个或更多的价值联系人Total Account Subscriptions 场。该Active Syndication记录被连接到自定义复选框(或布尔数据类型)字段中的聚合自定义对象上。每个自定义元数据记录还定义了用户对于特定徽章应该看到的图标形状和颜色,即一旦我们构建了一些组件和Apex类。

创建自定义元数据记录

在构建组件并开始使用代码之前,我们需要解决最后的配置问题。ZBS还希望根据其业务规则显示一些其他种类的指标。我们需要通过创建一些其他的指标徽章自定义元数据记录来帮助他们。

  1. 在“设置”的“首页”标签中,Custom Metadata Types在“快速查找”框中输入,然后单击“自定义元数据类型”
  2. 选择管理记录
  3. 创建具有以下值的记录:
    • 标签: Audience Favorite
    • 指标徽章名称: Audience_Favorite
    • 对象:显示
    • 相关领域:主动联合组织
    • 比较类型:大于或等于
    • 比较值: 3
    • 徽章图标名称: custom:custom97
    • 徽章颜色:番茄
  4. 注意“徽章图标名称”字段如何具有一些帮助文本,解释了用户应如何在该字段中输入数据。这样,自定义元数据字段的行为就像常规对象字段一样。与对象一样,您可以为自定义元数据类型创建验证规则,以确保记录遵循预期的行为。
  5. 我们用于“徽章图标名称”字段的结构基于 Salesforce闪电设计系统(SLDS)以及这些图标的名称。对于“观众最爱”徽章,我们使用的是SLDS的“ custom97”图标,它是一个温度计: SLDS Custom97图标。我们徽章的颜色将与“徽章颜色”字段匹配。整洁吧?
  6. 点击保存并新建。创建具有以下值的记录:
    • 标签: Needs Some Love
    • 指标徽章名称: Needs_Some_Love
    • 对象:显示
    • 相关领域:主动联合组织
    • 比较类型:小于或等于
    • 比较值: 2
    • 徽章图标名称: custom:custom94
    • 徽章颜色:RosyBrown
  7. 点击保存并新建。创建具有以下值的记录:
    • 标签: Subscription Superpower
    • 指标徽章名称: Subscription_Superpower
    • 对象:帐户
    • 相关领域:有效订阅
    • 比较类型:大于或等于
    • 比较值: 3
    • 徽章图标名称: custom:custom1
    • 徽章颜色:DeepSkyBlue
  8. 点击保存并新建。创建具有以下值的记录:
    • 标签: Syndication Rockstar
    • 指标徽章名称: Syndication_Rockstar
    • 对象:联系人
    • 相关领域:主动联合组织
    • 比较类型:大于或等于
    • 比较值: 2
    • 徽章图标名称: standard:calibration
    • 徽章颜色:红色
  9. 点击保存并新建。创建具有以下值的记录:
    • 标签: Syndication Superpower
    • 指标徽章名称: Syndication_Superpower
    • 对象:帐户
    • 相关领域:主动联合组织
    • 比较类型:大于或等于
    • 比较值: 3
    • 徽章图标名称: custom:custom49
    • 徽章颜色:DeepPink
  10. 点击保存并新建。创建具有以下值的记录:
    • 标签: Vlog
    • 指标徽章名称: Vlog
    • 对象:显示
    • 相关字段:格式
    • 比较类型:包含
    • 比较值: Vlog
    • 徽章图标名称: custom:custom99
    • 徽章颜色:紫罗兰色
  11. 点击保存

使用Lightning Web Components开源构建您的第一个应用程序 – 创建会话详细信息Web组件

创建会话详细信息Web组件

在此步骤中,您将创建一个新的Web组件,该组件显示特定会议会话的详细信息。您还实现了一个简单的导航系统,该系统允许用户在会话列表和会话详细信息之间来回导航。

创建sessionDetails Web组件

首先,让我们创建Web组件的JavaScript文件。

  1. 在现有my文件夹下,创建一个名为的新文件夹sessionDetails
  2. sessionDetails文件夹中,创建一个名为的新文件sessionDetails.js
  3. 实现sessionDetails类,如下所示:
    import { LightningElement, api } from 'lwc';
    import { getSession } from 'data/sessionService';
    export default class SessionDetails extends LightningElement {
      session;
      @api
      set sessionId(id) {
        this._sessionId = id;
        this.session = getSession(id);
      }
      get sessionId() {
        return this._sessionId;
      }
    }

    我们使用@api装饰器将sessionIdsetter方法定义为public。这样,您就可以提供标签sessionId 的属性my-session-details。带注释的属性@api是反应性的:当其值更改时,组件将自动重新呈现。

  4. 保存sessionDetails.js文件。

现在,让我们在Web组件模板中创建用户界面。

  1. sessionDetails文件夹中,创建一个名为的新文件sessionDetails.html
  2. 实施模板,如下所示:
    <template>
      <template if:true={session}>
        <h2>{session.name}</h2>
        <p class="icon time">{session.dateTime}</p>
        <p class="icon room">{session.room}</p>
        <h3>Abstract</h3>
        <div class="abstract">{session.description}</div>
      </template>
    </template>
    
  3. 保存sessionDetails.html文件。

接下来,让我们创建Web组件的CSS文件,以确保一切看起来都不错。

  1. sessionDetails文件夹中,创建一个名为的新文件sessionDetails.css
  2. 定义以下样式:
    :host {
      width: 100%;
      margin: 2rem;
      color: #080707;
    }
    p {
      margin: 0;
    }
    .icon {
      color: #039be5;
      background-repeat: no-repeat;
      background-size: contain;
      padding-left: 24px;
    }
    .icon.time {
      background-image: url(https://developer.salesforce.com/files/js-dev/icons/clock.svg);
      margin-top: .6rem;
    }
    .icon.room {
      background-image: url(https://developer.salesforce.com/files/js-dev/icons/location.svg);
      margin-top: .4rem;
    }
    h2 {
      font-weight: 600;
      font-size: 1.4rem;
    }
    h2 a, h2 a:visited {
      color: #039be5;
      text-decoration: none;
    }
    h2 a:hover {
      color: #017bb7;
    }
    h3 {
      font-weight: bold;
      font-size: 1.1rem;
      margin: 1.5rem 0 0.5rem 0;
    }
    .list-wrapper {
      display: flex;
      flex-direction: column;
    }
    .speaker-list {
      display: flex;
      flex-direction: row;
      flex-wrap: wrap;
      margin: 0 -0.5rem;
    }
  3. 保存sessionDetails.css文件。

而已!您创建了一个显示会议会话详细信息的Web组件。

将组件添加到应用程序

要查看它的实际效果,您需要将其添加到应用程序中。

  1. 打开app.html该文件app的文件夹。
  2. 在标签之后添加以下<my-session-list></my-session-list>标签:
    <my-session-details session-id={sessionId}></my-session-details>
  3. 保存app.html文件。
  4. 打开app.js文件。
  5. 在App类定义中定义一个属性:
    import { LightningElement } from 'lwc';
    export default class App extends LightningElement {
      sessionId;
    }
  6. 保存app.js文件。

返回浏览器,请注意该sessionDetails组件未出现。这是因为sessionId您刚刚定义的 属性app.js尚未指向实际的sessionId。换句话说,应用程序不知道要显示哪个会话。这就提出了一个很好的问题:sessionDetails 组件应实际显示哪个会话?答案是:用户在sessionList组件中单击的会话!sessionList组件如何通知应用程序单击了特定会话?通过调度自定义DOM事件。

一起布线

现在,您已经创建了所有不同的组件,您需要在应用程序的不同方面显示它们,并确保不同的组件相互反应。首先,让我们修改sessionList组件,使其在单击会话时触发一个事件。

  1. 打开sessionList.html文件。
  2. 将以下属性添加<a>标签:data-index={index} onclick={handleSessionClick}它看起来像 
    <a key={session.id} class="session" data-index={index} onclick={handleSessionClick}>
  3. 保存sessionList.html文件。
  4. 打开sessionList.js文件。
  5. handleSessionClick函数SessionList之后,将事件处理程序添加到类中handleSearchKeyInput
    handleSessionClick(event) {
      const index = event.currentTarget.dataset.index;
      const navigateEvent = new CustomEvent('navigate', {
        detail: {
          sessionId: this.sessions[index].id
        }
      });
      this.dispatchEvent(navigateEvent);
    }
  6. 保存sessionList.js文件。

接下来,让我们在appWeb组件中监听该事件。

  1. 打开app.html文件。
  2. onnavigatemy-session-list标签上添加一个属性:
    <my-session-list onnavigate={handleNavigate}></my-session-list>
  3. 保存app.html文件。
  4. 打开app.js文件。
  5. handleNavigate之后添加事件处理程序sessionId;
    handleNavigate(event) {
      this.sessionId = event.detail.sessionId;
    }
  6. 保存app.js文件。

返回浏览器,然后单击其中一个会话。现在,该会话的详细信息应出现在列表之后。 

在会话列表下呈现对话信息的应用程序。

一切正常,但是滚动到列表底部以查看详细信息并不是很好的用户体验。您可以在列表的右侧显示详细信息,但这可能不适用于移动设备。在下一部分中,您将实现一个基本的导航系统,该系统允许用户导航到不同的视图。

添加导航

导航是单页应用程序的重要组成部分。在此项目中,您将为应用程序使用两个状态(“列表”和“详细信息”)实现最小导航系统,并使用自定义事件在这些状态之间进行导航。

  1. 打开app.js文件。
  2. 声明一个state产权后sessionId;
    state = 'list';
  3. 修改handleNavigate事件处理程序更改应用程序的基础上,自定义导航事件值的状态。
    handleNavigate(event) {
      this.state = event.detail.state;
      this.sessionId = event.detail.sessionId;
    }
  4. 添加两个可以在组件模板中使用的getter函数,以检查应用程序的当前状态。
    get isStateList() {
      return this.state === 'list';
    }
    get isStateDetails() {
      return this.state === 'details';
    }
  5. 保存app.js文件。
  6. 打开app.html文件。
  7. <my-session-list>在一个if:true指令时,应用程序的状态是“清单”,只显示它:
    <template if:true={isStateList}>
      <my-session-list onnavigate={handleNavigate}>
      </my-session-list>
    </template>
    
  8. <my-session-details>在一个if:true指令时,应用程序的状态是“细节”,只显示它:
    <template if:true={isStateDetails}>
      <my-session-details session-id={sessionId}>
      </my-session-details>
    </template>
  9. onnavigatemy-session-details标签上添加一个属性:
    <my-session-details onnavigate={handleNavigate} session-id={sessionId}>
    </my-session-details>
  10. 保存app.html文件。

接下来,让我们确保选择会话时更改状态。

  1. 打开sessionList.js文件。
  2. handleSessionClick事件处理函数替换为:
    handleSessionClick(event) {
      const index = event.currentTarget.dataset.index;
      const navigateEvent = new CustomEvent('navigate', {
        detail: {
          state: 'details',
          sessionId: this.sessions[index].id
        }
      });
      this.dispatchEvent(navigateEvent);
    }
  3. 保存sessionList.js文件。

接下来,让我们确保用户可以返回到会话列表。

    1. 打开sessionDetails.html文件。
    2. 将会话标题替换<h2>{session.name}</h2>
<h2><a href="#" onclick={handleSessionsClick}>Sessions</a> &gt; {session.name}</h2>
  1. 保存sessionDetails.html文件。
  2. 打开sessionDetails.js文件。
  3. handleSessionsClick事件处理程序添加sessionDetails类中,紧接在sessionIdgetter函数之后:
    handleSessionsClick() {
      const navigateEvent = new CustomEvent('navigate', {
        detail: {
          state: 'list'
        }
      });
      this.dispatchEvent(navigateEvent);
    }
    
  4. 保存sessionDetails.js文件。

返回浏览器,然后单击其中一个会话。现在,会话列表显示单击的会话的详细信息视图。如果单击会话标题旁边的“会话”链接,则返回到会话列表。

Web组件介绍的会话详细信息视图

很好!会议与会者单击特定的会议时,可以查看会议列表并导航到详细信息视图。为了将您学到的东西付诸实践,创建一个最终的Web组件,该组件在会话详细信息视图上显示扬声器卡。

添加扬声器卡

首先,让我们创建Web组件的JavaScript文件。

  1. 在现有my文件夹下,创建一个名为的新文件夹speakerCard
  2. speakerCard文件夹中,创建一个名为的新文件speakerCard.js
  3. 实现SpeakerCard该类,如下所示:
    import { LightningElement, api } from 'lwc';
      export default class SpeakerCard extends LightningElement {
        @api speaker;
    }
  4. 保存speakerCard.js文件。

接下来,让我们创建Web组件的HTML模板。

  1. speakerCard文件夹中,创建一个名为的文件speakerCard.html
  2. 实施模板,如下所示:
    <template>
      <div class="card">
        <div class="header">
          <img src={speaker.pictureUrl} alt="Speaker picture">
          <div>
            <p class="title">{speaker.name}</p>
            <p class="icon email">{speaker.email}</p>
          </div>
        </div>
        {speaker.bio}
      </div>
    </template>
  3. 保存speakerCard.html文件。

接下来,让我们添加一些样式以确保一切都看起来不错。

  1. speakerCard文件夹中,创建一个名为的文件speakerCard.css
  2. 添加以下样式:
    :host {
      margin: 0.5rem;
      flex: 1;
      color: #080707;
    }
    .card {
      border: 1px solid #dddbda;
      border-radius: 0.25rem;
      padding: 1rem;
    }
    .card .header {
      display: flex;
      align-items: center;
      margin-bottom: 1rem;
    }
    .card img {
      border-radius: 50%;
      height: 5rem;
      margin-right: 1rem;
    }
    .card .title {
      font-weight: 600;
    }
    .card .icon {
      color: #039be5;
      background-repeat: no-repeat;
      background-size: contain;
      padding-left: 24px;
    }
    .card .icon.email {
      background-image: url(https://developer.salesforce.com/files/js-dev/icons/email.svg);
      margin-top: 0.4rem;
    }
    p {
      margin: 0;
    }
  3. 保存speakerCard.css文件。
将发言人添加到会话详细信息

最后,让我们将扬声器卡添加到会话详细信息视图中。

  1. 打开sessionDetails.html文件。
  2. abstractdiv之后添加以下标记:
    <h3>Speakers</h3>
      <div class="speaker-list">
        <template if:true={session.speakers}>
          <template for:each={session.speakers} for:item="speaker">
            <my-speaker-card key={speaker.id} speaker={speaker}>
            </my-speaker-card>
        </template>
      </template>
    </div>
  3. 保存sessionDetails.html文件。

返回浏览器窗口,然后单击列表中的会话。会话详细信息视图现在应该看起来像这样,包括扬声器卡。

 Web组件模式和最佳实践的会话详细信息视图,每个会话发言人都需要额外的卡片

恭喜,您已经成功创建了第一个Lightning Web Component开源应用程序!请查看本系列的下一个项目,在该项目中您可以修改应用程序以使用REST服务从Salesforce获取会议数据。您无需了解Salesforce即可执行下一个项目。我们将指导您完成所有步骤。

使用Lightning Web Components开源构建您的第一个应用程序 – 创建数据服务模块

创建数据服务模块

在JavaScript或Web组件应用程序中,有许多访问数据的策略。在此步骤中,您将创建一个简单的数据服务模块,可以将其导入任何Web组件中以检索会议会话列表。该模块使我们可以通过REST服务访问云中托管的示例数据。您可以使用 此链接在浏览器中调用端点来浏览数据。由于数据以JSON格式存储,因此我们的浏览器无法以漂亮的方式呈现信息。

JSON格式的会话数据视图

注意

我们将在本系列的其他项目中探索其他数据访问策略。例如,在本系列的下一个项目中,我们使用REST服务从Salesforce获取会议列表。

要使此数据可用,请创建一个sessionService模块,该模块封装数据访问逻辑以检索会议会话列表。

  1. src/client/modules文件夹中,创建一个名为的新文件夹data
  2. data文件夹中,创建一个名为的文件夹sessionService
  3. sessionService文件夹中,创建一个名为的文件sessionService.js
  4. 在中sessionService.js,如下执行数据服务。
    const URL = 'https://conference-lwc-app.herokuapp.com/api/sessions';
    let sessions = [];
    export const getSessions = () => fetch(URL)
      .then(response => {
        if (!response.ok) {
          throw new Error('No response from server');
        }
        return response.json();
      })
      .then(result => {
        sessions = result.data;
        return sessions;
      });
    export const getSession = sessionId => {
      return sessions.find(session => {
        return session.id === sessionId;
      });
    }

    该 getSession() 函数允许您从缓存的sessions 阵列中检索特定的会话 。创建会话详细信息Web组件时,可以在此项目的后面使用此功能。

  5. 保存sessionService.js文件。

而已!您创建了一个数据服务模块,可用于检索会议应用程序中任何位置的数据。在下一步中,您将创建一个Web组件,该组件使用 sessionService数据服务来显示会议列表。

使用Lightning Web Components开源构建您的第一个应用程序 – 创建数据服务模块

创建数据服务模块

在JavaScript或Web组件应用程序中,有许多访问数据的策略。在此步骤中,您将创建一个简单的数据服务模块,可以将其导入任何Web组件中以检索会议会话列表。该模块使我们可以通过REST服务访问云中托管的示例数据。您可以使用 此链接在浏览器中调用端点来浏览数据。由于数据以JSON格式存储,因此我们的浏览器无法以漂亮的方式呈现信息。

JSON格式的会话数据视图

注意

我们将在本系列的其他项目中探索其他数据访问策略。例如,在本系列的下一个项目中,我们使用REST服务从Salesforce获取会议列表。

要使此数据可用,请创建一个sessionService模块,该模块封装数据访问逻辑以检索会议会话列表。

  1. src/client/modules文件夹中,创建一个名为的新文件夹data
  2. data文件夹中,创建一个名为的文件夹sessionService
  3. sessionService文件夹中,创建一个名为的文件sessionService.js
  4. 在中sessionService.js,如下执行数据服务。
    const URL = 'https://conference-lwc-app.herokuapp.com/api/sessions';
    let sessions = [];
    export const getSessions = () => fetch(URL)
      .then(response => {
        if (!response.ok) {
          throw new Error('No response from server');
        }
        return response.json();
      })
      .then(result => {
        sessions = result.data;
        return sessions;
      });
    export const getSession = sessionId => {
      return sessions.find(session => {
        return session.id === sessionId;
      });
    }

    该 getSession() 函数允许您从缓存的sessions 阵列中检索特定的会话 。创建会话详细信息Web组件时,可以在此项目的后面使用此功能。

  5. 保存sessionService.js文件。

而已!您创建了一个数据服务模块,可用于检索会议应用程序中任何位置的数据。在下一步中,您将创建一个Web组件,该组件使用 sessionService数据服务来显示会议列表。

使用Lightning Web Components开源构建您的第一个应用程序 – 修改默认应用

修改默认应用

更新index.html文件

在上一步中,您使用该create-lwc-app 工具创建了样板应用程序 。在此步骤中,您将修改默认应用程序并将其变成会议管理应用程序。

您可以使用自己喜欢的代码编辑器完成此项目。我们建议使用 Visual Studio Code,但这不是必需的。我们以VS Code为将来的指示。

    1. 打开Visual Studio代码
    2. 在菜单中选择文件>打开
    3. 选择您的conference-app文件夹,然后单击“打开”

Visual Studio Code中的会议应用程序视图

  1. 在VS Code文件资源管理器中,展开src文件夹,然后展开client文件夹。
  2. 打开index.html文件。
  3. 现有内容替换为以下HTML代码:
    <!DOCTYPE html>
    <html lang="en">
      <head>
        <meta charset="utf-8" />
        <title>Lightning Conference</title>
        <style>
          body {
            font-family: Helvetica, Arial, sans-serif;
            margin: 0;
            padding: 0;
          }
        </style>
        <meta name="viewport" content="width=device-width,initial-scale=1" />
        <link rel="shortcut icon" href="/resources/favicon.ico" />
      </head>
      <body>
        <div id="main"></div>
      </body>
    </html>
  4. 保存index.html文件。

在此新版本中,您更改了页面标题和嵌入式CSS以支持我们应用程序的要求。在div与IDmain为您的应用程序使用了JavaScript中的入口点index.js文件使用追加了第一个Web组件createElement来创建组件。

import { createElement } from 'lwc';
import MyApp from 'my/app';
const app = createElement('my-app', { is: MyApp });
document.querySelector('#main').appendChild(app);

<my-app>是表示我们第一个Web组件的自定义元素:my是映射到文件系统上我的文件夹的名称空间,并且app是Web组件名称。所述appWeb组件被用作应用程序的容器。

修改应用程序Web组件

让我们修改 app Web组件以显示会议管理应用程序的标题。该组件可协调应用程序中的所有事件和数据。

  1. 在VS代码文件浏览器中,展开app文件夹下src/client/modules/my。该文件夹包含组成Lightning Web组件的三个文件:一个html文件(模板),一个js文件(类定义)和一个css文件(样式)。
  2. 打开app.html文件。
  3. 以下标记替换现有内容:
    <template>
      <header>
        <img src="resources/lwc.png" alt="App logo">
        <h2>Lightning Conference</h2>
      </header>
      <main class="content">
        <!-- Add components here -->
      </main>
    </template>

    该 <template> 标签是定制元素说明书的一部分,包括用于网络组件的HTML标记。

  4. 保存app.html文件。
设置Web组件的样式
  1. 闪电Web组件的样式看起来最好。打开文件app.css
  2. 以下样式替换现有内容:
    .content {
      padding: 0 3rem;
    }
    header {
      padding: 1rem;
      display: flex;
      color: #ffffff;
      background: #0288d1;
      box-shadow: 0 4px 3px rgba(1, 87, 155, 0.5);
      align-items: center;
    }
    header img {
      height: 3rem;
      margin-right: 0.3rem;
    }
    header h2 {
      font-size: 1.75rem;
      font-weight: 300;
    }
  3. 保存app.css文件。

返回浏览器窗口以查看更改。该应用程序应如下所示:

在本地运行的Lightning Conference应用程序的视图。

注意

如果您看不到更改,则可能已watch在命令行上终止了该过程。在这种情况下,请返回命令行,确保您位于正确的文件夹(conference-app)中,然后键入:npm run watch。打开浏览器窗口,然后导航到 Mac的http:// localhost:3001或 Windows的http://0.0.0.0:3001来访问您的应用程序。

做得好!您修改了默认的“应用程序” Web组件,并准备好主持会议应用程序。在下一步中,您将创建用于检索会议会话的数据服务。

使用Lightning Web Components开源构建您的第一个应用程序 创建应用程序

学习目标

在此项目中,您将:

  • 安装使用Lightning Web Components Open Source所需的工具。
  • 使用Lightning Web Components Open Source创建数据服务模块。
  • 使用Web组件和最新的Web标准创建示例会议管理应用程序。
介绍

Web标准的创新水平达到了前所未有的高度,令人兴奋。现在,需要框架的许多功能已成为标准配置。您不再需要专有的组件模型,专有的语言扩展,专有的模块等等。核心堆栈的标准化为新型框架打开了大门:这些框架的主要任务不再是填补核心堆栈中的空白,而是在标准堆栈的顶部提供薄薄的专业服务。现在适合大型应用程序开发。好处是巨大的。

  • 通用且可互操作的组件模型
  • 通用编程模型
  • 可转让的技能使寻找和发展开发人员更加容易
  • 更好的性能,因为核心功能是在Web引擎中本地实现的,而不是在JavaScript中编写的框架抽象中实现的

Lightning Web Components Open Source是基于Web标准构建的新型轻量级框架的实现。它使用自定义元素,模板,影子DOM,装饰器,模块和ECMAScript 6及更高版本中可用的其他新语言构造。

在此项目中,您将使用Lightning Web Components Open Source创建示例会议管理应用程序。此项目是向您介绍Lightning Web Components的三个项目系列中的第一个。

你建造什么

要创建会议管理应用程序,您需要构建并组装多个Web组件:应用程序容器,会议会话列表(以下屏幕截图),特定会话的详细信息等等。

让我们看看您将要创建什么:https : //conference-lwc-app.herokuapp.com。

最终的闪电会议应用程序的屏幕截图

既然您知道了Lightning Web Components框架是什么以及正在构建什么,那么该开始了!

创建闪电Web组件应用程序

使用Lightning Web Components Open Source创建应用程序的最快方法是使用 create-lwc-app CLI(命令行界面)。

重要笔记

  • 确保在系统上安装了LTS版本的Node.js。create-lwc-app依赖npx于npm 5.2中引入的Node包运行器()。如果您的系统上未安装Node.js,则可以在此处https://nodejs.org/安装 。
  • 确保已git安装。您可以在这里https://git-scm.com/downloads安装 。
  • create-lwc-app创建Lightning Web Components开源应用程序不是必需的。Lightning Web Components Open Source作为 npm模块提供https://github.com/salesforce/lwc/tree/master/packages/%40lwc,您可以使用Webpack或Rollup创建自己的构建过程。

要创建名为的应用程序conference-app,请打开命令行,然后键入:

npx create-lwc-app conference-app --yes -o express

如果使用Windows操作系统,并且要使用非基于Chromium的Edge浏览器,请键入以下命令:

npx create-lwc-app conference-app --yes -o edge,express

此命令创建默认的项目结构和一个简单的应用程序以帮助您入门。作为该过程的一部分,CLI将安装框架,工具依赖项并创建应用程序。

应用程序创建过程完成后,您应该看到以下消息:

🎉在/ YOUR / FILE / STRUCTURE / conference-app中创建了会议应用程序。检出package.json的scripts部分开始。

运行新应用

在命令行上,键入:

  1. cd conference-app
  2. npm run watch

    注意

    注意

    watch过程将自动跟踪您的代码更改,在浏览器中重新编译和刷新应用程序。您无需手动编译更改并在浏览器中重新加载应用程序。

  3. 在浏览器窗口中,对于Mac ,导航至http:// localhost:3001; 对于Windows ,导航至 http://0.0.0.0:3001,以访问默认应用程序。

本地托管网页的图像,显​​示有闪电和文字,显示为:编辑src / modules / client / my / app / app.html并保存以供实时重新加载。

恭喜你!您已经创建了第一个Lightning Web Component开源应用程序。在下一步中,您将修改默认应用程序。

我们不会检查您的任何本地开发。单击 验证步骤转到项目的下一步。

使用Lightning Web Components开放源代码访问Salesforce数据 – 连接到Salesforce

连接到Salesforce

在此步骤中,您将通过从Salesforce获取会话和演讲者数据来更新Trailhead项目“ 使用Lightning Web Components Open Source构建您的第一个应用程序”中构建的应用程序。

为此,您设置了本地 Express服务器以连接到Trailhead Playground,并提供一个为会议管理应用程序提供数据的端点。

安装套件

第一步是安装两个Node.js程序包,这些程序包将用于本地开发以及将Express服务器连接到Trailhead Playground并对其进行身份验证。这两个软件包是JSForce和Dotenv。

JSForce

JSforce(以前称为Node-Salesforce)是利用Salesforce API的同构JavaScript库。它既可以在浏览器中运行,也可以在Node.js中运行,并且主要是通过异步JavaScript函数调用封装对Salesforce提供的各种API的访问。

多滕夫

环境变量可帮助您维护应用程序的可配置性,而无需修改基础代码。Dotenv从本地.env文件加载环境变量,以提供轻松的本地开发体验。

要安装软件包:

  1. 打开一个终端窗口。
  2. 切换到包含会议管理应用程序的目录。
  3. 运行npm install jsforce@^1.0.0 dotenv

创建.env文件

接下来,将本地环境文件添加到会议管理应用程序项目。这将存储用于将Express服务器连接到您的Salesforce实例的身份验证信息。

  1. 下载您选择的文本编辑器。尽管Salesforce不提供Lightning Web Components Open Source的扩展,但是我们仍然建议您使用 Visual Studio Code。我们将以VS Code作为我们将来的说明。
  2. 打开 Visual Studio代码。
  3. 文件>打开
  4. 选择您的conference-app文件夹,然后单击“打开”Visual Studio Code中的会议应用程序视图。
  5. 文件>新建文件
  6. 复制此文本并将其粘贴到文件中。
  7. SF_LOGIN_URL=https://login.salesforce.com
    SF_USERNAME=YOUR_USERNAME
    SF_PASSWORD=YOUR_PASSWORD
    SF_TOKEN=YOUR_SECURITY_TOKEN
  8. 使用您的数据更新占位符值
  9. SF_USERNAME:您的Trailhead Playground用户名。
    SF_PASSWORD:您的Trailhead Playground密码。
    SF_TOKEN:您的Trailhead Playground安全令牌。
  10. 文件>保存。
  11. 输入.env(以前置字符开头)作为文件名。确保文件已保存在根文件夹(conference-app)中。如果您看到一条消息,显示系统文件保留了带前导号的文件名,则可以确认。

向Salesforce进行身份验证

Salesforce支持不同类型的身份验证机制,但是为了简单起见和该项目的目的,您使用基于用户名和密码的登录名。接下来,添加用于设置Express服务器以对您的Salesforce实例进行身份验证的代码。

  1. 展开src文件夹,然后展开server文件夹。
  2. 打开api.js
  3. 将此代码粘贴到const app = express();
    const jsforce = require('jsforce');
    require('dotenv').config();
    const { SF_USERNAME, SF_PASSWORD, SF_TOKEN, SF_LOGIN_URL } = process.env;
    if (!(SF_USERNAME && SF_PASSWORD && SF_TOKEN && SF_LOGIN_URL)) {
        console.error(
            'Cannot start app: missing mandatory configuration. Check your .env file.'
        );
        process.exit(-1);
    }
    const conn = new jsforce.Connection({
        loginUrl: SF_LOGIN_URL
    });
    conn.login(SF_USERNAME, SF_PASSWORD + SF_TOKEN, err => {
        if (err) {
            console.error(err);
            process.exit(-1);
        }
    });
  4. 保存文件api.js

此代码从您的.env文件中读取环境变量,并使用它们来创建到您的Salesforce实例的经过身份验证的连接。接下来,添加一些代码以从Salesforce中获取数据。

创建端点以从Salesforce读取数据

现在,您已经对Salesforce进行了身份验证,就可以开始安全地访问Salesforce资源。如前所述,您将创建一个运行逻辑以访问数据的端点。然后,客户端组件可以使用此端点。

对于此项目,您可以通过运行SOQL查询从Salesforce提取数据。SOQL代表Salesforce对象查询语言,其语法与SQL非常相似。它是特定于Salesforce的查询语言,专门用于访问Salesforce中的数据。SOQL还具有联接功能,允许您在单个查询中获取相关数据。

  1. 展开文件夹src,然后展开文件夹server
  2. 打开api.js文件。
  3. app.get()用以下代码替换现有功能块:
    app.get('/api/sessions', (req, res) => {
        const soql = `SELECT Id, Name, toLabel(Room__c), Description__c, format(Date_and_Time__c) formattedDateTime,
            (SELECT Speaker__r.Id, Speaker__r.Name, Speaker__r.Description, Speaker__r.Email, Speaker__r.Picture_URL__c FROM Session_Speakers__r)
            FROM Session__c ORDER BY Date_and_Time__c LIMIT 100`;
        /* Salesforce connection */
    });

    soql属性包含SOQL语句,用于从Salesforce查询会话和发言人数据。它使用通过Session Speakers连接对象的内部查询。

  4. /* Salesforce connection */用以下代码替换注释:
    conn.query(soql, (err, result) => {
        if (err) {
            res.sendStatus(500);
        } else if (result.records.length === 0) {
            res.status(404).send('Session not found.');
        } else {
            /* Work with result data */
        }
    });

    使用jsforce查询方法,您可以使用SOQL语句使用已认证的连接来运行该查询。

  5. 更换评论/* Work with result data */
    const formattedData = result.records.map(sessionRecord => {
        let speakers = [];
        if(sessionRecord.Session_Speakers__r){
            speakers = sessionRecord.Session_Speakers__r.records.map(
                record => {
                    return {
                        id: record.Speaker__r.Id,
                        name: record.Speaker__r.Name,
                        email: record.Speaker__r.Email,
                        bio: record.Speaker__r.Description,
                        pictureUrl: record.Speaker__r.Picture_URL__c
                    };
                }
            );
        }
        return {
            id: sessionRecord.Id,
            name: sessionRecord.Name,
            dateTime: sessionRecord.formattedDateTime,
            room: sessionRecord.Room__c,
            description: sessionRecord.Description__c,
            speakers
        };
    });
    res.send({ data: formattedData });

    需要将返回的数据的形状映射为Express服务器预期将其提供给会议管理应用程序的API的形状。

  6. 保存api.js文件。

大!您将Express服务器设置为通过Salesforce进行身份验证,使用SOQL查询来查询数据,并使用自定义端点来提供数据。下一步是更新会议管理应用程序的“用户界面”部分以使用此新端点。

使用新端点更新数据服务
  1. 展开src/client/modules/data/sessionService文件夹。
  2. 打开sessionService.js
  3. URL用刚创建的服务器端点在第一行中更新变量。
  4. const URL = '/api/sessions';
  5. 保存sessionService.js

构建和测试

现在,验证您的应用程序正在运行。

  1. 打开终端。
  2. 运行npm run watch
    终端窗口显示服务器在端口3001上成功运行。
  3. 在http:// localhost:3001上打开浏览器 。该应用现在应该显示您的Trailhead游乐场中的会话列表。
  4. (可选)要查看来自您创建的端点的JSON响应,请在http:// localhost:3001 / api / sessions上打开浏览器 。

恭喜,您已经成功创建了一个Express服务器,该服务器使用通过身份验证的连接的Salesforce API来使用数据。在此跟踪中查看下一个项目, 将Lightning Web Components Open Source转换为Salesforce,在其中进行一些调整,然后将该应用程序部署在Salesforce平台上。您无需了解Salesforce即可执行下一个项目中的步骤-我们将指导您完成整个项目。

使用Lightning Web Components开放源代码访问Salesforce数据 – 导入样本数据

导入样本数据

现在您已经建立了数据模型,是时候输入数据了。您可以手动输入数据,也可以使用“数据导入向导”将其导入。

感谢Lightning Object Creator,用于会话的数据已被加载。使用数据导入向导将扬声器数据导入到Contact对象中。

  1. 下载 此CSV文件(右键单击并选择“另存为”),其中包含扬声器列表。
  2. 在您的Trailhead游乐场中,点击,然后 设置齿轮图标。 选择设置
  3. Data Import Wizard在“快速查找”框中输入并选择“数据导入向导”
    设置屏幕显示“数据导入向导”节点。
  4. 查看欢迎页面上提供的信息,然后单击启动向导!
    数据导入向导欢迎屏幕。
  5. 选择要导入的数据。
    • 您要导入哪种数据下,选择客户和联系人
    • 您要做什么下选择添加新记录
    • 在您的数据位于哪里下上传您下载的CSV文件
    • 您可以通过以下方式添加数据文件:将CSV拖动到页面的上传区域,或者单击您正在使用的CSV类别,然后导航到并选择文件。
      数据导入向导显示选择用于导入新联系人的选项。
  6. 单击下一步
  7. 在此屏幕中,您将CSV数据字段映射到Salesforce数据字段。数据导入向导尝试将尽可能多的数据字段映射到标准Salesforce数据字段。如果Salesforce无法自动映射字段,请手动执行。在这种情况下,Salesforce无法将Bio数据字段映射到任何Salesforce字段。
  8. 要手动映射该字段,请单击Bio行中的Map
  9. Description在搜索框中输入并选择联系人:描述。点击Map确认选择。
    数据导入向导中的一个弹出窗口,显示了映射到Contact:Description字段的Bio字段。
  10. 单击下一步
  11. 通过单击“开始导入”查看并开始导入。导入完成后,您会收到状态电子邮件。

接下来,在每个会话中添加发言人。

  1. 在App Launcher(应用启动器图标)中,找到并选择Sessions
  2. 在会话列表视图中选择“所有记录”。
    会话列表视图,显示所有导入的会话记录。
  3. 单击会话名称以打开详细信息视图。
  4. 单击“相关”,然后从“扬声器”磁贴中单击“新建”。
    会议发言人相关列表。
  5. 在弹出窗口中,通过在“演讲者”字段中键入内容找到演讲者,然后从显示的建议中选择一位演讲者。(您可以在上一步中用于数据导入的CSV中找到发言人姓名。)
    New Session Speaker弹出窗口。
  6. 点击保存
  7. 重复这些步骤,以在每个会话中添加至少一位发言人。

很好!接下来,您更新会议管理应用程序以获取您在Salesforce中创建的数据。

使用Lightning Web Components开放源代码访问Salesforce数据 – 设置您的Salesforce数据模型

设置您的Salesforce数据模型

在Salesforce中,数据存储在一个对象中。您可以将对象视为项目列表或电子表格。在这里,可以存储和维护按字段分组的信息,例如每个客户的名字和姓氏。

包含两列数据的Excel电子表格的详细信息。

有两种类型的对象:标准对象和自定义对象。标准对象是Salesforce附带的对象。常见的业务对象(例如客户,联系人,潜在客户和机会)都属于该组。 

自定义对象是您创建的用于存储特定于您的公司或行业的信息的对象。在此步骤中,您将创建两个自定义对象,并将新字段添加到标准对象。这三个对象共同构成了会议管理应用程序的数据模型。

创建会话对象

Salesforce提供了一个名为Lightning Object Creator的工具,只需单击几下即可将电子表格和CSV文件转换为应用程序。使用Lightning Object Creator,您可以将电子表格的列转换为字段,定义字段类型以及导入电子表格数据。

使用闪电对象创建器创建一个保存您的会话数据的对象。

  1. 下载 此CSV文件(右键单击并选择“另存为”),其中包含会话列表。
  2. 在您的Trailhead游乐场中,点击,然后 设置齿轮图标。 选择设置。这将在新选项卡中启动安装程序。
  3. 单击对象管理器
  4. 单击创建,然后从电子表格中选择自定义对象
    用于从电子表格创建新的自定义对象的导航步骤。
  5. Lightning Object Creator在新选项卡中打开。单击“使用Salesforce登录”
    “电子表格”向导中的“自定义对象”,具有用于登录到Salesforce和“使用沙箱登录”的选项。
  6. 输入您的Trailhead Playground的用户名和密码,然后点击登录
  7. 单击允许以允许Lightning Object Creator访问您的Salesforce实例。
  8. 在下一步中,您必须选择电子表格的来源。点击上传,然后选择您下载的文件。
    显示不同数据源的Lightning Object Creator向导。
  9. 从“记录名称”字段的下拉列表中选择“名称” 。记录名称出现在页面布局,相关列表,查找和搜索结果中。
  10. 选择“选择列表”作为“房间”的Salesforce字段类型。
    映射屏幕显示电子表格各列的Salesforce字段名称和数据类型。
  11. 单击下一步
  12. 在对象属性屏幕中输入以下详细信息:
    • 标签: Session
    • 复数标签: Sessions
    • API名称: Session
      对象属性屏幕。
  13. 点击完成
  14. Salesforce将创建对象及其字段,并将所有电子表格数据导入到新创建的对象中。
    该屏幕显示成功的对象创建和数据导入。
  15. 关闭选项卡。

您刚刚将数据从CSV文件转换为数据模型。接下来,更改现有标准对象上的数据模型。

向联系人对象添加新字段

联系人是Salesforce中用于存储有关人的信息的标准对象,它带有一组标准字段。对于此项目,您可以使用“联系人”对象存储会议发言人的详细信息。您需要再创建一个联系人字段,用于存储演讲者个人资料图片的URL。 

  1. 在安装程序中,单击对象管理器
  2. 从显示的对象列表中,单击“联系人”
  3. 单击“字段和关系”,然后单击“新建”,这将启动一个向导,可用于向对象添加新字段。
  4. 从显示的数据类型列表中选择URL,然后单击Next
  5. 如下定义字段:
    • 栏位标签: Picture URL
    • 栏位名称: Picture_URL
  6. 保留所有其他内容,依次单击“下一步”,“下一步”和“保存”

您更改了联系人数据模型,以便可以在其中存储有关会议发言人的信息。接下来,使用结点对象完成您的数据模型。

创建会话发言人连接对象

一个会话可以有一个或多个发言人,一个发言人可以有一个或多个会话。为了在数据模型中反映这种多对多关系,请创建另一个自定义对象,该对象用作标准Contact对象和自定义Session对象之间的结合。此连接对象使您可以对会话和发言人之间的多对多关系进行建模。 

  1. 安装程序中,单击“对象管理器”
  2. 单击创建,然后选择自定义对象
  3. 在“自定义对象定义”页面上,使用这些详细信息创建Session Speaker对象。(接受此处未定义的属性的默认值。)
    • 标签: Session Speaker
    • 复数标签: Session Speakers
    • 对象名称: Session_Speaker
    • 记录名称: Session Speaker Number
    • 数据类型:自动编号
    • 显示格式: SESP-{00000}
    • 起始编号:1
  4. 点击保存
  5. 单击字段和关系,然后单击新建
  6. 选择主从关系,然后单击下一步
  7. 在“相关于”中,选择“会话”,然后单击“下一步”
  8. 定义字段:
    • 栏位标签: Session
    • 栏位名称: Session
  9. 将其他所有内容保持不变,然后单击“下一步”,“下一步”,“下一步”
  10. 将“相关列表标签”设置为“发言人”,单击“保存并新建”
  11. 选择主从关系,然后单击下一步
  12. 在“相关于”中,选择“联系人”,然后单击“下一步”
  13. 定义字段:
    • 栏位标签: Speaker
    • 栏位名称: Speaker
  14. 将其他所有内容保持不变,然后单击“下一步”,“下一步”,“下一步”
  15. 将“相关列表标签”设置为“会话”,然后单击“保存”

很好!在下一步中,将样本数据加载到数据模型中的每个对象中。