private static void ClearOld(LinkedLookupSettings config, int listItemId, List<int> removeItems, SPField remoteLookup, SPList remoteList) { foreach (int id in removeItems) { SPListItem remoteItem; try { remoteItem = remoteList.GetItemById(id); } catch { continue; } // pokusit se z lookupu v remoteItemu smazat polozku, na ktere aktualne bezi receiver // pokud je to multilookup, chceme si zachovat zbytek hodnot if (( (SPFieldLookup) remoteLookup ).AllowMultipleValues && ( remoteItem[remoteLookup.InternalName] ?? "" ).ToString().Trim() != "") { // stavajici obsah lookupu SPFieldLookupValueCollection existingCollection = new SPFieldLookupValueCollection(( remoteItem[remoteLookup.InternalName] ?? "" ).ToString()); SPFieldLookupValue toRemove = existingCollection.FirstOrDefault(lookup => lookup.LookupId == listItemId); // ze stavajiciho obsahu odstranime polozku, na ktere bezi receiver if (toRemove != null) existingCollection.Remove(toRemove); // upraveny obsah vratime zpatky remoteItem[remoteLookup.InternalName] = existingCollection; } // pokud je to jednoduchy lookup, a neni prazdny, proste tam nastavime aktualni polozku else if (( remoteItem[remoteLookup.InternalName] ?? "" ).ToString().Trim() != "") { SPFieldLookupValue existingVal = new SPFieldLookupValue(( remoteItem[remoteLookup.InternalName] ?? "" ).ToString()); if (existingVal.LookupId == listItemId) { remoteItem[remoteLookup.InternalName] = null; } } if (config.RegularUpdate) { remoteItem.Update(false); } else { // pokud jsou receivery na obou stranach, nechceme se dostat do smycky remoteItem.SystemUpdate(config.UpdateVersion, false); } } }
private static void AddNew(LinkedLookupSettings config, SPItemEventProperties props, List<int> addItems, SPField remoteLookup, SPList remoteList) { foreach (int id in addItems) { // najit odpovidajici remote listitem SPListItem remoteItem; try { remoteItem = remoteList.GetItemById(id); } catch { continue; } // do kazde z nich pridal lookup na nasi polozku // pokud je remoteLookup multilookup, overime, ze tam jeste neni, a pridame ke stavajicim if (( (SPFieldLookup) remoteLookup ).AllowMultipleValues) { SPFieldLookupValueCollection existingCollection = ( remoteItem[remoteLookup.InternalName] ?? "" ).ToString().Trim() != "" ? new SPFieldLookupValueCollection(remoteItem[remoteLookup.InternalName].ToString()) : new SPFieldLookupValueCollection(); // zkontrolovat, jestli už tam dané ID není, ale ID, ktere menime!!!! bool exists = existingCollection.Any(lookupVal => lookupVal.LookupId == props.ListItemId); if (!exists) { existingCollection.Add(new SPFieldLookupValue(props.ListItemId, ( props.AfterProperties[( (SPFieldLookup) remoteLookup ).LookupField] ?? props.ListItem[( (SPFieldLookup) remoteLookup ).LookupField] ).ToString())); remoteItem[remoteLookup.InternalName] = existingCollection; } } // pokud je to single lookup, proste to tam pridame else { if (props.AfterProperties[( (SPFieldLookup) remoteLookup ).LookupField] != null) { SPFieldLookupValue newVal = new SPFieldLookupValue(props.ListItemId, props.AfterProperties[( (SPFieldLookup) remoteLookup ).LookupField].ToString()); remoteItem[remoteLookup.InternalName] = newVal; } else { SPFieldLookupValue newVal = new SPFieldLookupValue(props.ListItemId, props.ListItem[( (SPFieldLookup) remoteLookup ).LookupField].ToString()); remoteItem[remoteLookup.InternalName] = newVal; } } if (config.RegularUpdate) { remoteItem.Update(false); } else { // pokud jsou receivery na obou stranach, nechceme se dostat do smycky remoteItem.SystemUpdate(config.UpdateVersion, false); } } }