如何在共享点中计算项目的进度



我正在使用while循环从项目列表中打印动态html元素,我想根据任务列表计算项目的百分比并在while循环的HTML元素中打印。

这是我的while循环

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);

这是执行函数gettasklist(dynvalueTitle(的循环;;

这是函数gettasklist(dynvalueTitle(

function gettasklist(dynValueTitle) {
SP.SOD.executeFunc('sp.js', 'SP.ClientContext',
function () {
var siteUrl = 'https://abb.sharepoint.com/sites/IAPI-SOP';
var context = new SP.ClientContext(siteUrl);
var TicketList = context.get_web().get_lists().getByTitle("TaskList");
var countquery = '<View><Query><Where><And><Eq><FieldRef Name="Status"/><Value Type="Text">Completed</Value></Eq><Eq><FieldRef Name="Projects"/><Value Type="Choice">' + dynValueTitle + '</Value></Eq></And></Where></Query></View>';
var countall = '<View><Query><Where><Eq><FieldRef Name="Projects"/><Value Type="Choice">' + dynValueTitle + '</Value></Eq></Where></Query></View>';
var query1 = new SP.CamlQuery();
query1.set_viewXml(countquery);
var myitem = TicketList.getItems(query1);
var query2 = new SP.CamlQuery();
query2.set_viewXml(countall);
var myitem2 = TicketList.getItems(query2);
context.load(myitem);
context.load(myitem2);
context.executeQueryAsync(
function () {
var id = myitem.get_count();
console.log("completedtask", id);
var id2 = myitem2.get_count();
console.log("alltask", id2);
var tpercentage = Math.round((id / id2) * 100);
console.log("Percent", tpercentage);

document.getElementById("totalprogress").innerHTML = tpercentage ;

},
function (sender, args) { alert('Error while updating the data : ' + 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"/>

最新更新