Обновление поля в элементах списка на основе значения, выбранного из выпадающего столбца «Выбор» - PullRequest
1 голос
/ 19 марта 2012

У меня есть следующая проблема, у меня есть два списка "TestUsers" и "TestGroups". Список «TestUsers» состоит из двух столбцов [Группа - Выбор], [Пользователь - Одна строка текста]. Список «TestGroups» состоит из двух столбцов [Группа - Одна строка текста], [CheckedOut - Одна строка текста].

Данные в обоих списках следующие:

TestUsers (Список): Пользователь: testuser1 Группа: группа А

Пользователь: testuser2 Группа: группа B

TestGroups (Список): Группа: группа А CheckedOut: testuser1

Требуется, чтобы, когда пользователь в списках «TestUsers» изменял свою «Группу», например, с «groupA» на «groupB», это также должно быть отражено и автоматически обновлено в списке «TestGroups». Так, например, в списке «TestUsers», если я должен был изменить «Группу» для «testuser1» на «groupB», то в списке «TestGroups» «Группа» из «testuser1» также должна изменить / обновить на «groupB». ».

Надеюсь, вышеизложенное достаточно ясно для описания требований.

Я попытался сделать это, используя рабочие потоки и имея столбец поиска, а также вычисленные столбцы. Но как вычисленные столбцы, так и столбцы поиска, похоже, не работают.

Как мне добиться этого, используя код на c #. Я знаю, как обновить элементы списка, но я не уверен, как обновить элементы списка из списка, когда значение изменяется в отдельном списке, как упоминалось ранее.

Я застрял в этой проблеме и подумал, что я опубликую ее здесь, чтобы получить быстрые и точные предложения о том, как продолжить.

Большое спасибо, любая помощь с этим будет принята с благодарностью.

1 Ответ

1 голос
/ 19 марта 2012

вы можете попробовать это. В приемнике событий используйте ItemUpdating Метод события: просто проверьте, изменен элемент или нет, и создайте свою логику

 public override void ItemUpdating(SPItemEventProperties properties)
    {
        base.ItemUpdated(properties);
        if (properties.ListTitle == "TestUsers")
        {
            SPWeb web = properties.OpenWeb();
            SPList list = web.Lists[properties.ListTitle];
            SPListItem litemUser = list.GetItemById(properties.ListItemId);


            SPList objFeatureList = web.Lists["TestGroups"];
            SPQuery objParentQuery = new SPQuery();

            string user = properties.AfterProperties["User"].ToString();

            //in Caml query just find it out listitem which contain Users and than update its listitem.
            objParentQuery.Query = "<Where><Eq><FieldRef Name='Check_x0020_it_x0020_out'/><Value Type='Integer'>"+You should set Userid in Field From litemUser +"</Value></Eq></Where>";
            SPListItemCollection liitemcol = objFeatureList.GetItems(objParentQuery);
            foreach (SPListItem litemGroup in liitemcol)
            {
                litemGroup["Group"] = litemUser["Group"];
                litemGroup.Update();

                // or if you want to using Workflow just startWorflow when item has match over here.
            }

        }
    }
...