private void AddGetDocumentSetsMethod(ServiceObject so)
        {
            Method mGetDocumentSets = Helper.CreateMethod(Constants.Methods.GetDocumentSets, "Retrieve document Sets", MethodType.List);

            if (base.IsDynamicSiteURL)
            {
                Helper.AddSiteURLParameter(mGetDocumentSets);
            }

            if (base.IsListTitleParametrized)
            {
                Helper.AddStringParameter(mGetDocumentSets, Constants.InternalProperties.ListTitle);
            }

            foreach (Property prop in so.Properties)
            {
                if (prop.IsDocSetName())
                {
                    mGetDocumentSets.InputProperties.Add(prop);
                    mGetDocumentSets.ReturnProperties.Add(prop);
                }
                if (!prop.IsInternal() &&
                    !prop.IsFile())
                {
                    mGetDocumentSets.InputProperties.Add(prop);
                    mGetDocumentSets.ReturnProperties.Add(prop);
                }
                if (so.IsSPFolderEnabled() && (prop.IsFolderName() || prop.IsRecursivelyName()))
                {
                    mGetDocumentSets.InputProperties.Add(prop);
                }
                if (prop.IsLinkToItem())
                {
                    mGetDocumentSets.ReturnProperties.Add(prop);
                }
            }

            so.Methods.Add(mGetDocumentSets);
        }
Example #2
0
        private void AddCreateItemMethod(ServiceObject so)
        {
            Method mCreateItem = Helper.CreateMethod(Constants.Methods.CreateItem, "Create a list item", MethodType.Create);

            if (base.IsDynamicSiteURL)
            {
                Helper.AddSiteURLParameter(mCreateItem);
            }

            foreach (Property prop in so.Properties)
            {
                if (string.Compare(prop.Name, Constants.SOProperties.ID, true) == 0 && !prop.IsInternal())
                {
                    mCreateItem.ReturnProperties.Add(prop);
                }

                if (!prop.IsReadOnly() && !prop.IsInternal())
                {
                    mCreateItem.InputProperties.Add(prop);
                    if (prop.IsRequired())
                    {
                        mCreateItem.Validation.RequiredProperties.Add(prop);
                    }
                }
                if (so.IsSPFolderEnabled() == true &&
                    prop.IsFolderName())
                {
                    mCreateItem.InputProperties.Add(prop);
                }

                if (prop.IsLinkToItem())
                {
                    mCreateItem.ReturnProperties.Add(prop);
                }
            }

            so.Methods.Add(mCreateItem);
        }
        private void AddCreateDocumentSetByNameMethod(ServiceObject so)
        {
            Method mCreateDocSet = Helper.CreateMethod(Constants.Methods.CreateDocumentSet, "Create a Document set by name", MethodType.Create);

            if (base.IsDynamicSiteURL)
            {
                Helper.AddSiteURLParameter(mCreateDocSet);
            }

            if (base.IsListTitleParametrized)
            {
                Helper.AddStringParameter(mCreateDocSet, Constants.InternalProperties.ListTitle);
            }

            foreach (Property prop in so.Properties)
            {
                if (!prop.IsInternal() && !prop.IsFile() && !prop.IsReadOnly())
                {
                    mCreateDocSet.InputProperties.Add(prop);
                }

                if (prop.IsDocSetName())
                {
                    mCreateDocSet.InputProperties.Add(prop);
                    mCreateDocSet.Validation.RequiredProperties.Add(prop);
                }
                if (so.IsSPFolderEnabled() && (prop.IsFolderName()))
                {
                    mCreateDocSet.InputProperties.Add(prop);
                }
                if (prop.IsLinkToItem())
                {
                    mCreateDocSet.ReturnProperties.Add(prop);
                }
            }

            so.Methods.Add(mCreateDocSet);
        }
