How do I process multiple records?

 2 Replies
 0 Subscribed to this topic
 12 Subscribed to this forum
Sort:
Author
Messages
wilcoxmad
Veteran Member Send Private Message
Posts: 87
Veteran Member

I am trying to show all the jobcodes and start dates for an employee. I am getting only the first one. When I try to fill out data from the second record, or more, the form doesn't fill out and I get an error:  '2' is null or not an object.  Any suggestions?

I think this has to do with using code designed to process one record and trying to process many.

function FORM_OnAfterTransaction(data) {  //was transaction successful?  if (formState.agsError) return;    var vCompany=lawForm.getFormValue("text1");  var vEmpl=lawForm.getDataValueById("text2");

 // blank out all date and jobcode fields.  lawForm.setFormValue("text229","");  lawForm.setFormValue("text230","");  lawForm.setFormValue("text241","");  lawForm.setFormValue("text242",""); 

 s = "?XCOLS=TRUE&XKEYS=TRUE&XCOUNT=TRUE" +  "&XRELS=FALSE&XIDA=FALSE&XNEXT=FALSE" +  "&PROD=" + portalObj.getUserVariable("PRODLINE") +  "&FILE=PAEMPPOS" +  "&FIELD=EFFECT-DATE;JOB-CODE" +  "&INDEX=PEPSET3" +  "&KEY=" + vCompany + "=" + vEmpl + "=" + 1 + "=" +  "&OUT=XML";

  var vDMEInfo = top.httpRequest(top.DMEPath + s);    //Set the DME result data to an XML object to parse through.  var DMEobj = new top.DataStorage(vDMEInfo);

 var vRecords = DMEobj.document.getElementsByTagName("RECORD");  if (vRecords.length == 0)  {   alert("No PAEMPPOS record found.");   return true;  }  else  {   var vCols = vRecords[0].getElementsByTagName("COL");   vEffDt1 = vCols[0].firstChild.data;   lawForm.setFormValue("text229",vEffDt1);

  var vCols = vRecords[1].getElementsByTagName("COL");   vJobCode1 = vCols[1].firstChild.data;   lawForm.setFormValue("text230",vJobCode1);      var vCols = vRecords[2].getElementsByTagName("COL");   vEffDt2 = vCols[2].firstChild.data;   lawForm.setFormValue("text241",vEffDt2);

  var vCols = vRecords[3].getElementsByTagName("COL");   vJobCode2 = vCols[3].firstChild.data;   lawForm.setFormValue("text242",vJobCode2);   } }

John Henley
Send Private Message
Posts: 3351

Perhaps you're confusing columns with rows. You are asking 2 fields in your DME:  "&FIELD=EFFECT-DATE;JOB-CODE" + But you are trying to reference 4 rows by 4 columns in your logic:   var vCols = vRecords[0].getElementsByTagName("COL");   vEffDt1 = vCols[0].firstChild.data;   lawForm.setFormValue("text229",vEffDt1);   var vCols = vRecords[1].getElementsByTagName("COL");   vJobCode1 = vCols[1].firstChild.data;   lawForm.setFormValue("text230",vJobCode1);     var vCols = vRecords[2].getElementsByTagName("COL");   vEffDt2 = vCols[2].firstChild.data;   lawForm.setFormValue("text241",vEffDt2);   var vCols = vRecords[3].getElementsByTagName("COL");   vJobCode2 = vCols[3].firstChild.data;   lawForm.setFormValue("text242",vJobCode2);   } I think you really want something like this (assuming two rows are returned...)   var vCols = vRecords[0].getElementsByTagName("COL");   vEffDt1 = vCols[0].firstChild.data;   lawForm.setFormValue("text229",vEffDt1);   vJobCode1 = vCols[1].firstChild.data;   lawForm.setFormValue("text230",vJobCode1);     var vCols = vRecords[1].getElementsByTagName("COL");   vEffDt2 = vCols[0].firstChild.data;   lawForm.setFormValue("text241",vEffDt2);   vJobCode2 = vCols[0].firstChild.data;   lawForm.setFormValue("text242",vJobCode2); Ideally though, you should put this in a loop that looks at vRecords.length to see how many rows were returned.

Thanks for using the LawsonGuru.com forums!
John
wilcoxmad
Veteran Member Send Private Message
Posts: 87
Veteran Member
Thanks John, know where I can find an example of that?