Data Iterator Question

 12 Replies
 3 Subscribed to this topic
 52 Subscribed to this forum
Sort:
Author
Messages
Brian Berenger
Basic Member Send Private Message
Posts: 11
Basic Member

I'm using the data interator to input a file.   The file is comma seperated.  The fields are "Name", "ID", "Email","Company", etc.

I have four variables, varName, varID, varEmail, varCompany

What I want to do is simply loot is through the file and assign each of the fields to its corresponding variable in an assignment node that is nested within the data iterator loop.  I do not want to have to read the whole line into one variable and then use code to parse the line into its fields.  The problem is that it reads one field at a time and I never know which field it has read so I can't; hterefore ; selective branch or determine easily which variable it has read so that I can assign it appropriately.   

Would anyone be able to post a quick example flow that achieves what I am attempting to accomplish?  I think I'm missing something obvious. I've looked at the user guide and reference materials, and they don't really address what i'm looking to accomplish.

Thanks

Brian

John Henley
Send Private Message
Posts: 3351

Brian, you need to use 2 data iterators: one to parse the file and one to parse the record:

Attachments
Thanks for using the LawsonGuru.com forums!
John
Deleted User
New Member Send Private Message
Posts: 0
New Member
I love when you put sample's out there.
Wish we had one for adding users to Resource Manager
Brian Berenger
Basic Member Send Private Message
Posts: 11
Basic Member
Thanks John, I appreciate your help. How do I link the two? How do I tell iterator #2 to use the data that iterator #1 has .. or better yet how to I implicitly pass this inofrmation? I tried setting iterator #1 up by file and then connecting iterator #2 to it in order to see if any new variables became available or any new menu items.... there was nothing I could see different.

Should I set up iterator= #1 to parse by line and iterator #2 parse by data element?

Is there any Lawson publication that helps demonstrate this? I hate asking basic questions, especially if there is a resource that has it documented sufficiently. Unfortunately the user guide is oh so very vague...

Thank you again!

Brian
John Henley
Send Private Message
Posts: 3351
Iterator1 parses by line, using 'File' method; Iterator2 parses by delimiter using 'Data' method and using Iterator1_outputData is its input.
Output from Iterator2 is: field1 is Iterator2_outputData1, field2 is Iterator2_outputData2, etc.
Thanks for using the LawsonGuru.com forums!
John
Brian Berenger
Basic Member Send Private Message
Posts: 11
Basic Member
Thanks a billion John, I really appreciate your assistance.  This is a tremendous help.
Brian Berenger
Basic Member Send Private Message
Posts: 11
Basic Member

I’m struggling with how to assign these data elements and would appreciate just a little more clarification. I’m popping in 3 screenshots. The first is iterator #1, the second is iterator #2, and the third is the assignment tab. Given what you see can you please advise how exactly I need to specify the field? I’ve tried a bunch of stuff and keep getting errors. Thanks again

Brian

Attachments
John Henley
Send Private Message
Posts: 3351
Assign varEmail=interator2_outputData1
When iterating by delimiter, the DataIterator appends the field number to _outputData for each field, so output from Iterator2 is:
field1 is Iterator2_outputData1
field2 is Iterator2_outputData2
etc.

The part you're missing is that the outputData* fields don't show up in the variable list....you have to *know* ..

I reported this to Lawson in JANUARY 2007 for DataIterator bug as well as ResourceQuery (PT# 166360)
Thanks for using the LawsonGuru.com forums!
John
Brian Berenger
Basic Member Send Private Message
Posts: 11
Basic Member

Thank you AGAIN John.  I’ll give it a shot!

Brian Berenger
Basic Member Send Private Message
Posts: 11
Basic Member

 

[script removed]

[script removed]

Still struggling here and am wondering if this is a designer problem.  I’m getting “not defined” errors.  My log is below.  I am getting output data to ppopulate and hand off to “Iterator2”.  So I’ve gone ahead and assigned these values by field to my assignment node.  I have tried putting my assignment node inside the second iterator loop, AND I’ve tried putting it outside of it as well to no avail.  Any ideas what could be wrong?  Thanks
 
My Assignment Node Screenshot is below
 
 
Executing Data Iterator Activity myfile.....
iteration 1 nextPosition=0
myfile_errorCode = 0
myfile_informationCode = 0
myfile_returnMessage = got record
myfile_outputData = 12345,testfsmith,Fred,Smith,testone@testbshsi.org,0,TESTPORTROLE
myfile_nextPosition = 66
myfile_recordNumber = 1
Executing Data Iterator Activity Iterator2.....
iteration 1 nextPosition=0
Iterator2_errorCode = 0
Iterator2_informationCode = 0
Iterator2_returnMessage = got record
Iterator2_outputData = 12345
Iterator2_nextPosition = 6
Iterator2_recordNumber = 1
Exception while evaluating expression: varEmail = Iterator2_outputData5;
"Iterator2_outputData5" is not defined.
Exception while evaluating expression: varID = Iterator2_outputData2;
"Iterator2_outputData2" is not defined.
Exception while evaluating expression: varEmpNum = Iterator2_outputData1;
"Iterator2_outputData1" is not defined.
Exception while evaluating expression: varFirst = Iterator2_outputData3;
"Iterator2_outputData3" is not defined.
Exception while evaluating expression: varLast = Iterator2_outputData4;
"Iterator2_outputData4" is not defined.
Exception while evaluating expression: varWFUSER = Iterator2_outputData6;
"Iterator2_outputData6" is not defined.
Exception while evaluating expression: varPortalRole = Iterator2_outputData7;
"Iterator2_outputData7" is not defined.
 
Attachments
John Henley
Send Private Message
Posts: 3351
On the iterator2 node, make sure you have the 'accumulate output variables' option selected.
Thanks for using the LawsonGuru.com forums!
John
cpaine216
Basic Member Send Private Message
Posts: 14
Basic Member

Has anyone used the data iterator with a flat file that is fixed length and each line has different lengths? I have a file for example that has the following:

ER01 - length of 3221

ER02 - length of 6128

ER03 - length of 265

ER05 - 861

 

The ER01 record is the header record for each person's expenses, the ER02 is the detailed line of each person's expenses. There is nothing to correlate ER01 with ER02 records....right now we have this being done via Cobol and it reads in the ER01 header then all ER02 records following that ER01 and resets at the next ER01 record for the next set of ER02 records. I have been able to get (using data iterator) all the ER01 data and ER02 data into corresponding tables, but now have no way to correlate the header records to the detail records.

I need to get this data written into IPA as lawson/infor is moving away from cobol.

Dave Curtis
Veteran Member Send Private Message
Posts: 136
Veteran Member
Posted By cpaine216 on 07/30/2018 1:26 PM

Has anyone used the data iterator with a flat file that is fixed length and each line has different lengths? I have a file for example that has the following:

ER01 - length of 3221

ER02 - length of 6128

ER03 - length of 265

ER05 - 861

 

The ER01 record is the header record for each person's expenses, the ER02 is the detailed line of each person's expenses. There is nothing to correlate ER01 with ER02 records....right now we have this being done via Cobol and it reads in the ER01 header then all ER02 records following that ER01 and resets at the next ER01 record for the next set of ER02 records. I have been able to get (using data iterator) all the ER01 data and ER02 data into corresponding tables, but now have no way to correlate the header records to the detail records.

I need to get this data written into IPA as lawson/infor is moving away from cobol.


Maybe you could use the data iterator to read each line. Then send the output data to a string variable.

Use JavaScript to analyse the string variable with the output data. Using a JavaScript if statement to determine if the record is of an ER01 or not. If ER01 record then pass the value into the "header" value variable. If not ER01 put it into a details variable.
Then you can use those to pass into a data file. Then clear the details value and loop around. Then when it hits the next ER01 record it clears the header variable and so on.

So you would need
String Variable = strOutPutData
String Variable = strHeader
String Variable = strDetails

After the data iterator node set up an assign node and assign the outputData of the data iterator to strOutPutData

The JavaScript would be something like this


var fld = strOutPutData;
var d = fld.substring(0, 4);
var dta = fld.replace(d,"");

if(d == 'ER01')
{strHeader = dta;
 strDetails = "";}
else {strHeader = strHeader;
 strDetails = dta;}
 
 Following the assign node with the JavaScript you could then pass the strHeader and strDetails onto a file or message builder to create a data file. Then another assign node to clear the strDetails varible, then it would loop around each line and make the assignements for each type of record and reset the header at each ER01 record.
 
 Just an on the fly thought...
 

 I do not have one specifically like this but I have one that has to evaluate each line and determine what to do based on data in the line and the output is not the same each time so it does a similar evaluation and cannot rely on standard delimiter.