Запрос CAML в списке SharePoint возвращает идентификатор и значение - как просто получить значение?
Этот вопрос о списке SharePoint. Код использует SPServices, jQuery и JavaScript.
Некоторые поля для столбцов являются полями поиска, и я получаю как идентификатор, так и значение поля. Есть ли способ отфильтровать это так, что я получаю только значение без идентификатора?
Например, для поля AssignedTo запрос возвращает значения, такие как "91;#Doe, John" и "103;#Doe, Jane", где то, что мне нужно увидеть, это "Doe, John", "Doe, Jane", и т.п.
Любой совет о том, как это исправить, будет высоко ценится. Спасибо!
Это сегмент запроса CAML кода:
function loadPrioritizedList() {
$("#tasksUL").empty();
$().SPServices({
operation: "GetListItems",
webURL: myURL,
listName: targetListName,
CAMLViewFields: "<ViewFields><FieldRef Name='Priority_x0020_Number' /><FieldRef Name='Edit_x0020_Link' /><FieldRef Name='Priority' /><FieldRef Name='Top_x0020_Item_x003f_' /><FieldRef Name='Purpose' /><FieldRef Name='Item_x002d_Task_x0020_Order' /><FieldRef Name='Mode' /><FieldRef Name='Work_x0020_Status' /><FieldRef Name='DueDate' /><FieldRef Name='Task_x0020_Type' /><FieldRef Name='DAK_x0020_Date' /><FieldRef Name='DAK_x0020_No' /><FieldRef Name='AssignedTo' /><FieldRef Name='Money_x0020_Estimate' /><FieldRef Name='ItemStatus' /><FieldRef Name='Assign_x0020_Date' /></ViewFields>",
CAMLQuery: '<Query>' +
"<Where><IsNull><FieldRef Name=Assign_x0020_Date' /></IsNull></Where>" +
'<OrderBy>' +
'<FieldRef Name="Priority_x0020_Number" />' +
'</OrderBy>' +
'</Query>',
CAMLRowLimit: listrowlimit,
completefunc: function (xData, Status) {
$(xData.responseXML).SPFilterNode("z:row").each(function() {
var tdHtml = "<tr class='sortable_row' id=" + $(this).attr("ows_ID") + ">";
tdHtml = tdHtml + "<td style=\"width:60px;\">" + PriorityFormat($(this).attr("ows_Priority_x0020_Number")); + "</td>";
tdHtml = tdHtml + '<td style=\"width:49px;\"><a href=\"'+($(this).attr("ows_Edit_x0020_Link")).split(", ")[1] + '\">' + ($(this).attr("ows_Edit_x0020_Link")).split(", ")[1] + '</a></td>';
tdHtml = tdHtml + "<td style=\"width:83px;\">" + $(this).attr("ows_Priority") + "</td>";
tdHtml = tdHtml + "<td style=\"width:63px;\">" + TopItem($(this).attr("ows_Top_x0020_Item_x003f_")) + "</td>";
tdHtml = tdHtml + "<td style=\"width:300px;\">" + StringChk($(this).attr("ows_Purpose")) + "</td>";
tdHtml = tdHtml + "<td style=\"width:125px;\">" + StringChk($(this).attr("ows_Item_x002d_Task_x0020_Order")) + "</td>";
tdHtml = tdHtml + "<td style=\"width:40px;\">" + StringChk($(this).attr("ows_Mode")) + "</td>";
tdHtml = tdHtml + "<td style=\"width:75px;\">" + StringChk($(this).attr("ows_Task_x0020_Type")) + "</td>";
tdHtml = tdHtml + "<td style=\"width:150px;\">" + StringChk($(this).attr("ows_Work_x0020_Status")) + "</td>";
tdHtml = tdHtml + "<td style=\"width:100px;\">" + FormatDate($(this).attr("ows_DueDate")) + "</td>";
tdHtml = tdHtml + "<td style=\"width:100px;\">" + FormatDate($(this).attr("ows_DAK_x0020_Date")) + "</td>";
tdHtml = tdHtml + "<td style=\"width:100px;\">" + StringChk($(this).attr("ows_DAK_x0020_No")) + "</td>";
tdHtml = tdHtml + "<td style=\"width:300px;\">" + StringChk($(this).attr("ows_AssignedTo")) + "</td>";
tdHtml = tdHtml + "<td style=\"width:125px;\">" + $(this).attr("ows_Money_x0020_Estimate") + "</td>";
tdHtml = tdHtml + "<td style=\"width:75px;\">" + StringChk($(this).attr("ows_ItemStatus")) + "</td>";
tdHtml = tdHtml + "<td style=\"width:100px;\">" + FormatDate($(this).attr("ows_Assign_x0020_Date")) + "</td>";
tdHtml = tdHtml + "</tr>";
$("#tasksUL").append(tdHtml);
});
3 ответа
В моей структуре я использую эту функцию (я немного изменил ее, чтобы сделать ее независимой):
/**
@name cleanResult
@function
@description clean a string returned by a GET (remove ";#" and "string;#" and null becomes "")
@param {String} str The string to clean
@param {String} [separator=";"] When it's a list we may want to have a different output (see examples)
@return {String} the cleaned string
@example
cleanResult("15;#Paul"); // -> "Paul"
cleanResult("string;#Paul"); // -> "Paul"
cleanResult(";#Paul;#Jacques;#Aymeric;#"); // -> "Paul;Jacques;Aymeric"
cleanResult(";#Paul;#Jacques;#Aymeric;#", ", "); // -> "Paul, Jacques, Aymeric"
*/
function cleanResult(str,separator) {
if (str===null || typeof str==="undefined") return "";
return (typeof str==="string"?str.replace(/;#[0-9]+;#/g,separator).replace(/^[0-9]+;#/,"").replace(/^;#|;#$/g,"").replace(/;#/g,separator).replace(/string;#/,""):str);
}
Вы можете использовать регулярное выражение, предложенное Роббертом, или просто разделить возвращаемое выходное значение, используя ;#
Таким образом, вы можете получить значение в массиве. Например,
вы можете сделать что-то вроде этого
string[] words = value.Split(';#');
string NewValue = words[1];
Это способ, которым SharePoint возвращает значение. Я бы просто использовал регулярное выражение для замены значения
var newValue = value.replace(/^\d+;#/,"");
При этом в начале строки будет показано число, за которым следуют точка с запятой и хеш-метка, и он будет заменен ничем.
Используя ваше значение выше
var value = "91;#Doe"
var newValue = value.replace(/^\d+;@/,"");
удалит 91;# и назначит Doe newValue.