Example #4
0
        private void ExecuteCreateFolder()
        {
            ServiceObject serviceObject = ServiceBroker.Service.ServiceObjects[0];

            serviceObject.Properties.InitResultTable();
            DataTable results = base.ServiceBroker.ServicePackage.ResultTable;

            string folderName = base.GetStringProperty(Constants.SOProperties.FolderName, true);
            string listName   = serviceObject.GetListTitle();
            string siteURL    = GetSiteURL();

            DataRow dataRow = results.NewRow();

            using (ClientContext context = InitializeContext(siteURL))
            {
                Web  spWeb = context.Web;
                List list  = spWeb.Lists.GetByTitle(listName);
                context.Load(list);
                context.Load(list, l => l.DefaultDisplayFormUrl);
                context.ExecuteQuery();

                if (!serviceObject.IsSPFolderEnabled())
                {
                    throw new ApplicationException(string.Format(Constants.ErrorMessages.FolderCreationIsNotSupported, listName));
                }

                Folder folder = CreateFolderInternal(spWeb, list, list.RootFolder, string.Empty, folderName);

                context.Load(folder.ListItemAllFields);
                context.ExecuteQuery();

                string strurl = BuildListItemLink(context.Url, list.DefaultDisplayFormUrl, folder.ListItemAllFields.Id);
                dataRow[Constants.SOProperties.LinkToItem] = strurl;

                results.Rows.Add(dataRow);
            }
        }
        private void AddDeleteDocumentSetMethod(ServiceObject so)
        {
            Method mDeleteDocSet = Helper.CreateMethod(Constants.Methods.DeleteDocumentSetByName, "Delete a Document set", MethodType.Delete);

            if (base.IsDynamicSiteURL)
            {
                Helper.AddSiteURLParameter(mDeleteDocSet);
            }

            foreach (Property prop in so.Properties)
            {
                if (prop.IsDocSetName())
                {
                    mDeleteDocSet.InputProperties.Add(prop);
                    mDeleteDocSet.Validation.RequiredProperties.Add(prop);
                }
                if (so.IsSPFolderEnabled() && (prop.IsFolderName()))
                {
                    mDeleteDocSet.InputProperties.Add(prop);
                }
            }

            so.Methods.Add(mDeleteDocSet);
        }
        private void AddGetItemByNameMethod(ServiceObject so)
        {
            Method mGetItemByName = Helper.CreateMethod(Constants.Methods.GetItemByName, "Retrieve metadata for one item by it's document name", MethodType.List);

            if (base.IsDynamicSiteURL)
            {
                Helper.AddSiteURLParameter(mGetItemByName);
            }

            if (base.IsListTitleParametrized)
            {
                Helper.AddStringParameter(mGetItemByName, Constants.InternalProperties.ListTitle);
            }

            foreach (Property prop in so.Properties)
            {
                if (string.Compare(prop.Name, Constants.SOProperties.FileName, true) == 0)
                {
                    mGetItemByName.InputProperties.Add(prop);
                    mGetItemByName.Validation.RequiredProperties.Add(prop);
                }

                if (so.IsSPFolderEnabled() == true && (
                        prop.IsFolderName() || prop.IsRecursivelyName()))
                {
                    mGetItemByName.InputProperties.Add(prop);
                }

                if ((!prop.IsInternal() && !prop.IsFile()) || prop.IsLinkToItem() || (so.IsDocumentLibrary() && prop.IsFileName()))
                {
                    mGetItemByName.ReturnProperties.Add(prop);
                }
            }

            so.Methods.Add(mGetItemByName);
        }
        private void ExecuteCreateDocSetByName()
        {
            ServiceObject serviceObject = ServiceBroker.Service.ServiceObjects[0];

            serviceObject.Properties.InitResultTable();
            DataTable results = base.ServiceBroker.ServicePackage.ResultTable;

            string listTitle  = serviceObject.GetListTitle();
            string DocSetName = base.GetStringProperty(Constants.SOProperties.DocSetName, true);
            string FolderName = string.Empty;

            if (serviceObject.IsSPFolderEnabled())
            {
                FolderName = base.GetStringProperty(Constants.SOProperties.FolderName, false);
            }

            DataRow dataRow = results.NewRow();

            using (ClientContext context = InitializeContext(GetSiteURL()))
            {
                Web    spWeb = context.Web;
                List   list  = spWeb.Lists.GetByTitle(listTitle);
                Folder parentFolder;
                context.Load(list, l => l.Fields, l => l.RootFolder);
                context.Load(list, d => d.DefaultDisplayFormUrl, d => d.ItemCount);
                context.Load(list.ContentTypes);
                context.ExecuteQuery();

                if (string.IsNullOrEmpty(FolderName))
                {
                    parentFolder = list.RootFolder;
                }
                else
                {
                    parentFolder = spWeb.GetFolderByServerRelativeUrl(string.Concat(list.RootFolder.Name, '/', FolderName));
                    context.Load(parentFolder);
                    context.ExecuteQuery();
                }

                Microsoft.SharePoint.Client.ClientResult <string> FileLink = new ClientResult <string>();
                foreach (ContentType ct in list.ContentTypes)
                {
                    if (ct.Id.StringValue.StartsWith(Constants.SharePointProperties.DocSetContentType))
                    {
                        FileLink = DocumentSet.Create(context, parentFolder, DocSetName, ct.Id);
                        break;
                    }
                }
                context.ExecuteQuery();

                Folder documentSet = null;
                documentSet = context.Web.GetFolderByServerRelativeUrl(FileLink.Value);
                context.Load(documentSet, c => c.ListItemAllFields);
                context.ExecuteQuery();

                ListItem listItem = documentSet.ListItemAllFields;

                if (listItem == null)
                {
                    throw new Exception(Constants.ErrorMessages.RequiredDocNotFound);
                }

                foreach (Property prop in serviceObject.Properties)
                {
                    if (prop.Value != null && !prop.IsDocSetName() && !prop.IsFolderName())
                    {
                        Helpers.SPHelper.AssignFieldValue(listItem, prop);
                    }
                }
                listItem.Update();
                context.ExecuteQuery();

                if (FileLink != null)
                {
                    dataRow[Constants.SOProperties.LinkToItem] = FileLink.Value;
                    results.Rows.Add(dataRow);
                }
            }
        }
        private void ExecuteRenameDocSet()
        {
            ServiceObject serviceObject = ServiceBroker.Service.ServiceObjects[0];

            serviceObject.Properties.InitResultTable();
            DataTable results       = base.ServiceBroker.ServicePackage.ResultTable;
            DataRow   dataRow       = results.NewRow();
            string    listTitle     = serviceObject.GetListTitle();
            string    siteURL       = GetSiteURL();
            string    docSetName    = base.GetStringProperty(Constants.SOProperties.DocSetName, true);
            string    newDocSetName = base.GetStringProperty(Constants.SOProperties.DocSetNewName, true);
            string    FolderName    = string.Empty;

            if (serviceObject.IsSPFolderEnabled())
            {
                FolderName = base.GetStringProperty(Constants.SOProperties.FolderName, false);
            }


            using (ClientContext context = InitializeContext(siteURL))
            {
                Web  spWeb = context.Web;
                List list  = spWeb.Lists.GetByTitle(listTitle);
                context.Load(list, l => l.Fields, l => l.RootFolder);
                context.Load(list, d => d.DefaultDisplayFormUrl, d => d.ItemCount);
                context.ExecuteQuery();

                if (list != null && list.ItemCount > 0)
                {
                    Folder documentSet = null;
                    if (string.IsNullOrEmpty(FolderName))
                    {
                        documentSet = context.Web.GetFolderByServerRelativeUrl(string.Concat(list.RootFolder.Name, '/', docSetName));
                    }
                    else
                    {
                        documentSet = context.Web.GetFolderByServerRelativeUrl(string.Concat(list.RootFolder.Name, '/', FolderName, '/', docSetName));
                    }

                    context.Load(documentSet, c => c.ListItemAllFields);
                    context.ExecuteQuery();

                    ListItem listItem = documentSet.ListItemAllFields;

                    if (listItem == null)
                    {
                        throw new Exception(Constants.ErrorMessages.RequiredDocNotFound);
                    }

                    foreach (Property prop in serviceObject.Properties)
                    {
                        if (prop.Value != null && prop.IsNewDocumentSetName())
                        {
                            listItem[Constants.SharePointProperties.FileLeafRef] = prop.Value;
                        }
                    }
                    listItem.Update();
                    context.ExecuteQuery();

                    string strurl = BuildListItemLink(context.Url, list.DefaultDisplayFormUrl, listItem.Id);
                    dataRow[Constants.SOProperties.LinkToItem] = strurl;
                    results.Rows.Add(dataRow);
                }
            }
        }
        private void ExecuteGetDocSetByName()
        {
            ServiceObject serviceObject = ServiceBroker.Service.ServiceObjects[0];

            serviceObject.Properties.InitResultTable();
            DataTable results = base.ServiceBroker.ServicePackage.ResultTable;

            DataRow dataRow    = results.NewRow();
            string  listTitle  = serviceObject.GetListTitle();
            string  DocSetName = base.GetStringProperty(Constants.SOProperties.DocSetName, true);
            string  FolderName = string.Empty;

            if (serviceObject.IsSPFolderEnabled())
            {
                FolderName = base.GetStringProperty(Constants.SOProperties.FolderName, false);
            }


            using (ClientContext context = InitializeContext(GetSiteURL()))
            {
                Web spWeb = context.Web;

                List list = spWeb.Lists.GetByTitle(listTitle);
                context.Load(list);
                context.Load(list, l => l.Fields, l => l.DefaultDisplayFormUrl);
                context.Load(list.RootFolder);
                context.Load(list.RootFolder.Folders);
                context.ExecuteQuery();

                Folder documentSet = null;
                if (string.IsNullOrEmpty(FolderName))
                {
                    documentSet = context.Web.GetFolderByServerRelativeUrl(string.Concat(list.RootFolder.Name, '/', DocSetName));
                }
                else
                {
                    documentSet = context.Web.GetFolderByServerRelativeUrl(string.Concat(list.RootFolder.Name, '/', FolderName, '/', DocSetName));
                }

                context.Load(documentSet, c => c.ListItemAllFields);
                context.ExecuteQuery();

                ListItem listItem = documentSet.ListItemAllFields;


                foreach (Property prop in serviceObject.Properties)
                {
                    if (listItem.FieldValues.ContainsKey(prop.Name) && !prop.IsFile())
                    {
                        Helpers.SPHelper.AddFieldValue(dataRow, prop, listItem);
                    }

                    if (prop.IsLinkToItem())
                    {
                        string strurl = BuildListItemLink(context.Url, list.DefaultDisplayFormUrl, listItem.Id);
                        dataRow[prop.Name] = strurl;
                    }
                }
                results.Rows.Add(dataRow);
            }
        }
