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


     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;
    10             SPUser systemAccount = destinationItem.Web.AllUsers["SHAREPOINT/system"];
    11             SPWeb sourceWeb = sourceItem.Web;
    12             SPWeb destWeb = destinationItem.Web;
    13 
    14             Log("-----Begin of handle item-----");
    15 
    16             Log(string.Format("----------Source item [{0}/{1}]----------", sourceItem.Title, sourceItem.ID));
    17 
    18             #region Handle version history
    19 
    20             for (var i = sourceItem.Versions.Count - 1; i >= 0; i--)
    21             {
    22                 foreach (SPField sourceField in sourceItem.Fields)
    23                 {
    24                     SPListItemVersion version = sourceItem.Versions[i];
    25                     fieldVal = version[sourceField.InternalName];
    26 
    27                     Log(string.Format("----------Handle field[{0}/{1}]----------", sourceField.InternalName, sourceField.Type.ToString()));
    28 
    29                     if (sourceField.Type == SPFieldType.User)
    30                     {
    31                         fieldVal = GetSPUserFromString(new SPFieldUserValue(sourceWeb, fieldVal.ToString()), destWeb);
    32                         Log(string.Format("----------user field[{0}/{1}]----------", sourceField.InternalName, fieldVal));
    33                     }
    34 
    35                     if (sourceField.Id == SPBuiltInFieldId.Created ||
    36                        sourceField.Id == SPBuiltInFieldId.Created_x0020_By ||
    37                        sourceField.Id == SPBuiltInFieldId.Modified ||
    38                        sourceField.Id == SPBuiltInFieldId.Modified_x0020_By ||
    39                        sourceField.Id == SPBuiltInFieldId.Author ||
    40                        sourceField.Id == SPBuiltInFieldId.Editor)
    41                     {
    42                         destinationItem[sourceField.InternalName] = fieldVal;
    43                     }
    44                     else if (!sourceField.ReadOnlyField && sourceField.Type != SPFieldType.Attachments)
    45                     {
    46                         if (sourceField.Type != SPFieldType.Lookup)
    47                         {
    48                             destinationItem[sourceField.InternalName] = fieldVal;
    49                         }
    50                         else
    51                         {
    52                             lkpField = sourceField as SPFieldLookup;
    53 
    54                             Log(string.Format("----------source field value[{0}]----------", fieldVal));
    55 
    56                             if (lkpField != null && fieldVal != null && fieldVal.ToString().Length > 0)
    57                             {
    58                                 lkpFieldVal = new SPFieldLookupValue(fieldVal.ToString());
    59                                 destinationItem[sourceField.InternalName] = lkpFieldVal;
    60                             }
    61                         }
    62                     }
    63                 }
    64 
    65                 //update destination item
    66                 destinationItem.Update();
    67 
    68                 Log("----------End of handle field----------");
    69             }
     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         }
     1         private SPUser GetSPUserFromString(SPFieldUserValue userVal, SPWeb web)
     2         {
     3             try
     4             {
     5                 if (userVal != null)
     6                     return web.EnsureUser(userVal.User.LoginName);
     7                 else
     8                     return null;
     9             }
    10             catch
    11             {
    12                 return null;
    13             }
    14         }
  • 相关阅读:
    React Native解决Android的WebView无法执行injectedJavaScript代码
    Java中BitSet使用(转)
    Java StringTokenizer分割字符串
    【git】git常用命令简介
    【细说Java】方法重载的简单介绍
    【细说Java】Java封箱拆箱的一些问题
    【Java解惑】表达式问题
    【细说Java】Java的重写与隐藏
    【细说Java】揭开Java的main方法神秘的面纱
    Maven简介
  • 原文地址:https://www.cnblogs.com/s1nce/p/CopyListItemWithVersionAndAttachment.html
Copyright © 2020-2023  润新知