Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Office 365 SharePoint将项目添加到列表中(以其他列表中的项目为大小写)_Javascript_List_Sharepoint - Fatal编程技术网

Javascript Office 365 SharePoint将项目添加到列表中(以其他列表中的项目为大小写)

Javascript Office 365 SharePoint将项目添加到列表中(以其他列表中的项目为大小写),javascript,list,sharepoint,Javascript,List,Sharepoint,我有3个列表-控件、父项和子项。每当一个项目被添加到控制列表中时,我需要将父项中的所有项目复制到子项中(同时做一些更改)。在该过程发生几次之后,子项列表计数将是父项列表计数的倍数,但父项将保持不变 我希望在用户单击控制列表中新项目的保存按钮时发生这种情况 我已经在PreSaveAction中编写了代码,并将其放在控制列表的新项目页面中的脚本编辑器web部件中 代码没有按需要执行。我已经添加了警报,以便我可以跟踪正在发生的事情。我收到的最后一个警报在第42行,它告诉我父列表上的计数。我不会在第45

我有3个列表-控件、父项和子项。每当一个项目被添加到控制列表中时,我需要将父项中的所有项目复制到子项中(同时做一些更改)。在该过程发生几次之后,子项列表计数将是父项列表计数的倍数,但父项将保持不变

我希望在用户单击控制列表中新项目的保存按钮时发生这种情况

我已经在PreSaveAction中编写了代码,并将其放在控制列表的新项目页面中的脚本编辑器web部件中

代码没有按需要执行。我已经添加了警报,以便我可以跟踪正在发生的事情。我收到的最后一个警报在第42行,它告诉我父列表上的计数。我不会在第45行或之后的任何其他行中收到下一个警报。请注意,这两个警报之间没有任何操作,只有几行注释。已添加控件,但未进行复制

代码如下:

<script type="text/javascript" src="//ajax.aspnetcdn.com/ajax/4.0/1/MicrosoftAjax.js"></script>
<script type="text/javascript" src="_layouts/15/sp.runtime.js"></script>
<script type="text/javascript" src="_layouts/15/sp.js"></script>
<script type="text/javascript">
function PreSaveAction()
 {
    var clientContext; 
    var web;
    var lists
    var inputList;
    var outputList;
    alert("before caml query");
//  var query = "<View Scope = 'RecursiveAll'><Query><Where><Eq><FieldRef Name='Active'/>" + 
//       "<Value Type='Integer'>1</Value></Eq></Where></Query></View>";
    var query = "<Where><Eq><FieldRef Name='Active'/>" + 
        "<Value Type='Integer'>1</Value></Eq></Where>";
    clientContext = SP.ClientContext.get_current(); 
    web = clientContext.get_web();
    lists = web.get_lists();
    inputList = lists.getByTitle('ParentList');
    outputList = lists.getByTitle('ChildList');
    var camlQuery = new SP.CamlQuery();
    // return only Active items
    camlQuery.set_viewXml(query);
    alert("in view xml");
    this.inputListItems = inputList.getItems(camlQuery); //Parent
    clientContext.load(inputListItems);
    alert("after loading list items");
    // The copying will be done in the succeeded function
    clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed)); 
    return true;
};

function onQuerySucceeded(sender, args) 
{
    alert("start Query Succeeded");
    var inputItem = '';
    var outputItem = '';
    var parentID = 0;
    var parentTitle = '';
    var contolName = "blah";
    alert("Input List count = " + inputListItems.get_count());
    // get the reference to the control
    // var contolName = document.getElementsByName("Title")[0].value;
    alert("in control " + controlName);
    var listItemEnumerator = inputListItems.getEnumerator();
    alert("after setting Enumerator");
    while (listItemEnumerator.moveNext()) 
    {
        var inputItem = listItemEnumerator.get_current();
        parentID = inputItem.get_id();
        parentTitle = inputItem.get_item('Title');
        // now create the copy in output
        // CreateOutputListItem(parentID, parentTitle, contolName);
        outputItem.set_item('Parent', parentTitle);
        outputItem.set_item('ParentID', parentID);
        outputItem.set_item('Control', contolName);
        outputItem.update();
        clientContext.load(outputItem);
        clientContext.executeQueryAsync(Function.createDelegate(this, this.onWriteSucceeded), Function.createDelegate(this, this.onWriteFailed));
    }
}

