public ActionResult DeleteWelcomeField(string id)
        {
            var spContext = SharePointContextProvider.Current.GetSharePointContext(HttpContext);

            using (var clientContext = spContext.CreateUserClientContextForSPHost())
            {
                clientContext.Load(clientContext.Web, w => w.ContentTypes);
                clientContext.ExecuteQuery();

                ContentType docSetContentType = clientContext.Web.ContentTypes.FirstOrDefault(ct => ct.Name == CONTENTTYPENAME);
                Field       selectedField     = clientContext.Web.Fields.GetById(new Guid(id));
                clientContext.Load(selectedField);
                clientContext.ExecuteQuery();

                if (docSetContentType != null && selectedField.ServerObjectIsNull == false)
                {
                    DocumentSetTemplate docSetTemplate = DocumentSetTemplate.GetDocumentSetTemplate(clientContext, docSetContentType);
                    clientContext.Load(docSetTemplate, d => d.WelcomePageFields);
                    clientContext.ExecuteQuery();


                    if (!docSetTemplate.WelcomePageFields.Contains(selectedField))
                    {
                        docSetTemplate.WelcomePageFields.Remove(new Guid(id));
                        docSetTemplate.Update(true);
                        clientContext.ExecuteQuery();
                    }
                }
            }

            return(RedirectToAction("Index", new { SPHostUrl = SharePointContext.GetSPHostUrl(HttpContext.Request).AbsoluteUri }));
        }
        public ActionResult DeleteAllowedContentTypeAction(string id)
        {
            var spContext = SharePointContextProvider.Current.GetSharePointContext(HttpContext);

            using (var clientContext = spContext.CreateUserClientContextForSPHost())
            {
                if (clientContext != null)
                {
                    Web web = clientContext.Web;

                    clientContext.Load(web, w => w.ContentTypes, w => w.Fields);
                    clientContext.ExecuteQuery();

                    var query = from ct in web.ContentTypes
                                where ct.Id.StringValue == id
                                select ct;
                    ContentType ctFound = query.First();

                    DocumentSetTemplate template = GetDocumentSetTemplate(clientContext);
                    if (template != null)
                    {
                        template.AllowedContentTypes.Remove(ctFound.Id);
                        template.Update(true);
                        clientContext.Load(template);
                        clientContext.ExecuteQuery();
                    }
                }
            }

            return(RedirectToAction("Index", new { SPHostUrl = SharePointContext.GetSPHostUrl(HttpContext.Request).AbsoluteUri }));
        }
        public static void Add(this DocumentSetTemplate documentSet, ListItem documentItem, string documentSetName, string folder, ContentTypeId docId, bool majorVersionOnly)
        {
            Trace.TraceInformation($"Adding: {documentItem.File.Name} to {documentSetName}, Document Folder: {folder}");
            var ctx    = documentSet.Context;
            Uri webUrl = new Uri(ctx.Url);

            DocumentStream ds = new DocumentStream((ClientContext)ctx, documentItem);
            MemoryStream   documentStream;

            if (majorVersionOnly)
            {
                documentStream = ds.MajorVersion;
            }
            else
            {
                documentStream = ds.LatestVersion;
            }

            //Use a place holder to workaround filesize limitation with the DefaultDocuments API.
            //Place holder is inserted via the API, and then overwritten later.
            if (documentStream != null)
            {
                string       placeholderPage = "Placeholder";
                MemoryStream repo            = new MemoryStream(Encoding.UTF8.GetBytes(placeholderPage));
                documentSet.DefaultDocuments.Add(folder + ds.FileName, docId, repo.ToArray());
                documentSet.Update(true);
                ctx.ExecuteQuery();
                repo.Close();
                Trace.TraceInformation("- Placeholder created");

                UploadFile((ClientContext)ctx, webUrl.AbsolutePath + "/_cts/" + documentSetName, documentStream, documentItem.File.Name);
            }
        }
        public static void Clear(this DocumentSetTemplate documentSet)
        {
            var ctx = documentSet.Context;

            string[] docs = new string[200];
            int      j    = 0;

            foreach (var document in documentSet.DefaultDocuments)
            {
                docs[j] = document.Name;
                j++;
            }

            Trace.TraceInformation($"Documents for deletion from Documentset");

            foreach (var document in docs)
            {
                if (string.IsNullOrEmpty(document))
                {
                    break;
                }
                documentSet.DefaultDocuments.Remove(document);
                documentSet.Update(true);
                ctx.ExecuteQuery();
            }
        }
        public void Run()
        {
            Trace.TraceInformation("Document Set Manager Initiated");

            List   documentLibrary = DocumentWeb.Lists.GetByTitle(Config.DocumentLibrary);
            Folder rootFolder      = documentLibrary.RootFolder;

            Ctx.Load(documentLibrary);
            Ctx.Load(rootFolder, i => i.Folders, i => i.Name);
            Ctx.ExecuteQuery();

            foreach (KeyValuePair <string, string> folderToDocumentMap in Config.FolderToDocumentSetMapping)
            {
                Trace.TraceInformation($"Mapping: {folderToDocumentMap.Key} to {folderToDocumentMap.Value}. Major Versions Only: {Config.MajorVersionsOnly}");

                ContentType         documentSetCt = DocumentWeb.ContentTypes.GetByName(folderToDocumentMap.Value);
                Folder              folder        = rootFolder.Folders.GetByName(folderToDocumentMap.Key);
                DocumentSetTemplate dst           = DocumentSetTemplate.GetDocumentSetTemplate(Ctx, documentSetCt);
                Ctx.Load(documentSetCt);
                Ctx.Load(folder);
                Ctx.Load(dst, i => i.DefaultDocuments);
                Ctx.ExecuteQuery();

                Trace.TraceInformation($"Deleting existing documents from the {folderToDocumentMap.Value}");
                dst.Clear();

                CamlQuery cq = CreateAllFilesQuery();
                cq.FolderServerRelativeUrl = folder.ServerRelativeUrl;
                ListItemCollection documents = documentLibrary.GetItems(cq);

                Ctx.Load(documents, icol => icol.Include(i => i.File));
                Ctx.Load(documents, icol => icol.Include(i => i.ContentType));
                Ctx.Load(documents, icol => icol.Include(i => i.ContentType.Id));
                Ctx.ExecuteQuery();

                Trace.TraceInformation($"Returned {documents.Count} files for processing");

                int count = 0;
                foreach (ListItem document in documents)
                {
                    count++;
                    ContentType docCt = DocumentWeb.ContentTypes.GetByName(document.ContentType.Name);
                    Ctx.ExecuteQuery();

                    string contentTypeFolder = ContentTypeFolder(document, rootFolder, folder);
                    if (Config.ExcludedFolders.Contains(contentTypeFolder.TrimEnd('/'), StringComparer.CurrentCultureIgnoreCase))
                    {
                        Trace.TraceInformation($"{document.File.Name} not proceesed due to ExcludedFolder rule: {contentTypeFolder.TrimEnd('/')}");
                        continue;
                    }

                    Trace.TraceInformation($"Adding document {count}: {document.File.Name}");
                    dst.Add(document, folderToDocumentMap.Value, contentTypeFolder, docCt.Id, Config.MajorVersionsOnly);
                    dst.Update(true);
                    Ctx.ExecuteQuery();
                }
            }
        }
        public ActionResult CreateDocumentSet([Bind(Include = "DocumentLibName,FieldNames,ContentTypeName")] AddDocumentSetViewModel model)
        {
            var spContext = SharePointContextProvider.Current.GetSharePointContext(HttpContext);

            using (var clientContext = spContext.CreateUserClientContextForSPHost())
            {
                List <Field> fields = new List <Field>();
                foreach (string fieldName in model.FieldNames)
                {
                    Field field = CreateDocumentSetField(clientContext, fieldName);
                    fields.Add(field);
                }

                ContentType         ctTestSow      = CreateDocumentSetContentType(clientContext, model.ContentTypeName, fields);
                DocumentSetTemplate docSetTemplate = DocumentSetTemplate.GetDocumentSetTemplate(clientContext, ctTestSow);
                clientContext.Load(docSetTemplate, d => d.SharedFields, d => d.WelcomePageFields);
                clientContext.ExecuteQuery();

                if (!docSetTemplate.SharedFields.Contains(fields[0]))
                {
                    docSetTemplate.SharedFields.Add(fields[0]);
                    docSetTemplate.Update(true);
                    clientContext.ExecuteQuery();
                }
                if (!docSetTemplate.WelcomePageFields.Contains(fields[0]))
                {
                    docSetTemplate.WelcomePageFields.Add(fields[0]);
                    docSetTemplate.Update(true);
                    clientContext.ExecuteQuery();
                }

                //
                List listTestDoc = GetTestDocDocumentLibrary(clientContext, ctTestSow, model.DocumentLibName);
                clientContext.Load(listTestDoc.RootFolder);
                clientContext.ExecuteQuery();

                ClientResult <string> result = DocumentSet.Create(clientContext, listTestDoc.RootFolder, DOCUMENTSETNAME, ctTestSow.Id);
                clientContext.ExecuteQuery();
            }
            return(RedirectToAction("Index", new { SPHostUrl = SharePointContext.GetSPHostUrl(HttpContext.Request).AbsoluteUri }));
        }
