Ranjith Venkatesh
Ranjith Venkatesh

Reputation: 1362

Reading existing field value from SharePoint Custom List fails

I am trying to read the value of a particular field in a SharePoint Custom List.

The Custom List has the following fields: Field1, Field2 and Field3

When I call the code below:

public static string GetLastTargetColumnValue(string sharePointSiteUrl, string sharePointListName, string targetColumnName)
        {
            string targetColumnValue = string.Empty;
            using (var clientContext = new ClientContext(sharePointSiteUrl))
            {
                clientContext.Credentials = new NetworkCredential("userName", "password");
                var list = clientContext.Web.Lists.GetByTitle(sharePointListName);
                var query = CamlQuery.CreateAllItemsQuery(100);
                var items = list.GetItems(query); 
                clientContext.Load(items);
                clientContext.ExecuteQuery();
                var listItem = items.Last();
                foreach (var fieldValue in listItem.FieldValues)
                {
                    Console.WriteLine(fieldValue.Key + ":" + fieldValue.Value + Environment.NewLine);
                }
            }
            targetColumnValue = listItem[targetColumnName] as string;
            return targetColumnValue;
        }

The error message is: Additional information: The property or field has not been initialized. It has not been requested or the request has not been executed. It may need to be explicitly requested.

The fields which are displayed in the foreach show "Field1" and "Field2". Do I have to explicitly request "Field3". If yes how?

Upvotes: 0

Views: 1183

Answers (1)

Ranjith Venkatesh
Ranjith Venkatesh

Reputation: 1362

I had to get the internal name before querying the value for some reason. Here is the code that worked:

public static string GetLastTargetColumnValue(string sharePointSiteUrl, string sharePointListName, string targetColumnName)
        {
            string targetColumnValue = string.Empty;
            using (var clientContext = new ClientContext(sharePointSiteUrl))
            {
                clientContext.Credentials = new NetworkCredential("userName", "password");
                var list = clientContext.Web.Lists.GetByTitle(sharePointListName);

                var field = list.Fields.GetByInternalNameOrTitle(targetColumnName);
                var textField = clientContext.CastTo<FieldText>(field);

                var query = CamlQuery.CreateAllItemsQuery(100);
                var items = list.GetItems(query);

                clientContext.Load(textField);
                clientContext.Load(items);
                clientContext.ExecuteQuery();

                var listItem = items.Last();
                targetColumnValue = listItem[textField.InternalName] as string;
            }
            return targetColumnValue;
        }

Upvotes: 1

Related Questions