Partager via


Exemple d’extensions de gestion des enregistrements pour SharePoint

The ECM. L’exemple RecordsManagement vous montre comment utiliser un complément 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 pendant votre processus d’approvisionnement de site personnalisé.

Avant de commencer

Pour commencer, téléchargez le module ECM. Exemple de complément RecordsManagement à partir du projet Office 365 Developer Patterns and Practices sur GitHub.

Remarque

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 complément :

  1. Activez la fonctionnalité Gestion des enregistrements sur place sur la collection de sites.

    Capture d’écran de la page Fonctionnalités des collections de sites avec la fonctionnalité Gestion des enregistrements sur place activée mise en surbrillance.

  2. Dans Paramètres du site, vérifiez que les paramètres de déclaration d’enregistrement s’affichent sous Administration de la collection de sites.

    Capture d’écran de la page Paramètres du site avec les paramètres de déclaration d’enregistrement mis en surbrillance.

Utilisation de l’ECM. Exemple de complément RecordsManagement

Lorsque vous démarrez l’ECM. Complément 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)

Capture d’écran de la page de démarrage du complément, montrant les deux scénarios.

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 complément est similaire à l’interface utilisateur trouvée dans paramètres de déclaration d’enregistrements dans Paramètres du site. 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 complément est similaire à l’interface utilisateur trouvée dans paramètres de déclaration d’enregistrements dans les paramètres de bibliothèque de votre liste.

Capture d’écran de la page Paramètres de déclaration d’enregistrement de la bibliothèque.

Scénario 1

Le scénario 1 aborde les fonctionnalités et paramètres de gestion des enregistrements sur place pour les sites. L’interface utilisateur du complément inclut un bouton Désactiver (ou Activer), comme illustré dans la figure suivante. Le fait de choisir ce bouton désactive (ou active) la fonctionnalité Gestion des enregistrements sur place sur la collection de sites.

Capture d’écran illustrant le bouton d’activation ou de désactivation pour la gestion des enregistrements sur place.

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 de l’étendue du site. Le code suivant de la méthode EnableSiteForInPlaceRecordsManagement montre comment utiliser ces méthodes d’extension pour définir des restrictions et spécifier qui peut déclarer ou annuler la déclaration 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 de 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 complément est installé, il crée une bibliothèque de documents appelée IPRTest. Lorsque vous utilisez ce complément pour modifier et enregistrer les paramètres de gestion des enregistrements sur place, les modifications sont appliquées à IPRTest.

Remarque

Pour utiliser les paramètres de gestion des enregistrements sur place dans 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 d’enregistrements manuel pour cette liste.
  • SetListAutoRecordDeclaration : déclare automatiquement les éléments ajoutés à cette liste en tant qu’enregistrement. Si la déclaration d’enregistrements est définie sur automatique dans cette liste, les paramètres de déclaration manuelle des enregistrements de la liste ne s’appliquent plus. Les 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.
  }
}

Voir aussi