function onWriteSucceeded(sender, args) {

    alert('Item created: ' + outputItem.get_id());
}

function onWriteFailed(sender, args) 
{

    alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}


function onQueryFailed(sender, args) {
    alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}
</script>

函数PreSaveAction()
{
var-clientContext;
var-web;
变量列表
var输入列表;
var输出列表;
警报(“caml查询前”);
//var query=”“+
//       "1";
var query=”“+
"1";
clientContext=SP.clientContext.get_current();
web=clientContext.get_web();
lists=web.get_lists();
inputList=lists.getByTitle('ParentList');
outputList=lists.getByTitle('ChildList');
var camlQuery=new SP.camlQuery();
//仅返回活动项
camlQuery.set_viewXml(查询);
警报(“视图中的xml”);
this.inputListItems=inputList.getItems(camlQuery);//父
加载(inputListItems);
警报(“加载列表项后”);
//复制将在successed函数中完成
clientContext.executeQueryAsync(Function.createDelegate(this,this.onQuerySucceed),Function.createDelegate(this,this.onQueryFailed));
返回true;
};
函数onquerysucceed(发送方,参数)
{
警报(“启动查询成功”);
var-inputItem='';
变量输出项=“”;
var-parentID=0;
var parentTitle='';
var contolName=“blah”;
警报(“输入列表计数=“+inputListItems.get_count());
//获取控件的引用
//var contolName=document.getElementsByName(“标题”)[0]。值;
警报(“控制中”+控制名称);
var listItemEnumerator=inputListItems.getEnumerator();
警报(“设置枚举数后”);
while(listItemEnumerator.moveNext())
{
var inputItem=listItemEnumerator.get_current();
parentID=inputItem.get_id();
parentTitle=inputItem.get_项('Title');
//现在在输出中创建副本
//CreateOutputListItem(parentID、parentTitle、contolName);
outputItem.set_项('Parent',parentTitle);
outputItem.set_项('ParentID',ParentID);
outputItem.set_项('Control',contolName);
outputItem.update();
加载(输出项);
clientContext.executeQueryAsync(Function.createDelegate(this,this.onWriteSucceed),Function.createDelegate(this,this.onWriteFiled));
}
}
函数onWriteSucceed(发送方,参数){
警报('Item created:'+outputItem.get_id());
}
函数onWriteFailed(发送方,参数)
{
警报('请求失败。'+args.get_message()+'\n'+args.get_stackTrace());
}
函数onQueryFailed(发送方,参数){
警报('请求失败。'+args.get_message()+'\n'+args.get_stackTrace());
}

我不知道如何调用“警报”机制的属性——是否可能需要刷新输出缓冲区?有没有可能程序确实前进了,但卡在更深的循环中,并且从未产生足够的输出来显示第45行的(缓冲)输出?
代码没有按需要执行。
错误?ULS日志?如果不要求我们了解您的环境是什么并复制它来重现问题,有什么可以帮助我们的吗?正如@Prune所说的,跳过
警报
,改用
控制台.log
,因为它是非阻塞的。我不知道如何调用“警报”机制的属性——是否可能需要刷新输出缓冲区?有没有可能程序确实前进了,但卡在更深的循环中,并且从未产生足够的输出来显示第45行的(缓冲)输出?
代码没有按需要执行。
错误?ULS日志?如果不要求我们了解您的环境是什么并复制它来重现问题,有什么可以帮助我们的吗?正如@Prune所述,跳过
警报
,改用
控制台.log
,因为它是非阻塞的。