指定此类中定义的任何web method
的编码。此关键字仅适用于web服务
和web客户端
类。
要指定此类的web method
的输入和输出所使用的编码,请使用以下语法:
Class MyApp.MyClass [ SoapBodyUse = soapbodyuse ] { //class members }
其中soapbodyuse
是下列之一:
literal
文字(默认)—默认情况下,此类中的web method
使用文字数据。也就是说,SOAP
消息的<Body>
中的XML
与WSDL
中给出的模式完全匹配。encoded
编码—默认情况下,此类中的web method
使用SOAP
编码的数据。也就是说,SOAP
消息的<Body>
中的XML
使用了适合所使用的SOAP
版本的SOAP
编码,如以下规范所要求的: SOAP 1.1
(https://www.w3.org/TR/2000/NOTE-SOAP-20000508/Opens in a new window)SOAP 1.2
(https://www.w3.org/TR/soap12-part2/Opens in a new window)重要提示:对于手动创建的web服务
,该关键字的默认值通常是合适的。当使用SOAP
向导从WSDL生成web
客户端或服务时,InterSystems IRIS会将此关键字设置为适合该WSDL
;如果修改该值,web客户端或服务可能不再工作。
此关键字指定此类中定义的任何web method
使用的默认编码。它还控制这个类的ELEMENTQUALIFIED
和XMLELEMENT
参数的默认值,这将在本主题的一个小节中讨论。
可以通过使用SoapBodyUse
方法关键字或SoapBodyUse
查询关键字,为单个方法重写此关键字。
此关键字不是继承的。
默认值为文字。(SOAP
标准V1.1指定web method
应该使用SOAP
编码。但是,大多数SOAP
客户端(包括.NET
)都使用文字样式。)
SoapBodyUse
关键字指定了WSDL
的<binding>
部分中<soap:body>
元素的Use
属性的值。例如,如果SoapBodyUse
是字面意思,则WSDL
可能如下所示:
...
<binding name="MyServiceNameSoap"
...
<soap:binding ...
<operation name="Add">
<soap:operation ...>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
...
相反,如果对SoapBodyUse
进行编码,则WSDL
可以改为如下所示:
...
<binding name="MyServiceNameSoap" ...
<soap:binding ...
<operation name="Add">
<soap:operation .../>
<input>
<soap:body use="encoded" namespace="http://www.mynamespace.org"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</input>
<output>
<soap:body use="encoded" namespace="http://www.mynamespace.org"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</output>
</operation>
</binding>
...
对于SOAP 1.2
,编码样式属性改为如下:
encodingStyle="http://www.w3.org/2003/05/soap-encoding"
SoapBodyUse
关键字还确定每个web method
的<message>
元素的<part>
元素的内容:
SoapBodyUse
是字面量,则每个<part>
元素都包含一个元素属性。例如:<part name="parameters" element="s0:Add"/>
再举一个例子:
<part name="b" element="s0:b"/>
SoapBodyUse
进行了编码,则每个<part>
元素都包含一个类型属性,而不是元素属性。例如:<part name="a" type="s0:ComplexNumber"/>
请注意,SoapBodyUse
还控制ELEMENTQUALIFIED
和XMLELEMENT
参数的默认值,这也会影响WSDL
。
对于使用文档样式消息的web方法,web服务会发送如下响应消息:
<?xml version="1.0" encoding="UTF-8" ?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV='http://schemas.xmlsoap.org/soap/envelope/'
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xmlns:s='http://www.w3.org/2001/XMLSchema'>
<SOAP-ENV:Body>
<AddResponse ...>
...
相反,对于使用编码样式消息的web服务
,响应消息如下:
<?xml version="1.0" encoding="UTF-8" ?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV='http://schemas.xmlsoap.org/soap/envelope/'
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xmlns:s='http://www.w3.org/2001/XMLSchema'
xmlns:SOAP-ENC='http://schemas.xmlsoap.org/soap/encoding/'
xmlns:tns='http://www.mynamespace.org'
xmlns:types='http://www.mynamespace.org'>
<SOAP-ENV:Body SOAP-ENV:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'>
<types:AddResponse>
...
ELEMENTQUALIFIED
参数的默认值取决于SoapBodyUse
关键字:
SoapBodyUse的值 | ELEMENTQUALIFIEDd的默认值 | Notes | |
---|---|---|---|
literal | 1 | elementFormDefault="qualified" | |
encoded | 0 | elementFormDefault="unqualified" |
XMLELEMENT
参数的默认值也依赖于SoapBodyUse
关键字:
SoapBodyUse的值 | XMLELEMENT的默认值 | Notes |
---|---|---|
literal | 1 | 消息部分具有元素属性 |
encoded | 0 | 消息部分具有类型属性 |
对于 %XML.DataSet
, 类型的对象,并非 SoapBindingStyle
和 SoapBodyUse
关键字的所有排列都是允许的。
指定在SQL中用于计算的类型。仅适用于数据类型类。
要指定用于SQL计算的类型,请使用以下语法:
Class MyApp.MyString [ ClassType = DataType, SQLCategory = STRING ] { //class members }
其中sqlcategory是下列之一:
DATE
DOUBLE
FMDATE
FMTIMESTAMP
INTEGER
MVDATE
NAME
NUMERIC
STRING
(默认)TIME
TIMESTAMP
此关键字指定在SQL计算
中用于此类的类型。
每个数据类型类都必须指定一个SQL类别
。
创建新的数据类型类时,请使用与正在创建的数据类型最匹配的SQL类别
值,或者,更好的做法是,将现有数据类型类子类化并继承其SQL类别
。
这个关键字是从主超类继承的。子类可以覆盖关键字的值。
默认的SQL类别
是字符串。
覆盖这个类的ID
列的默认SQL字段名
。
仅适用于持久类。
要覆盖这个类的ID
列的默认SQL字段名
,使用以下语法:
Class MyApp.MyClass [ SqlRowIdName = MyId ] { //class members }
其中MyId
是一个SQL标识符
。
此关键字覆盖用于ID
列的默认SQL字段名
。
当一个持久化类被投影为一个SQL
表时,每个对象的Object Identity
值被投影为一个SQL列——Row ID
列。
默认情况下,Row ID
列称为ID
。
如果类有另一个名为ID
的字段,则使用ID1
(以此类推)。
SqlRowIdName
关键字允许直接设置Row ID
列的名称。
该关键字继承自主超类。 子类可以覆盖关键字的值。
如果忽略此关键字,则该类的ID
列的SQL字段名称为ID
指定这个类的ID
列在投射到ODBC
和JDBC
时是否为隐藏字段。
仅适用于持久类。
当将表投射到ODBC
和JDBC
时,要隐藏ID
列,请使用以下语法:
Class MyApp.MyClass [ SqlRowIdPrivate ] { //class members }
否则,忽略此关键字或将单词Not
在关键字之前。
如果该关键字为true,那么当表被投射到ODBC
和JDBC
时,ID
列就是一个隐藏字段。
当一个持久化类被投影为一个SQL表时,每个对象的Object Identity
值被投影为一个SQL列——Row ID
列。
SqlRowIdPrivate
关键字允许指定是否应该对ODBC和基于jdbc的查询“隐藏”这个Row ID列。
如果行ID列被隐藏:
SELECT *
查询中。如果查询显式地在select
子句中列出了该列,那么ODBC
或JDBC
客户机可以选择该列。
(注意,根据定义,不能在UPDATE
或INSERT
语句中使用Row ID
列,因为不能修改或直接设置Row ID
的值)。
通常,在处理遗留关系数据并且不希望报告工具看到Row ID
列的情况下,使用此关键字。
此关键字不是继承的。
如果省略此关键字,当表被投影到ODBC
和JDBC
时,ID
列通常是可见的。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。