前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >类关键字SoapBodyUse,SqlCategory,SqlRowIdName,SqlRowIdPrivate

类关键字SoapBodyUse,SqlCategory,SqlRowIdName,SqlRowIdPrivate

作者头像
用户7741497
发布2022-07-06 10:40:40
4610
发布2022-07-06 10:40:40
举报
文章被收录于专栏:hml_知识记录

第三十三章 类关键字 - SoapBodyUse

指定此类中定义的任何web method的编码。此关键字仅适用于web服务web客户端类。

用法

要指定此类的web method的输入和输出所使用的编码,请使用以下语法:

代码语言:javascript
复制
Class MyApp.MyClass [ SoapBodyUse = soapbodyuse ]  { //class members }

其中soapbodyuse是下列之一:

  • literal 文字(默认)—默认情况下,此类中的web method使用文字数据。也就是说,SOAP消息的<Body>中的XMLWSDL中给出的模式完全匹配。
  • encoded 编码—默认情况下,此类中的web method使用SOAP编码的数据。也就是说,SOAP消息的<Body>中的XML使用了适合所使用的SOAP版本的SOAP编码,如以下规范所要求的:

重要提示:对于手动创建的web服务,该关键字的默认值通常是合适的。当使用SOAP向导从WSDL生成web客户端或服务时,InterSystems IRIS会将此关键字设置为适合该WSDL;如果修改该值,web客户端或服务可能不再工作。

详解

此关键字指定此类中定义的任何web method使用的默认编码。它还控制这个类的ELEMENTQUALIFIEDXMLELEMENT参数的默认值,这将在本主题的一个小节中讨论。

可以通过使用SoapBodyUse方法关键字或SoapBodyUse查询关键字,为单个方法重写此关键字。

对子类的影响

此关键字不是继承的。

默认

默认值为文字。(SOAP标准V1.1指定web method应该使用SOAP编码。但是,大多数SOAP客户端(包括.NET)都使用文字样式。)

WSDL的关系

SoapBodyUse关键字指定了WSDL<binding>部分中<soap:body>元素的Use属性的值。例如,如果SoapBodyUse是字面意思,则WSDL可能如下所示:

代码语言:javascript
复制
...
<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可以改为如下所示:

代码语言:javascript
复制
...
<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,编码样式属性改为如下:

代码语言:javascript
复制
encodingStyle="http://www.w3.org/2003/05/soap-encoding"

SoapBodyUse关键字还确定每个web method<message>元素的<part>元素的内容:

  • 如果SoapBodyUse是字面量,则每个<part>元素都包含一个元素属性。例如:
代码语言:javascript
复制
<part name="parameters" element="s0:Add"/>

再举一个例子:

代码语言:javascript
复制
<part name="b" element="s0:b"/>
  • 如果对SoapBodyUse进行了编码,则每个<part>元素都包含一个类型属性,而不是元素属性。例如:
代码语言:javascript
复制
<part name="a" type="s0:ComplexNumber"/>

请注意,SoapBodyUse还控制ELEMENTQUALIFIEDXMLELEMENT参数的默认值,这也会影响WSDL

对SOAP消息的影响

对于使用文档样式消息的web方法,web服务会发送如下响应消息:

代码语言:javascript
复制
<?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服务,响应消息如下:

代码语言:javascript
复制
<?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一起使用

对于 %XML.DataSet, 类型的对象,并非 SoapBindingStyleSoapBodyUse 关键字的所有排列都是允许的。

第三十四章 类关键字 - SqlCategory

指定在SQL中用于计算的类型。仅适用于数据类型类。

用法

要指定用于SQL计算的类型,请使用以下语法:

代码语言:javascript
复制
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类别是字符串。

第三十五章 类关键字 - SqlRowIdName

覆盖这个类的ID列的默认SQL字段名。 仅适用于持久类。

用法

要覆盖这个类的ID列的默认SQL字段名,使用以下语法:

代码语言:javascript
复制
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

第三十六章 类关键字 - SqlRowIdPrivate

指定这个类的ID列在投射到ODBCJDBC时是否为隐藏字段。 仅适用于持久类。

用法

当将表投射到ODBCJDBC时,要隐藏ID列,请使用以下语法:

代码语言:javascript
复制
Class MyApp.MyClass [ SqlRowIdPrivate ]  { //class members }

否则,忽略此关键字或将单词Not在关键字之前。

详解

如果该关键字为true,那么当表被投射到ODBCJDBC时,ID列就是一个隐藏字段。

当一个持久化类被投影为一个SQL表时,每个对象的Object Identity值被投影为一个SQL列——Row ID列。 SqlRowIdPrivate关键字允许指定是否应该对ODBC和基于jdbc的查询“隐藏”这个Row ID列。 如果行ID列被隐藏:

  • 它不会被各种目录查询报告为列
  • 它不包含在SELECT *查询中。

如果查询显式地在select子句中列出了该列,那么ODBCJDBC客户机可以选择该列。 (注意,根据定义,不能在UPDATEINSERT语句中使用Row ID列,因为不能修改或直接设置Row ID的值)。

通常,在处理遗留关系数据并且不希望报告工具看到Row ID列的情况下,使用此关键字。

对子类的影响

此关键字不是继承的。

默认

如果省略此关键字,当表被投影到ODBCJDBC时,ID列通常是可见的。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第三十三章 类关键字 - SoapBodyUse
  • 用法
  • 详解
  • 对子类的影响
  • 默认
  • WSDL的关系
  • 对SOAP消息的影响
  • 对网络服务或网络客户端参数默认值的影响
  • 与%XML.DataSet一起使用
  • 第三十四章 类关键字 - SqlCategory
  • 用法
  • 详解
  • 对子类的影响
  • 默认
  • 第三十五章 类关键字 - SqlRowIdName
  • 用法
  • 详解
  • 对子类影响
  • 默认
  • 第三十六章 类关键字 - SqlRowIdPrivate
  • 用法
  • 详解
  • 对子类的影响
  • 默认
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档