开放数据协议(OData)包括标准的 CRUD (创建、检索、更新和删除)操作,这些操作映射到 HTTP 方法的 POST、GET、PUT/MERGE 和 Delete 几类。
此外,OData还支持进一步的服务操作:Function Import,这些操作可以由HTTP方法GET或POST调用,用于处理不能映射到标准 CRUD 操作的任何内容。
通过在数据模型中创建 Function Import,可以在 service Builder 中实现此类额外的服务操作。
例如,您可以为以下自定义操作创建函数导入:
- Work Item confirmation
- 检查航班的可用性
虽然创建新的函数导入来调用自定义操作很简单,但是如果可以使用标准的 CRUD 操作来调用要使用的操作,那么就应该尽量避免函数导入的创建。也就是说,应该只为不能使用标准操作调用的自定义操作创建函数导入。
Function import 的例子如下:
Function Import 有下列属性需要维护:
- Return Type Kind:
可以在 Complex Type 和 Entity Type 里选择,也可以选择不返回任何结果。这种情况下,可以理解成一个产生side effect 的函数执行,比如审批某个 work item.
- Return Type: 输入希望函数导入返回的复杂类型或实体类型的名称。可以使用输入帮助从项目中选择现有的复杂类型或实体类型。如果输入帮助为空,则必须首先在项目中创建相关的复杂类型或实体类型。如果选择了不返回,此字段是不可编辑的。
- Return Cardinality:
如果 Function Import 的返回类型是实体类型,并且:
如果实体类型的关键属性为核心类型 Edm.DateTime, Edm.DateTimeoffset 或 Edm.Guid,则返回基数选择成 0..1是不允许的,因为对于这些核心类型,初始 ABAP 值并不是一个有效的 edm 值,它可能会导致运行时异常。因此无法选择 0..1.
如果实体类型的关键属性不是Edm.DateTime, Edm.DateTimeoffset 或 Edm.Guid,并返回基数 0..1, 此时会显示一个警告消息。因为根据 OData 标准,0..1 不建议用于任何核心类型。
升级时,如果你的项目包含Function Import,它的返回类型是一个实体类型,核心类型Edm的关键字段。DateTime,电火花。DateTimeoffset或电火花。Guid,你会得到一条错误消息。
选择 HTTP 方法来调用函数导入。如果不选择HTTP方法,则必须使用GET或POST方法调用函数导入。