El "problema" viene desde el WSDL, todos los que usen la funcion ObjectToSOAP obtendran el mismo resultado.
En principio no estamos haciendo nada mal, si la definicion del WSDL viniera de otra forma, la funcion ObjectToSOAP lo haria "correcto".
Manipular el XML cuando ha salido me da un poco de mal rollo, he probado distintas alternativas y manipular el XML con funciones de nodos, etc... no funciona bien. Lo mejor a mi parecer es directamente manipular el archivo de texto:
Código:
function ReemplazarItemEnSeccion(const XMLText, Seccion, NombreViejo, NombreNuevo: string): string;
var
Inicio, Fin, PosActual: Integer;
ParteAntes, ParteMedia, ParteDespues: string;
begin
Result := XMLText;
PosActual := 1;
while True do
begin
// Buscar apertura de sección
Inicio := PosEx('<' + Seccion + '>', Result, PosActual);
if Inicio = 0 then
Break;
// Buscar cierre de sección
Fin := PosEx('</' + Seccion + '>', Result, Inicio);
if Fin = 0 then
Break;
// Extraer contenido dentro de la sección
ParteAntes := Copy(Result, 1, Inicio + Length(Seccion) + 1);
ParteMedia := Copy(Result, Inicio + Length(Seccion) + 2, Fin - (Inicio + Length(Seccion) + 2));
ParteDespues := Copy(Result, Fin, Length(Result) - Fin + 1);
// Reemplazar solo en la parte media
ParteMedia := StringReplace(ParteMedia,
'<' + NombreViejo + '>', '<' + NombreNuevo + '>', [rfReplaceAll, rfIgnoreCase]);
ParteMedia := StringReplace(ParteMedia,
'</' + NombreViejo + '>', '</' + NombreNuevo + '>', [rfReplaceAll, rfIgnoreCase]);
// Reconstruir XML
Result := ParteAntes + ParteMedia + ParteDespues;
// Mover posición para siguiente búsqueda (evitar ciclo infinito)
PosActual := Fin + Length(Seccion) + 2;
end;
end;
llamar a la funcion por cada "array" del XML
Código:
xmlText := ReemplazarItemEnSeccion(xmlText, 'Destinatarios', 'item', 'IDDestinatario');
y guardar el xmlText
Sinceramente no se que hacer, esto funciona. pero como digo me da "mal rollo" tocar un XML que ha salido limpio.
Tengo que recopilar que arrays existen y colocarlo, quizas como opcion.
Pero como digo no se si tocarlo o no. Porque en modo verifactu, no hay que enviar el RF, y tenerlo como esta ahora, no creo que sea problema. Maximo cuando la AEAT ya lo tiene.
Saludos !
Pienso que no vas a tener problemas en enviar los RF, mientras no toquen el WSDL para cambiar la generacion de las etiquetas de los arrays. Y creo que eso no lo van a tocar. Es mas yo creo que ni se han preocupado de ello.
Me gustaria tener alguna opinion.