Возникла задача, получить метаданные поля на стороне клиента, используя SharePoint Client Object Model. Конкретно, нужно было получить все поля, помеченные как содержащие E-mail - у пользователей для простановки этих отметок есть соответствующий интерфейс.
В итоге, пришел вот к такой простейшей функции:
function getFieldAttribute(field, metadataKey) { /// <summary> /// This function gets metadata key /// </summary> var xml = field.get_schemaXml(); var domElement = CUI.NativeUtility.createXMLDocFromString(xml); var attribute;if (domElement.firstChild.getAttributeNS != null && domElement.firstChild.getAttributeNS != undefined)
attribute = domElement.firstChild.getAttributeNS('my', metadataKey); else attribute = domElement.firstChild.getAttribute('p1:' + metadataKey); return attribute;}
Как видите, всё довольно просто. Когда расширять и интегрировать созданное решение просто - это хороший признак того, что делаешь правильно.
Использовать - примерно так:
var ctx = new SP.ClientContext.get_current();
var list = ctx.get_web().get_lists().getById(SP.ListOperation.Selection.getSelectedList());var fields = list.get_fields();ctx.load(fields);
// ... load items or whatever you need herectx.executeQueryAsync(onSuccess, onFailure);
function onSuccess() {var emailFields = new Array();
var fieldEnumerator = fields.getEnumerator(); while (fieldEnumerator.moveNext()) { var field = fieldEnumerator.get_current();var attribute = getFieldAttribute(field,'MyFieldType');
if (attribute == 'Email')
emailFields.push(field.get_internalName());
}
}
Комментариев нет:
Отправить комментарий
Внимание! Реклама и прочий спам будут беспощадно удаляться.
Примечание. Отправлять комментарии могут только участники этого блога.