Skip to main content Link Search Menu Expand Document (external link) Copy Copied

OData中的其它类型

EnumType

EnumType是在OData里定义枚举类型,枚举值是通过子元素Element来表达。

<Schema>
    <EnumType Name="Gender">
        <Member Name="M" Value="1"/>
        <Member Name="F" Value="2"/>
    </EnumType>
    <EntityType Name="Person">
        <Key>
            <PropertyRef Name="partyId"/>
        </Key>
        <Property Name="partyId" Type="Edm.String"/>
        <Property Name="firstName" Type="Edm.String"/>
        <Property Name="lastName" Type="Edm.String"/>
        <Property Name="gender" Type="com.dpbird.Gender"/>
    </EntityType>
    ...
</Schema>

上述例子中,定义了Gender这个EnumType。在Person定义中,引用了Gender。 http://server/odata.svc/People(‘admin’)

{
    "@odata.context": "http://server/odata.svc/$metadata#People/$entity",
    "@odata.metadataEtag": "1663051319573",
    "@odata.etag": "1663050393692",
    "partyId": "admin",
    "firstName": "THE",
    "lastName": "ADMINISTRATOR",
    "gender": "M"
}

ComplexType

如果需要用到一些复杂的数据类型,可以定义ComplexType。如果把EntityType看作是数据库的表,那ComplexType可以看作Java Bean。

<Schema>
    <ComplexType Name="TestObjectOne">
        <Property Name="testObjectOneId" Type="Edm.String" Nullable="false"/>
        <Property Name="amount" Type="Edm.Decimal" Nullable="false"/>
        <Property Name="testDate" Type="Edm.DateTimeOffset"/>
    </ComplexType>
    <Action Name="testImportActionComplex">
        <Parameter Name="partyId" Type="Edm.String"/>
        <Parameter Name="otherParam" Type="Edm.String"/>
        <ReturnType Type="com.dpbird.TestObjectOne"/>
    </Action>
    ...
</Schema>

POST http://server/odata.svc/testImportActionComplex

{
  "partyId": "admin",
  "otherParam": "9999"
}

返回结果

{
  "@odata.context":"$metadata#com.dpbird.TestObjectOne",
  "@odata.metadataEtag":"1663051319573",
  "testObjectOneId":"10030",
  "amount":10,
  "testDate":"2022-09-13T07:17:36.718Z"
}

以上只是一个简单的例子,实际项目中,EnumType和ComplexType,可以用在EntityType的Property,Function和Action的Parameter,Function和Action 的ReturnType,也可以用在ComplexType的Property中。