保存日历项后调用 Javascript
Call Javascript After Saving Calendar Item
我的脚本如下:-
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 日历项目后调用此脚本。
有人能帮忙吗?
创建事件接收器,其中类型为列表项事件,源为日历,然后检查'An item is being added' 处理事件。
然后在事件接收器的代码中:
public override void ItemAdding(SPItemEventProperties properties)
{
base.ItemAdding(properties);
//Call your function through this
Page.ClientScript.RegisterStartupScript(this.GetType(), "CallMyFunction", "MyFunction()", true);
}
希望对您有所帮助:)
以下 JavaScript 示例演示了如何注册将在创建日历项目后触发的事件:
//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);
});
Has been tested against SharePoint 2013/Online
在您的情况下,可以从 onEventCreated
调用函数 getColorValue
,例如:
function onEventCreated(){
getColorValue (id,title);
}
如何应用更改
- 将页面切换到编辑模式
- 将
Script Editor
webpart 添加到页面中。
- 将指定的代码用
script
标签代码包装到脚本编辑器中,例如:<script type="text/javascript">{JavaScipt code goes here}</script>
- 保存页面
结果
我知道这是一个老问题,但给出的解决方案存在问题。
我需要对 Sharepoint online 中缺少的资源预留功能实施解决方法。不可能使用更适合现代体验的方法,因为它依赖于 Azure(没有可用的 Azure 订阅),所以我使用 Sharepoint API 调用来执行与资源预留相同的功能。
要使用 Sharepoint API,需要进行一些 Ajax 调用。但是我观察到每个请求都执行了两次调用。
关键是当你注册日历事件时,需要使用one
附加点击事件,如下所示,以防止点击事件被触发多次。
//register Calendar events
$('body').one('click', 'div#AsynchronousViewDefault_CalendarView', function() {
registerCalendarEventOnItemCreated(onEventCreated);
});
我的脚本如下:-
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 日历项目后调用此脚本。
有人能帮忙吗?
创建事件接收器,其中类型为列表项事件,源为日历,然后检查'An item is being added' 处理事件。
然后在事件接收器的代码中:
public override void ItemAdding(SPItemEventProperties properties)
{
base.ItemAdding(properties);
//Call your function through this
Page.ClientScript.RegisterStartupScript(this.GetType(), "CallMyFunction", "MyFunction()", true);
}
希望对您有所帮助:)
以下 JavaScript 示例演示了如何注册将在创建日历项目后触发的事件:
//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);
});
Has been tested against SharePoint 2013/Online
在您的情况下,可以从 onEventCreated
调用函数 getColorValue
,例如:
function onEventCreated(){
getColorValue (id,title);
}
如何应用更改
- 将页面切换到编辑模式
- 将
Script Editor
webpart 添加到页面中。 - 将指定的代码用
script
标签代码包装到脚本编辑器中,例如:<script type="text/javascript">{JavaScipt code goes here}</script>
- 保存页面
结果
我知道这是一个老问题,但给出的解决方案存在问题。
我需要对 Sharepoint online 中缺少的资源预留功能实施解决方法。不可能使用更适合现代体验的方法,因为它依赖于 Azure(没有可用的 Azure 订阅),所以我使用 Sharepoint API 调用来执行与资源预留相同的功能。
要使用 Sharepoint API,需要进行一些 Ajax 调用。但是我观察到每个请求都执行了两次调用。
关键是当你注册日历事件时,需要使用one
附加点击事件,如下所示,以防止点击事件被触发多次。
//register Calendar events
$('body').one('click', 'div#AsynchronousViewDefault_CalendarView', function() {
registerCalendarEventOnItemCreated(onEventCreated);
});