![]() |
Chilkat HOME Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi DLL Go Java Node.js Objective-C PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(SQL Server) Create SOAP with multiple VeriFactu Digitally Signed Registration RecordsSee more Verifactu ExamplesCreates a SOAP message containing a multiple digitally signed invoice registration records, formatted according to the specifications for Spain's Veri*Factu system.
-- Important: See this note about string length limitations for strings returned by sp_OAMethod calls. -- CREATE PROCEDURE ChilkatSample AS BEGIN DECLARE @hr int -- Important: Do not use nvarchar(max). See the warning about using nvarchar(max). DECLARE @sTmp0 nvarchar(4000) DECLARE @success int SELECT @success = 0 SELECT @success = 1 -- Begin with the following SOAP XML: -- <?xml version="1.0" encoding="utf-8"?> -- <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sum="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroLR.xsd" xmlns:sum1="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd" xmlns:xd="http://www.w3.org/2000/09/xmldsig#"> -- <soapenv:Header/> -- <soapenv:Body> -- <sum:RegFactuSistemaFacturacion> -- <sum:Cabecera> -- <sum1:ObligadoEmision> -- <sum1:NombreRazon>XYZ STORE SL</sum1:NombreRazon> -- <sum1:NIF>B99999999</sum1:NIF> -- </sum1:ObligadoEmision> -- <sum1:RemisionRequerimiento> -- <sum1:RefRequerimiento>3333333333</sum1:RefRequerimiento> -- <sum1:FinRequerimiento>S</sum1:FinRequerimiento> -- </sum1:RemisionRequerimiento> -- </sum:Cabecera> -- -- </sum:RegFactuSistemaFacturacion> -- </soapenv:Body> -- </soapenv:Envelope> DECLARE @xml int EXEC @hr = sp_OACreate 'Chilkat.Xml', @xml OUT IF @hr <> 0 BEGIN PRINT 'Failed to create ActiveX component' RETURN END EXEC sp_OASetProperty @xml, 'Tag', 'soapenv:Envelope' EXEC sp_OAMethod @xml, 'AddAttribute', @success OUT, 'xmlns:soapenv', 'http://schemas.xmlsoap.org/soap/envelope/' EXEC sp_OAMethod @xml, 'AddAttribute', @success OUT, 'xmlns:sum', 'https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroLR.xsd' EXEC sp_OAMethod @xml, 'AddAttribute', @success OUT, 'xmlns:sum1', 'https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd' EXEC sp_OAMethod @xml, 'AddAttribute', @success OUT, 'xmlns:xd', 'http://www.w3.org/2000/09/xmldsig#' EXEC sp_OAMethod @xml, 'UpdateChildContent', NULL, 'soapenv:Header', '' EXEC sp_OAMethod @xml, 'UpdateChildContent', NULL, 'soapenv:Body|sum:RegFactuSistemaFacturacion|sum:Cabecera|sum1:ObligadoEmision|sum1:NombreRazon', 'XYZ STORE SL' EXEC sp_OAMethod @xml, 'UpdateChildContent', NULL, 'soapenv:Body|sum:RegFactuSistemaFacturacion|sum:Cabecera|sum1:ObligadoEmision|sum1:NIF', 'B99999999' EXEC sp_OAMethod @xml, 'UpdateChildContent', NULL, 'soapenv:Body|sum:RegFactuSistemaFacturacion|sum:Cabecera|sum1:RemisionRequerimiento|sum1:RefRequerimiento', '3333333333' EXEC sp_OAMethod @xml, 'UpdateChildContent', NULL, 'soapenv:Body|sum:RegFactuSistemaFacturacion|sum:Cabecera|sum1:RemisionRequerimiento|sum1:FinRequerimiento', 'S' -- Prior to this code, we created N signed SOAP messages, each containing a single signed record. -- Load each of these signed SOAP messages into a StringBuilder and insert after the "</sum:Cabecera>" -- Note: We must NOT use Chilkat.Xml for this. We must do string operations using Chilkat StringBuilder to prevent whitespace or formatting modifications which would break the signatures. DECLARE @sbXml int EXEC @hr = sp_OACreate 'Chilkat.StringBuilder', @sbXml OUT EXEC sp_OAMethod @xml, 'GetXmlSb', @success OUT, @sbXml -- --------------------------------------------------------------------------------------------- -- Load the previously signed XML containing just one signed record. DECLARE @sbSignedSoap int EXEC @hr = sp_OACreate 'Chilkat.StringBuilder', @sbSignedSoap OUT EXEC sp_OAMethod @sbSignedSoap, 'LoadFile', @success OUT, 'c:/temp/qa_output/signedSoapXml1.xml', 'utf-8' IF @success = 0 BEGIN EXEC sp_OAGetProperty @sbSignedSoap, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @xml EXEC @hr = sp_OADestroy @sbXml EXEC @hr = sp_OADestroy @sbSignedSoap RETURN END -- Remove everything before "</sum:Cabecera>", including the "</sum:Cabecera>" EXEC sp_OAMethod @sbSignedSoap, 'RemoveBefore', @success OUT, '</sum:Cabecera>' -- Remove everything after the "</sum:RegFactuSistemaFacturacion>", including the "</sum:RegFactuSistemaFacturacion>" EXEC sp_OAMethod @sbSignedSoap, 'RemoveAfterFinal', @success OUT, '</sum:RegFactuSistemaFacturacion>' -- We now have the portion of the signed SOAP xml from <sum:RegistroFactura> to </sum:RegistroFactura> -- Insert it after the </sum:Cabecera> EXEC sp_OAMethod @sbSignedSoap, 'Prepend', @success OUT, '</sum:Cabecera>' EXEC sp_OAMethod @sbSignedSoap, 'GetAsString', @sTmp0 OUT EXEC sp_OAMethod @sbXml, 'ReplaceFirst', @success OUT, '</sum:Cabecera>', @sTmp0 -- --------------------------------------------------------------------------------------------- -- Add the next signed SOAP containing a single signed record. EXEC sp_OAMethod @sbSignedSoap, 'LoadFile', @success OUT, 'c:/temp/qa_output/signedSoapXml2.xml', 'utf-8' IF @success = 0 BEGIN EXEC sp_OAGetProperty @sbSignedSoap, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @xml EXEC @hr = sp_OADestroy @sbXml EXEC @hr = sp_OADestroy @sbSignedSoap RETURN END -- Remove everything before "</sum:Cabecera>", including the "</sum:Cabecera>" EXEC sp_OAMethod @sbSignedSoap, 'RemoveBefore', @success OUT, '</sum:Cabecera>' -- Remove everything after the "</sum:RegFactuSistemaFacturacion>", including the "</sum:RegFactuSistemaFacturacion>" EXEC sp_OAMethod @sbSignedSoap, 'RemoveAfterFinal', @success OUT, '</sum:RegFactuSistemaFacturacion>' -- We now have the portion of the signed SOAP xml from <sum:RegistroFactura> to </sum:RegistroFactura> -- Insert it after the </sum:Cabecera> EXEC sp_OAMethod @sbSignedSoap, 'Prepend', @success OUT, '</sum:Cabecera>' EXEC sp_OAMethod @sbSignedSoap, 'GetAsString', @sTmp0 OUT EXEC sp_OAMethod @sbXml, 'ReplaceFirst', @success OUT, '</sum:Cabecera>', @sTmp0 -- --------------------------------------------------------------------------------------------- -- Continue adding more signed records if needed. -- Save the SOAP containing multiple signed records.. EXEC sp_OAMethod @sbXml, 'WriteFile', @success OUT, 'c:/temp/qa_output/soap_combined.xml', 'utf-8', 0 EXEC @hr = sp_OADestroy @xml EXEC @hr = sp_OADestroy @sbXml EXEC @hr = sp_OADestroy @sbSignedSoap END GO |
© 2000-2025 Chilkat Software, Inc. All Rights Reserved.