public static void SetPolicyTagForDeleteOnFolder(PolicyTag policyTag, Folder folder) { folder[StoreObjectSchema.PolicyTag] = policyTag.PolicyGuid.ToByteArray(); folder[StoreObjectSchema.RetentionPeriod] = (int)policyTag.TimeSpanForRetention.TotalDays; object valueOrDefault = folder.GetValueOrDefault <object>(StoreObjectSchema.RetentionFlags); int num = 9; RetentionAndArchiveFlags retentionAndArchiveFlags; if (valueOrDefault != null && valueOrDefault is int) { retentionAndArchiveFlags = (RetentionAndArchiveFlags)((int)valueOrDefault | num); } else { retentionAndArchiveFlags = (RetentionAndArchiveFlags)num; } folder[StoreObjectSchema.RetentionFlags] = (int)retentionAndArchiveFlags; if (folder.GetValueOrDefault <object>(StoreObjectSchema.ExplicitPolicyTag) != null) { folder.DeleteProperties(new PropertyDefinition[] { StoreObjectSchema.ExplicitPolicyTag }); } }
public static void SetPolicyTagForDeleteOnItem(PolicyTag policyTag, StoreObject item) { item[StoreObjectSchema.PolicyTag] = policyTag.PolicyGuid.ToByteArray(); CompositeRetentionProperty compositeRetentionProperty = null; byte[] valueOrDefault = item.GetValueOrDefault <byte[]>(ItemSchema.StartDateEtc); if (valueOrDefault != null) { try { compositeRetentionProperty = CompositeRetentionProperty.Parse(valueOrDefault, true); } catch (ArgumentException) { compositeRetentionProperty = null; } } if (compositeRetentionProperty == null) { compositeRetentionProperty = new CompositeRetentionProperty(); compositeRetentionProperty.Integer = (int)policyTag.TimeSpanForRetention.TotalDays; object valueOrDefault2 = item.GetValueOrDefault <object>(InternalSchema.ReceivedTime); if (valueOrDefault2 == null) { valueOrDefault2 = item.GetValueOrDefault <object>(StoreObjectSchema.CreationTime); } if (valueOrDefault2 == null) { compositeRetentionProperty.Date = new DateTime?((DateTime)ExDateTime.Now); } else { compositeRetentionProperty.Date = new DateTime?((DateTime)((ExDateTime)valueOrDefault2)); } item[InternalSchema.StartDateEtc] = compositeRetentionProperty.GetBytes(true); } long fileTime = 0L; try { fileTime = compositeRetentionProperty.Date.Value.AddDays(policyTag.TimeSpanForRetention.TotalDays).ToFileTimeUtc(); } catch (ArgumentOutOfRangeException) { fileTime = 0L; } item[InternalSchema.RetentionPeriod] = (int)policyTag.TimeSpanForRetention.TotalDays; DateTime dateTime = DateTime.FromFileTimeUtc(fileTime); item[InternalSchema.RetentionDate] = dateTime; if (item.GetValueOrDefault <object>(StoreObjectSchema.ExplicitPolicyTag) != null) { item.DeleteProperties(new PropertyDefinition[] { StoreObjectSchema.ExplicitPolicyTag }); } }
public static void SetPolicyTagForDeleteOnNewItem(PolicyTag policyTag, StoreObject item) { item[StoreObjectSchema.PolicyTag] = policyTag.PolicyGuid.ToByteArray(); item[StoreObjectSchema.RetentionFlags] = 0; CompositeRetentionProperty setStartDateEtc = PolicyTagHelper.GetSetStartDateEtc(policyTag, item); if (policyTag.TimeSpanForRetention.TotalDays > 0.0) { item[InternalSchema.RetentionPeriod] = (int)policyTag.TimeSpanForRetention.TotalDays; item[InternalSchema.RetentionDate] = PolicyTagHelper.CalculateExecutionDate(setStartDateEtc, policyTag.TimeSpanForRetention.TotalDays); } }
public static void SetPolicyTagForArchiveOnNewFolder(PolicyTag policyTag, Folder folder) { folder[StoreObjectSchema.ArchiveTag] = policyTag.PolicyGuid.ToByteArray(); folder[StoreObjectSchema.ArchivePeriod] = (int)policyTag.TimeSpanForRetention.TotalDays; object valueOrDefault = folder.GetValueOrDefault <object>(StoreObjectSchema.RetentionFlags); RetentionAndArchiveFlags retentionAndArchiveFlags; if (valueOrDefault != null && valueOrDefault is int) { retentionAndArchiveFlags = (RetentionAndArchiveFlags)((int)valueOrDefault | 16); } else { retentionAndArchiveFlags = RetentionAndArchiveFlags.ExplictArchiveTag; } folder[StoreObjectSchema.RetentionFlags] = (int)retentionAndArchiveFlags; }
private static CompositeRetentionProperty GetSetStartDateEtc(PolicyTag policyTag, StoreObject item) { CompositeRetentionProperty compositeRetentionProperty = null; byte[] array = null; try { array = item.GetValueOrDefault <byte[]>(InternalSchema.StartDateEtc); } catch (NotInBagPropertyErrorException) { array = null; } if (array != null) { try { compositeRetentionProperty = CompositeRetentionProperty.Parse(array, true); } catch (ArgumentException) { compositeRetentionProperty = null; } } if (compositeRetentionProperty == null) { compositeRetentionProperty = new CompositeRetentionProperty(); compositeRetentionProperty.Integer = (int)policyTag.TimeSpanForRetention.TotalDays; object valueOrDefault = item.GetValueOrDefault <object>(InternalSchema.ReceivedTime); if (valueOrDefault == null) { valueOrDefault = item.GetValueOrDefault <object>(StoreObjectSchema.CreationTime); } if (valueOrDefault == null) { compositeRetentionProperty.Date = new DateTime?((DateTime)ExDateTime.Now); } else { compositeRetentionProperty.Date = new DateTime?((DateTime)((ExDateTime)valueOrDefault)); } item[InternalSchema.StartDateEtc] = compositeRetentionProperty.GetBytes(true); } return(compositeRetentionProperty); }
private GroupOperationResult SetRetentionPolicyInternal(StoreObjectId itemId, PolicyTag policyTag, bool isArchiveAction) { PropertyDefinition[] propsToReturn = isArchiveAction ? PolicyTagHelper.ArchiveProperties : PolicyTagHelper.RetentionProperties; using (Item item = Item.Bind(this.session, itemId, propsToReturn)) { item.OpenAsReadWrite(); if (isArchiveAction) { if (policyTag == null) { PolicyTagHelper.ClearPolicyTagForArchiveOnItem(item); } else { PolicyTagHelper.SetPolicyTagForArchiveOnItem(policyTag, item); } } else if (policyTag == null) { PolicyTagHelper.ClearPolicyTagForDeleteOnItem(item); } else { PolicyTagHelper.SetPolicyTagForDeleteOnItem(policyTag, item); } item.Save(SaveMode.ResolveConflicts); } return(new GroupOperationResult(OperationResult.Succeeded, new StoreObjectId[] { itemId }, null)); }
public AggregateOperationResult SetRetentionPolicy(StoreObjectId contextFolderId, DateTime?actionTime, PolicyTag policyTag, bool isArchiveAction) { StoreObjectId[] array = this.GetFilteredItemIds(contextFolderId, actionTime, null).ToArray(); List <GroupOperationResult> groupOperationResults = new List <GroupOperationResult>(array.Length); if (array != null) { StoreObjectId[] array2 = array; for (int i = 0; i < array2.Length; i++) { StoreObjectId itemId = array2[i]; Folder.ExecuteGroupOperationAndAggregateResults(groupOperationResults, new StoreObjectId[] { itemId }, () => this.SetRetentionPolicyInternal(itemId, policyTag, isArchiveAction)); } } return(Folder.CreateAggregateOperationResult(groupOperationResults)); }