using library_spo_utils.Constants; using library_spo_utils.Enums; using library_spo_utils.Interfaces.Repositories; using library_spo_utils.Interfaces.Services; using Microsoft.SharePoint.Client; using Microsoft.SharePoint.Client.DocumentSet; namespace library_spo_utils.Services; internal class NonComplianceDocSetService : INonComplianceDocSetService { private readonly ISharePointCustomOperation cpt; private readonly IOneNoteService oneNoteService; private readonly INonComplianceRepository nonComplianceRepository; private readonly IFieldEntryDataUpdate _fieldEntryDataUpdate; public NonComplianceDocSetService( ISharePointCustomOperation cpt, IOneNoteService oneNoteService, INonComplianceRepository nonComplianceRepository, IFieldEntryDataUpdate fieldEntryDataUpdate) { this.cpt = cpt; this.oneNoteService = oneNoteService; this.nonComplianceRepository = nonComplianceRepository; _fieldEntryDataUpdate = fieldEntryDataUpdate; } public void Create(string nonComplianceName, string docLibraryName, string tenantName, ClientContext ctx) { #region Context var web = ctx.Web; ctx.Load(web, w => w.Url); List list = web.Lists.GetByTitle(docLibraryName); ctx.Load(list, l => l.RootFolder, l => l.ContentTypes, l => l.Fields, l => l.ContentTypesEnabled); ctx.ExecuteQuery(); list.ContentTypesEnabled = true; list.Update(); if (!cpt.ListContentTypeExist(ctx, docLibraryName, "Set di documenti")) { var documentCT = ctx.Site.RootWeb.AvailableContentTypes.GetById("0x0120D5"); ctx.Load(documentCT); ctx.ExecuteQuery(); var ctDocSet = new ContentTypeCreationInformation() { Name = "Set di documenti", ParentContentType = documentCT }; list.ContentTypes.Add(ctDocSet); list.Update(); ctx.ExecuteQuery(); } var ctData = list.ContentTypes.Where(c => c.Name == "Set di documenti"); var contentType = ctData.FirstOrDefault(); ctx.Load(contentType); ctx.ExecuteQuery(); #endregion Console.WriteLine($"> Inizializzata la fase di creazione per {nonComplianceName}."); #region DocSet Field Entry DocumentSet.Create(ctx, list.RootFolder, nonComplianceName, contentType.Id); ctx.ExecuteQuery(); Console.WriteLine($"> DocumentSet {nonComplianceName} creata."); //var dsItem = list.RootFolder.Folders.GetByUrl(nonComplianceName).ListItemAllFields; //dsItem["PAL_NC_Source"] = nonComplianceRepository.DefaultNonComplianceSource(nonComplianceName); //dsItem["PAL_NC_Reference"] = nonComplianceRepository.DefaultNonComplianceReference(nonComplianceName); //dsItem["PAL_NC_Nominative"] = nonComplianceRepository.DefaultNonComplianceNominative(nonComplianceName); //dsItem["PAL_NC_DateOfDetection"] = nonComplianceRepository.DefaultNonComplianceDateOfDetection(nonComplianceName); //dsItem["PAL_NC_Project"] = nonComplianceRepository.DefaultNonComplianceProject(nonComplianceName); //dsItem["PAL_NC_ItemCode"] = nonComplianceRepository.DefaultNonComplianceItemCode(nonComplianceName); //dsItem["PAL_NC_PortalUrl"] = nonComplianceRepository.DefaultNonCompliancePortalUrl(nonComplianceName); //dsItem["PAL_Status"] = nonComplianceRepository.DefaultNonComplianceState(nonComplianceName); //dsItem.Update(); //ctx.ExecuteQuery(); _fieldEntryDataUpdate.FieldUpdate(ctx, docLibraryName, nonComplianceName, FieldUpdateType.NonCompliance); Console.WriteLine($"> Field value update."); #endregion #region Folder oneNoteService.CreateFolderInsideNonCompliance(nonComplianceName, ctx); Console.WriteLine($"Le sotto cartelle sono state create con successo in {nonComplianceName}"); #endregion Console.WriteLine($"> {nonComplianceName} creato con successo in Offerte/{docLibraryName}."); } }