Добавление элементов в список Sharepoint с использованием клиентской объектной модели с помощью Silverlight не работает - PullRequest
0 голосов
/ 06 сентября 2011

Я потратил много времени на проблему Silverlight access Sharepoint 2010, используя следующий стандартный код, но метод onQueryFailed всегда используется. Пожалуйста, помогите, спасибо!

        ClientContext clientContext = new ClientContext(siteUrl);
        Web oWebsite = clientContext.Web;
        ListCollection collList = oWebsite.Lists;

        oList = clientContext.Web.Lists.GetByTitle("ClientList");

        ListItem oListItem = oList.AddItem(new ListItemCreationInformation());
        oListItem["Name"] = "John Doe";
        oListItem["Address"] = "123 main rd.";
        oListItem.Update();

        clientContext.Load(oList,list => list.Title);

        clientContext.ExecuteQueryAsync(onQuerySucceeded, onQueryFailed);
    }

    private void onQuerySucceeded(object sender, ClientRequestSucceededEventArgs args)
    {
        UpdateUIMethod updateUI = DisplayInfo;
        this.Dispatcher.BeginInvoke(updateUI);
    }

    private void DisplayInfo()
    {
        MyOutput.Text = "New item created in " + oList.Title;
    }

    private void onQueryFailed(object sender, ClientRequestSucceededEventArgs args)
    {
        MessageBox.Show("Failed");
    }

Ответы [ 4 ]

1 голос
/ 06 сентября 2011

Обработчик onQueryFailed имеет неверную подпись. Вам необходимо использовать ClientRequestFailedEventArgs в качестве второго параметра:

// Example from msdn:
private void onQueryFailed(object sender, ClientRequestFailedEventArgs args)
{
  MessageBox.Show("Request failed. " + args.Message + "\n" + args.StackTrace);
}

Если проблема не в этом, вы увидите хотя бы реальную ошибку.

0 голосов
/ 29 апреля 2013

В клиентской объектной модели вы всегда должны использовать внутреннее имя для доступа к столбцам. Когда вы переименовываете свой столбец заголовка в «Имя», внутреннее имя остается «Заголовок».

Вы можете сделать что-то вроде этого:

Field titleField = calendarList.Fields.GetByInternalNameOrTitle("Name");
Field addressField = calendarList.Fields.GetByInternalNameOrTitle("Address");

clientContext.Load(titleField);
clientContext.Load(addressField);
clientContext.ExecuteQuery();
oListItem[titleField.InternalName] = "John Doe";
0 голосов
/ 19 ноября 2012

Возможно, уже поздно, но вот как я это сделаю.

        ClientContext clientContext = new ClientContext(siteUrl);
    Web oWebsite = clientContext.Web;
    ListCollection collList = oWebsite.Lists;

    var oList = clientContext.Web.Lists.GetByTitle("ClientList");

    ListItem oListItem = oList.AddItem(new ListItemCreationInformation());
    oListItem["Name"] = "John Doe";
    oListItem["Address"] = "123 main rd.";
    oListItem.Update();

    clientContext.Load(oList);


    clientContext.ExecuteQueryAsync(
              (s, e) =>
              Deployment.Current.Dispatcher.BeginInvoke(() => onQuerySucceeded(oListItem)),
              (s, e) =>
              Deployment.Current.Dispatcher.BeginInvoke(() => onQueryFailed(e.Message))
              );

}

private void onQuerySucceeded(ListItem item)
{
    MyOutput.Text = "New item created in " + item["Title"];
}

private void onQueryFailed(string error)
{
    MessageBox.Show(string.Format("Failed {0}",error));
}
0 голосов
/ 06 сентября 2011

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

oListItem["Title"] = "My new item";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...