| Author | 
		  Message
		 | 
		
		  | mrk.for.dev | 
		  
		    
			  
				 Posted: Mon Jan 11, 2021 5:45 am    Post subject: Create new Object from XSD in ESQL | 
				     | 
			   
			 
		   | 
		
		
		   Novice
 
 Joined: 11 Jan 2021 Posts: 23
  
  | 
		  
		    
			  
				Is there a way to create an object whose format is defined in a message model? 
 
 
Actually, I have created a message model with some fields containing default values and some restrictions. I managed with the following code to create a message in ESQL, but the other fields (which contain default values) do not appear : 
 
 
                
   
	| Code: | 
   
  
	      CREATE LASTCHILD OF OutputRoot DOMAIN('DFDL');      
 
      -- SET OutputRoot.Properties = InputRoot.Properties;
 
      
 
      SET OutputRoot.Properties.MessageSet = '{ObjectsDefinitionLibrary}';
 
      SET OutputRoot.Properties.MessageType = '{}:Example1MsgModel';
 
      SET OutputRoot.DFDL.Example1MsgModel.record[1].FieldOne = 'Value1'; | 
   
 
 
 
Will this be possible with ESQL? | 
			   
			 
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | Vitor | 
		  
		    
			  
				 Posted: Mon Jan 11, 2021 7:33 am    Post subject: Re: Create new Object from XSD in ESQL | 
				     | 
			   
			 
		   | 
		
		
		    Grand High Poobah
 
 Joined: 11 Nov 2005 Posts: 26093 Location: Texas, USA 
  | 
		  
		    
			  
				
   
	| mrk.for.dev wrote: | 
   
  
	|  I managed with the following code to create a message in ESQL, but the other fields (which contain default values) do not appear :  | 
   
 
 
 
Do not appear where? The DFDL defaults probably don't show up in a trace or the debugger because they're used as part of the serialization process. They should therefore show up in the final written record. _________________ Honesty is the best policy.
 
Insanity is the best defence. | 
			   
			 
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | mrk.for.dev | 
		  
		    
			  
				 Posted: Mon Jan 11, 2021 7:55 am    Post subject:  | 
				     | 
			   
			 
		   | 
		
		
		   Novice
 
 Joined: 11 Jan 2021 Posts: 23
  
  | 
		  
		    
			  
				| The default fields are not visible either in the debugger or in the final output (to a file). | 
			   
			 
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | Vitor | 
		  
		    
			  
				 Posted: Mon Jan 11, 2021 8:11 am    Post subject:  | 
				     | 
			   
			 
		   | 
		
		
		    Grand High Poobah
 
 Joined: 11 Nov 2005 Posts: 26093 Location: Texas, USA 
  | 
		  
		    
			  
				
   
	| mrk.for.dev wrote: | 
   
  
	| The default fields are not visible either in the debugger or in the final output (to a file). | 
   
 
 
 
Post your DFDL _________________ Honesty is the best policy.
 
Insanity is the best defence. | 
			   
			 
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | mrk.for.dev | 
		  
		    
			  
				 Posted: Mon Jan 11, 2021 8:55 am    Post subject:  | 
				     | 
			   
			 
		   | 
		
		
		   Novice
 
 Joined: 11 Jan 2021 Posts: 23
  
  | 
		  
		    
			  
				Here is the DFDL : 
 
 
   
	| Code: | 
   
  
	<?xml version="1.0" encoding="UTF-8"?><xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:csv="http://www.ibm.com/dfdl/CommaSeparatedFormat" xmlns:dfdl="http://www.ogf.org/dfdl/dfdl-1.0/" xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:ibmDfdlExtn="http://www.ibm.com/dfdl/extensions" xmlns:ibmSchExtn="http://www.ibm.com/schema/extensions">
 
 
 
    <xsd:import namespace="http://www.ibm.com/dfdl/CommaSeparatedFormat" schemaLocation="IBMdefined/CommaSeparatedFormat.xsd"/>
 
    <xsd:annotation>
 
      <xsd:appinfo source="http://www.ogf.org/dfdl/">
 
         <dfdl:format documentFinalTerminatorCanBeMissing="yes" encoding="{$dfdl:encoding}" escapeSchemeRef="csv:CSVEscapeScheme" ref="csv:CommaSeparatedFormat"/>
 
      </xsd:appinfo>
 
   </xsd:annotation>
 
 
 
   <xsd:element ibmSchExtn:docRoot="true" name="Example1MsgModel">
 
      <xsd:complexType>
 
         <xsd:sequence dfdl:separator="">
 
            <xsd:element dfdl:terminator="%CR;%LF;%WSP*;" name="record">
 
               <xsd:complexType>
 
                  <xsd:sequence dfdl:separator="|" dfdl:separatorSuppressionPolicy="trailingEmpty">
 
                     
 
                     <xsd:element ibmDfdlExtn:sampleValue="value1" minOccurs="0" name="FieldOne" type="xsd:string"/>
 
                     <xsd:element default="FIXED_VALUE" ibmDfdlExtn:sampleValue="value2" minOccurs="0" name="FieldTwo" type="xsd:string"/>
 
                                                                                                                                                                                                                                                                                                                                                
 
                        </xsd:sequence>
 
               </xsd:complexType>
 
            </xsd:element>            
 
         </xsd:sequence>
 
      </xsd:complexType>
 
   </xsd:element>
 
 
 
