我构建了一个解决方案,其中包含多个母版页/页面布局作为一组 SharePoint 2010 发布网站集的功能。
一个一致的请求是能够获取页面所有者联系人电子邮件并将其显示在母版页的页脚中。如果未输入页面联系人电子邮件,则我需要从人员选取器中获取页面所有者数据,并从中获取联系人电子邮件。
我不想将每个发布页面布局添加到我的解决方案中,并手动将"联系人电子邮件"列添加到占位符中,这对我来说似乎很疯狂。我认为必须有一种方法可以从母版页中获取页面所有者数据,但我无法弄清楚。我开始查看jQuery SPServices库,但到目前为止,我也无法弄清楚。
是否有人在母版页中使用提供的页面所有者联系信息添加联系人电子邮件有任何经验?
好的,为了解决这个问题,您需要在您的站点上安装 jQuery 1.7.x+ 和 SPServices jQuery 库版本 0.7.2 或更高版本。
使用 GetListItems 作为 SPServices 中的操作。
我正在搜索页面目录中的页面,所以列表名称是"页面"。
CAML 视图字段基本上是"发布联系人电子邮件"和"发布联系人"的列。我发现那些使用 u2u 的 CAML 构建器版本 4.0.0.0 的人
ows_变量可以在 firebug 中 POST 对象的 xml 视图中找到。
ows_PublishingContact返回一长串令人讨厌的联系人信息。幸运的是,电子邮件地址被,#
包围,这使得将其拆分为数组然后搜索电子邮件@变得容易,但这就是存在的原因。
function get_page_contact_email() {
var thisPageID = _spPageContextInfo.pageItemId;
var e;
$().SPServices({
operation: "GetListItems",
async: false,
listName: "Pages",
CAMLViewFields: "<ViewFields><FieldRef Name='PublishingContactEmail' /><FieldRef Name='PublishingContact' /></ViewFields>",
CAMLQueryOptions: "<QueryOptions><ExpandUserField>True</ExpandUserField></QueryOptions>",
completefunc: function (xData, Status) {
$(xData.responseXML).SPFilterNode("z:row").each(function () {
if (thisPageID == $(this).attr("ows_ID")) {
if ($(this).attr("ows_PublishingContactEmail")) { // if page email is set
e = $(this).attr("ows_PublishingContactEmail");
} else if ($(this).attr("ows_PublishingContact")) { //otherwise use contact info
var contact = $(this).attr("ows_PublishingContact").split(",#");
for (var c = 0; c < contact.length; c++) {
if (contact[c].indexOf("@") != -1) {
e = contact[c];
}
}
} else { //or nothing is set.
e = false;
}
}
});
}
});
return e;
}