Big Objects-定义自定义

学习目标

完成本单元后,您将能够:

  • 创建自定义Big Objects。
  • 构建自定义索引。
  • 部署自定义Big Objects。
  • 填充一个Big Objects。

定义自定义Big Objects

所以你已经查看了自定义Big Objects的用例,或者想出了自己的用例。现在是时候建立一个。

您可以在安装程序中定义自定义Big Objects。您还可以使用Metadata API定义自定义Big Objects,但在安装程序中更简单。要开始使用,请登录您的Trailhead Playground并转到安装程序。在较高的层次上,这就是你如何定义一个Big Objects。

  1. 单击并选择“ 设置”
  2. Big Objects在“快速查找”框中输入,然后选择“ Big Objects
  3. 创建一个Big Objects并添加一些基本细节。
  4. 添加自定义字段。它们将数据存储在您的Big Objects上。
  5. 添加索引。索引定义Big Objects的复合主键,用于查询和过滤Big Objects数据。
  6. 保存Big Objects并将状态更改为已部署。

现在让我们更详细地介绍这些步骤。

虽然自定义Big Objects与标准对象和自定义对象类似,但某些参数对于Big Objects是唯一的,并且某些参数不适用。对象名称在组织中的所有标准,自定义,外部和大型对象中必须是唯一的。

Big Objects定义细节

定义Big Objects时,首先要填写一些有关它的基本细节。

字段名称描述
标签此名称用于引用用户界面中的对象。
多个标签对象的复数名称。
从元音开始如果它适合您组织的默认语言,请指明标签前面是“an”还是“a”。
对象名称Big Objects的唯一API名称。在托管包中,此名称可防止与包安装发生命名冲突。仅使用字母数字字符和下划线。名称必须以字母开头且没有空格。它不能以下划线结尾,也不能有两个连续的下划线。保存后,Big Objects的API名称将使用后缀“__b”与自定义对象后缀“__c”进行标识。
描述有意义的描述可帮助您记住在列表中查看对象时之间的差异。
上下文相关的帮助设置定义用户从对象记录的主页(概述),编辑和详细信息页面,列表视图和相关列表中单击此页面的“帮助”时显示的URL 。此设置不会影响页面顶部的“帮助”链接。该链接始终打开“帮助”窗口。
部署状态创建Big Objects时,状态将设置为In Development。在包含至少包含一个自定义字段的索引之前,您无法部署Big Objects。索引中只允许使用必需的自定义字段。创建索引后,您会看到Deployed的第二个状态。准备好授予用户访问权限后,将状态更改为“已部署”。

Big Objects自定义字段

定义好Big Objects后,添加自定义字段。自定义字段存储Big Objects的唯一数据。您还可以创建自定义关系字段,以将您的Big Objects与Salesforce中的另一个对象相关联。将自定义字段添加到Big Objects的方式与向Salesforce中的任何对象添加自定义字段的方式相同。Big Objects支持以下字段类型:

  • 查找关系
  • 日期时间
  • 文本
  • 文字区(长)

要为Big Objects创建索引,必须至少将一个自定义字段标记为必需。

定义自定义Big Objects的索引

这个很重要!请记住,Big Objects索引中定义的字段决定了Big Objects的身份和查询能力。索引中定义的字段应该是与查询最相关的字段,因此您必须具有远见并在此处进行一些规划。您定义字段的顺序也是一个重要的考虑因素。如果您使用SOQL查询Big Objects,则只能按照您定义它们的顺序查询构成索引的字段。将查询过滤器中最常用的字段分配到第一个位置。你的索引。您还可以仅使用特定的比较运算符,具体取决于字段在查询中的位置。我们将在下一个单元中详细介绍查询。

定义索引时请记住这些注意事项。

  • 索引必须至少包含一个自定义字段,并且最多可以包含五个自定义字段。
  • 索引中包含的自定义字段必须标记为必需。
  • 长文本区域字段不能包含在索引中。
  • 索引中所有文本字段的字符总数不能超过50。
  • 创建索引后,您无法编辑或删除它。要更改索引,请使用新索引创建另一个Big Objects。

Big Objects索引详细信息

