创建新的 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