</xsd:schema> | 
   
 
[/code]
 
 
 
Here is the ESQL : 
 
 
   
	| Code: | 
   
  
	CREATE LASTCHILD OF OutputRoot DOMAIN('DFDL');      
 
      
 
      SET OutputRoot.Properties.MessageSet = '{ObjectsDefinitionLibrary}';
 
      SET OutputRoot.Properties.MessageType = '{}:Example1MsgModel';
 
      SET OutputRoot.DFDL.Example1MsgModel.record[1].FieldOne = 'AFFL02';
 
      
 
      DECLARE refInput REFERENCE TO InputRoot.DFDL.Exemple1EntrantMsg.record[1];
 
      DECLARE refOutput REFERENCE TO OutputRoot.DFDL.Example1MsgModel.record[1];   
 
      
 
      -- field 1
 
      SET refOutput.FieldOne = 'AFFL02'; | 
   
 
 | 
			   
			 
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | Vitor | 
		  
		    
			  
				 Posted: Mon Jan 11, 2021 12:19 pm    Post subject:  | 
				     | 
			   
			 
		   | 
		
		
		    Grand High Poobah
 
 Joined: 11 Nov 2005 Posts: 26093 Location: Texas, USA 
  | 
		  
		    
			  
				The elements are set to minOccurs=0, so if no value is provided to the model it doesn't serialize the element and is content it has done right.
 
 
If you set minOccurs=1 (indicating that the element must be present in the serialized file) and don't provide a value, then the model will ensure you get the element you insisted on by using a default. _________________ Honesty is the best policy.
 
Insanity is the best defence. | 
			   
			 
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | timber | 
		  
		    
			  
				 Posted: Mon Jan 11, 2021 3:54 pm    Post subject:  | 
				     | 
			   
			 
		   | 
		
		
		    Grand Master
 
 Joined: 25 Aug 2015 Posts: 1292
  
  | 
		  
		    
			  
				
   
	| Quote: | 
   
  
	| Is there a way to create an object whose format is defined in a message model | 
   
 
You need to define what you mean by 'object'. Do you want to create a message tree based on the model? Or do you want to generate a valid BLOB from the model?
 
 
As has been said by others, if you want to generate a BLOB from a DFDL model, you must ensure that everything in the message model (including complex elements) has minOccurs>=1, and you must provide a default value for every field.
 
If you want a message tree, you will need to parse that BLOB using the DFDL parser. Which leads nicely into the answer to your other question...
 
   
	| Quote: | 
   
  
	| Will this be possible with ESQL? | 
   
 
ESQL does not offer a special statement to create a message tree from a model. However, it does offer two functions for parsing and writing any BLOB/message tree. Look up the ASBITSTREAM function, and the CREATE function (with the PARSE clause). | 
			   
			 
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | mrk.for.dev | 
		  
		    
			  
				 Posted: Tue Jan 12, 2021 12:16 am    Post subject:  | 
				     | 
			   
			 
		   | 
		
		
		   Novice
 
 Joined: 11 Jan 2021 Posts: 23
  
  | 
		  
		    
			  
				Indeed, when minOccurs is set to 1, the values reappear in the output file (not in the debugger). 
 
 
The original goal was to replace the Mapping node by a Compute node that transforms a Message Model to a different one. With the Mapping node it is obvious, but with the Compute node you have to create this message from the Message Model with ESQL. 
 
 
Thank you   | 
			   
			 
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | Vitor | 
		  
		    
			  
				 Posted: Tue Jan 12, 2021 6:20 am    Post subject:  | 
				     | 
			   
			 
		   | 
		
		
		    Grand High Poobah
 
 Joined: 11 Nov 2005 Posts: 26093 Location: Texas, USA 
  | 
		  
		    
			  
				
   
	| mrk.for.dev wrote: | 
   
  
	| Indeed, when minOccurs is set to 1, the values reappear in the output file (not in the debugger).  | 
   
 
 
 
Because it's not until you actually ask the model to be serialized the lack of the element is a problem. That minOccurs=1 doesn't apply to the message tree (for good and sufficient reason) _________________ Honesty is the best policy.
 
Insanity is the best defence. | 
			   
			 
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | 
		    
		   |