Microsoft Dataverse中的表定义描述存储结构化数据的每个表的结构和行为。 本文介绍如何以编程方式处理表定义,包括表名称、键、所有权和状态。 对于开发人员,表对应于在 Microsoft Dataverse 中使用数据时使用的类。
用于 .NET EntityMetadata 类和 Web API EntityMetadata 实体类型的 SDK 包含定义表的属性。
注释
使用 Web API 检索表定义时,响应中的数据使用 ComplexEntityMetadata 复杂类型。 区别在于 Attributes、ManyToOneRelationships、Keys、ManyToManyRelationships 和 OneToManyRelationships 是集合(数组),而不是集合值导航属性。 使用 Web API 创建或更新表时,请使用 EntityMetadata 实体类型 。
表名称
每个表都具有在创建表时定义的唯一名称。 您会以多种方式看到这个名称:
| Name 属性 | 描述 | Example |
|---|---|---|
SchemaName |
通常,逻辑名称的 Pascal 大小写版本。 | Account |
CollectionSchemaName |
架构名称的复数形式。 | Accounts |
LogicalName |
架构名称的全小写版本。 | account |
LogicalCollectionName |
集合架构名称的全小写版本。 | accounts |
EntitySetName |
用于使用 Web API 标识集合。 默认情况下,它与逻辑集合名称相同。 可以通过以编程方式更新表定义来更改实体集名称。 仅在为该表编写任何 Web API 代码之前进行此更改。 有关详细信息,请参阅 实体集名称。 |
accounts |
注释
使用代码创建自定义表时,必须将解决方案发布者自定义前缀添加到SchemaName前。 Dataverse 不会验证该前缀是否是正确的自定义前缀,只会验证它是否具有自定义前缀。 请确保使用正确的前缀,因为之后将无法更改。
CollectionSchemaName、LogicalName、LogicalCollectionName 和 EntitySetName 值是使用 SchemaName 值生成的。
每个表还具有三个可以显示本地化值的属性:
| 名称 | 描述 | Example |
|---|---|---|
DisplayName |
通常,与架构名称相同,但可以包含空格。 | 单位 |
DisplayCollectionName |
显示名称的复数形式。 | 帐户 |
Description |
描述该表格的简短句子。 | 代表客户或潜在客户的企业。 在商业交易中被计费的公司。 |
使用这些可本地化的值引用应用中的表。 您可以随时更改这些数值。 若要添加或编辑本地化值,请参阅 将自定义表、窗体和列文本翻译为其他语言。
主密钥
PrimaryIdAttribute属性值是用作表主键的列的逻辑名称。
默认情况下,所有表都包含一个名为 <table logical name>Id 的唯一标识符 GUID 列。
主名称
PrimaryNameAttribute属性值是存储标识表记录的字符串值的列的逻辑名称。 此值显示在用于在用户界面中打开记录的链接中。
示例: 联系人表 使用 FullName 列作为主要名称列。
注释
并非每个表都具有 PrimaryNameAttribute 属性值。 某些表不应显示在 UI 中。
表格图像
属性值 PrimaryImageAttribute 是选择表示实体记录的图像列的逻辑名称。 应用程序可以显示此图像。
示例: 联系人表EntityImage 列可以存储联系人的图片。
注释
此图像不同于模型驱动应用为表显示的图标。 该 IconVectorName 属性包含用于设置图标的 SVG Web 资源的名称。
有关详细信息,请参阅:
表的类型
表的功能和行为取决于多个表属性。 其中大多数属性相对简单,并且具有描述性名称。 需要更多说明的四个属性包括: 表所有权、 活动表、 Activityparty 表和 子表。
表所有权
可以通过表中的数据拥有方式对表进行分类。 此概念对于了解如何将安全性应用于表非常重要。 该 OwnershipType 属性保存此信息。 下表描述了不同的所有权类型:
| 所有权类型 | 描述 |
|---|---|
BusinessOwned |
数据属于业务部门。 可以在业务部门级别控制对数据的访问。 |
None |
数据不归另一个表所有。 |
OrganizationOwned |
数据属于组织。 可以在组织级别控制对数据的访问。 |
UserOwned |
数据属于用户或团队。 您可以在用户级别控制可对这些记录执行的操作。 |
Filtered (预览版) |
记录没有所有者。 可以通过基于评估列值的筛选器,使用安全角色权限控制访问。 |
创建新表时,仅可选择以下所有权选项:OrganizationOwned、UserOwned 或 Filtered(预览)。 做出选择后,无法更改此选项。
当记录需要用户或团队所有权、分配和共享时,选择 UserOwned。 当组织级别访问权限足够时,选择 OrganizationOwned。 如果需要基于列值的行级访问权限,并通过安全角色筛选器授予权限,请选择 Filtered (预览版)。 表中的 Filtered 记录没有所有者,无法分配或共享。
还可以对OrganizationOwned和UserOwned表应用记录筛选器,以基于列值控制行级访问,而无需更改它们的OwnershipType。 这些表保留其现有所有权模型。
详细了解筛选的记录所有权:
活动表
活动是用户执行或计划执行的任务。 活动是指可以在日历上记录的任何行动。
活动建模方式不同于存储业务数据的其他类型的表。 有关活动的数据经常显示在列表中,但每种类型的活动都需要唯一的属性。 与其使用包含所有可能属性的单个活动表,不如使用不同类型的活动表。
这些表中的每一个都继承自基础 ActivityPointer 表 的属性(Web API activitypointer 实体类型)。 这些表的属性 IsActivity 设置为 true。
| 表 / 实体类型 |
显示名称 | 描述 |
|---|---|---|
|
adx_inviteredemption / adx_inviteredemption |
邀请码兑换 | 包含有关兑换邀请的信息。 |
|
adx_portalcomment / adx_portalcomment |
门户网站评论 | 用于在门户上的用户和客户之间共享信息的活动。 |
|
预约 / 预约 |
约会 | 表示具有开始/结束时间和持续时间的时间间隔的预约。 |
|
chat / 聊天 |
Teams 聊天 | 仅供内部使用。 存储与Microsoft Teams聊天的Dynamics 365记录的关联数据的实体。 |
|
电子邮件 / |
电子邮件地址 | 使用电子邮件协议传递的活动。 |
|
传真 / 传真 |
传真 | 跟踪传真的呼叫结果和页数并可以选择存储文档的电子副本的活动。 |
|
信函 / 信 |
信 | 跟踪信件传递的活动。 此活动可包含信件的电子副本。 |
|
PhoneCall / 电话 |
电话联络 | 用于跟踪电话联络的活动。 |
|
RecurringAppointmentMaster / recurringappointmentmaster |
定期约会 | 定期约会系列的主约会。 |
|
SocialActivity / 社交活动 |
社交活动 | 仅供内部使用。 |
|
任务 / 任务 |
任务 | 表示需要完成的工作的通用活动。 |
当用户创建此类活动表记录之一时,系统会创建具有相同ActivityPointer唯一标识符列值的对应ActivityId表记录。 无法创建、更新或删除表的 ActivityPointer 实例,但可以检索它们。 此设计使你能够在列表中一起呈现所有类型的活动。
ActivityParty 表
使用 ActivityParty 表 (Web API 活动方实体类型)将结构添加到包含对其他表的引用的活动表 PartyListType 列。 为活动表列设置值(如 Email.to 或 PhoneCall.from) 时使用此表。 设置 participationtypemask 列以定义引用所扮演的角色。 角色包括Sender、ToRecipient、Organizer等。
可以查询 ActivityParty 表,但不能在与其相关的活动之外创建、检索、更新或删除活动群。
子表
如果IsChildEntity属性为 true,则该表将永远不会定义任何权限,并且永远不会由用户或团队拥有。 可以对子表执行的操作绑定到通过多对一关联关系与其关联的表。 如果用户能够对相关表执行某类操作,那么他们也可以对子表执行相同的操作。 当依赖的主表记录被删除时,子表将自动删除。
例如, Comment (PostComment)和 Like (PostLike) 是 Post 表的子级。
替换键
每个备用键定义都描述一个或多个组合起来可唯一标识一条记录的列。 通常,仅对与外部系统的集成应用备用密钥。 如果将数据与不支持 GUID 唯一标识符密钥的系统集成,此功能非常有用。 可以定义单个列值或列值的组合来唯一标识表。 添加备用键会对这些列强制实施唯一性约束。 不能在同一表中创建或更新另一条记录,使其具有相同的值。
有关详细信息,请参阅:
表状态
大多数表都有两个属性来跟踪记录的状态。 这些属性在 StateCode模型驱动应用中显示为 “状态 ”,在 StatusCode模型驱动应用中显示为 “状态原因 ”。
这两个属性都包含一组显示有效值的选择。 链接 StateCode 和 StatusCode 值,以便只有某些 StatusCode 选项对给定 StateCode有效。
此链接可能因表而异,但许多表的常见模式以及自定义表的默认值是以下模式:
| StateCode 选项 | StatusCode 选项 |
|---|---|
| 0:活动 | 1:活动 |
| 1:非活动 | 2:非活动 |
某些表具有不同的选项集。
示例: PhoneCall 表 StateCode 和 StatusCode 选项
| 州代码 | 状态码 |
|---|---|
| 0:打开 | 1:打开 |
| 1:已完成 | 2:已创建 4:已接收 |
| 2:已取消 | 3:已取消 |
不能自定义表的有效状态代码集,但可以自定义状态代码。 可以为一个相应的StatusCode添加更多StateCode选项。
对于自定义表,可以为状态之间的有效转换定义更多条件。
有关详细信息,请参阅: