|   | 
	 
  
    | 
RSS Feed - WebSphere MQ Support
 | 
RSS Feed - Message Broker Support
 |   
 
  
	     | 
	 | 
   
 
  
	|  Search and delete specific fields in a unknown msg tree | 
	« View previous topic :: View next topic »  | 
   
  
  	
	  
		
		
		  | Author | 
		  Message
		 |  
		
		  | venanciorb | 
		  
		    
			  
				 Posted: Tue Jul 23, 2013 7:37 am    Post subject: Search and delete specific fields in a unknown msg tree | 
				     | 
			   
			 
		   | 
		 
		
		   Newbie
 
 Joined: 29 Aug 2011 Posts: 7
  
  | 
		  
		    
			  
				Hello!
 
 
I need to navigate in a unknown message tree and if I find some particular fields(fields like fill_*)  I need to delete it. 
 
 
I did a code to navegate in the message, but now I don't know how to delete the fields. See the code below: 
 
   
	| Code: | 
   
  
	
 
      DECLARE pathFieldName CHARACTER;
 
            
 
      WHILE LASTMOVE(pathRef) DO
 
 
         WHILE LASTMOVE(pathRef) DO
 
   
 
            WHILE LASTMOVE(pathRef) DO
 
   
 
               SET pathFieldName = FIELDNAME(pathRef);
 
                  
 
               IF CONTAINS(pathFieldName, 'fill_') THEN
 
 
                  -- how to DELETE the FIELD ????
 
 
               END IF;
 
            
 
               MOVE pathRef FIRSTCHILD;
 
               
 
               IF LASTMOVE (pathRef) IS NOT TRUE THEN
 
                  
 
                  SET NOCHILD = 1;
 
                  
 
               END IF;   
 
         
 
               SET pathFieldName = FIELDNAME(pathRef);            
 
         
 
            END WHILE;
 
            
 
            MOVE pathRef NEXTSIBLING;
 
            
 
            IF (LASTMOVE (pathRef) IS NOT TRUE) AND (NOCHILD = 1) THEN
 
                  
 
               MOVE pathRef PARENT;
 
               MOVE pathRef NEXTSIBLING;
 
                  
 
            END IF;   
 
            
 
            SET NOCHILD =0;
 
                     
 
            SET pathFieldName = FIELDNAME(pathRef);         
 
 
      END WHILE;
 
      
 
      MOVE pathRef NEXTSIBLING;
 
 
   END WHILE;
 
 
 | 
   
 
 
 
I'll really appreciate any help.
 
 
Thanks. Roger | 
			   
			 
		   | 
		 
		
		  | Back to top | 
		  
		  	
		   | 
		 
		
		    | 
		 
		
		  | lancelotlinc | 
		  
		    
			  
				 Posted: Tue Jul 23, 2013 7:44 am    Post subject:  | 
				     | 
			   
			 
		   | 
		 
		
		    Jedi Knight
 
 Joined: 22 Mar 2010 Posts: 4941 Location: Bloomington, IL USA 
  | 
		  
		    
			  
				Hi Roger - DETACH or DELETE keywords in ESQL would be a good place to start looking in the InfoCentre. Use Google. _________________ http://leanpub.com/IIB_Tips_and_Tricks
 
Save $20: Coupon Code: MQSERIES_READER | 
			   
			 
		   | 
		 
		
		  | Back to top | 
		  
		  	
		   | 
		 
		
		    | 
		 
		
		  | dogorsy | 
		  
		    
			  
				 Posted: Tue Jul 23, 2013 8:10 am    Post subject:  | 
				     | 
			   
			 
		   | 
		 
		
		   Knight
 
 Joined: 13 Mar 2013 Posts: 553 Location: Home Office 
  | 
		  
		    
			  
				| if you look in the infocenter, create  procedure statement, there is Example 2  that gives you a nice recursive procedure to navigate a tree, instead of the code posted above. | 
			   
			 
		   | 
		 
		
		  | Back to top | 
		  
		  	
		   | 
		 
		
		    | 
		 
		
		  | venanciorb | 
		  
		    
			  
				 Posted: Tue Jul 23, 2013 12:37 pm    Post subject: Solved | 
				     | 
			   
			 
		   | 
		 
		
		   Newbie
 
 Joined: 29 Aug 2011 Posts: 7
  
  | 
		  
		    
			  
				I deleted the fields using: 
 
 
DELETE FIELD outRef.{Environment.grupoName}.{pathFieldName};
 
 
See completed code bellow.
 
 
 
   
	| Code: | 
   
  
	   CREATE PROCEDURE RemoveFillers(IN pathRef REFERENCE) BEGIN
 
      
 
      DECLARE NS_S Char Environment.Variables.NAMESPACE;
 
      DECLARE saida namespace NS_S;
 
      DECLARE outRef REFERENCE TO OutputRoot.XMLNSC.saida:SERVICO_SAIDA.DADOS.RETORNO;
 
 
      DECLARE NOCHILD INTEGER 0;
 
      
 
      DECLARE pathFieldName CHARACTER;
 
      SET Environment.grupoName = '';
 
      SET Environment.DELETAR = 0;
 
            
 
      WHILE LASTMOVE(pathRef) DO
 
 
         WHILE LASTMOVE(pathRef) DO
 
   
 
            WHILE LASTMOVE(pathRef) DO
 
   
 
               SET pathFieldName = FIELDNAME(pathRef);
 
                  
 
               IF CONTAINS(pathFieldName, 'fill_') THEN
 
 
                  SET Environment.DELETAR = 1;
 
                  
 
                  DECLARE pathRef2 REFERENCE TO pathRef;
 
               
 
                  MOVE pathRef2 PARENT;
 
 
                  SET Environment.grupoName = FIELDNAME(pathRef2);                  
 
                  
 
                  
 
               END IF;
 
            
 
               MOVE pathRef FIRSTCHILD;
 
               
 
               IF LASTMOVE (pathRef) IS NOT TRUE THEN
 
                  
 
                  SET NOCHILD = 1;
 
                  
 
               END IF;   
 
         
 
               SET pathFieldName = FIELDNAME(pathRef);            
 
         
 
            END WHILE;
 
            
 
            MOVE pathRef NEXTSIBLING;
 
            
 
            IF (LASTMOVE (pathRef) IS NOT TRUE) AND (NOCHILD = 1) THEN
 
                  
 
               MOVE pathRef PARENT;
 
               MOVE pathRef NEXTSIBLING;
 
                  
 
            END IF;   
 
            
 
            IF Environment.DELETAR = 1 THEN
 
            
 
               IF Environment.grupoName = 'RETORNO' THEN
 
                  DELETE FIELD outRef.{pathFieldName}; 
 
               ELSE
 
                  DELETE FIELD outRef.{Environment.grupoName}.{pathFieldName}; 
 
               END IF;
 
 
            END IF;
 
            
 
            SET Environment.DELETAR = 0;
 
            
 
            SET NOCHILD =0;
 
                     
 
            SET pathFieldName = FIELDNAME(pathRef);         
 
 
      END WHILE;
 
      
 
      MOVE pathRef NEXTSIBLING;
 
 
   END WHILE;
 
 | 
   
 
 
 
Thanks everyone ... | 
			   
			 
		   | 
		 
		
		  | Back to top | 
		  
		  	
		   | 
		 
		
		    | 
		 
		
		  | 
		    
		   | 
		 
	   
	 | 
   
 
  
	     | 
	 | 
	Page 1 of 1 | 
   
 
 
 
  
  	
	  
		
		  
 
  | 
		  You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
  | 
  		 
	   
	 | 
   
 
  	 | 
	  |