SalesLogix Exception trying to delete an Entity item from a collection: Collection was modified; enumeration operation may not execute.

 

If you are working in the SalesLogix entity model and try to loop through a collection and delete certain records, you will not be able to.  This is because while you are looping through the collection you can not start removing items from the collection you are in.  Instead what you can do is to build a data table of the IDs involved you want to delte. Then after you loop through the collection you can loop through your data table and delete each item from the collection.

Lets take a look at a sample where I want to delete all of the Sales Order Items from under a Sales Order:

System.Data.DataTable dt = new System.Data.DataTable();
System.Data.DataColumn id = new System.Data.DataColumn(“Id”, typeof(string));
dt.Columns.Add(id);
System.Data.DataRow newRow;

foreach (ISalesOrderItem soproduct in salesorder.SalesOrderItems)
{
    newRow = dt.NewRow();
    newRow[“Id”] = soproduct.Id.ToString();
    dt.Rows.Add(newRow);
}

foreach (System.Data.DataRow row in dt.Rows)
{
    Sage.Entity.Interfaces.ISalesOrderItem prd = Sage.Platform.EntityFactory.GetById<Sage.Entity.Interfaces.ISalesOrderItem>(row[“Id”]);
    if (prd != null)
    {
        salesorder.SalesOrderItems.Remove(prd);
        prd.Delete();
    }
}

ABOUT THE AUTHOR

Kris Halsrud

Kris Halsrud is a Senior Analyst / Developer for Customer FX Corporation.

Submit a Comment

Your email address will not be published. Required fields are marked *

Subscribe To Our Newsletter

Join our mailing list to receive the latest Infor CRM (Saleslogix) news and product updates!

You have Successfully Subscribed!