保存日历项后调用Javascript

时间:2015-02-20 11:49:35

标签: javascript sharepoint csom

我的脚本如下: -

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日历项目后,我都需要调用此脚本。

有人可以帮忙吗?

3 个答案:

答案 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);     
}

如何应用更改

  1. 将页面切换为编辑模式
  2. Script Editor webpart添加到页面中。
  3. 将指定的代码用script标记代码包装到脚本编辑器中,例如:<script type="text/javascript">{JavaScipt code goes here}</script>
  4. 保存页面
  5. <强>结果

    enter image description here

答案 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);
});