Exemple d’extensions de gestion SharePoint de gestion des enregistrements
Le ECM. L’exemple RecordsManagement vous montre comment utiliser un add-in hébergé par un fournisseur pour contrôler les paramètres de gestion des enregistrements sur place pour un site ou une liste.
Utilisez cette solution si vous souhaitez configurer les paramètres de gestion des enregistrements sur place au cours de votre processus de mise en service de site personnalisé.
Avant de commencer
Pour commencer, téléchargez le ecm. Exemple de add-in RecordsManagement du projet Office 365 Developer Patterns and Practices sur GitHub.
Notes
Le code dans cet article est fourni tel quel, sans garantie d’aucune sorte, expresse ou implicite, y compris mais sans s’y limiter, aucune garantie implicite d’adéquation à un usage particulier, à une qualité marchande ou une absence de contrefaçon.
Avant d’exécuter ce module, vous devez :
Activez la fonctionnalité Gestion des enregistrements sur place sur la collection de sites.

Dans Site Paramètres, vérifiez que les paramètres de déclaration d’enregistrement sont bien consultables sous Administration de la collection de sites.

Utilisation de l’ECM. Exemple de add-in RecordsManagement
Lorsque vous démarrez l’ECM. Le add-in RecordsManagement, la page de démarrage affiche les deux scénarios disponibles :
- Activation de la gestion des enregistrements sur place pour les sites (Scénario 1)
- Activation de la gestion des enregistrements sur place pour les listes (Scénario 2)

Vous pouvez utiliser le scénario 1 pour créer une interface utilisateur afin de contrôler les paramètres de gestion des enregistrements sur votre collection de sites. L’interface utilisateur de ce module est similaire à l’interface utilisateur trouvée dans les paramètres de déclaration des enregistrements dans Site Paramètres. Vous pouvez également activer ou désactiver la fonctionnalité Gestion des enregistrements sur place sur votre collection de sites.
Vous pouvez utiliser le scénario 2 pour créer une interface utilisateur afin de contrôler les paramètres de gestion des enregistrements dans les listes. L’interface utilisateur de ce module est similaire à l’interface utilisateur trouvée dans les paramètres de déclaration des enregistrements dans les paramètres de bibliothèque de votre liste.