Beispiel #7
0
        /// <summary>
        /// Add fields, content types end event receivers to list
        /// </summary>
        /// <param name="web"></param>
        private void AddFieldsCtToLists(SPWeb web)
        {
            SPContentType invoice = web.Site.RootWeb.ContentTypes[new SPContentTypeId("0x0101006667822C2C904046B11878F79EFAF7A6")];

            invoice.JSLink = "~sitecollection/SiteAssets/Scripts/jquery-3.1.0.min.js | ~sitecollection/SiteAssets/Scripts/AddMonth.js";
            invoice.Update(true);

            SPContentType ltInvoice = web.Site.RootWeb.ContentTypes[new SPContentTypeId("0x0101006667822C2C904046B11878F79EFAF7A60035D6DBDCBCBB47D8B3D9F882A2652E25")];

            ltInvoice.JSLink = "~sitecollection/SiteAssets/Scripts/jquery-3.1.0.min.js | ~sitecollection/SiteAssets/Scripts/AddMonth.js";
            ltInvoice.Update(true);

            SPContentType orderContentType = web.Site.RootWeb.ContentTypes[new SPContentTypeId("0x0120D52000B7FF4D802E3E4631A4AEDDA271D87E78")];
            List <string> colnames         = new List <string>();

            colnames.Add("PredicaNotStandardFee");
            colnames.Add("FileLeafRef");
            colnames.Add("DocumentSetDescription");

            for (int i = 0; i < orderContentType.FieldLinks.Count; i++)
            {
                if (colnames.Contains(orderContentType.FieldLinks[i].Name))
                {
                    continue;
                }

                colnames.Add(orderContentType.FieldLinks[i].Name);
            }

            orderContentType.FieldLinks.Reorder(colnames.ToArray());
            orderContentType.FieldLinks[SPBuiltInFieldId.FileLeafRef].DisplayName = "$Resources:PredicaOrders,PredicaColOrderName";
            orderContentType.FieldLinks[Guid.Parse("{1fc87c65-f371-46d3-bb42-6174eeaeea6e}")].ReadOnly = true;

            DocumentSetTemplate docsetTemplate = DocumentSetTemplate.GetDocumentSetTemplate(orderContentType);

            // Setting the content types
            docsetTemplate.AllowedContentTypes.Remove(web.ContentTypes["Document"].Id);
            docsetTemplate.AllowedContentTypes.Add(invoice.Id);
            docsetTemplate.AllowedContentTypes.Add(ltInvoice.Id);
            docsetTemplate.Update(true);

            orderContentType.Update(true);

            string ordersUrl  = SPUrlUtility.CombineUrl(web.ServerRelativeUrl.TrimEnd('/'), Orders);
            SPList ordersList = web.GetList(ordersUrl);

            ordersList.ContentTypesEnabled = true;
            ordersList.ContentTypes.Add(orderContentType);
            ordersList.ContentTypes.Add(invoice);
            ordersList.ContentTypes.Add(ltInvoice);
            ordersList.Update();
        }