// Create dummy infotables to merge (no datashapes necessary here) var table1 = Resources["InfoTableFunctions"].CreateInfoTable({infoTableName: "Table1"}); table1.AddField({name:"StringField1",baseType:"STRING"}); table1.AddField({name:"DateTimeField",baseType:"DATETIME"}); var newEntry1 = new Object(); newEntry1.StringField1 = "test value"; newEntry1.DateTimeField = Date.now(); table1.AddRow(newEntry1); var table2 = Resources["InfoTableFunctions"].CreateInfoTable({infoTableName: "Table2"}); table2.AddField({name:"StringField2",baseType:"STRING"}); table2.AddField({name:"DateTimeField",baseType:"DATETIME"}); var newEntry2 = new Object(); newEntry2.StringField2 = "other test value"; newEntry2.DateTimeField = Date.now(); table2.AddRow(newEntry2); var table3 = Resources["InfoTableFunctions"].CreateInfoTable({infoTableName: "Table3"}); table3.AddField({name:"StringField3",baseType:"STRING"}); table3.AddField({name:"DateTimeField",baseType:"DATETIME"}); var newEntry3 = new Object(); newEntry3.StringField3 = "other test value"; newEntry3.DateTimeField = Date.now(); table3.AddRow(newEntry3); // Create the results table var combined_infotable = Resources["InfoTableFunctions"].CreateInfoTable({infoTableName: "ResultsTable"}); // Create list of tables to merge (can do more than two) var tableList = [table1, table2, table3]; // Iterate through the fields of each table, adding the fields to the results table if necessary and then setting the values for(var i = 0; i < tableList.length; i++) { var currentTable = tableList[i]; // Need to convert to json in order to iterate through fields if datashape is not known. If datashape is known, see snippets for potentially simpler solution var table_json = Resources["InfoTableFunctions"].ToJSON({table: currentTable}); for(var key in table_json.dataShape.fieldDefinitions) { try { // this line will error if the field doesn't already exist in the results table... combined_infotable.dataShape.fieldDefinitions[key] } catch(err) { // ...so if it does error, then we need to add it combined_infotable.AddField(table_json.dataShape.fieldDefinitions[key]); } } // Now iterate through the values of each table and copy over each row for(var j = 0; j < currentTable.rows.length; j++) { combined_infotable.AddRow(currentTable.rows[j]); } } var result = combined_infotable;