CSOM code is raising this error “Version conflict.” when trying to update ListItems inside foreach

%3CLINGO-SUB%20id%3D%22lingo-sub-1645135%22%20slang%3D%22en-US%22%3ECSOM%20code%20is%20raising%20this%20error%20%E2%80%9CVersion%20conflict.%E2%80%9D%20when%20trying%20to%20update%20ListItems%20inside%20foreach%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-1645135%22%20slang%3D%22en-US%22%3E%3CP%3EI%20have%20the%20following%20CSOM%20code%3A-%3C%2FP%3E%3CPRE%20class%3D%22lia-code-sample%20language-applescript%22%3E%3CCODE%3Eusing%20(ClientContext%20context2%20%3D%20Helpers.GetAppOnlyContext(properties.ItemEventProperties.WebUrl))%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20try%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2Fset%20unique%20permsion%20for%20the%20risk%20Value%20%2B%20Asset%20item%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20RoleDefinition%20readerDef%20%3D%20context2.Web.RoleDefinitions.GetByType(RoleType.Reader)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20RoleDefinitionBindingCollection%20readOnlyBinding%20%3D%20new%20RoleDefinitionBindingCollection(context2)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20readOnlyBinding.Add(readerDef)%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20RoleDefinition%20contributeDef%20%3D%20context2.Web.RoleDefinitions.GetByType(RoleType.Contributor)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20RoleDefinitionBindingCollection%20contributeBinding%20%3D%20new%20RoleDefinitionBindingCollection(context2)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20contributeBinding.Add(contributeDef)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20CamlQuery%20camlQuery%20%3D%20new%20CamlQuery()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20camlQuery.ViewXml%20%3D%20string.Format(%22%3CVIEW%20scope%3D%22%5C%26quot%3BRecursiveAll%5C%26quot%3B%22%3E%3CQUERY%3E%3CWHERE%3E%3CEQ%3E%3CFIELDREF%20name%3D%22%5C%26quot%3BRiskValueAsset%5C%26quot%3B%22%20lookupid%3D%22%5C%26quot%3BTRUE%5C%26quot%3B%22%3E%3C%2FFIELDREF%3E%3CVALUE%20type%3D%22%5C%26quot%3BLookup%5C%26quot%3B%22%3E%7B0%7D%3C%2FVALUE%3E%3C%2FEQ%3E%3C%2FWHERE%3E%3C%2FQUERY%3E%3C%2FVIEW%3E%22%2C%20listItemID)%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20context2.Load(context2.Web)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20context2.ExecuteQuery()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20ListItemCollection%20listItemCollection%20%3D%20context2.Web.GetList(context2.Web.ServerRelativeUrl%20%2B%20%22%2Flists%2FRiskValue%22).GetItems(camlQuery)%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20context2.Load(listItemCollection%2C%20items%20%3D%26gt%3B%20items.Include(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20item%20%3D%26gt%3B%20item.Id%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20item%20%3D%26gt%3B%20item%5B%22Title%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20item%20%3D%26gt%3B%20item.RoleAssignments%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20))%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20context2.ExecuteQuery()%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20ListItem%20listItem%20%3D%20context2.Web.GetList(context2.Web.ServerRelativeUrl%20%2B%20%22%2Flists%2FAssets%22).GetItemById(listItemID)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20context2.Load(listItem)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20context2.ExecuteQuery()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20FieldUserValue%20creator%20%3D%20listItem%5B%22Author%22%5D%20as%20FieldUserValue%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20foreach%20(ListItem%20listItem2%20in%20listItemCollection)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20listItem2.BreakRoleInheritance(false%2C%20false)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20listItem2.RoleAssignments.Add(context2.Web.EnsureUser(creator.LookupValue)%2C%20new%20RoleDefinitionBindingCollection(context2)%20%7B%20contributeDef%20%7D)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20listItem2.RoleAssignments.Add(context2.Site.RootWeb.SiteGroups.GetByName(%22Risk%20Users%22)%2C%20new%20RoleDefinitionBindingCollection(context2)%20%7B%20readerDef%20%7D)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20listItem2.RoleAssignments.Add(context2.Site.RootWeb.SiteGroups.GetByName(%22Risk%20Admins%22)%2C%20new%20RoleDefinitionBindingCollection(context2)%20%7B%20contributeDef%20%7D)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20listItem2.Update()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20context2.ExecuteQuery()%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%3C%2FCODE%3E%3C%2FPRE%3E%3CP%3Enow%20the%20foreach%20will%20run%20once%20and%20set%20the%20RoleAssignment%2C%20but%20on%20the%20second%20iteration%20it%20will%20raise%20this%20exception%20%22Version%20conflict.%22..%20any%20advice%3F%3C%2FP%3E%3CP%3EI%20also%20tried%20to%20replace%20the%20foreach%20with%20for%20loop%20as%20follow%2C%20but%20did%20not%20fix%20the%20issue%3A-%3C%2FP%3E%3CPRE%20class%3D%22lia-code-sample%20language-applescript%22%3E%3CCODE%3Efor%20(int%20i%20%3D%200%3B%20i%20%26lt%3B%20listItemCollection.Count%20%3B%20i%2B%2B)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20listItemCollection%5Bi%5D.BreakRoleInheritance(false%2C%20false)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20listItemCollection%5Bi%5D.RoleAssignments.Add(context2.Web.EnsureUser(creator.LookupValue)%2C%20new%20RoleDefinitionBindingCollection(context2)%20%7B%20contributeDef%20%7D)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20listItemCollection%5Bi%5D.RoleAssignments.Add(context2.Site.RootWeb.SiteGroups.GetByName(%22Risk%20Users%22)%2C%20new%20RoleDefinitionBindingCollection(context2)%20%7B%20readerDef%20%7D)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20listItemCollection%5Bi%5D.RoleAssignments.Add(context2.Site.RootWeb.SiteGroups.GetByName(%22Risk%20Admins%22)%2C%20new%20RoleDefinitionBindingCollection(context2)%20%7B%20contributeDef%20%7D)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20listItemCollection%5Bi%5D.SystemUpdate()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20context2.ExecuteQuery()%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%3C%2FCODE%3E%3C%2FPRE%3E%3C%2FLINGO-BODY%3E%3CLINGO-LABS%20id%3D%22lingo-labs-1645135%22%20slang%3D%22en-US%22%3E%3CLINGO-LABEL%3EDeveloper%3C%2FLINGO-LABEL%3E%3C%2FLINGO-LABS%3E
Valued Contributor

