Возникла задача, получить метаданные поля на стороне клиента, используя 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 here
ctx.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());
}
}
Комментариев нет:
Отправить комментарий
Внимание! Реклама и прочий спам будут беспощадно удаляться.
Примечание. Отправлять комментарии могут только участники этого блога.