首页 > 其他 > 详细

[SharePoint 2010] Copy list item with version history and attachment

时间:2014-02-21 22:10:39      阅读:610      评论:0      收藏:0      [点我收藏+]
bubuko.com,布布扣
 1         private void MoveItem(SPListItem sourceItem, SPListItem destinationItem)
 2         {
 3             if (sourceItem == null || destinationItem == null) return;
 4 
 5             destinationItem = GetDestinationItem(sourceItem.ID, destinationItem);
 6 
 7             SPFieldLookup lkpField = null;
 8             SPFieldLookupValue lkpFieldVal=null;
 9             object fieldVal = null;11 
12             Log("-----Begin of handle item-----");
13 
14             Log(string.Format("----------Source item [{0}/{1}]----------", sourceItem.Title, sourceItem.ID));
15 
16             #region Handle version history
17 
18             for (var i = sourceItem.Versions.Count - 1; i >= 0; i--)
19             {
20                 foreach (SPField sourceField in sourceItem.Fields)
21                 {
22                     SPListItemVersion version = sourceItem.Versions[i];
23                     fieldVal = version[sourceField.InternalName];
24 
25                     Log(string.Format("----------Handle field[{0}/{1}]----------", sourceField.InternalName, sourceField.Type.ToString()));
26 
27                     if (sourceField.Id == SPBuiltInFieldId.Created ||
28                        sourceField.Id == SPBuiltInFieldId.Created_x0020_By ||
29                        sourceField.Id == SPBuiltInFieldId.Modified ||
30                        sourceField.Id == SPBuiltInFieldId.Modified_x0020_By ||
31                        sourceField.Id == SPBuiltInFieldId.Author ||
32                        sourceField.Id == SPBuiltInFieldId.Editor)
33                     {
34                         destinationItem[sourceField.InternalName] = fieldVal;
35                     }
36                     else if (!sourceField.ReadOnlyField && sourceField.Type != SPFieldType.Attachments)
37                     {
38                         if (sourceField.Type != SPFieldType.Lookup)
39                         {
40                             destinationItem[sourceField.InternalName] = fieldVal;
41                         }
42                         else
43                         {
44                             lkpField = sourceField as SPFieldLookup;
45 
46                             Log(string.Format("----------source field value[{0}]----------", fieldVal));
47 
48                             if (lkpField != null && fieldVal != null && fieldVal.ToString().Length > 0)
49                             {
50                                 lkpFieldVal = new SPFieldLookupValue(fieldVal.ToString());
51                                 destinationItem[sourceField.InternalName] = lkpFieldVal;
52                             }
53                         }
54                     }
55                 }
56 
57                 //update destination item
58                 destinationItem.Update();
59 
60                 Log("----------End of handle field----------");
61             }
62 
63             #endregion
64 
65             #region Handle attachement
66 
67             foreach (string attachmentName in sourceItem.Attachments)
68             {
69                 SPFile file = sourceItem.ParentList.ParentWeb.GetFile(sourceItem.Attachments.UrlPrefix + attachmentName);
70 
71                 Log(string.Format("----------Add attachment [{0}]----------", attachmentName));
72 
73                 destinationItem.Attachments.Add(attachmentName, file.OpenBinary());
74             }
75 
76             destinationItem.SystemUpdate(false);
77 
78             CurrentItemID = destinationItem.ID;
79 
80             #endregion
81 
82             Log("-----End of handle item-----");
83         }
bubuko.com,布布扣

 

bubuko.com,布布扣
 1         private SPListItem GetDestinationItem(int sourceItemID, SPListItem destinationItem)
 2         {
 3             SPList list = DestinationList;
 4 
 5             if (sourceItemID - CurrentItemID > 1)
 6             {
 7                 for (int i = CurrentItemID + 1; i < sourceItemID; i++)
 8                 {
 9                     SPListItem item = list.Items.Add();
10                     item[SPBuiltInFieldId.Title] = "-1";
11 
12                     item.Update();
13                 }
14                 return list.Items.Add();
15             }
16             else
17             {
18                 return destinationItem;
19             }
20         }
bubuko.com,布布扣

[SharePoint 2010] Copy list item with version history and attachment

原文:http://www.cnblogs.com/s1nce/p/CopyListItemWithVersionAndAttachment.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!