diff --git a/console_spo_utils/Program.cs b/console_spo_utils/Program.cs
index 8748d86..e67b040 100644
--- a/console_spo_utils/Program.cs
+++ b/console_spo_utils/Program.cs
@@ -1,6 +1,6 @@
using Microsoft.SharePoint;
using Microsoft.SharePoint.Client;
-using SP = Microsoft.SharePoint.Client;
+using Microsoft.SharePoint.Client.DocumentSet;
using Microsoft.Online.SharePoint.TenantAdministration;
using System;
using System.Collections.Concurrent;
@@ -23,15 +23,17 @@ namespace SharePointOnlineUtils
string svcUser = "svcItsSharePointAdmin@italsort.com";
SecureString svcUserPsw = new NetworkCredential("", "$O,D1XBp1O5.OdjZt86#a=").SecurePassword;
- ProjectsByYearSite(siteCollection, svcUser, svcUserPsw);
+ //ProjectsByYearSite(siteCollection, svcUser, svcUserPsw);
+ //Project(siteCollection, svcUser, svcUserPsw);
+ SubProject(siteCollection, svcUser, svcUserPsw);
}
public static async Task ProjectsByYearSite(string siteCollection, string user, SecureString psw)
{
string year = DateTime.Now.Year.ToString();
string projectsYear = "Commesse" + year;
- var listTitle = "Lista Commesse " + year;
- Uri site = new Uri(siteCollection + "/Commesse/" + projectsYear);
+ string listTitle = "Lista Commesse " + year;
+ Uri site = new Uri(siteCollection + "/sites/" + projectsYear);
using (var authMgr = new AuthenticationManager())
using (var ctx = authMgr.GetContext(site, user, psw))
@@ -55,10 +57,64 @@ namespace SharePointOnlineUtils
}
}
}
+
+ public static async Task Project(string siteCollection, string user, SecureString psw)
+ {
+ string year = DateTime.Now.Year.ToString();
+ string projectsYear = $"Commesse{year}";
+ string listTitle = $"Lista Commesse {year}";
+ string ssProjectTitle = "CT0014";
+
+ Uri site = new Uri($"{siteCollection}/sites/{projectsYear}");
+
+ using (var authMgr = new AuthenticationManager())
+ using (var ctx = authMgr.GetContext(site, user, psw))
+ {
+ //if (SharePointCustomOperation.SiteExist(ctx)) //TODO: Controllo if sub site exist
+ SharePointCustomOperation.ProjectSubSite(ssProjectTitle, projectsYear, ctx);
+ SharePointCustomOperation.ProjectListEntry(ssProjectTitle, listTitle, projectsYear, ctx);
+ }
+
+ Uri subSite = new Uri($"{siteCollection}/sites/{projectsYear}/{ssProjectTitle}");
+
+ using (var authMgr = new AuthenticationManager())
+ using (var ctx = authMgr.GetContext(subSite, user, psw))
+ {
+ SharePointCustomOperation.ProjectDocLib(ssProjectTitle, ctx);
+ //view e field + edit short cut menu + set SottoProgetti view a homepage
+ }
+ }
+
+ public static async Task SubProject(string siteCollection, string user, SecureString psw)
+ {
+ string year = DateTime.Now.Year.ToString();
+ string projectsYear = $"Commesse{year}";
+ string listTitle = $"Lista Commesse {year}";
+ string ssProjectTitle = "CT0014";
+ string[] ssSubProjectTitle = { "CT0014-0001", "CT0014-0002", "CT0014-0003" };
+
+ Uri subSite = new Uri($"{siteCollection}/sites/{projectsYear}/{ssProjectTitle}");
+
+ Uri subProjList = new Uri($"{siteCollection}/sites/{projectsYear}/{ssProjectTitle}/SottoProgetti {ssProjectTitle}");
+
+
+
+ using (var authMgr = new AuthenticationManager())
+ using (var ctx = authMgr.GetContext(subSite, user, psw))
+ {
+ using (var sCtx = authMgr.GetContext(subProjList, user, psw))
+ {
+ SharePointCustomOperation.SubProjectDocSet(ssProjectTitle, ssSubProjectTitle, ctx, sCtx);
+ }
+ }
+ }
+
+
}
public class SharePointCustomOperation
{
+ #region Check If Exist
public static bool SiteExist(ClientContext ctx)
{
try
@@ -73,7 +129,7 @@ namespace SharePointOnlineUtils
return false;
}
}
-
+
public static bool ListExist(string year, ClientContext ctx)
{
try
@@ -87,7 +143,9 @@ namespace SharePointOnlineUtils
return false;
}
}
-
+ #endregion
+
+ #region Projects Years Page Set Up
public static async Task ProjectsYSite(string year, Uri site, string user, SecureString psw)
{
Console.WriteLine($"> Inizializzata la fase di creazione del sito '../Commesse{year}'.");
@@ -132,11 +190,6 @@ namespace SharePointOnlineUtils
}
}
- public static async Task ProjectsYQuickMenu(ClientContext ctx)
- {
-
- }
-
public static async Task ProjectsYList(string listTitle, ClientContext ctx)
{
try
@@ -181,38 +234,32 @@ namespace SharePointOnlineUtils
Console.WriteLine($"> Inizializzata la fase di creazione dei campi '{listTitle}'.");
Web web = ctx.Web;
- List projectsList = web.Lists.GetByTitle(listTitle);
List list = web.Lists.GetByTitle(listTitle);
+ List projectsList = web.Lists.GetByTitle(listTitle);
ctx.Load(list, l => l.Fields);
ctx.Load(projectsList, b => b.Id);
ctx.ExecuteQuery();
- string idProjField = @"";
+ string idProjField = @"";
Field lookupIdProjField = list.Fields.AddFieldAsXml(idProjField, true, AddFieldOptions.DefaultValue);
- //lookupIdProjField.Update();
- //ctx.Load(lookupIdProjField);
- string clientField = @"";
+ string clientField = @"";
Field lookupClientField = list.Fields.AddFieldAsXml(clientField, true, AddFieldOptions.DefaultValue);
- //lookupClientField.Update();
- //ctx.Load(lookupClientField);
- string dlvReasonField = @""
- + ""
- + " 01 VENDITA MACCHINE / IMPIANTI"
- + " 02 VENDITA RICAMBI"
- + " 04 VENDITA SERVIZI FUORI COMMESSA"
- + " 08 VENDITA RIPARAZIONI"
- + " 09 ENGINEERING"
- + " 11 VENDITA E LAVORAZ.CONTO TERZI"
- + " 55 PREVENDITE"
- + " NC NON CONFORMITÁ"
- + ""
+ string dlvReasonField = @""
+ + ""
+ + " 01 VENDITA MACCHINE / IMPIANTI"
+ + " 02 VENDITA RICAMBI"
+ + " 04 VENDITA SERVIZI FUORI COMMESSA"
+ + " 08 VENDITA RIPARAZIONI"
+ + " 09 ENGINEERING"
+ + " 11 VENDITA E LAVORAZ.CONTO TERZI"
+ + " 55 PREVENDITE"
+ + " NC NON CONFORMITÁ"
+ + ""
+ "";
Field lookupDlvReasonField = list.Fields.AddFieldAsXml(dlvReasonField, true, AddFieldOptions.DefaultValue);
- //lookupDlvReasonField.Update();
- //ctx.Load(lookupDlvReasonField);
ctx.ExecuteQuery();
@@ -232,7 +279,6 @@ namespace SharePointOnlineUtils
List list = ctx.Web.Lists.GetByTitle(listTitle);
var views = list.Views;
- //ctx.Load(list, l => l.Views);
ViewCreationInformation viewCreation = new ViewCreationInformation();
@@ -242,14 +288,14 @@ namespace SharePointOnlineUtils
viewCreation.ViewTypeKind = ViewType.None;
viewCreation.ColumnWidth = "350";
viewCreation.ViewFields = new string[3] { "ID Progetto", "Cliente", "Causale" };
-
+
var view = views.Add(viewCreation);
-
+
ctx.Load(view);
ctx.ExecuteQuery();
-
+
Console.WriteLine($"> Completata la fase di creazione della ListView '{viewCreation.Title}'.");
-
+
var customView = views.GetByTitle(viewCreation.Title);
customView.MobileView = true;
customView.MobileDefaultView = true;
@@ -257,15 +303,257 @@ namespace SharePointOnlineUtils
customView.Update();
ctx.ExecuteQuery();
- Console.WriteLine($"> MobileView set to true on ListView '{viewCreation.Title}'.");
+ Console.WriteLine($"> Abilitata la visualizzazione su mobile '{viewCreation.Title}'.");
+
+ ctx.Web.RootFolder.WelcomePage = $"Lists/{listTitle}/{listTitle}.aspx";
+
+ ctx.Web.RootFolder.Update();
+ ctx.ExecuteQuery();
+
+ Console.WriteLine($"> Impostata come HomePage di '{viewCreation.Title}'");
}
catch (Exception ex)
{
Console.WriteLine($"> Qualcosa è andato storto nella creazione della ListView. ( {ex.Message} )");
}
}
+ #endregion
+
+ #region Project Page Set Up
+ public static async Task ProjectSubSite(string ssProjectTitle, string projectsYear, ClientContext ctx)
+ {
+ string ssProjectDescription = "TEST AUTOMATION";
+ try
+ {
+ Console.WriteLine($"> Il sito {ssProjectTitle} è in fase di creazione!");
+
+ WebCreationInformation wci = new WebCreationInformation();
+
+ wci.Url = ssProjectTitle;
+ wci.Title = ssProjectTitle;
+ wci.Description = ssProjectDescription;
+ wci.UseSamePermissionsAsParentSite = true;
+ wci.WebTemplate = "STS#1";
+ wci.Language = 1040;
+
+ Web web = ctx.Site.RootWeb.Webs.Add(wci);
+ ctx.ExecuteQuery();
+
+ Console.WriteLine($"> Il sito {ssProjectTitle} è stato creato con successo!");
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine(ex.Message);
+ }
+ }
+
+ public static async Task ProjectListEntry(string ssProjectTitle, string listTitle, string projectsYear, ClientContext ctx)
+ {
+ try
+ {
+ List list = ctx.Web.Lists.GetByTitle(listTitle);
+
+ ListItemCreationInformation itemCreateInfo = new ListItemCreationInformation();
+ ListItem oItem = list.AddItem(itemCreateInfo);
+
+ FieldUrlValue link = new FieldUrlValue();
+ link.Url = $"/sites/{projectsYear}/{ssProjectTitle}";
+ link.Description = ssProjectTitle;
+
+ oItem["ID_x0020_Progetto"] = link;
+ oItem["Cliente"] = "PAL";
+ oItem["Causale"] = "02 VENDITA RICAMBI";
+
+ oItem.Update();
+ ctx.ExecuteQuery();
+
+ Console.WriteLine($"> La Commessa {ssProjectTitle} è stata aggiunta alla lista {listTitle} con successo!");
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine(ex.Message);
+ }
+ }
+
+ public static async Task ProjectDocLib(string ssProjectTitle, ClientContext ctx)
+ {
+ #region DocLib
+ try
+ {
+ string[] docLibName = { $"Commerciale {ssProjectTitle}", $"Documenti {ssProjectTitle}", $"Media {ssProjectTitle}", $"SottoProgetti {ssProjectTitle}" };
+
+ foreach (string libName in docLibName)
+ {
+ Console.WriteLine($"> Inizializzata la fase di creazione '{libName}'.");
+
+ Web web = ctx.Web;
+ ListCreationInformation lci = new ListCreationInformation();
+
+ lci.Title = libName;
+ lci.TemplateType = (int)ListTemplateType.DocumentLibrary;
+ List list = web.Lists.Add(lci);
+
+ ctx.ExecuteQuery();
+
+ if (libName == $"SottoProgetti {ssProjectTitle}")
+ {
+ list.ContentTypesEnabled = true;
+ list.AddContentTypeToListByName("Set di documenti");
+
+ list.Update();
+ ctx.ExecuteQuery();
+ }
+
+ var fld = list.Fields.GetByInternalNameOrTitle(libName);
+ if (fld != null)
+ {
+ fld.Required = false;
+ fld.SetShowInDisplayForm(false);
+ fld.SetShowInEditForm(false);
+ fld.SetShowInNewForm(false);
+
+ list.Update();
+ ctx.ExecuteQuery();
+ }
+
+ Console.WriteLine($"> '{libName}' è stato creato con successo.");
+ }
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine($"> Qualcosa è andato storto... {ex.Message}");
+ }
+ #endregion
+
+ #region Dir
+ try
+ {
+ Dictionary folderName = new Dictionary
+ {
+ { "01_Costificazioni", $"Commerciale {ssProjectTitle}" },
+ { "02_Conferma_Ordine", $"Commerciale {ssProjectTitle}" },
+ { "03_Amministrazione", $"Commerciale {ssProjectTitle}" },
+ { "05_Documenti_di_Spedizione", $"Documenti {ssProjectTitle}" },
+ { "07_Service", $"Documenti {ssProjectTitle}" },
+ { "08_Specifiche_Tecniche_E_Meeting", $"Documenti {ssProjectTitle}" },
+ { "10_Fornitori", $"Documenti {ssProjectTitle}" },
+ { "11_Documenti_Tecnici", $"Documenti {ssProjectTitle}" }
+ };
+
+ foreach (KeyValuePair kvp in folderName)
+ {
+ Console.WriteLine($"> Inizializzata la fase di {kvp.Key} in {kvp.Value}.");
+
+ List list = ctx.Web.Lists.GetByTitle(kvp.Value);
+ ListItemCreationInformation info = new ListItemCreationInformation();
+ info.UnderlyingObjectType = FileSystemObjectType.Folder;
+ info.LeafName = kvp.Key;
+ ListItem newItem = list.AddItem(info);
+ newItem["Title"] = kvp.Key;
+ newItem.Update();
+ ctx.ExecuteQuery();
+
+ Console.WriteLine($"> {kvp.Key} creato con successo in {kvp.Value}.");
+ }
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine($"> Qualcosa è andato storto... ( {ex.Message} )");
+ }
+ #endregion
+ }
+
+ public static async Task ProjectListField(string ssProjectTitle, ClientContext ctx) // Empty Da definire i campi che userà ITS
+ {
+ try
+ {
+ string[] listTitle = { $"Commerciale {ssProjectTitle}", $"Documenti {ssProjectTitle}", $"Media {ssProjectTitle}", $"SottoProgetti {ssProjectTitle}" };
+
+ foreach(string title in listTitle)
+ {
+ Console.WriteLine($"> Inizializzata la fase di creazione dei campi in '{title}'.");
+
+ Web web = ctx.Web;
+ List list = web.Lists.GetByTitle(title);
+ List projectsList = web.Lists.GetByTitle(title);
+
+ ctx.Load(list, l => l.Fields);
+ ctx.Load(projectsList, b => b.Id);
+ ctx.ExecuteQuery();
+
+ Field lookupField = list.Fields.AddFieldAsXml(@"", true, AddFieldOptions.DefaultValue);
+
+ ctx.ExecuteQuery();
+
+ Console.WriteLine($"> Completata la fase di creazione dei campi in '{title}'.");
+ }
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine($"> Qualcosa è andato storto nella creazione delle colonne. ( {ex.Message} )");
+ }
+ }
+
+ public static async Task ProjectListView(string ssProjectTitle, ClientContext ctx) // Empty
+ {
+
+ }
+ #endregion
+
+ #region SubProject
+ public static async Task SubProjectDocSet(string ssProjectTitle, string[] ssSubProjectTitle, ClientContext ctx, ClientContext sCtx)
+ {
+ try
+ {
+ string[] folderName = { "09_Documenti_Tecnici", "12_Disegni_Costruttivi", "13_Manuali", "15_Documentazione_Elettrica", "16_Liste_Ricambi" };
+
+ foreach (string spt in ssSubProjectTitle)
+ {
+ Console.WriteLine($"> Inizializzata la fase di creazione per {spt}.");
+
+ var list = ctx.Web.Lists.GetByTitle($"SottoProgetti {ssProjectTitle}");
+ ctx.Load(list, l => l.RootFolder, l => l.ContentTypes);
+ ctx.ExecuteQuery();
+
+ var ctData = list.ContentTypes.Where(c => c.Name == "Set di documenti");
+ var contentType = ctData.FirstOrDefault();
+ ctx.Load(contentType);
+ ctx.ExecuteQuery();
+
+ DocumentSet.Create(ctx, list.RootFolder, spt, contentType.Id);
+ ctx.ExecuteQuery();
+
+ Console.WriteLine($"> {spt} creato con successo in SottoProgetti {ssProjectTitle}.");
+
+ /*foreach (string f in folderName) Trovare il modo di creare delle cartelle nelle docset
+ {
+ Console.WriteLine($"> La cartella {f} è in fase di creazione in {spt}");
+
+ var subList = sCtx.Web.Lists.GetByTitle(spt);
+
+ ListItemCreationInformation info = new ListItemCreationInformation();
+ info.UnderlyingObjectType = FileSystemObjectType.Folder;
+ info.LeafName = f;
+ ListItem newItem = subList.AddItem(info);
+ newItem["Title"] = f;
+ newItem.Update();
+ ctx.ExecuteQuery();
+
+ Console.WriteLine($"> La cartella {f} è stata creata in {spt}");
+ }*/
+
+ Console.WriteLine($"> Il Sotto Progrtto {ssSubProjectTitle} è stato creato con successo.");
+ }
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine($"> Qualcosa è andato storto... ( {ex.Message} )");
+ }
+ }
+
+ #endregion
}
public class AuthenticationManager : IDisposable