我的脚本如下: -
function getColorValue(aId,atitle) {
try{
var clientContext = new SP.ClientContext();
var oWebsite = clientContext.get_web();
var oList = oWebsite.get_lists().getByTitle('Item type');
var oListItem = oList.getItemById(parseInt(aId));
clientContext.load(oListItem);
clientContext.executeQueryAsync(function () {
var listItem = oListItem;
var colorname = listItem.get_item('Color_x0020_Name');
if (typeof colorname != 'undefined') {
if (colorname != null) {
$("div[title$='" + atitle + "']").css("background-color", colorname);
}
}
}, onColorQueryFail);
}
catch(e){
}
}
每次创建SharePoint日历项目后,我都需要调用此脚本。
有人可以帮忙吗?
答案 0 :(得分:3)
以下JavaScript示例演示了如何注册将在创建Calendar项目后触发的事件:
//custom handler that will be triggered after Calendar item is created
function onEventCreated(){
alert('Event has been created...');
}
function registerCalendarEventOnItemCreated(event)
{
var currentCtx = getCurrentContextInfo();
var calContainer = SP.UI.ApplicationPages.CalendarInstanceRepository.lookupInstance(currentCtx.ctxId);
for(var name in calContainer) {
if(calContainer.hasOwnProperty(name)) {
var p = calContainer[name];
if(p instanceof SP.UI.ApplicationPages.CalendarNewFormDialog) {
p.get_events().addHandler("newitemcreated",event);
}
}
}
}
//get current context info
function getCurrentContextInfo()
{
var currentListId = new SP.Guid(_spPageContextInfo.pageListId);
for(var ctxKey in g_ctxDict){
var curCtx = g_ctxDict[ctxKey];
if(curCtx.listName == currentListId.toString()){
return curCtx;
}
}
return null;
}
//register Calendar events
$('body').on('click', 'div#AsynchronousViewDefault_CalendarView', function() {
registerCalendarEventOnItemCreated(onEventCreated);
});
已针对SharePoint 2013 / Online进行测试
在您的情况下,可以从getColorValue
调用函数onEventCreated
,例如:
function onEventCreated(){
getColorValue (id,title);
}
如何应用更改
Script Editor
webpart添加到页面中。script
标记代码包装到脚本编辑器中,例如:<script type="text/javascript">{JavaScipt code goes here}</script>
<强>结果
答案 1 :(得分:2)
创建一个事件接收器,其中包含用于类型和日历的列表项事件,然后选中&#39;正在添加项目&#39;处理事件。
然后在事件接收器的代码中:
public override void ItemAdding(SPItemEventProperties properties)
{
base.ItemAdding(properties);
//Call your function through this
Page.ClientScript.RegisterStartupScript(this.GetType(), "CallMyFunction", "MyFunction()", true);
}
希望有所帮助:)
答案 2 :(得分:0)
我知道这是一个古老的问题,但是给出的解决方案存在问题。
我需要对SharePoint在线缺少的资源保留功能实施变通办法。由于它依赖于Azure(没有可用的Azure订阅),因此无法使用更适合现代体验的方法,因此我使用Sharepoint API调用来执行与资源预留相同的功能。
要使用Sharepoint API,需要一些Ajax调用。但是我观察到每个请求都执行了两个调用。
关键是注册日历事件时,需要使用one
附加点击事件,如下所示,以防止多次触发点击事件。
//register Calendar events
$('body').one('click', 'div#AsynchronousViewDefault_CalendarView', function() {
registerCalendarEventOnItemCreated(onEventCreated);
});