I have the following CSOM code:-

using (ClientContext context2 = Helpers.GetAppOnlyContext(properties.ItemEventProperties.WebUrl))
                {
                    try
                    {
                        //set unique permsion for the risk Value + Asset item
                        RoleDefinition readerDef = context2.Web.RoleDefinitions.GetByType(RoleType.Reader);
                        RoleDefinitionBindingCollection readOnlyBinding = new RoleDefinitionBindingCollection(context2);
                        readOnlyBinding.Add(readerDef);

                        RoleDefinition contributeDef = context2.Web.RoleDefinitions.GetByType(RoleType.Contributor);
                        RoleDefinitionBindingCollection contributeBinding = new RoleDefinitionBindingCollection(context2);
                        contributeBinding.Add(contributeDef);
                        CamlQuery camlQuery = new CamlQuery();
                        camlQuery.ViewXml = string.Format("<View Scope=\"RecursiveAll\"><Query><Where><Eq><FieldRef Name=\"RiskValueAsset\" LookupId=\"TRUE\" /><Value Type=\"Lookup\">{0}</Value></Eq></Where></Query></View>", listItemID);

                        context2.Load(context2.Web);
                        context2.ExecuteQuery();
                        ListItemCollection listItemCollection = context2.Web.GetList(context2.Web.ServerRelativeUrl + "/lists/RiskValue").GetItems(camlQuery);

                        context2.Load(listItemCollection, items => items.Include(
                                            item => item.Id,
                                            item => item["Title"],
                                            item => item.RoleAssignments
                                           ));
                        context2.ExecuteQuery();

                        ListItem listItem = context2.Web.GetList(context2.Web.ServerRelativeUrl + "/lists/Assets").GetItemById(listItemID);
                        context2.Load(listItem);
                        context2.ExecuteQuery();
                        FieldUserValue creator = listItem["Author"] as FieldUserValue;
                        foreach (ListItem listItem2 in listItemCollection)
                        {
                            
                            
                            listItem2.BreakRoleInheritance(false, false);
                            listItem2.RoleAssignments.Add(context2.Web.EnsureUser(creator.LookupValue), new RoleDefinitionBindingCollection(context2) { contributeDef });
                            listItem2.RoleAssignments.Add(context2.Site.RootWeb.SiteGroups.GetByName("Risk Users"), new RoleDefinitionBindingCollection(context2) { readerDef });
                            listItem2.RoleAssignments.Add(context2.Site.RootWeb.SiteGroups.GetByName("Risk Admins"), new RoleDefinitionBindingCollection(context2) { contributeDef });
                            listItem2.Update();
                            context2.ExecuteQuery();

                        }                           
                    }

now the foreach will run once and set the RoleAssignment, but on the second iteration it will raise this exception "Version conflict.".. any advice?

I also tried to replace the foreach with for loop as follow, but did not fix the issue:-

for (int i = 0; i < listItemCollection.Count ; i++)
                        {


                            listItemCollection[i].BreakRoleInheritance(false, false);
                            listItemCollection[i].RoleAssignments.Add(context2.Web.EnsureUser(creator.LookupValue), new RoleDefinitionBindingCollection(context2) { contributeDef });
                            listItemCollection[i].RoleAssignments.Add(context2.Site.RootWeb.SiteGroups.GetByName("Risk Users"), new RoleDefinitionBindingCollection(context2) { readerDef });
                            listItemCollection[i].RoleAssignments.Add(context2.Site.RootWeb.SiteGroups.GetByName("Risk Admins"), new RoleDefinitionBindingCollection(context2) { contributeDef });
                            listItemCollection[i].SystemUpdate();
                            context2.ExecuteQuery();

                        }
0 Replies