AWG Blogs

Thursday, August 23, 2012

Add Change Order Action Menu Item

By default only the Links list type has this menu item in SharePoint 2007. It can be added to any other list though through the web services API, specifically updating the "Ordered" field property to True. See http://msdn.microsoft.com/en-us/library/lists.lists.updatelist(v=office.12)

Once that's done, just edit the View properties (including the anonymous views from any web parts) and set "Allow users to order items in this view." Doing so will change the order shown to that of the built-in Ordered lists property, which is what is updated via the (now shown) Change Order action menu for the view.

Here is an adapted sample console app:

class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Property Editor - v.0.1");
            Console.WriteLine("Enter the URL of the Lists web service");
            string url = Console.ReadLine();
            Console.WriteLine("Enter the Display name of your list, e.g. My List");
            string listname = Console.ReadLine();
            Console.WriteLine("Enter the list property (e.g. Ordered)");
            string property = Console.ReadLine();
            Console.WriteLine("Enter the property value (e.g. TRUE)");
            string propertyValue = Console.ReadLine();

            Web_Reference_Folder.Lists listService = new Web_Reference_Folder.Lists();
            listService.Credentials= System.Net.CredentialCache.DefaultCredentials;
            listService.Url = url;

            XmlDocument xmlDoc = new System.Xml.XmlDocument();

            XmlNode ndProperties = xmlDoc.CreateNode(XmlNodeType.Element, "List", 
                "");

            XmlAttribute ndOtherAttrib =
                (XmlAttribute)xmlDoc.CreateNode(XmlNodeType.Attribute,
                property, "");
            ndOtherAttrib.Value = propertyValue;
            ndProperties.Attributes.Append(ndOtherAttrib);

            try
            {
                XmlNode ndReturn =
                    listService.UpdateList(listname, 
                    ndProperties, null, null, null, 
                    null);

                Console.WriteLine(ndReturn.OuterXml);
            }

            catch (Exception ex)
            {
                Console.WriteLine("Message:\n" + ex.Message + "\nStackTrace:\n" + 
                    ex.StackTrace);
            }
            Console.ReadLine();
        }
    }