Copy link to clipboard
Copied
I have two tables. The first table has form ields like ID, Result (option from a drop down), Details (open text field), Score (number). Based on an answer ("N/C") selected in Result and that row's Score, I want the 2nd table to sort descending and display the ID (into DefectID) and Details (into DefectDetails) (in respective read-only form fields) from each row that had "N/C" selected in Result.
I have checked my field names and all numbering starts at 0. I think I am close, but I get errors when trying to figure out how to call previously stored information. It's throwing errors on the forEach loop. Most recent error is ReferenceError: invalid assignment left-hand side. Here's what I have...
var defectObjs = []; // empty array to store details
for (i = 1; i < 6; i++) {
if (this.getField(Result).value == "N / C") { // checking if n/c
defectObjs.push({
RefID: "RefID" + i});
({ Details: "Details" + i});
({ Score: "Score" + i});
};
// Sort defectObjs
defectObjs.sort((x, y) => {
if (x.Score > y.Score)
return 1;
else if (y.Score > x.Score)
return -1;
else
return 0;
});
// forEach on defectObjs that starts counting at 0.
defectObjs.forEach((item, index) => {
"DefectID"+index = item.RefID;
"DefectDetails"+index = item.Details;
});
Thanks in advance for any wisdom you can provide!
Copy link to clipboard
Copied
You're script has some complexity to it. So you'll need to do some debug to figure out what's going on.
There's no obvious code errors. The first loop builds the "defectObjs" array from elements where the "ResultX" field contains "N/C".
So that's the first thing to check. Run the intial loop in the console window. Then look at whats returned to the "defectObjs" array.
Copy link to clipboard
Copied
"DefectID"+index = item.RefID;
You can't create variables this way.
Copy link to clipboard
Copied
I updated a few items. Now I don't get any errors, but when I activate the button the JS is running from nothing happens - nothing appears in my 2nd table.
var defectObjs = []; // empty array to store details about defects
for (i = 1; i < 5; i++) {
if (this.getField(Result).value == "N / C") { // checking if n/c
defectObjs.push({
RefID: "AltRefID" + i,
Details: "Details" + i,
Score: "Score" + i
// Set any additional fields here. JSON objects can be ANYthing
});
}}
// Sort defectObjs here
defectObjs.sort((x, y) => {
if (x.Score > y.Score)
return 1;
else if (y.Score > x.Score)
return -1;
else
return 0;
});
// forEach on defectObjs that starts counting at 0.
defectObjs.forEach((item, index) => {
getField("DefectID"+index).value = item.RefID;
getField("DefectDetails"+index).value = item.Details;
});
Copy link to clipboard
Copied
If Result is a field name, then you are missing quotes.
Copy link to clipboard
Copied
Ar the end of the script add this:
console.show();
console.println(defectObjs.length);
Copy link to clipboard
Copied
Thanks for a reply! I did try adding quotes around Result (yes that is the field name). And added the console lines but no luck yet.
I found another post that seems a bit similar to my quest. They use checkboxes instead of text fields. But I am trying to study it and see if it is doing something that I am not currently doing.
Copy link to clipboard
Copied
I'm even closer now! I was missing declaring a variable in the first section.
Now it is putting text in the 2nd table. Except the text is the field names instead of the value of the fields
Copy link to clipboard
Copied
Post the full code you have now.
Copy link to clipboard
Copied
This code is displaying the field names (e.g., AltRefID4, Details4) in the 2nd table. I've tried a few things unsuccessfully to get it instead to display the text that is in those fields. I tried adding getField and .value around the items identified in the push. Just like the "var result...", I also tried adding vars for the items in the push under the "var result" line.
var defectObjs = []; // empty array to store details
for (i = 0; i < 5; i++) {
var result = "Result" + i;
if (this.getField(result).value == "N / C") { // checking if n/c
defectObjs.push({
RefID: "AltRefID" + i,
Details: "Details" + i,
Score: "Score" + i
});
}}
// Sort defectObjs here
defectObjs.sort((x, y) => {
if (x.Score > y.Score)
return -1;
else if (y.Score > x.Score)
return 1;
else
return 0;
});
//forEach on defectObjs that starts counting at 0.
defectObjs.forEach((item, index) => {
getField("DefectID" + index).value = item.RefID;
getField("DefectDetails" + index).value = item.Details;
});
Copy link to clipboard
Copied
"I tried adding getField and .value around the items identified in the push"
This is correct.
Copy link to clipboard
Copied
When I do the following, nothing appears in the 2nd table (not even the field names anymore). I have tried this.getField too with no luck.
var defectObjs = []; // empty array to store details
for (i = 0; i < 5; i++) {
var result = "Result" + i;
if (this.getField(result).value == "N / C") { // checking if n/c
defectObjs.push({
RefID: getField("AltRefID" + i).value,
Details: getField("Details" + i).value,
Score: getField("Score" + i).value
});
}}
// Sort defectObjs here
defectObjs.sort((x, y) => {
if (x.Score > y.Score)
return -1;
else if (y.Score > x.Score)
return 1;
else
return 0;
});
//forEach on defectObjs that starts counting at 0.
defectObjs.forEach((item, index) => {
getField("DefectID" + index).value = item.RefID;
getField("DefectDetails" + index).value = item.Details;
});
Copy link to clipboard
Copied
Are any errors reported in the console window?
Copy link to clipboard
Copied
Nope. It let's me click OK and it goes away. Then I go and click the button that I have it on. I have even made sure I "Clear Form" and re-enter values and then click the button.
Copy link to clipboard
Copied
You're script has some complexity to it. So you'll need to do some debug to figure out what's going on.
There's no obvious code errors. The first loop builds the "defectObjs" array from elements where the "ResultX" field contains "N/C".
So that's the first thing to check. Run the intial loop in the console window. Then look at whats returned to the "defectObjs" array.
Copy link to clipboard
Copied
Thanks for everyone's helpful responses! I got it working. It was a stupid human error with the fields on the page. 🙂