创建新的 API
若要在 Business Central 中创建新 API,您可以创建页面或查询对象。 根据对象类型,将 PageType 或 QueryType 属性设置为 API。 利用常规 OData Web 服务,您可以将现有页面或查询发布为 Web 服务。 然后,在卡页面中定义的所有字段都可以在 Web 服务中使用。 如果需要不是现有页面的一部分的字段,则必须将该字段添加到该页,但该字段也可供 Business Central 应用程序中的所有用户使用。
使用 API,您可以创建无法在客户端应用程序中请求,只能在 API 调用中使用的单独页面。 您不需要像对待常规 OData Web 服务那样发布 API 页面;只需要创建一个 API 页面作为扩展的组成部分。 部署您的扩展,然后您的 API 页面将可用。
若要创建 API 页面,请使用 tpage 代码片段,然后将 PageType 属性设置为 API。 当您将 PageType 更改为 API 时,同时设置以下部分属性:
APIVersion - 您的 API 的版本。 您可以创建同一 API 的多个版本。 每个版本都是一个单独的对象,具有自己的对象编号。 但是,您可以同时支持多个版本。 这样一来,当您的服务添加新字段或修改 API 结构时,不必直接修改依赖您的 API 服务的其他服务。 版本的值可以是 beta 或 v1.0、v1.1、v1.2、v2.0 等。 您必须明确提及字母 v。 您只能指定主要版本和次要版本,而不能指定内部版本号。 例如,v1.1.3 不是有效值。
APIPublisher - 创建 API 的公司的名称。 本值在 URL 中用于连接 API,还用来对来自同一发布者的所有 API 进行分组。
APIGroup - 用于对多个 API 进行逻辑分组的组。 本值还在 URL 中用于连接到 API。
EntityName - API 返回的实体的单数值(客户、物料、汽车、供应商、艺术家、电影等)。
EntitySetName - 此参数是 API 返回的实体的复数值(客户、项、汽车、供应商、艺术家、电影等)。
EntityCaption 和 EntitySetCaption - 实体和实体集的标题。 这些属性是本地化和可转换的,它们将在 entityDefinitions 终结点中返回。
DelayedInsert - 对于 API 页面,此值应始终设置为 true。 本设置确保仅在从 API 请求中预配所有值时,才在数据库中插入这些值。
ODataKeyFields - 此属性指示哪个字段用作键。 当您请求特定记录时,可以设置本属性,以指示将使用哪一个字段来搜索该特定记录。 Microsoft 创建一个 SystemId 字段,该字段可在每个表上使用,甚至您自己的表,无需自己创建。 SystemId 字段唯一标识记录,并且不会随时间而更改,即使更新主键也是如此。 我们建议您使用 SystemId 字段作为 ODataKeyFields。
下面的代码示例展示了使用客户表的自定义 API 页面的结构。
page 50115 "My Custom Customer API"
{
PageType = API;
APIVersion = 'v1.0';
APIPublisher = 'mycompany';
APIGroup = 'sales';
EntityName = 'mycustomer';
EntitySetName = 'mycustomers';
EntityCaption = 'My Customer';
EntitySetCaption = 'My Customers';
DelayedInsert = true;
SourceTable = Customer;
ODataKeyFields = SystemId;
layout
{
area(Content)
{
repeater(GroupName)
{
field(id; Rec.SystemId)
{
Caption = 'Id';
Editable = false;
}
field(name; Rec.Name)
{
Caption = 'Name';
}
field(email; Rec."E-Mail")
{
Caption = 'Email';
}
}
}
}
}
所有字段的名称都应使用驼峰命名法 (camelCase) 创建,并且不能包含特殊字符。
本 API 的 URL 基于 APIPublisher、APIVersion、APIGroup 和 EntitySetName 属性。
Base URL: https://api.businesscentral.dynamics.com/v2.0/<tenant>/<environment>
/api/<apipublisher>/<apigroup>/<apiversion>/<entitysetname>
在本示例中,URI 与下面的情况相似。
/api/mycompany/sales/v1.0/mycustomers