Как использовать элемент управления SharePoint MultipleLookupField?

StackOverflow https://stackoverflow.com/questions/39910

  •  09-06-2019
  •  | 
  •  

Вопрос

Я хочу использовать элемент управления MultipleLookupField на веб-странице, которая будет выполняться в контексте SharePoint.Мне было интересно, не поможет ли мне кто-нибудь с примером, в котором шаг за шагом показано, как использовать элемент управления two для отображения двух коллекций SPField.

Это было полезно?

Решение

Я не совсем уверен, что понимаю ваш вопрос, особенно в части отображения двух коллекций SPField. Извините, если это окажется ответом на совершенно другой вопрос!

В любом случае, мы рассмотрим краткую демонстрацию использования MultipleLookupField в веб-части.

Создайте сайт группы. Добавьте несколько задач в список задач. Также поместите документ в библиотеку общих документов. Создайте новый столбец в библиотеке общих документов; назовите его «Связанный», пусть он будет «Уточняющим запросом» в поле «Заголовок» списка «Задачи» и разрешит несколько значений.

Теперь создайте веб-часть, выполните все обычные шаблоны и добавьте следующее:

Label l;
MultipleLookupField mlf;

protected override void CreateChildControls()
{
    base.CreateChildControls();
    SPList list = SPContext.Current.Web.Lists["Shared Documents"];
    if (list != null && list.Items.Count > 0)
    {
        LiteralControl lit = new LiteralControl("Associate tasks to " + 
                             list.Items[0].Name);
        this.Controls.Add(lit);

        mlf = new MultipleLookupField();
        mlf.ControlMode = SPControlMode.Edit;
        mlf.FieldName = "Related";
        mlf.ItemId = list.Items[0].ID;
        mlf.ListId = list.ID;
        mlf.ID = "Related";
        this.Controls.Add(mlf);

        Button b = new Button();
        b.Text = "Change";
        b.Click += new EventHandler(bClick);
        this.Controls.Add(b);

        l = new Label();
        this.Controls.Add(l);
    }

}

void bClick(object sender, EventArgs e)
{
    l.Text = "";
    foreach (SPFieldLookupValue val in (SPFieldLookupValueCollection)mlf.Value)
    {
        l.Text += val.LookupValue.ToString() + " ";
    }
    SPListItem listitem = mlf.List.Items[0];
    listitem["Related"] = mlf.Value;
    listitem.Update();
    mlf.Value = listitem["Related"];
}

protected override void OnInit(EventArgs e)
{
    base.OnInit(e);
    EnsureChildControls();
}

Конечно, это нелепо - все жестко запрограммировано, обработка ошибок вообще не предусмотрена, и она не служит никакой полезной цели - но она предназначена только для быстрой демонстрации. Теперь создайте и разверните эту веб-часть и добавьте ее экземпляр на домашнюю страницу сайта своей группы; он должен позволять вам получать и устанавливать задачи, связанные с первым документом в библиотеке.

Странный бит в конце кнопки Обработчик щелчка, где мы читаем значение из mlf.Value и затем записываем его снова, кажется необходимым, если вы хотите, чтобы пользовательский интерфейс синхронизировался с фактическими значениями списка. Попробуйте пропустить последнюю строку bClick, чтобы понять, что я имею в виду. Это сводило меня с ума в течение последнего часа или около того, и я надеюсь, что другой комментатор может предложить лучший подход ...

Другие советы

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

Похоже, у него возникли проблемы с заполнением элемента управления;моим первым предположением было бы, что это происходит потому, что код делает так много предположений о списках, с которыми он общается.Можете ли вы проверить, что у вас простой сайт ванильной команды с (предположим, что эти имена чувствительны к регистру):

  1. Список под названием "Задачи", содержащий несколько элементов
  2. Библиотека под названием " Общие документы", содержащая хотя бы один документ
  3. Столбец с именем Related в библиотеке общих документов
  4. Связанный столбец является полем подстановки в столбец Заголовка Задач и допускает несколько значений.
  5. Первый документ в разделе Общие документы имеет значение для связанных

Затем добавьте веб-часть.Скрестив пальцы...

Хм.Ладно, я все еще пытаюсь сломать свою...поэтому я зашел в каталог layouts и создал файл foo.aspx.Вот оно:

<%@ Page Language="C#" Inherits="System.Web.UI.Page" MasterPageFile="~/_layouts/simple.master" %> 
<%@ Register Tagprefix="foo" Namespace="Foople" Assembly="Foople, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9f4da00116c38ec5"%>
<asp:Content ContentPlaceHolderId="PlaceHolderMain" runat="server">
<foo:WebPart1 id="fred" runat="server" />
<foo:WebPart1a id="barney" runat="server" />
</asp:Content>

WebPart1 - это веб-часть из предыдущих.WebPart1a - это точно такой же код, но в классе, который наследуется непосредственно от WebControl, а не от WebPart.

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

Изменив masterpage на ~masterurl/default.master, я загрузил foo.aspx в библиотеку общих документов, и оттуда тоже все работает нормально - и WebControl, и WebPart ведут себя правильно, и проблема безопасности тоже устранена.

Так что я в растерянности.Хотя я заметил на этой странице неясную возможную ошибку, которая также находится в SPFolder.get_ContentTypeOrder(): http://forums.msdn.microsoft.com/en-US/sharepointdevelopment/thread/63baf273-7f36-453e-8293-26417759e2e1/

Есть ли шанс, что вы могли бы опубликовать свой код?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top