OData Function

Function

在OData的metadata中,有Function及Action的定义。Function和Action的主要区别在于,Function是只读的,客户端调用Function后,服务端不会有任何状态影响。而Action代表的是某种写操作,客户端调用后,服务端会产生状态影响(说直接点就是有数据更改了)。

Function的调用,是通过HTTP GET的方式调用,具体的调用:
http://server.com/odata.svc/testImportFunction(partyId=’10000’,otherParam=’9999’)

在metadata的定义中,定义的Function是无法直接调用的,这个概念跟EntityType的定义一样,EntityType也是无法直接访问的。访问Function有两种途径,一个是定义FunctionImport,一个是将Function定义为bound Function。
FunctionImport:

<Schema>
    <Function Name="TestFunction">
        <Parameter Name="partyId" Type="Edm.String" Nullable="false"/>
        <Parameter Name="otherParam" Type="Edm.String" />
        <ReturnType Type="Edm.String"/>
    </Function><EntityContainer Name="DefaultContainer">
        <FunctionImport Name="testImportFunction" Function="com.dpbird.TestFunction"/></EntityContainer>
</Schema>

注意,这里定义的FunctionImport,就是http访问的,真正的Function的定义,是无法直接访问,需要通过FunctionImport。

Bound Function:

<Schema>
    <EntityType Name="Party">
        <Key>
            <PropertyRef Name="productId"/>
        </Key>
        <Property Name="partyId" Type="Edm.String" Nullable="false"/><Property Name="isEnable" Type="Edm.Boolean"/>
    </EntityType><Function Name="TestBoundFunction" IsBound="true">
        <Parameter Name="party" Type="com.dpbird.Party" Nullable="false"/>
        <Parameter Name="otherParam" Type="Edm.String" />
        <ReturnType Type="Edm.String"/>
    </Function>
</Schema>

注意这里的IsBound是true。对于bound function,也不能直接访问Function,而是需要通过bound的对象Party进行访问

http://server.com/odata.svc/Party(‘10000’)/TestBoundFunction(otherParam=’9999’)

注意,Function定义的第一个参数,就是bound的对象,所以,后续的Function调用,不要再传第一个参数了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值