在VBA Soap Service调用中导致SoapMapper错误的是什么?

我试图在Excel 2003工作簿中使用VBA代码中的基于Java的SOAP Web服务。 有两种方法可用。 一个检索数据,另一个上传数据。 检索数据的服务工作正常。 但是,当我们尝试上传数据时,我们遇到了一个奇怪的错误,我无法在Google上find有用的信息。 错误消息是:

Run-time error '-2147221504 (800040000)'; SoapMapper: Putting data into SoapMapper element failed 

如果我们试图从.NET应用程序中使用相同的Web服务,它看起来像生成的类和方法稍有不同。 例如,获取数据服务调用需要一个DataContainer对象,该对象具有一些标识属性以确定要获取的数据。 然后它返回与填充数据相同types的对象。

在由Web Reference Toolkit生成的VBA类中,提取和保存都采用相同types的对象。 但在.NET中,保存需要一个SaveDataContainerDetails对象。

所以真的有几个问题:

  • 有没有人在他们的VBA工作之前见过SoapMapper错误?

  • 有没有人看到.NET和VBA从同一个WSDL生成不同的方法签名? 什么可能导致,我怎么能解决它?

  • 有没有更好的方法从VBA中调用SOAP服务,而不是使用Web Reference Toolkit和SOAP Toolkit?

我已经find了这个问题。 VBA Soap Toolkit和Web References Toolkit无法处理复杂types的数组。 上面的错误消息有些误导,因为“元素”实际上是肥皂信封中的XML元素的名称。 所以没有把数据放入一个名为“元素”的元素。 这是掩盖了这个问题一点。

所以我已经确定了这一切都归结为复杂types的数组。 我也已经确定,在VBA中制作肥皂信封是非常简单的。 所需的XML通常结构良好,不难创build和parsing。 因此,如果您在使用VBA的Soap Toolkit或Web References Toolkit时遇到问题,请不要使用它! 🙂

从VBA,VBSCRIPT,Classic ASP等使用Web服务的最佳方式是使用.NET创build您的客户端。 然后把你的客户端变成一个COM对象。 这些旧技术很容易使用。