我使用具有数字元素的 Web 服务。Delphi wsdl 导入器将其设置为 Int64。
Web 服务允许此元素为空。但是,因为它被定义为 Int64,当我在 Delphi 中使用 Web 服务而不为其设置值时,它默认为 0,因为它是 Int64。但我需要它为空白,并且 Web 服务将不接受 0 值(0 定义为无效并由 Web 服务返回错误)。
如果类型是 Int64,我如何传递一个空白值?
我使用具有数字元素的 Web 服务。Delphi wsdl 导入器将其设置为 Int64。
Web 服务允许此元素为空。但是,因为它被定义为 Int64,当我在 Delphi 中使用 Web 服务而不为其设置值时,它默认为 0,因为它是 Int64。但我需要它为空白,并且 Web 服务将不接受 0 值(0 定义为无效并由 Web 服务返回错误)。
如果类型是 Int64,我如何传递一个空白值?
空龄(示例)
<E06_14></E06_14>
可能有特殊含义,例如“未知”年龄。
在这种情况下,真正的问题是如何在 Delphi 端使该字段可空。
来自JM Babet 的这篇文章:
对“nil”的支持一直是一个持续存在的问题。Delphi 的几种内置类型不可为空。所以我们选择在这些情况下使用一个类(不优雅但它有效)。因此,在 Delphi 2007 的最新更新中,我添加了几个 TXSxxxx 类型来帮助解决这个问题。基本上:TXSBoolean、TXSInteger、TXSLong 等。TXSString 已经存在,但尚未注册。现在它是。导入 WSDL 时,您必须启用 Use 'TXSString for simple nillable types' 选项以使导入器切换到 TXSxxxx 类型。在命令行上是“-0z+”选项。
Import WSDL Wizard的DocWiki还显示了与可空元素相关的两个选项:
处理可空和可选元素- 选中此选项以使 WSDL 导入器生成有关可选和可空属性的相关信息。SOAP 运行时使用此信息来允许某些属性为零。
将 TXSString 用于简单的 nillable 类型- WSDL 标准允许简单类型为 nil,在 Delphi 或 NULL 中,在 C++ 中,而 Delphi 和 C++ 不允许这样做。选中此选项以使 WSDL 导入器通过使用包装类的实例来克服此限制。