Federation Method

I'm trying to use a method for a federation item type that appends data into Aras, but it's only inserting one record, I'm assuming the (do while) is incorrect, any help would be appreciated   System.Data.OleDb.OleDbCommand com = new System.Data.OleDb.OleDbCommand(sqltext); com.Connection = myConnection; myConnection.Open(); System.Data.OleDb.OleDbDataReader myDataReader = com.ExecuteReader(); //create a MIN_Delivered_Transaction item Item res5 = this.newItem("MIN_Delivered_Transaction"); string newid = getNewID(); res5.setID(newid); res5 = res5.apply(); do { int count = myDataReader.FieldCount; while (myDataReader.Read()) { for(int i = 0 ; i < count ; i++) { res5.setProperty("f_dc",myDataReader.GetString(0)); res5.setProperty("f_trans_group",myDataReader.GetString(1)); res5.setProperty("f_part_number",myDataReader.GetString(2)); res5.setProperty("f_part_name",myDataReader.GetString(3)); res5.setProperty("f_serial_number",myDataReader.GetString(4)); res5.setProperty("f_trans_number",myDataReader.GetString(5)); res5.setProperty("f_trans_type",myDataReader.GetString(6)); res5.setProperty("f_trans_name",myDataReader.GetString(7)); res5.setProperty("f_created_by",myDataReader.GetString(8)); res5.setProperty("f_state",myDataReader.GetString(9)); res5.setProperty("f_call_ticket",myDataReader.GetString(10)); // res5.setProperty("f_created_on",myDataReader.GetString(11)); } } } while (myDataReader.NextResult()); myConnection.Close(); // return the MIN_Delivered_Transaction item to be populated in the grid. return res5;
  • Hello, The loop seems to be correct, but the code is just overwriting the data in the res5 variable each time instead of creating a new item. You'll want to change it to be something like the example below.
    while(myDataReader.Read()) {
    for (int i = 0; i < count; i++) {
    Item temp = this.newItem("MIN_Delivered_Transaction");
    temp.setProperty("f_dc", myDataReader.GetString(0));
    temp.setProperty("f_trans_group", myDataReader.GetString(0));
    ...
    res5.appendItem(temp); // Add a new item for each iteration of the loop
    }
    }
    ...
    return res5;
    This will return res5 as a collection of items like you are expecting. Chris
    Christopher Gillis Aras Labs Software Engineer
  • This is partially working, it’s bring back the result twice and the first record is always blank. Ex: Blank Line------- AA 123 BB 456 AA 123 BB 456 See my code below, thanks for your help!! string sqltext = "select dc, trans_group, part_number, part_name, serial_number, trans_number, trans_type, trans_name, created_by, state, call_ticket, created_on from P81M.dbo.min_transactions_all where serial_number = '" + masterserial + "';"; System.Data.OleDb.OleDbCommand com = new System.Data.OleDb.OleDbCommand(sqltext); com.Connection = myConnection; myConnection.Open(); System.Data.OleDb.OleDbDataReader myDataReader = com.ExecuteReader(); //create a MIN_Delivered_Transaction item Item res5 = this.newItem("MIN_Delivered_Transaction"); string newid = getNewID(); res5.setID(newid); res5 = res5.apply(); // int count = myDataReader.FieldCount; int count = 1; while (myDataReader.Read()) { for(int i = 0 ; i < count ; i++) { Item temp = this.newItem("MIN_Delivered_Transaction"); temp.setProperty("f_dc", myDataReader.GetString(0)); temp.setProperty("f_trans_group", myDataReader.GetString(1)); temp.setProperty("f_part_number",myDataReader.GetString(2)); temp.setProperty("f_part_name",myDataReader.GetString(3)); temp.setProperty("f_serial_number",myDataReader.GetString(4)); temp.setProperty("f_trans_number",myDataReader.GetString(5)); temp.setProperty("f_trans_type",myDataReader.GetString(6)); temp.setProperty("f_trans_name",myDataReader.GetString(7)); temp.setProperty("f_created_by",myDataReader.GetString(8)); temp.setProperty("f_state",myDataReader.GetString(9)); temp.setProperty("f_call_ticket",myDataReader.GetString(10)); res5.appendItem(temp); // Add a new item for each iteration of the loop } } myConnection.Close(); return res5;
  • Question 1. How do I retrieve the number of rows in myDataReader, is there a (int count = myDataReader.RowCount) ?? Question 2                                                                                                                                                                                                                                           If place a place holder for my count for testing ex. (int count = 2) it always doubles my data, If I put (int count =3) it triples my data. I'm assuming there's something wrong in my code   // Get the serial number Item qry0 = this.newItem("MIN_Delivered_Component"); qry0.setAttribute("select","item_number"); qry0.setID(this.getProperty("source_id")); Item res=qry0.apply("get"); if (res.isError()) return res; // get the Serial Number (key) that we will use in the external database to search on. string masterserial; masterserial = res.getProperty("item_number"); // Connect to external database System.Data.OleDb.OleDbConnection myConnection = new System.Data.OleDb.OleDbConnection(@"Provider=SQLOLEDB;Data Source=000.00.000.0; Initial Catalog=ABC; User ID=admin;Password=xxxxx;"); string sqltext = "select dc, trans_group, part_number where serial_number = '" + masterserial + "';"; System.Data.OleDb.OleDbCommand com = new System.Data.OleDb.OleDbCommand(sqltext); com.Connection = myConnection; myConnection.Open(); System.Data.OleDb.OleDbDataReader myDataReader = com.ExecuteReader(); //create a MIN_Delivered_Transaction item Item res5 = this.newItem("MIN_Delivered_Transaction"); string newid = getNewID(); res5.setID(newid); res5 = res5.apply(); int count = 2; while (myDataReader.Read()) { for(int i = 0 ; i < count ; i++) { Item temp = this.newItem("MIN_Delivered_Transaction"); temp.setProperty("f_dc", myDataReader.GetString(0)); temp.setProperty("f_trans_group", myDataReader.GetString(1)); temp.setProperty("f_part_number",myDataReader.GetString(2)); res5.appendItem(temp); // Add a new item for each iteration of the loop } } myConnection.Close(); return res5;