定义组成自定义Big Objects索引的字段,并确定字段和排序顺序。

字段名称描述
标签标签用于指代用户界面中的索引。
名称索引的API名称。
索引字段为索引中包含的每个自定义字段设置“索引位置”和“索引方向”。此处的字段顺序决定了它们在索引中的顺序。对于最常用的过滤器参数,将“索引位置”设置为1。Index Direction的有效值为Ascending和Descending。

示例自定义Big Objects

现在您已经知道制作自定义Big Objects需要什么,请尝试制作一个。让我们假装你开发了这款超棒的新游戏,SFORCE-COM:UFBO防御,玩家可以防御地球对抗身份不明的飞行大物体威胁。您希望能够存储玩家在单个游戏会话中进行的所有互动。在每个游戏会话中,您可以在自定义Big Objects中捕获此信息,Customer_Interaction__b:

  • 玩家购买的东西数量 In_Game_Purchase__c
  • 他们取得的最高水平 Level_Achieved__c
  • 他们有多少人的生命 Lives_This_Game__c
  • 他们的平台在 Game_Platform__c
  • 他们的得分在 Score_This_Game__c
  • 他们的帐户名称 Account__c
  • 他们的比赛日期在 Play_Date__c
  • 他们的上场时间 Play_Duration__c

您的游戏非常受欢迎,因此对于每个用户,您每天都会进行多次互动,再加上您庞大的玩家群,这是一个非常惊人的记录数。啊,成功的代价!

您可以在自定义Big Objects上定义所有这些字段。定义字段后,还可以定义构成索引的字段。每个玩家的帐户名称都是唯一的,因此您已经选择了Account__c作为我们指数中的第一个字段。索引中的下一个字段是玩家的游戏平台,Game_Platform__c那么会议的日期, Play_Date__c。此特定订单允许您仅查询帐户,帐户和游戏平台,帐户,游戏平台和播放日期。

使用这些示例中的确切值来创建具有八个自定义字段和索引的自定义Big Objects。如果表中未列出字段和值,请忽略它或将其保留为默认值。

Big Objects定义细节

字段名称
标签客户互动
多个标签客户互动
对象名称Customer_Interaction
描述留着空白
部署状态开发中

Big Objects自定义字段

  • 游戏内购买
    • 数据类型:文本
    • 现场标签:游戏内购买
    • 长度:16
    • 字段名称:In_Game_Purchase
    • 要求:不
  • 达到水平
    • 数据类型:文本
    • 字段标签:达到等级
    • 长度:16
    • 字段名称:Level_Achieved
    • 要求:不
  • 生活使用这个游戏
    • 数据类型:数字
    • Field Label:生活使用此游戏
    • 长度:18
    • 小数位:0
    • 字段名称:Lives_This_Game
    • 要求:不
  • 平台
    • 数据类型:文本
    • 字段标签:平台
    • 长度:16
    • 字段名称:Game_Platform
    • 要求:是的
  • 得分这个游戏
    • 数据类型:文本
    • Field Label:为这场比赛打分
    • 长度:16
    • 字段名称:Score_This_Game
    • 要求:不
  • 帐户
    • 数据类型:查找
    • 相关:帐户
    • 字段标签:帐户
    • 字段名称:Game_User_Account
    • 要求:是的
  • 比赛日期
    • 数据类型:日期/时间
    • 字段标签:播放日期
    • 字段名称:Play_Date
    • 要求:是的
  • 播放持续时间
    • 数据类型:数字
    • 字段标签:播放持续时间
    • 长度:18
    • 小数位:2
    • 字段名称:Play_Duration
    • 要求:不

现在,您有八个字段可以跟踪所有玩家的互动情况。做得好!

大对象自定义字段

Big Objects索引详细信息

字段名称
标签客户互动指数
名称CustomerInteractionsIndex
索引字段指数位置1:账户_c,降序索引位置2:Game_Platform__c,升序索引位置3:Play_Date__c,降序

部署Big Objects

现在您已经定义了自定义Big Objects,您已准备好部署它。单击 Big Objects上的“ 编辑 ”,然后将部署状态更改为“已部署”。