Scénario 1
Le scénario 1 traite des fonctionnalités et des paramètres de gestion des enregistrements sur place pour les sites. L’interface utilisateur du add-in inclut un bouton Désactiver (ou Activer), comme illustré dans la figure suivante. Le choix de ce bouton désactive (ou active) la fonctionnalité Gestion des enregistrements sur place sur la collection de sites.
Le code suivant active ou désactive la fonctionnalité Gestion des enregistrements sur place sur la collection de sites. Les méthodes DisableInPlaceRecordsManagementFeature et EnableSiteForInPlaceRecordsManagement font partie du fichier AppModelExtensions\RecordsManagementExtensions.cs dans OfficeDevPnP.Core.
protected void btnToggleIPRStatus_Click(object sender, EventArgs e)
{
if (cc.Site.IsInPlaceRecordsManagementActive())
{
cc.Site.DisableInPlaceRecordsManagementFeature();
IPRStatusUpdate(false);
}
else
{
cc.Site.EnableSiteForInPlaceRecordsManagement();
IPRStatusUpdate(true);
}
}
OfficeDevPnP.Core inclut des méthodes d’extension pour obtenir et définir tous les paramètres de gestion des enregistrements sur place d’étendue site. Le code suivant de la méthode EnableSiteForInPlaceRecordsManagement indique comment utiliser ces méthodes d’extension pour définir des restrictions et spécifier qui peut déclarer ou non des enregistrements sur votre site.
public static void EnableSiteForInPlaceRecordsManagement(this Site site)
{
// Activate the In-Place Records Management feature if not yet enabled.
if (!site.IsFeatureActive(new Guid(INPLACE_RECORDS_MANAGEMENT_FEATURE_ID)))
{
// Note: this also sets the ECM_SITE_RECORD_RESTRICTIONS value to "BlockDelete, BlockEdit".
site.ActivateInPlaceRecordsManagementFeature();
}
// Enable in-place records management in all locations.
site.SetManualRecordDeclarationInAllLocations(true);
// Set restrictions to default values after enablement (this is also done at feature activation).
EcmSiteRecordRestrictions restrictions = EcmSiteRecordRestrictions.BlockDelete | EcmSiteRecordRestrictions.BlockEdit;
site.SetRecordRestrictions(restrictions);
// Set record declaration to default value.
site.SetRecordDeclarationBy(EcmRecordDeclarationBy.AllListContributors);
// Set record undeclaration to default value.
site.SetRecordUnDeclarationBy(EcmRecordDeclarationBy.OnlyAdmins);
}
Lorsque l’utilisateur modifie ses paramètres de gestion des enregistrements sur place et choisit le bouton Enregistrer les modifications, le code suivant dans la méthode btnSaveSiteScopedIPRSettings_Click s’exécute.
protected void btnSaveSiteScopedIPRSettings_Click(object sender, EventArgs e)
{
EcmSiteRecordRestrictions restrictions = (EcmSiteRecordRestrictions)Convert.ToInt32(rdRestrictions.SelectedValue);
cc.Site.SetRecordRestrictions(restrictions);
cc.Site.SetManualRecordDeclarationInAllLocations(Convert.ToBoolean(rdAvailability.SelectedValue));
EcmRecordDeclarationBy declareBy = (EcmRecordDeclarationBy)Convert.ToInt32(rdDeclarationBy.SelectedValue);
cc.Site.SetRecordDeclarationBy(declareBy);
EcmRecordDeclarationBy unDeclareBy = (EcmRecordDeclarationBy)Convert.ToInt32(rdUndeclarationBy.SelectedValue);
cc.Site.SetRecordUnDeclarationBy(unDeclareBy);
}
Dans le code précédent, un appel est effectué à la méthode SetRecordRestrictions dans RecordsManagementExtensions.cs. La méthode SetRecordRestrictions dans l’exemple suivant montre comment définir des restrictions sur les enregistrements.
public static void SetRecordRestrictions(this Site site, EcmSiteRecordRestrictions restrictions)
{
string restrictionsProperty = "";
if (restrictions.Has(EcmSiteRecordRestrictions.None))
{
restrictionsProperty = EcmSiteRecordRestrictions.None.ToString();
}
else if (restrictions.Has(EcmSiteRecordRestrictions.BlockEdit))
{
// BlockEdit is always used in conjunction with BlockDelete.
restrictionsProperty = EcmSiteRecordRestrictions.BlockDelete.ToString() + ", " + EcmSiteRecordRestrictions.BlockEdit.ToString();
}
else if (restrictions.Has(EcmSiteRecordRestrictions.BlockDelete))
{
restrictionsProperty = EcmSiteRecordRestrictions.BlockDelete.ToString();
}
// Set property bag entry.
site.RootWeb.SetPropertyBagValue(ECM_SITE_RECORD_RESTRICTIONS, restrictionsProperty);
}
Scénario 2
Le scénario 2 montre comment interagir avec les paramètres de gestion des enregistrements sur place pour les listes. Lorsque le add-in est installé, il crée une bibliothèque de documents appelée IPRTest. Lorsque vous utilisez ce module pour modifier et enregistrer les paramètres de gestion des enregistrements sur place, les modifications sont appliquées à IPRTest.
Notes
Pour utiliser les paramètres de gestion des enregistrements sur place sur une liste, vous devez activer la fonctionnalité Gestion des enregistrements sur place sur votre collection de sites.
Le code suivant dans Default.aspx.cs s’exécute lorsqu’un utilisateur choisit le bouton Enregistrer les modifications.
protected void btnSaveListScopedIPRSettings_Click(object sender, EventArgs e)
{
List ipr = cc.Web.GetListByTitle(IPR_LIBRARY);
EcmListManualRecordDeclaration listManual = (EcmListManualRecordDeclaration)Convert.ToInt32(rdListAvailability.SelectedValue);
ipr.SetListManualRecordDeclaration(listManual);
ipr.SetListAutoRecordDeclaration(chbAutoDeclare.Checked);
// Refresh the settings as AutoDeclare changes the manual settings.
if (ipr.IsListRecordSettingDefined())
{
rdListAvailability.SelectedValue = Convert.ToString((int)ipr.GetListManualRecordDeclaration());
chbAutoDeclare.Checked = ipr.GetListAutoRecordDeclaration();
rdListAvailability.Enabled = !chbAutoDeclare.Checked;
}
}
Le code appelle les deux méthodes suivantes dans le fichier RecordsManagementExtensions.cs d’OfficeDevPnP.Core :
- SetListManualRecordDeclaration : définit le paramètre de déclaration des enregistrements manuel pour cette liste.
- SetListAutoRecordDeclaration : déclare automatiquement les éléments ajoutés à cette liste en tant qu’enregistrement. Si la déclaration des enregistrements est définie sur automatique dans cette liste, les paramètres de déclaration des enregistrements manuels de la liste ne s’appliquent plus. Des récepteurs d’événements sont ajoutés à la liste pour démarrer des actions de gestion des enregistrements spécifiques lorsque des événements se produisent.
public static void SetListManualRecordDeclaration(this List list, EcmListManualRecordDeclaration settings)
{
if (settings == EcmListManualRecordDeclaration.UseSiteCollectionDefaults)
{
// If you set list record declaration back to the default values, you also need to
// turn off auto record declaration. Other property bag values are left as is; when
// settings are changed again these properties are also again usable.
if (list.PropertyBagContainsKey(ECM_AUTO_DECLARE_RECORDS))
{
list.SetListAutoRecordDeclaration(false);
}
// Set the property that dictates custom list record settings to false.
list.SetPropertyBagValue(ECM_IPR_LIST_USE_LIST_SPECIFIC, false.ToString());
}
else if (settings == EcmListManualRecordDeclaration.AlwaysAllowManualDeclaration)
{
list.SetPropertyBagValue(ECM_ALLOW_MANUAL_DECLARATION, true.ToString());
// Set the property that dictates custom list record settings to true.
list.SetPropertyBagValue(ECM_IPR_LIST_USE_LIST_SPECIFIC, true.ToString());
}
else if (settings == EcmListManualRecordDeclaration.NeverAllowManualDeclaration)
{
list.SetPropertyBagValue(ECM_ALLOW_MANUAL_DECLARATION, false.ToString());
// Set the property that dictates custom list record settings to true.
list.SetPropertyBagValue(ECM_IPR_LIST_USE_LIST_SPECIFIC, true.ToString());
}
else
{
throw new ArgumentOutOfRangeException("settings");
}
}
public static void SetListAutoRecordDeclaration(this List list, bool autoDeclareRecords)
{
// Determine the SharePoint version based on the loaded CSOM library.
Assembly asm = Assembly.GetAssembly(typeof(Microsoft.SharePoint.Client.Site));
int sharePointVersion = asm.GetName().Version.Major;
if (autoDeclareRecords)
{
// Set the property that dictates custom list record settings to true.
list.SetPropertyBagValue(ECM_IPR_LIST_USE_LIST_SPECIFIC, true.ToString());
// Prevent manual declaration.
list.SetPropertyBagValue(ECM_ALLOW_MANUAL_DECLARATION, false.ToString());
// Hook up the needed event handlers.
list.Context.Load(list.EventReceivers);
list.Context.ExecuteQuery();
List<EventReceiverDefinition> currentEventReceivers = new List<EventReceiverDefinition>(list.EventReceivers.Count);
currentEventReceivers.AddRange(list.EventReceivers);
// Track changes to see if a list.Update is needed.
bool eventReceiverAdded = false;
// ItemUpdating receiver.
EventReceiverDefinitionCreationInformation newEventReceiver = CreateECMRecordEventReceiverDefinition(EventReceiverType.ItemUpdating, 1000, sharePointVersion);
if (!ContainsECMRecordEventReceiver(newEventReceiver, currentEventReceivers))
{
list.EventReceivers.Add(newEventReceiver);
eventReceiverAdded = true;
}
// ItemDeleting receiver.
newEventReceiver = CreateECMRecordEventReceiverDefinition(EventReceiverType.ItemDeleting, 1000, sharePointVersion);
if (!ContainsECMRecordEventReceiver(newEventReceiver, currentEventReceivers))
{
list.EventReceivers.Add(newEventReceiver);
eventReceiverAdded = true;
}
// ItemFileMoving receiver.
newEventReceiver = CreateECMRecordEventReceiverDefinition(EventReceiverType.ItemFileMoving, 1000, sharePointVersion);
if (!ContainsECMRecordEventReceiver(newEventReceiver, currentEventReceivers))
{
list.EventReceivers.Add(newEventReceiver);
eventReceiverAdded = true;
}
// ItemAdded receiver.
newEventReceiver = CreateECMRecordEventReceiverDefinition(EventReceiverType.ItemAdded, 1005, sharePointVersion);
if (!ContainsECMRecordEventReceiver(newEventReceiver, currentEventReceivers))
{
list.EventReceivers.Add(newEventReceiver);
eventReceiverAdded = true;
}
// ItemUpdated receiver.
newEventReceiver = CreateECMRecordEventReceiverDefinition(EventReceiverType.ItemUpdated, 1007, sharePointVersion);
if (!ContainsECMRecordEventReceiver(newEventReceiver, currentEventReceivers))
{
list.EventReceivers.Add(newEventReceiver);
eventReceiverAdded = true;
}
// ItemCheckedIn receiver.
newEventReceiver = CreateECMRecordEventReceiverDefinition(EventReceiverType.ItemCheckedIn, 1006, sharePointVersion);
if (!ContainsECMRecordEventReceiver(newEventReceiver, currentEventReceivers))
{
list.EventReceivers.Add(newEventReceiver);
eventReceiverAdded = true;
}
if (eventReceiverAdded)
{
list.Update();
list.Context.ExecuteQuery();
}
// Set the property that dictates the autodeclaration.
list.SetPropertyBagValue(ECM_AUTO_DECLARE_RECORDS, autoDeclareRecords.ToString());
}
else
{
// Set the property that dictates the autodeclaration.
list.SetPropertyBagValue(ECM_AUTO_DECLARE_RECORDS, autoDeclareRecords.ToString());
//Note: Existing list event handlers will just stay as they are, no need to remove them.
}
}