XML-INTO avec %handler

RPG (3 et 4, free), CL, SQL, etc...
Répondre
little_noland
Messages : 14
Enregistré le : lun. 10 déc. 2012, 10:27:16

XML-INTO avec %handler

Message par little_noland »

Bonjour à toutes et tous,

Je rencontre un petit problème avec le %handler et le XML-into pour un fichier XML qui a des sous-imbrications. Voici un exemple du fichier que je veux importer :

Code : Tout sélectionner


<CPPStructurePartenaireUnitaire>
		<TypeIdentifiant>1</TypeIdentifiant>
		<Identifiant>25200113600016</Identifiant>
		<RaisonSociale>SIVOS ECOLES CARBUCCIA UCCIANI</RaisonSociale>
		<AdressePostale>
			<Adresse>MAIRIE DE CARBUCCIA</Adresse>
			<CodePostal>20133</CodePostal>
			<Ville>CARBUCCIA</Ville>
			<Pays>
				<Code>FR</Code>
				<Libelle>France</Libelle>
			</Pays>
			<NumTelephone>495528125</NumTelephone>
			<Courriel>mairiedecarbuccia@orange.fr</Courriel>
		</AdressePostale>
		<Services>
			<Service>
				<Code>FACTURES_PUBLIQUES</Code>
				<Nom>Service des factures publiques</Nom>
				<GestionEGMT>false</GestionEGMT>
				<ServiceActif>true</ServiceActif>
			</Service>
			<Service>
				.....
			</Service>
			<Service>
				.....
			</Service>
			<Service>
				.....
			</Service>
		</Services>
		<EmetteurEdi>false</EmetteurEdi>
		<RecepteurEdi>false</RecepteurEdi>
		<GestionStatutMiseEnPaiement>false</GestionStatutMiseEnPaiement>
		<GestionEngagement>false</GestionEngagement>
		<GestionService>false</GestionService>
		<GestionServiceEngagement>false</GestionServiceEngagement>
		<EstMOA>false</EstMOA>
		<EstMOAUniquement>false</EstMOAUniquement>
		<StructureActive>true</StructureActive>
	</CPPStructurePartenaireUnitaire>


Voici la déclaration de mes data-structures :

Code : Tout sélectionner



     //bloc CPPStructurePartenaireUnitaire
      dcl-ds annuaire QUALIFIED DIM&#40;100&#41;;
         TypeIdentifiant CHAR&#40;1&#41;;
         Identifiant CHAR&#40;14&#41;;
         RaisonSociale CHAR&#40;80&#41;;
         AdressePostale LIKEDS&#40;adresseT&#41;;
         Services LIKEDS&#40;servicesT&#41;;
         EmetteurEdi CHAR&#40;5&#41;; //Boolean  true / false
         RecepteurEdi CHAR&#40;5&#41;; //Boolean  true / false
         GestionStatutMiseEnPaiement CHAR&#40;5&#41;; //Boolean  true / false
         GestionEngagement CHAR&#40;5&#41;; //Boolean  true / false
         GestionService CHAR&#40;5&#41;; //Boolean  true / false
         GestionServiceEngagement CHAR&#40;5&#41;; //Boolean  true / false
         EstMOA CHAR&#40;5&#41;; //Boolean  true / false
         EstMOAUniquement CHAR&#40;5&#41;; //Boolean  true / false
         StructureActive CHAR&#40;5&#41;; //Boolean  true / false
         nbrstruct int&#40;10&#41;;
      end-ds;


      dcl-ds servicesT qualified;
         Service LIKEDS&#40;serviceT&#41; DIM&#40;100&#41;;
         nbrservices int&#40;10&#41;;
      end-ds;

      //Sous-tableau service
     dcl-ds serviceT qualified template;
         Code CHAR&#40;100&#41;;
         Nom CHAR&#40;100&#41;;
         AdressePostale LIKEDS&#40;adresseT&#41;;
         GestionEGMT CHAR&#40;5&#41;; //Boolean  true / false
         ServiceActif CHAR&#40;5&#41;; //Boolean  true / false
         nbrservice int&#40;10&#41;;
      end-ds;

      //Sous-tableau Adresse
      dcl-ds adresseT qualified template;
         Adresse CHAR&#40;100&#41;;
         ComplementAdresse1 CHAR&#40;100&#41;;
         ComplementAdresse2 CHAR&#40;100&#41;;
         CodePostal CHAR&#40;5&#41;;
         Ville CHAR&#40;100&#41;;
         Pays likeds&#40;paysT&#41;;
         NumTelephone CHAR&#40;10&#41;;
         Courriel CHAR&#40;100&#41;;
      end-ds;

      //Sous-tableau paysT
      dcl-ds paysT template;
         Code CHAR&#40;2&#41;;
         Libelle CHAR&#40;100&#41;;
      end-ds;

Le handler lit bien tous les enregistrements mais le soucis est au niveau de la data structure services que je déclare en DIM(100). il ne va me prendre que jusqu'à 100 service maximum.

Le problème étant que certains enregistrements ont plus de 100 services.

J'ai essayé de déclarer un dim(999) mais j'ai une erreur à la compilation que l'élément de donnée dépasse 16mo. J'ai essayé d'ajouter également l'option countprefix afin de savoir le nombre d'enregistrement dans la ds mais la valeur est toujours 0.

Comment je peux arriver a parser tous les services sans limite ?



Merci

cmasse
Site Admin
Messages : 813
Enregistré le : mer. 14 févr. 2007, 18:00:03
Localisation : Nantes
Contact :

16 Mo

Message par cmasse »

la limite de 16 Mo est un incontournable en RPG.

je dirais que le seule solution c'est XMLTABLE dans un Select SQL produisant un curseur ...
Christian Massé (Volubis.fr)

little_noland
Messages : 14
Enregistré le : lun. 10 déc. 2012, 10:27:16

(sans sujet)

Message par little_noland »

Bonjour,

Merci pour votre réponse rapide.


Je pensais qu'il existerait peut-être une solution à mon problème en déclarant un array dynamique ou autre chose, Je vais voir avec XMLTABLE.

Répondre