zoukankan      html  css  js  c++  java
  • [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         }
  • 相关阅读:
    教你解决Python爬虫的时候Xpath取值为空
    jmeter工具使用心得
    查找uipath项目中引用包的目录
    pandas 设置某列值的类型,求和指定列,给指定列赋值
    pandas 获取不符合条件/不包含某个字符串的dataframe
    Visual Studio清理最近項目和解決方案
    【vue BUG记录】作用域插槽
    银行下拉框数据
    as3.0对图片进行不规则切割源代码实例
    Vuforia+single image 问题
  • 原文地址:https://www.cnblogs.com/s1nce/p/CopyListItemWithVersionAndAttachment.html
Copyright © 2011-2022 走看看