Javascript 如何在sharepoint中计算项目进度
我使用while循环从项目列表中动态打印html元素,我想根据任务列表计算项目的百分比,并打印while循环的html元素。我如何实现它 这是我的while循环Javascript 如何在sharepoint中计算项目进度,javascript,sharepoint,Javascript,Sharepoint,我使用while循环从项目列表中动态打印html元素,我想根据任务列表计算项目的百分比,并打印while循环的html元素。我如何实现它 这是我的while循环 var ListEnumerator = this.myItems6.getEnumerator(); while (ListEnumerator.moveNext()) { var currentItem = ListEnumerator.get_current(); var dynValueTitle = curre
var ListEnumerator = this.myItems6.getEnumerator();
while (ListEnumerator.moveNext()) {
var currentItem = ListEnumerator.get_current();
var dynValueTitle = currentItem.get_item('Title');
gettasklist(dynValueTitle);
var templatestring ='+ '<div class="card-footer">'
+ '<div class="clearfix">'
+ '<div class="float-left"><strong id="totalprogress"></strong></div>'
+ '<div class="float-right"><small class="text-muted">Progress</small>'
+ '</div>'
+ '</div>'
+ '</div>'
+ '</div>'
+ '</div>'
+ '</div>'
$('#allproject').append(templateString);
var ListEnumerator=this.myItems6.getEnumerator();
while(ListEnumerator.moveNext()){
var currentItem=ListNumerator.get_current();
var dynValueTitle=currentItem.get_item('Title');
gettasklist(dynValueTitle);
var templatestring='+''
+ ''
+“”
+“进展”
+ ''
+ ''
+ ''
+ ''
+ ''
+ ''
$('#allproject').append(templateString);
这是执行函数gettasklist(dynvalueTitle)的循环
下面是函数gettasklist(dynvalueTitle)
函数gettasklist(dynValueTitle){
SP.SOD.executeFunc('SP.js'、'SP.ClientContext',
函数(){
var siteUrl=https://abb.sharepoint.com/sites/IAPI-SOP';
var context=new SP.ClientContext(siteUrl);
var TicketList=context.get_web().get_list().getByTitle(“任务列表”);
var countquery='Completed'+dynValueTitle+'';
var countall=''+dynValueTitle+'';
var query1=new SP.CamlQuery();
query1.set_viewXml(countquery);
var myitem=TicketList.getItems(query1);
var query2=新的SP.CamlQuery();
query2.set_viewXml(countall);
var myitem2=TicketList.getItems(query2);
加载(myitem);
加载(myitem2);
context.executeQueryAsync(
函数(){
var id=myitem.get_count();
console.log(“completedtask”,id);
var id2=myitem2.get_count();
console.log(“alltask”,id2);
var t百分比=数学整数((id/id2)*100);
控制台日志(“百分比”,t百分比);
document.getElementById(“totalprogress”).innerHTML=tpercentage;
},
函数(sender,args){alert('更新数据时出错:'+args.get_message());}
);
});
}
这是我尝试过的代码。我不知道我在哪里出错。请帮助我。我们可以使用REST API和jQuery Ajax来实现它。以下代码供您参考
<script src="https://code.jquery.com/jquery-1.12.4.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(function () {
getProjectItems().done(function(data){
$.each(data.d.results,function(i,item){
var templateString ="<div class='card-footer'>"
+ "<div class='clearfix'>"
+ "<div class='float-left'><strong id='totalprogress'>"+getTaskPercentage(item.Title)+"%</strong></div>"
+ "<div class='float-right'><small class='text-muted'>Progress</small></div>"
+ "</div>"
+ "</div>";
$("#allproject").append(templateString);
});
});
});
function getProjectItems(){
var url = _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists/getbytitle('ProjectList')/items";
return $.ajax({
url: url,
type: "GET",
headers: {
"Accept": "application/json;odata=verbose",
}
});
}
function getTaskPercentage(projectTitle){
var taskAll=getTaskItemCountByFilter("$filter=Projects eq '"+projectTitle+"'");
var taskCompleted=getTaskItemCountByFilter("$filter=Status eq 'Completed' and Projects eq '"+projectTitle+"'");
return Math.round((taskCompleted / taskAll) * 100);
}
function getTaskItemCountByFilter(filter){
var count=0;
$.ajax({
url: _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists/getbytitle('TaskList')/items?$select=ID&"+filter,
type: "GET",
async:false,
headers: {
"Accept": "application/json;odata=verbose",
},
success: function (data) {
count=data.d.results.length;
},
error: function (error) {
console.log(JSON.stringify(error));
}
});
return count;
}
</script>
<div id="allproject"/>
$(函数(){
getProjectItems().done(函数(数据){
$.each(data.d.results,function(i,item){
var templateString=“”
+ ""
+“”+getTaskPercentage(item.Title)+“%”
+“进展”
+ ""
+ "";
$(“#所有项目”).append(templateString);
});
});
});
函数getProjectItems(){
var url=_spPageContextInfo.webAbsoluteUrl+“/_api/web/list/getbytitle('ProjectList')/items”;
返回$.ajax({
url:url,
键入:“获取”,
标题:{
“接受”:“application/json;odata=verbose”,
}
});
}
函数getTaskPercentage(项目标题){
var taskAll=getTaskItemCountByFilter(“$filter=Projects eq'”+projectTitle+”);
var taskCompleted=getTaskItemCountByFilter($filter=Status eq'Completed'和Projects eq'+projectTitle+“”);
返回数学整数((任务完成/任务全部)*100);
}
函数getTaskItemCountByFilter(filter){
var计数=0;
$.ajax({
url:_spPageContextInfo.webAbsoluteUrl+“/_api/web/lists/getbytitle('TaskList')/items?$select=ID&“+filter,
键入:“获取”,
async:false,
标题:{
“接受”:“application/json;odata=verbose”,
},
成功:功能(数据){
计数=data.d.results.length;
},
错误:函数(错误){
log(JSON.stringify(error));
}
});
返回计数;
}
非常感谢您提供此代码…此代码对我很有效如果我的回复对您有帮助,您可以将回复标记为答案,这将使其他遇到类似问题的人更容易在此论坛中搜索有效的解决方案。谢谢。
<script src="https://code.jquery.com/jquery-1.12.4.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(function () {
getProjectItems().done(function(data){
$.each(data.d.results,function(i,item){
var templateString ="<div class='card-footer'>"
+ "<div class='clearfix'>"
+ "<div class='float-left'><strong id='totalprogress'>"+getTaskPercentage(item.Title)+"%</strong></div>"
+ "<div class='float-right'><small class='text-muted'>Progress</small></div>"
+ "</div>"
+ "</div>";
$("#allproject").append(templateString);
});
});
});
function getProjectItems(){
var url = _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists/getbytitle('ProjectList')/items";
return $.ajax({
url: url,
type: "GET",
headers: {
"Accept": "application/json;odata=verbose",
}
});
}
function getTaskPercentage(projectTitle){
var taskAll=getTaskItemCountByFilter("$filter=Projects eq '"+projectTitle+"'");
var taskCompleted=getTaskItemCountByFilter("$filter=Status eq 'Completed' and Projects eq '"+projectTitle+"'");
return Math.round((taskCompleted / taskAll) * 100);
}
function getTaskItemCountByFilter(filter){
var count=0;
$.ajax({
url: _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists/getbytitle('TaskList')/items?$select=ID&"+filter,
type: "GET",
async:false,
headers: {
"Accept": "application/json;odata=verbose",
},
success: function (data) {
count=data.d.results.length;
},
error: function (error) {
console.log(JSON.stringify(error));
}
});
return count;
}
</script>
<div id="allproject"/>