首页 技术 正文
技术 2022年11月14日
0 收藏 378 点赞 2,521 浏览 10635 个字
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script src="jquery-1.6.2.min.js"></script>
<script type="text/javascript">
$(function () {
$("#importbutton").attr("disabled", "disabled");
ExecuteOrDelayUntilScriptLoaded(SearchExist, 'sp.js');
}) function SearchExist(itemId) {
var projectId = getQueryString('ProjectID');
if (projectId == null || projectId == 'null' || projectId == '') {
alert("请通过项目信息来导入工作项!");
return;
}
var siteUrl = _spPageContextInfo.webServerRelativeUrl;
clientContext = new SP.ClientContext(siteUrl);
oList = clientContext.get_web().get_lists().getByTitle('项目工作项');
var camlQuery = new SP.CamlQuery();
camlQuery.set_viewXml(
'<View><Query>' +
'<Where>' +
'<Eq>' +
'<FieldRef Name=\'Project\' LookupId=\'TRUE\'/><Value Type=\'Lookup\'>' + projectId + '</Value>' +
'</Eq>' +
'</Where></Query>' +
'</View>'
); this.collListItem = oList.getItems(camlQuery);
clientContext.load(collListItem);
clientContext.executeQueryAsync(
Function.createDelegate(this, this.onSearchQuerySucceeded),
Function.createDelegate(this, this.onSearchQueryFailed)
);
} function waring() {
var filePath = $('input[type=file]').val();
if (filePath == "") {
alert('请先上传文件');
return;
}
var fileText = filePath.substring(filePath.lastIndexOf("."), filePath.length);
var fileName = fileText.toLowerCase();
if ((fileName != '.xls')) {
alert("对不起,系统仅支持上传97-2003格式的Excel文档");
return;
}
else {
$("#importbutton").attr("disabled", "disabled");
getCount(filePath);
}
}
function getCount(filePath) {
var rs = null;
var cn = null;
try {
cn = new ActiveXObject("ADODB.Connection");
var strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = " + filePath + ";Persist Security Info=False;Extended Properties=Excel 8.0;"
cn.Open(strConn);
rs = new ActiveXObject("ADODB.Recordset");
var SQL = "select * from [Sheet1$]";
rs.Open(SQL, cn);
if (rs.bof) {
alert('没有可用的数据');
$("#importbutton").removeAttr("disabled");
return;
}
}
catch (e) {
alert("请确保是97-2003的Excel文档,并且已将本站点添加到ie的信任站点中,启用所有的ActiveX的安全设置。");
$("#importbutton").removeAttr("disabled");
return; } if (!rs.bof) { importdata = new Map();
hasrundata = new Array();
datarelationship = new Map();
dictionary = new Map();
errorlog = new Map();
total = 0;
$("#importLog").html("");
rs.MoveFirst()
while (!rs.eof) {
var task = new Array();
var title = rs.fields(0).value.trim();
if (title != null && title != 'null' && title != '') {
total++;
for (var i = 0; i != rs.fields.count; ++i) {
try {
task[i] = rs.fields(i).value.trim();
} catch (e) {
task[i] = rs.fields(i).value;
}
}
if (!dictionary.ContainsKey(title) && !existData.ContainsKey(title)) {
dictionary.set(title, task);
}
else {
var messagespan = document.createElement("span");
$(messagespan).html("工作项[<span style='font-weight:bold;'>" + title + '</span>]名称重复,取消导入');
$(messagespan).addClass("spanerror");
var br = document.createElement("br");
$(messagespan).appendTo($("#importLog"));
$(br).appendTo($("#importLog"));
}
}
rs.MoveNext();
}
}
rs.Close();
cn.Close();
success = 0;
error = 0;
$("#importLog").html();
for (var i = 0; i < dictionary.size() ; i++) {
var arr = dictionary.get(dictionary.keys[i]);
dataAnalysis(dictionary.keys[i], arr);
}
setTimeout(setsummarymessage, 3000);
}
function dataAnalysis(title, arr) {
title = title.trim();
if (arr != null && arr != '' && arr != 'null')//说明用户的Excel中是存在这个任务的
{
if (title == arr[4] || title == arr[5]) {
GetErrors(title);
return;
}
if (!checktasktitleran(title)) {
//当条目的父级任务和前置任务都为空的时候,直接将条目加到新的集合中
if ((arr[4] == null || arr[4] == '' || arr[4] == 'null') && (arr[5] == null || arr[5] == '' || arr[5] == 'null')) {
hasrundata[hasrundata.length] = title;
createListItem(arr);
}//前置任务为空,父级任务不为空的时候
else if ((arr[4] == null || arr[4] == '' || arr[4] == 'null') && (arr[5] != null && arr[5] != '' && arr[5] != 'null')) {
if (datarelationship.ContainsKey(arr[5])) {
var backdata = datarelationship.get(arr[5]);
if (!backdata.ContainsKey(title)) {
backdata.set(title, title);
datarelationship.set(arr[5], backdata);
}
}
else {
var backdata = new Map();
backdata.set(title, title);
datarelationship.set(arr[5], backdata);
}
if (!existData.ContainsKey(arr[5])) {
if (!dictionary.ContainsKey(arr[5])) {
GetErrors(title);
}
if (errorlog.ContainsKey(arr[5])) {
GetErrors(title);
}
}
else {
hasrundata[hasrundata.length] = title;
createListItem(arr);
}
}//父级任务任务为空,前置任务不为空的时候
else if ((arr[5] == null || arr[5] == '' || arr[5] == 'null') && (arr[4] != null && arr[4] != '' && arr[4] != 'null')) {
if (datarelationship.ContainsKey(arr[4])) {
var backdata = datarelationship.get(arr[4]);
if (!backdata.ContainsKey(title)) {
backdata.set(title, title);
datarelationship.set(arr[4], backdata);
}
}
else {
var backdata = new Map();
backdata.set(title, title);
datarelationship.set(arr[4], backdata);
}
if (!existData.ContainsKey(arr[4])) {
if (!dictionary.ContainsKey(arr[4])) {
GetErrors(title);
}
if (errorlog.ContainsKey(arr[4])) {
GetErrors(title);
} }
else {
hasrundata[hasrundata.length] = title;
createListItem(arr);
}
}//父级任务和前置任务都不为空的时候
else if ((arr[5] != null && arr[5] != '' && arr[5] != 'null') && (arr[4] != null && arr[4] != '' && arr[4] != 'null')) {
if (datarelationship.ContainsKey(arr[4])) {
var backdata = datarelationship.get(arr[4]);
if (!backdata.ContainsKey(title)) {
backdata.set(title, title);
datarelationship.set(arr[4], backdata);
}
}
else {
var backdata = new Map();
backdata.set(title, title);
datarelationship.set(arr[4], backdata);
}
if (datarelationship.ContainsKey(arr[5])) {
var backdata = datarelationship.get(arr[5]);
if (!backdata.ContainsKey(title)) {
backdata.set(title, title);
datarelationship.set(arr[5], backdata);
}
}
else {
var backdata = new Map();
backdata.set(title, title);
datarelationship.set(arr[5], backdata);
}
if (existData.ContainsKey(arr[4]) && existData.ContainsKey(arr[5])) {
hasrundata[hasrundata.length] = title;
createListItem(arr);
}
else {
var flagtemp = false;
var flagtemp1 = false;
if (!existData.ContainsKey(arr[4])) {
if (!dictionary.ContainsKey(arr[4])) {
flagtemp = true;
}
if (errorlog.ContainsKey(arr[4])) {
flagtemp1 = true;
}
}
if (!existData.ContainsKey(arr[5])) {
if (!dictionary.ContainsKey(arr[5])) {
flagtemp = true;
}
if (errorlog.ContainsKey(arr[5])) {
flagtemp1 = true;
} }
if (flagtemp) {
GetErrors(title);
}
if (flagtemp1) {
GetErrors(title);
}
}
}
} }
}
function GetErrors(errortitle) {
if (!errorlog.ContainsKey(errortitle)) {
var messagespan = document.createElement("span");
$(messagespan).html("工作项[<span style='font-weight:bold;'>" + errortitle + '</span>]导入失败');
$(messagespan).addClass("spanerror");
var br = document.createElement("br");
$(messagespan).appendTo($("#importLog"));
$(br).appendTo($("#importLog"));
error++;
errorlog.set(errortitle, 1);
}
if (datarelationship.ContainsKey(errortitle)) {
var backdata = datarelationship.get(errortitle);
for (var i = 0; i < backdata.size() ; i++) {
GetErrors(backdata.keys[i]);
}
}
}
function checktasktitleran(tasktitle) {
for (var i = 0; i < hasrundata.length; i++) {
if (hasrundata[i] == tasktitle) {
return true;
}
}
return false;
}
function createListItem(task) {
var itemCreateInfo = new SP.ListItemCreationInformation();
var oListItem = oList.addItem(itemCreateInfo);
oListItem.set_item('Title', task[0].trim());
var startdate = new Date(task[1]);
var enddate = new Date(task[2]);
if (startdate > enddate) {
GetErrors(task[0].trim());
return;
}
oListItem.set_item('StartDate', startdate.getFullYear() + '/' + (startdate.getMonth() + 1) + '/' + startdate.getDate());
oListItem.set_item('DueDate', enddate.getFullYear() + '/' + (enddate.getMonth() + 1) + '/' + enddate.getDate()); var users = new Array();
users.push(SP.FieldUserValue.fromUser(task[3]));
oListItem.set_item('AssignedTo', users);
if (task[4] != null && task[4] != '' && task[4] != 'null') {
if (existData.ContainsKey(task[4])) {
oListItem.set_item('ParentTask', existData.get(task[4]));
oListItem.set_item('ParentID', existData.get(task[4]));
}
else {
var parentarr = dictionary.get(task[4]);
dataAnalysis(task[4], parentarr);
return;
}
}
if (task[5] != null && task[5] != '' && task[5] != 'null') {
if (existData.ContainsKey(task[5])) {
oListItem.set_item('Predecessors', existData.get(task[5]));
}
else {
var parentarr = dictionary.get(task[5]);
dataAnalysis(task[5], parentarr);
return;
}
}
oListItem.set_item('RelationshipType', task[6]);
oListItem.set_item('Project', getQueryString('projectId'));
oListItem.set_item('Status', task[7]);
oListItem.set_item('TaskLevel', task[8]);
if (!existData.ContainsKey(task[0].trim())) {
oListItem.update();
clientContext.load(oListItem);
clientContext.executeQueryAsync(
function () {
var Title = oListItem.get_item('Title');
if (!existData.ContainsKey(Title)) {
existData.set(Title, oListItem.get_id());
}
var messagespan = document.createElement("span");
$(messagespan).html("工作项[<span style='font-weight:bold;'>" + Title + '</span>]导入成功');
$(messagespan).addClass("spansuccess");
var br = document.createElement("br");
$(messagespan).appendTo($("#importLog"));
$(br).appendTo($("#importLog"));
success++;
if (datarelationship.ContainsKey(Title)) {
var backdata = datarelationship.get(Title);
for (var i = 0; i < backdata.size() ; i++) {
if (!importdata.ContainsKey(backdata.keys[i])) {
var childtitle = backdata.get(backdata.keys[i]);
var arr = dictionary.get(childtitle);
dataAnalysis(backdata.keys[i], arr);
}
}
}
},
function () {
var Title = oListItem.get_item('Title'); GetErrors(Title);
});
}
} function Map() {
this.keys = new Array();
this.data = new Array();
//添加键值对
this.set = function (key, value) {
if (this.data[key] == null) {//如键不存在则身【键】数组添加键名
this.keys.push(key);
}
this.data[key] = value;//给键赋值
};
//获取键对应的值
this.get = function (key) {
return this.data[key];
};
//去除键值,(去除键数据中的键名及对应的值)
this.remove = function (key) {
this.keys.remove(key);
this.data[key] = null;
};
//判断键值元素是否为空
this.isEmpty = function () {
return this.keys.length == 0;
};
//获取键值元素大小
this.size = function () {
return this.keys.length;
};
this.ContainsKey = function (key) {
if (this.data[key] == null) {//如键不存在则身【键】数组添加键名
return false;
}
else {
return true;
}
}
}
function setsummarymessage() {
if (success + error == dictionary.size()) {
var summary = document.createElement("span");
$(summary).text('导入结果:');
$(summary).addClass("spansuccess");
var totalspan = document.createElement("span");
$(totalspan).text(' 共:' + total);
$(totalspan).addClass("spantotal");
var successspan = document.createElement("span");
$(successspan).text(' 成功:' + success);
$(successspan).addClass("spansuccess");
var errorspan = document.createElement("span");
$(errorspan).text(' 失败:' + error);
$(errorspan).addClass("spanerror");
var cancelspan = document.createElement("span");
$(cancelspan).text(' 取消:' + (total - dictionary.size()));
$(cancelspan).addClass("spancancel"); $(summary).appendTo($("#importLog"));
$(totalspan).appendTo($("#importLog"));
$(successspan).appendTo($("#importLog"));
$(errorspan).appendTo($("#importLog"));
$(cancelspan).appendTo($("#importLog"));
alert("导入完成!");
$("#importbutton").removeAttr("disabled");
$("#gottaskpage").show();
$('input[type=file]').val(""); }
else {
setTimeout(setsummarymessage, 3000);
}
} function getQueryString(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
var r = window.location.search.substr(1).match(reg);
if (r != null) return unescape(r[2]); return null;
}
function gototaskpage() {
var url = _spPageContextInfo.webAbsoluteUrl + "/Lists/ProjectTasks/AllItems.aspx?FilterField1=Project%5Fx003a%5FID&FilterValue1=" + getQueryString('ProjectID');
window.location.href = url;
} </script>
</head>
<body>
<input type="file" id="importExcel" name="import" />
<input type="button" id="importbutton" value="导入" onclick="waring()" />
<input type="button" id="gottaskpage" style="display: none;" value="查看项目工作项" onclick="gototaskpage();" />
<div id="importLog"></div></body>
</html>
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,492
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,907
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,740
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,493
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,132
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,294