Complément SharePoint - Exemple de modèles de bibliothèque de documents
L’exemple ECM. DocumentLibraries vous montre comment utiliser un complément hébergé par un fournisseur pour créer une liste ou bibliothèque de documents, lui attribuer un type de contenu et supprimer le type de contenu par défaut.
Utilisez cette solution si vous souhaitez :
- Créer une liste ou une bibliothèque de documents et appliquer un type de contenu par défaut.
- Mieux contrôler l’ajout, la maintenance ou la mise en œuvre de versions localisées de vos champs personnalisés.
- Supprimer le type de contenu par défaut d’une liste ou d’une bibliothèque.
- Appliquer des paramètres de configuration de bibliothèque lorsque vous créez une liste ou une bibliothèque.
Avant de commencer
Pour commencer, téléchargez le complément exempleECM.DocumentLibraries à partir du projet Pratiques et modèles de développement Office 365 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.
Les utilisateurs qui accèdent à l’exemple de complément ECM. Complément DocumentLibraries doivent être autorisés à gérer des listes. La méthode DoesUserHavePermission de Default.aspx.cs vérifie les autorisations de l’utilisateur pour s’assurer qu’il peut gérer des listes. Si l’utilisateur n’est pas autorisé à gérer des listes, le complément lui adresse un message d’erreur.
private bool DoesUserHavePermission()
{
var spContext = SharePointContextProvider.Current.GetSharePointContext(Context);
using (var ctx = spContext.CreateUserClientContextForSPHost())
{
BasePermissions perms = new BasePermissions();
perms.Set(PermissionKind.ManageLists);
ClientResult<bool> _permResult = ctx.Web.DoesUserHavePermissions(perms);
ctx.ExecuteQuery();
return _permResult.Value;
}
}
Utiliser l’exemple de complément ECM.DocumentLibraries
Lorsque vous démarrez ce complément, la page de démarrage apparaît, comme illustré ci-dessous. La page de démarrage ECM. DocumentLibraries ressemble à la page permettant d’ajouter une nouvelle bibliothèque de documents lorsque vous sélectionnez Contenu du site>Ajouter une application>Bibliothèque de documents>Options avancées, à une différence près. Lorsque vous démarrez le complément, la liste Modèles de document affiche un modèle de bibliothèque de documents personnalisé, Document informatique et Document Contoso. Lorsque l’utilisateur sélectionne Créer, le type de contenu personnalisé sélectionné est attribué à la nouvelle bibliothèque de documents.
Page de démarrage de l’exemple de complément ECM.DocumentLibraries
Lorsque les utilisateurs sélectionnent Créer, la méthode CreateLibrary_Click de Default.aspx.cs vérifie le modèle par défaut sélectionné et appelle la méthode CreateITDocumentLibrary ou CreateContosoDocumentLibrary de ContentTypeManager.cs, comme illustré dans le code suivant.
protected void CreateLibrary_Click(object sender, EventArgs e)
{
try
{
var _spContext = SharePointContextProvider.Current.GetSharePointContext(Context);
var _templateSelectedItem = this.DocumentTemplateType.Value;
var _libraryToCreate = this.GetLibraryToCreate();
using (var _ctx = _spContext.CreateUserClientContextForSPHost())
{
_ctx.ApplicationName = "AMS ECM.DocumentLibraries";
ContentTypeManager _manager = new ContentTypeManager();
switch(_templateSelectedItem)
{
case "IT Document":
_manager.CreateITDocumentLibrary(_ctx, _libraryToCreate);
break;
case "Contoso Document":
_manager.CreateContosoDocumentLibrary(_ctx, _libraryToCreate);
break;
}
}
Response.Redirect(this.Url.Value);
}
catch (Exception _ex)
{
throw;
}
}
La méthode CreateContosoDocumentLibrary effectue ensuite les tâches ci-dessous, comme illustré dans l’exemple de code suivant :
- Crée des champs personnalisés dans le service de métadonnées gérées.
- Crée un type de contenu.
- Associe les champs personnalisés aux types de contenu.
- Crée la bibliothèque de documents avec le type de contenu.
public void CreateContosoDocumentLibrary(ClientContext ctx, Library library)
{
// Check the fields.
if (!ctx.Web.FieldExistsById(FLD_CLASSIFICATION_ID)){
ctx.Web.CreateTaxonomyField(FLD_CLASSIFICATION_ID,
FLD_CLASSIFICATION_INTERNAL_NAME,
FLD_CLASSIFICATION_DISPLAY_NAME,
FIELDS_GROUP_NAME,
TAXONOMY_GROUP,
TAXONOMY_TERMSET_CLASSIFICATION_NAME);
}
// Check the content type.
if (!ctx.Web.ContentTypeExistsById(CONTOSODOCUMENT_CT_ID)){
ctx.Web.CreateContentType(CONTOSODOCUMENT_CT_NAME,
CT_DESC, CONTOSODOCUMENT_CT_ID,
CT_GROUP);
}
// Associate fields to content types.
if (!ctx.Web.FieldExistsByNameInContentType(CONTOSODOCUMENT_CT_NAME, FLD_CLASSIFICATION_INTERNAL_NAME)){
ctx.Web.AddFieldToContentTypeById(CONTOSODOCUMENT_CT_ID,
FLD_CLASSIFICATION_ID.ToString(),
false);
}
CreateLibrary(ctx, library, CONTOSODOCUMENT_CT_ID);
}
La méthode CreateContosoDocumentLibrary appelle la méthode CreateTaxonomyField, qui fait partie de OfficeDevPnP.Core. CreateTaxonomyField crée un champ dans le service de métadonnées gérées à partir du complément hébergé par un fournisseur.
public static Field CreateTaxonomyField(this Web web, Guid id, string internalName, string displayName, string group, TermSet termSet, bool multiValue = false)
{
internalName.ValidateNotNullOrEmpty("internalName");
displayName.ValidateNotNullOrEmpty("displayName");
termSet.ValidateNotNullOrEmpty("termSet");
try
{
var _field = web.CreateField(id, internalName, multiValue ? "TaxonomyFieldTypeMulti" : "TaxonomyFieldType", true, displayName, group, "ShowField=\"Term1033\"");
WireUpTaxonomyField(web, _field, termSet, multiValue);
_field.Update();
web.Context.ExecuteQuery();
return _field;
}
catch (Exception)
{
/// If there is an exception, the hidden field might be present.
FieldCollection _fields = web.Fields;
web.Context.Load(_fields, fc => fc.Include(f => f.Id, f => f.InternalName));
web.Context.ExecuteQuery();
var _hiddenField = id.ToString().Replace("-", "");
var _field = _fields.FirstOrDefault(f => f.InternalName == _hiddenField);
if (_field != null)
{
_field.DeleteObject();
web.Context.ExecuteQuery();
}
throw;
}
}
La méthode CreateContosoDocumentLibrary appelle la méthode CreateContentType, qui fait partie de OfficeDevPnP.Core. CreateContentType crée un nouveau type de contenu.
public static ContentType CreateContentType(this Web web, string name, string description, string id, string group, ContentType parentContentType = null)
{
LoggingUtility.Internal.TraceInformation((int)EventId.CreateContentType, CoreResources.FieldAndContentTypeExtensions_CreateContentType01, name, id);
// Load the current collection of content types.
ContentTypeCollection contentTypes = web.ContentTypes;
web.Context.Load(contentTypes);
web.Context.ExecuteQuery();
ContentTypeCreationInformation newCt = new ContentTypeCreationInformation();
// Set the properties for the content type.
newCt.Name = name;
newCt.Id = id;
newCt.Description = description;
newCt.Group = group;
newCt.ParentContentType = parentContentType;
ContentType myContentType = contentTypes.Add(newCt);
web.Context.ExecuteQuery();
// Return the content type object.
return myContentType;
}
La méthode CreateContosoDocumentLibrary appelle la méthode AddFieldToContentTypeById, qui fait partie de OfficeDevPnP.Core. AddFieldToContentTypeById associe un champ à un type de contenu.
public static void AddFieldToContentTypeById(this Web web, string contentTypeID, string fieldID, bool required = false, bool hidden = false)
{
// Get content type.
ContentType ct = web.GetContentTypeById(contentTypeID);
web.Context.Load(ct);
web.Context.Load(ct.FieldLinks);
web.Context.ExecuteQuery();
// Get field.
Field fld = web.Fields.GetById(new Guid(fieldID));
// Add field association to content type.
AddFieldToContentType(web, ct, fld, required, hidden);
}
CreateContosoDocumentLibrary appelle la méthode CreateLibrary de ContentTypeManager.cs pour créer la bibliothèque de documents. La méthode CreateLibrary attribue les paramètres de la bibliothèque, tels que la description de la bibliothèque de documents, le contrôle de version et les types de contenu associés.
private void CreateLibrary(ClientContext ctx, Library library, string associateContentTypeID)
{
if (!ctx.Web.ListExists(library.Title))
{
ctx.Web.AddList(ListTemplateType.DocumentLibrary, library.Title, false);
List _list = ctx.Web.GetListByTitle(library.Title);
if(!string.IsNullOrEmpty(library.Description)) {
_list.Description = library.Description;
}
if(library.VerisioningEnabled) {
_list.EnableVersioning = true;
}
_list.ContentTypesEnabled = true;
_list.Update();
ctx.Web.AddContentTypeToListById(library.Title, associateContentTypeID, true);
// Remove the default Document Content Type.
_list.RemoveContentTypeByName(ContentTypeManager.DEFAULT_DOCUMENT_CT_NAME);
ctx.Web.Context.ExecuteQuery();
}
else
{
throw new Exception("A list, survey, discussion board, or document library with the specified title already exists in this website. Please choose another title.");
}
}
CreateLibrary appelle RemoveContentTypeByName dans ListExtensions.cs, qui fait partie de OfficeDevPnP.Core. RemoveContentTypeByName supprime le type de contenu par défaut de la bibliothèque de documents.
public static void RemoveContentTypeByName(this List list, string contentTypeName)
{
if (string.IsNullOrEmpty(contentTypeName))
{
throw (contentTypeName == null)
? new ArgumentNullException("contentTypeName")
: new ArgumentException(CoreResources.Exception_Message_EmptyString_Arg, "contentTypeName");
}
ContentTypeCollection _cts = list.ContentTypes;
list.Context.Load(_cts);
IEnumerable<ContentType> _results = list.Context.LoadQuery<ContentType>(_cts.Where(item => item.Name == contentTypeName));
list.Context.ExecuteQuery();
ContentType _ct = _results.FirstOrDefault();
if (_ct != null)
{
_ct.DeleteObject();
list.Update();
list.Context.ExecuteQuery();
}
}
Après avoir créé la bibliothèque de documents, accédez aux Paramètres de la bibliothèque dans votre bibliothèque de documents pour vérifier le nom, la description, le paramètre de contrôle de version, le type de contenu et les champs personnalisés attribués par le complément.
Paramètres de la bibliothèque appliqués par le complément