它们出现在设置中的大对象。

现在,您已准备好开始使用新的自定义Big Objects。

设置中的自定义大对象。

从这里,您可以编辑自定义Big Objects及其字段的标签和名称,但不能编辑或删除索引。要更改索引,请从新的Big Objects开始。您还可以从安装程序中删除自定义Big Objects。删除的Big Objects存储15天。在此期间,您可以恢复或永久删除它,但在这15天后,Big Objects将被永久删除。

填充Big Objects

填充Big Objects有两种主要方式。您可以将.csv文件与Data Loader或API一起使用,或者通过Apex完全执行。使用.csv文件时,文件中的第一行必须包含用于将.csv数据映射到自定义Big Objects的字段标签。将数据上传到Data Loader中的Big Objects或通过Bulk API或SOAP API上传。这是我们用来上传到我们的.csv文件Customer_Interaction__bBig Objects。作为一个例子,一个Big Objects可以支持比我们在这里提供的数据多很多倍的数据。

Play Start,In-Game Purchase,Level Achieved,Lives Used,Platform,Play Stop,Score,Account
2015-01-01T23:01:01Z,A12569,57,7,PC,2015-01-02T02:27:01Z,55736,001R000000302D3
2015-01-03T13:22:01Z,B78945,58,7,PC,2015-01-03T15:47:01Z,61209,001R000000302D3
2015-01-04T15:16:01Z,D12156,43,5,iOS,2015-01-04T16:55:01Z,36148,001R000000302D3

如果你想使用Apex填充 Customer_Interaction__b, 使用 insertImmediate 方法。

// Define the record
Customer_Interaction__b bo = new Customer_Interaction__b();
bo.Account__c = '001R000000302D3';
bo.Game_Platform__c = 'PC';
bo.Play_Date__c = DateTime.newInstance(2018, 2, 5);
bo.In_Game_Purchase__c = 'A12569';
bo.Level_Achieved__c = '45';
bo.Lives_This_Game__c = '3';
bo.Score_This_Game__c = '5500';
bo.Play_Duration__c = 25;
 
// Insert the record, which creates a new record
database.insertImmediate(bo);
// Define the record
Customer_Interaction__b bo = new Customer_Interaction__b();
bo.Account__c = '001R000000302D3';
bo.Game_Platform__c = 'PC';
bo.Play_Date__c = DateTime.newInstance(2018, 2, 5);
bo.In_Game_Purchase__c = 'A12569';
bo.Level_Achieved__c = '45';
bo.Lives_This_Game__c = '3';
bo.Score_This_Game__c = '5500';
bo.Play_Duration__c = 25;
 
// Modify a field in the index
bo.Game_Platform__c = 'Mac';
 
// Insert the record, creating a new record because the primary key has changed 
database.insertImmediate(bo);
// Define the record
Customer_Interaction__b bo = new Customer_Interaction__b();
bo.Account__c = '001R000000302D3';
bo.Game_Platform__c = 'PC';
bo.Play_Date__c = DateTime.newInstance(2018, 2, 5);
bo.In_Game_Purchase__c = 'A12569';
bo.Level_Achieved__c = '45';
bo.Lives_This_Game__c = '3';
bo.Score_This_Game__c = '5500';
bo.Play_Duration__c = 25;
 
// Modify a field not included in the index
bo.Level_Achieved__c = '1';
 
// Insert the record, which updates the second record because the index is the same 
database.insertImmediate(bo);
警告

警告

不允许使用混合DML调用的Apex测试失败。如果只写入Big Objects,则测试会将错误数据插入到您必须手动删除的目标Big Objects中。要包含对目标Big Objects的测试DML调用,请使用带有Apex存根API的模拟框架。

重新插入具有相同索引但具有不同数据的记录会导致类似于upsert操作的行为。如果存在具有索引的记录,则插入将使用新数据覆盖索引值。插入是幂等的,因此插入现有数据不会导致重复。上传数百万条记录时,重新插入很有帮助。如果发生错误,则重新插入会重新上载失败的上载而不会出现重复数据。在重新插入期间,如果提供的索引不存在记录,则插入新记录。