¿Cómo obtener texto sin formato de un campo de texto de varias líneas en el modelo de objetos del lado del cliente?

sharepoint.stackexchange https://sharepoint.stackexchange.com//questions/96895

Pregunta

Estoy intentando leer texto sin formato de un MultiLineTextField en una lista.Así es como se ve mi código hasta ahora:

//Get connection
ClientContext context = new ClientContext("URL");
Web site = context.Web;
context.Load(site);
context.ExecuteQuery();

//Get list collection
ListCollection lists = context.Web.Lists;
context.Load(lists);
context.ExecuteQuery();

//Get specific list
List menu = lists.GetByTitle("menu");
CamlQuery camlQuery = new CamlQuery();
camlQuery.ViewXML = "<View/>";
ListItemCollection dishes = menu.GetItems(camlQuery);
context.Load(menu);
context.Load(dishes);
context.ExecuteQuery();

//Iterate through all dishes

foreach(ListItem dish in dishes)
{
Console.WriteLine("Dish: {0}:", dish.FieldValues["Name"]);
Console.WriteLine("Price: {0}:", dish.FieldValues["Price"]);
//Here I get my problem
Console.WriteLine("Ingredients: {0}:", dish.FieldValues["Ingredients"]);
}

En la última línea donde intento leer los ingredientes, estoy leyendo desde un MultiLineTextField que está configurado en RichText.También se supone que debe permanecer en formato RichText, ya que se supone que allí se agregan hipervínculos.El problema es que el resultado no solo contiene etiquetas div sino también algunos signos de interrogación extraños que nunca agregué al campo.Llevo un par de días intentando solucionar este problema pero parece que sólo hay dos soluciones posibles.

  1. Establezca el campo de RichText a PlainText, lo cual no es una opción en mi caso.
  2. Utilice Regex para eliminar las etiquetas div.Por favor no sugiera esta opción.Principalmente porque no considero que sea una solución limpia para este problema.Además, lo probé y elimina las etiquetas, pero esos extraños signos de interrogación permanecen.

Parece haber una tercera opción que encontré. aquí.También se menciona en este pregunta Y parece funcionar.Pero no consigo que funcione para mí.Así es como se ve:

string myString = item.FieldMultiLineText[Field_Name]

Entonces me pregunto qué es item ¿Se supone que debería estar aquí?Supongo que no es un ListItem porque en mi caso no ofrece un FieldMultiLineText-propiedad.

Un fragmento de código breve e informativo sería fantástico si decide ayudarme con este problema.

Gracias de antemano.

¿Fue útil?

Solución

Hay un CampoMultiLineTexto clase en CSOM que es equivalente a la clase SPFieldMultiLineText del modelo de objetos del servidor. Puede probar el siguiente código:

dish.FieldValuesAsText["Ingredients"];

También hay que incluir el Valoresdecampocomotexto propiedad en la declaración de carga como a continuación:

context.Load(dishes,items=>items.Include(item=>item.FieldValuesAsText));

Otros consejos

Tuve el mismo problema y lo intenté la de unnie solución anterior pero eso no funcionó para mí.lo que encontré en otra publicación es lo que funcionó para mí y pensé en compartirlo aquí y puede ayudar a alguien.

El desarrollador externo había agregado una columna a la lista como "Una sola línea de texto" que no era suficiente para la necesidad.Cambié el tipo de columna a 'Varias líneas de texto' pero olvidé que por defecto el Especifique el tipo de texto que permitirá: La propiedad tenía seleccionado "Texto enriquecido (negrita, cursiva, alineación de texto, hipervínculos)".Esto provocó que el sistema agregara un elemento no deseado con una 'ExternalClass##########' extraña que estaba eliminando toda la funcionalidad.

Cambiar el valor de la lista del botón de opción de Texto enriquecido a Texto sin formato marcó la diferencia y no se requirieron cambios en mi código.

Licenciado bajo: CC-BY-SA con atribución
scroll top