对preaveaction的Sharepoint javascript列表表单验证

Sharepoint javascript list form validation on presaveaction

本文关键字:列表 表单 验证 javascript Sharepoint preaveaction      更新时间:2023-09-26

我有一个名为"ViewItem"的函数,它调用了另外两个函数:"success"answers"failed"。当"success"被调用时,它会去检查一个值是否存在,如果存在则返回true,如果不存在则返回false。最后,我有一个叫做"PresaveAction"的第4个函数,这个函数的作用是检查一个值是"yes"还是"no",如果"no"它返回true并允许我保存,我想要实现的是,如果值是"yes",调用"success"函数,根据"success"返回true或false,允许我保存。那么,如何将"成功"返回的内容传递给PreSaveAction函数呢?

function ViewItem()
{
var context = new SP.ClientContext.get_current();
var web = context.get_web();
var list = web.get_lists().getByTitle('demoTrainingRoom2');
var query = SP.CamlQuery.createAllItemsQuery();
allItems = list.getItems(query);
context.load(allItems, 'Include(Title, EventDate, time2)');
context.executeQueryAsync(Function.createDelegate(this, this.success), Function.createDelegate(this, this.failed));
}
function success() {
 
var currentTitle = SPUtility.GetSPFieldByInternalName('EventDate').GetValue(); 
for(var i = 0; i < this.allItems.get_count(); i++){
					 var item = this.allItems.get_item(i);
					 console.log(item.get_item('time2') + ' - ' + currentTitle );
					                      
                     if (currentTitle == item.get_item('time2')){
                     alert('There is an event with the same Start Date on DemoTrainingRoom2' + ' ' + item.get_item('time2') + ' - ' + currentTitle );
                     
                       
                      return true; // or item
                       
                                                             
				      }
				  }
				  
                  return false;
				}
				
function failed(sender, args) {
alert("failed. Message:" + args.get_message());
}
function PreSaveAction()    {
var time = SPUtility.GetSPFieldByInternalName('EventDate').GetValue();
alert(time + " Current Start Time");
  
if(SPUtility.GetSPField('demoField').GetValue() == "no")
{
     
     alert('No need for validation');
     return true; // save file
    }
    
    else
{
   
	alert('Need to validate date');
     
    //here is where i need to call the result from success 
  
	return false; // don't save file
	}
	
}

@Thriggle你是在建议这样做吗

var result; //global variable
function ViewItem()
{
var context = new SP.ClientContext.get_current();
var web = context.get_web();
var list = web.get_lists().getByTitle('demoTrainingRoom2');
var query = SP.CamlQuery.createAllItemsQuery();
allItems = list.getItems(query);
context.load(allItems, 'Include(Title, EventDate, time2)');
context.executeQueryAsync(Function.createDelegate(this, this.success), Function.createDelegate(this, this.failed));
}
function success() {
 
var currentTitle = SPUtility.GetSPFieldByInternalName('EventDate').GetValue(); 
for(var i = 0; i < this.allItems.get_count(); i++){
					 var item = this.allItems.get_item(i);
					 console.log(item.get_item('time2') + ' - ' + currentTitle );
					                      
                     if (currentTitle == item.get_item('tiempo2')){
                     alert('There is an event with the same Start Date on DemoTrainingRoom2' + ' ' + item.get_item('time2') + ' - ' + currentTitle );
                     
                      var result = "Yes"; 
                     
                      return true; // or item
                       
                                                             
				      }
				  }
				  var result = "No";
				   
				  return false;
				}
				
function failed(sender, args) {
alert("failed. Message:" + args.get_message());
}
function PreSaveAction()    {
var time = SPUtility.GetSPFieldByInternalName('EventDate').GetValue();
alert(time + " Current Start Time");
if(SPUtility.GetSPField('demoField').GetValue() == "no")
{
     
     alert('No need for validation');
     return true;
    }
    
   else if(SPUtility.GetSPField('demoField').GetValue() == "yes" && result == "Yes") 
   {
  alert(result);
  //return false;
}	
else if(SPUtility.GetSPField('demoField').GetValue() == "yes" && result == "No") 
   {
  alert(result);
  //return false;
}	
}

我是这样做的

var originalSaveButtonClickHandler = function(){};
$(document).ready(function () {
var saveButton = $("[name$='diidIOSaveItem']") //gets form save button and ribbon save button
  if (saveButton.length > 0) {
    originalSaveButtonClickHandler = saveButton[0].onclick;  //save original function
  }
  $(saveButton).attr("onclick", "PreSaveAction2()"); //change 		});
});
	//override the default PreSaveAction
	
	//custom PreSaveAction
	function PreSaveAction2(callback) {
		alert("iniciando validacion");
		var time = SPUtility.GetSPFieldByInternalName('EventDate').GetValue();	
		if(SPUtility.GetSPField('demoField').GetValue() == "no") {
			alert('No need for validation');
			originalSaveButtonClickHandler();
			//return true;
		} 
		else if(SPUtility.GetSPField('demoField').GetValue() == "yes") {
		
			var resultado1 = ViewItem('demoTrainingRoom2').then(
					function(allItems) {
						var currentTitle = SPUtility.GetSPFieldByInternalName('EventDate').GetValue();
						var res = "No";
						for (var i = 0; i < allItems.get_count(); i++) {
							var item = allItems.get_item(i);
							console.log(item.get_item('tiempo2') + ' - ' + currentTitle );
							if (currentTitle == item.get_item('tiempo2')){
								res = "Si"; 
								console.log('There is an event with the same Start Date on DemoTrainingRoom2' 
									+ ' ' + item.get_item('tiempo2') + ' - ' + currentTitle);
        					}
						}
						if (res == "Si") {
							alert(res + " there's an event on room 2");
							//return false;
						} else {
							alert(res + " no event on 2");
							originalSaveButtonClickHandler();
							//return true;
						}	
					},
					function (sender, args) {
						alert("failed. Message:" + args.get_message());
					}
			);
			
		}				
	}
	function ViewItem(listTitle) {
		var deferred = $.Deferred();
		var context = new SP.ClientContext.get_current();
		var web = context.get_web();
		var list = web.get_lists().getByTitle(listTitle);
		var query = SP.CamlQuery.createAllItemsQuery();
		var allItems = list.getItems(query);
		context.load(allItems, 'Include(Title, EventDate, tiempo2)');
		context.executeQueryAsync(
				Function.createDelegate(this, 
					function () { deferred.resolve(allItems); } ),
				Function.createDelegate(this,
					function (sender, args) { deferred.reject(sender, args); }));
	
		return deferred.promise();
	}