文章 姚 鑫 · 七月 28, 2021 2m read

类关键字SoapBodyUse,SqlCategory,SqlRowIdName,SqlRowIdPrivate

中的XMLWSDL中给出的模式完全匹配。
  • encoded 编码—默认情况下,此类中的web method使用SOAP编码的数据。也就是说,SOAP消息的中的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的部分中元素的Use属性的值。例如,如果SoapBodyUse是字面意思,则WSDL可能如下所示:

    ...
    
            
            
                
            
            
                
            
        
    
    ...
    

    相反,如果对SoapBodyUse进行编码,则WSDL可以改为如下所示:

    ...
    
            
            
                
            
            
                
            
    
        
    
    ...
    

    对于SOAP 1.2,编码样式属性改为如下:

    encodingStyle="http://www.w3.org/2003/05/soap-encoding"
    

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

    • 如果SoapBodyUse是字面量,则每个元素都包含一个元素属性。例如:
    
    

    再举一个例子:

    
    
    • 如果对SoapBodyUse进行了编码,则每个元素都包含一个类型属性,而不是元素属性。例如:
    
    

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

    对SOAP消息的影响

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

    
    
       
          
    ...
    

    相反,对于使用编码样式消息的web服务,响应消息如下:

    
    
       
          
    ...
    

    对网络服务或网络客户端参数默认值的影响

    ELEMENTQUALIFIED参数的默认值取决于SoapBodyUse关键字:

    SoapBodyUse的值 ELEMENTQUALIFIEDd的默认值 Notes
    literal 1
    encoded 0 elementFormDefault="unqualified"

    XMLELEMENT参数的默认值也依赖于SoapBodyUse关键字:

    SoapBodyUse的值 XMLELEMENT的默认值 Notes
    literal 1 消息部分具有元素属性
    encoded 0 消息部分具有类型属性

    与%XML.DataSet一起使用

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

    第三十四章 类关键字 - SqlCategory

    指定在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类别是字符串。

    第三十五章 类关键字 - SqlRowIdName

    覆盖这个类的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

    第三十六章 类关键字 - SqlRowIdPrivate

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

    用法

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

    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列通常是可见的。