Пример #1
0
        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);
                }
            }
        }
Пример #2
0
        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);
                }
            }
        }