Example #10
0
        //SPList is configured just to create service object of SP Lists
        public override List <ServiceObject> DescribeServiceObjects()
        {
            List <ServiceObject> SOs = new List <ServiceObject>();

            using (ClientContext context = InitializeContext(base.SiteURL))
            {
                Web            spWeb = context.Web;
                ListCollection lists = spWeb.Lists;
                context.Load(lists);

                context.ExecuteQuery();
                foreach (List list in lists)
                {
                    if (list.Hidden == false || (list.Hidden && base.IncludeHiddenLists))
                    {
                        ServiceObject so = Helper.CreateServiceObject(list.Title, list.Title, list.Description);

                        so.MetaData.DisplayName = list.Title;
                        so.MetaData.Description = list.Description;
                        if (list.BaseType == BaseType.DocumentLibrary)
                        {
                            so.MetaData.ServiceProperties.Add(Constants.InternalProperties.ServiceFolder, "Document Libraries");
                        }
                        else
                        {
                            so.MetaData.ServiceProperties.Add(Constants.InternalProperties.ServiceFolder, "List Items");
                        }

                        so.MetaData.ServiceProperties.Add(Constants.InternalProperties.ListId, list.Id);
                        so.MetaData.ServiceProperties.Add(Constants.InternalProperties.ListTitle, list.Title);
                        so.MetaData.ServiceProperties.Add(Constants.InternalProperties.IsFolderEnabled, list.EnableFolderCreation);
                        so.MetaData.ServiceProperties.Add(Constants.InternalProperties.ListBaseType, list.BaseType);


                        FieldCollection fields = list.Fields;
                        context.Load(fields);
                        context.ExecuteQuery();
                        foreach (Field f in fields)
                        {
                            if (f.Hidden == false || (f.Hidden == true && base.IncludeHiddenFields))
                            {
                                // We'll use InternalName as the system name and Title as the display name.
                                // See http://blogs.perficient.com/microsoft/2009/04/static-name-vs-internal-name-vs-display-name-in-sharepoint/ for some background

                                // Some fields have no title, so then we just take the internalname.
                                string fieldTitle = f.Title;
                                if (string.IsNullOrEmpty(fieldTitle))
                                {
                                    fieldTitle = f.InternalName;
                                }

                                // Because the field title can be duplicate, we see if it already exists.
                                // If it does, we change the displayname of both existing and newly found property to something unique.
                                // This behaviour can also be forced by the Show Internal Names option.

                                Property existingProp = GetExistingProperty(so, fieldTitle);
                                string   displayName  = fieldTitle;
                                if (ShowInternalNames)
                                {
                                    displayName = string.Format("{0} ({1})", fieldTitle, f.InternalName);
                                }

                                if (existingProp != null)
                                {
                                    existingProp.MetaData.DisplayName = string.Format("{0} ({1})",
                                                                                      existingProp.MetaData.GetServiceElement <string>(Constants.InternalProperties.Title),
                                                                                      existingProp.MetaData.GetServiceElement <string>(Constants.InternalProperties.InternalName));
                                    displayName = string.Format("{0} ({1})", fieldTitle, f.InternalName);
                                }

                                AddFieldProperty(so, f);
                                FieldType _fieldtype; //We will find the Fieldtype from the MapHelper class (To get the correctoutput for field type Calculated)

                                SoType   soType = MapHelper.SPTypeField(f, out _fieldtype);
                                Property prop   = Helper.CreateSpecificProperty(f.InternalName, displayName, f.Description, soType);

                                prop.MetaData.ServiceProperties.Add(Constants.InternalProperties.Hidden, f.Hidden);
                                prop.MetaData.ServiceProperties.Add(Constants.InternalProperties.Title, fieldTitle);
                                prop.MetaData.ServiceProperties.Add(Constants.InternalProperties.InternalName, f.InternalName);
                                prop.MetaData.ServiceProperties.Add(Constants.InternalProperties.Id, f.Id);
                                prop.MetaData.ServiceProperties.Add(Constants.InternalProperties.ReadOnly, AssignReadonly(f));
                                prop.MetaData.ServiceProperties.Add(Constants.InternalProperties.Required, f.Required);
                                prop.MetaData.ServiceProperties.Add(Constants.InternalProperties.FieldTypeKind, _fieldtype);
                                prop.MetaData.ServiceProperties.Add(Constants.InternalProperties.SPFieldType, f.TypeAsString);
                                prop.MetaData.ServiceProperties.Add(Constants.InternalProperties.Internal, false);
                                so.Properties.Add(prop);
                            }
                        }

                        so.Properties.Add(NewProperty(Constants.SOProperties.DestinationURL, Constants.SOProperties.DestinationURL_DisplayName, true, SoType.Text, "The destination URL"));
                        so.Properties.Add(NewProperty(Constants.SOProperties.DestinationListTitle, Constants.SOProperties.DestinationListTitle_DisplayName, true, SoType.Text, "The system name of the list"));
                        so.Properties.Add(NewProperty(Constants.SOProperties.DestinationFolder, Constants.SOProperties.DestinationFolder_DisplayName, true, SoType.Text, "The foldername to apply this operation to"));
                        so.Properties.Add(NewProperty(Constants.SOProperties.FolderName, Constants.SOProperties.FolderName, true, SoType.Text, "The foldername to apply this operation to"));
                        so.Properties.Add(NewProperty(Constants.SOProperties.Recursively, Constants.SOProperties.Recursively, true, SoType.YesNo, "Recursively do this operation"));


                        AddGetByIdMethod(so);
                        AddCreateMethod(so);
                        AddDeleteMethod(so);
                        AddGetListMethod(so);
                        AddUpdateMethod(so);
                        if (so.IsSPFolderEnabled())
                        {
                            AddCreateFolderMethod(so);
                            AddDeleteFolderMethod(so);
                        }

                        //Non library methods
                        if (!so.IsDocumentLibrary())
                        {
                            AddMoveListItemMethod(so);
                            AddCopyListItemMethod(so);
                        }

                        SOs.Add(so);
                    }
                }

                return(SOs);
            }
        }