Списки значений для ODataDB

Списки значений для ODataDB

ODataDB поддерживает следующие функции:

ODataDB автоматически создает необходимые объекты OData.

Встроенный клиент JavaScript и SaveToDB 8+ поддерживают эти функции из коробки.

Предположим, у нас есть база данных с следующими таблицами:

Database Diagram of Sample 02 - Advanced Features

Определение EntityType для s02.cashbook выглядит следующим образом:

<EntityType Name="cashbook">
    <Key>
        <PropertyRef Name="id"/>
    </Key>
    <Property Name="id" Type="Edm.Int32" Nullable="false">
        <Annotation Term="Core.Permission" EnumMember="Core.Permission/Read"/>
    </Property>
    <Property Name="date" Type="Edm.Date" Nullable="false"/>
    <Property Name="account_id" Type="Edm.Int32" Nullable="false"/>
    <Property Name="item_id" Type="Edm.Int32"/>
    <Property Name="company_id" Type="Edm.Int32"/>
    <Property Name="debit" Type="Edm.Decimal"/>
    <Property Name="credit" Type="Edm.Decimal"/>
    <NavigationProperty Name="account" Type="s02.accounts" Partner="cashbooks">
        <ReferentialConstraint Property="account_id" ReferencedProperty="id"/>
    </NavigationProperty>
    <NavigationProperty Name="company" Type="s02.companies" Partner="cashbooks">
        <ReferentialConstraint Property="company_id" ReferencedProperty="id"/>
    </NavigationProperty>
    <NavigationProperty Name="item" Type="s02.items" Partner="cashbooks">
        <ReferentialConstraint Property="item_id" ReferencedProperty="id"/>
    </NavigationProperty>
</EntityType>

Клиентские приложения могут использовать NavigationProperties для создания списков значений.

Предположим, таблица xls.handlers содержит следующие настройки:

IDTABLE_SCHEMATABLE_NAMECOLUMN_NAMEEVENT_NAMEHANDLER_SCHEMAHANDLER_NAMEHANDLER_TYPEHANDLER_CODE
 s02cashbookaccount_idValidationLists02accountsTABLEid, +name
 s02cashbookitem_idValidationLists02itemsTABLEid, +name
 s02cashbookcompany_idValidationLists02companiesTABLEid, +name

Определение колонок account_id, item_id и company_id для s02.cashbook изменится следующим образом:

<EntityType Name="cashbook">
    ...
    <Property Name="account_id" Type="Edm.Int32" Nullable="false">
        <Annotation Term="ODataDB.ValueList" Path="default.default/accounts_select_id_name_order_by_name1"/>
    </Property>
    <Property Name="item_id" Type="Edm.Int32">
        <Annotation Term="ODataDB.ValueList" Path="default.default/items_select_id_name_order_by_name1"/>
    </Property>
    <Property Name="company_id" Type="Edm.Int32">
        <Annotation Term="ODataDB.ValueList" Path="default.default/companies_select_id_name_order_by_name1"/>
    </Property>
    ...
</EntityType>

Аннотации ODataDB.ValueList содержат пути к объявленным FunctionImport в EntityContainer с именем схемы default:

<FunctionImport Name="s02_accounts_select_id_name_order_by_name1" Function="s02.accounts_select_id_name_order_by_name1" EntitySet="s02_accounts"/>
<FunctionImport Name="s02_items_select_id_name_order_by_name1" Function="s02.items_select_id_name_order_by_name1" EntitySet="s02_items"/>
<FunctionImport Name="s02_companies_select_id_name_order_by_name1" Function="s02.companies_select_id_name_order_by_name1" EntitySet="s02_companies"/>

Вот объявление функций в схеме s02:

<Function Name="accounts_select_id_name_order_by_name1">
    <ReturnType Type="Collection(s02.accounts)"/>
</Function>
<Function Name="items_select_id_name_order_by_name1">
    <ReturnType Type="Collection(s02.items)"/>
</Function>
<Function Name="companies_select_id_name_order_by_name1">
    <ReturnType Type="Collection(s02.companies)"/>
</Function>

Пример настройки для процедуры s02.usp_cashbook, которая извлекает данные из таблицы s02.cashbook и имеет три параметра: account_id, item_id, company_id:

IDTABLE_SCHEMATABLE_NAMECOLUMN_NAMEEVENT_NAMEHANDLER_SCHEMAHANDLER_NAMEHANDLER_TYPEHANDLER_CODE
 s02usp_cashbookaccount_idParameterValuess02accountsTABLEid, +name
 s02usp_cashbookitem_idParameterValuess02itemsTABLEid, +name
 s02usp_cashbookcompany_idParameterValuess02companiesTABLEid, +name

Вот объявление функций:

<EntityType Name="usp_cashbook_result" BaseType="s02.cashbook" OpenType="true"/>
<Function Name="usp_cashbook">
    <Parameter Name="account_id" Type="Edm.Int32">
        <Annotation Term="ODataDB.ValueList" Path="default.default/accounts_select_id_name_order_by_name"/>
    </Parameter>
    <Parameter Name="item_id" Type="Edm.Int32">
        <Annotation Term="ODataDB.ValueList" Path="default.default/items_select_id_name_order_by_name"/>
    </Parameter>
    <Parameter Name="company_id" Type="Edm.Int32">
        <Annotation Term="ODataDB.ValueList" Path="default.default/companies_select_id_name_order_by_name"/>
    </Parameter>
    <ReturnType Type="Collection(s02.usp_cashbook_result)"/>
</Function>

В этом примере также используется аннотация ODataDB.ValueList для указания функций получения списков значений.

Полную модель можно открыть онлайн:

https://odatadb.savetodb.com/v4/mssql-023/default/en-us/$metadata

Этот веб-сайт использует куки. Продолжая использовать веб-сайт, Вы принимаете условия Политики защиты персональных данных.