Forum Discussion

Tamras1972's avatar
Tamras1972
Iron Contributor
Feb 06, 2023

Change Promoted State value

In Site Pages library, I need to change News (Promoted State =2) to Page (Promoted State = 0) -- however, the Promoted State column is read only.  Is there another way to change the page from News to regular Page without using Power Automate or PowerShell?

  • The Promoted State column in the Site Pages library is read-only and it is designed to be set by the system. It is not recommended to manually change the value of the Promoted State column, as this could have unintended consequences.

    There is no built-in way to change the Promoted State value without using Power Automate or PowerShell. You could use Power Automate to automate the change of the Promoted State value, or use PowerShell to update the value programmatically.

    If you do not want to use Power Automate or PowerShell, you could consider creating a new page and copying the content from the News page to the new page. You can then delete the News page if needed.
  • Hi, Tamras1972 !

     

    Just to counterpoint Adnan_Amin's words, which I'd kindly suggest are a little strong. I say this because you can change this value easily.

     

    How Do You Change The Promoted State?

    There are a few ways, I will cover the two most obvious ones.

    On Any Given Page

    The 'Promoted State' is literally available on every site page to change a Site Page to a News page and back again via the fly-outs in the top right.

     

    You can also display this column in the Site Page library very easily, see Greg's handy explanation here.

     

    Via The SharePoint API

    Equally, it can be amended by calls to the API, my recommendation is to use the /ValidateUpdateListItem endpoint when sending.

     

    MethodPOST
    URISITE/lists/YOUR_PREFERENCE_ON_GETTING_LIST/items(ITEM_NUMBER)/ValidateUpdateListItem
    BodySee below table, the SharePoint site doesn't allow code in tables like the Power Platform one. Weird!

     

     

    {
      "formValues": [
          {
            "FieldName": "PromotedState", 
            "FieldValue": "1" 
          }
        ], 
      "bNewDocumentUpdate": true 
    }

     

     

    You may need to ensure that you have specific headers here, I'm not going in to ALL the detail. 🙂

     

    Further Information

    Here is a table of the Promoted States:

    Promoted StatePage TypePublished Status
    0Site PagePublished/Unpublished
    1News Page/LinkUnpublished
    2News Page/LinkPublished

     

    Hope that this helps anyone else that's ended up here. 🙂

    • RobElliott's avatar
      RobElliott
      Silver Contributor

      influentialeliot you don't even need to use the api to change the promoted state from 2 to 0. Just format the Promoted State column with the following JSON:

       

      {
        "$schema": "https://developer.microsoft.com/json-schemas/sp/v2/column-formatting.schema.json",
        "elmType": "div",
        "style": {
          "flex-wrap": "wrap",
          "display": "flex",
          "flex-direction": "row"
        },
        "children": [
          {
            "elmType": "div",
            "txtContent": "=if(@currentField == 0 ,'0 : Page' , if(@currentField == 1, '1 : News (Unpublished)' , if(@currentField == 2 , '2 : News','') ) )",
            "style": {
              "box-sizing": "border-box",
              "padding": "4px 8px 5px 8px",
              "display": "flex",
              "border-radius": "16px",
              "height": "27px",
              "align-items": "center",
              "white-space": "nowrap",
              "overflow": "hidden",
              "margin": "4px 4px 4px 4px",
              "border": "1px solid"
            },
            "attributes": {
              "class": "=if(@currentField == 0 ,'ms-fontColor-themePrimary ms-borderColor-themePrimary ms-bgColor-white' , if(@currentField == 1, 'ms-fontColor-themePrimary ms-borderColor-themePrimary ms-bgColor-themeLighter' , if(@currentField == 2 , 'ms-fontColor-white ms-borderColor-themePrimary ms-bgColor-themePrimary','') ) )"
            }
          },
          {
            "elmType": "div",
            "style": {
              "font-size": "18px",
              "cursor": "pointer",
              "padding": "10px",
              "border-radius": "50%",
              "display": "=if(@currentField == 0 , 'none' ,'')"
            },
            "attributes": {
              "iconName": "MoreVertical",
              "class": "ms-fontColor-themePrimary ms-bgColor-themeLighter--hover"
            },
            "customCardProps": {
              "openOnEvent": "click",
              "directionalHint": "rightCenter",
              "isBeakVisible": true,
              "formatter": {
                "elmType": "div",
                "txtContent": "Demote (Change to 0:Page)",
                "style": {
                  "padding": "10px 20px 10px 20px",
                  "cursor": "pointer"
                },
                "attributes": {
                  "class": "ms-bgColor-themeLighter--hover"
                },
                "customRowAction": {
                  "action": "setValue",
                  "actionInput": {
                    "PromotedState": "0"
                  }
                }
              }
            }
          }
        ]
      }

       

       

      Rob
      Los Gallardos
      Intranet, SharePoint and Power Platform Manager (and classic 1967 Morris Traveller driver)

       

       

      • Tobias_Wettemark's avatar
        Tobias_Wettemark
        Copper Contributor

        RobElliott  This was one of the smartest things i've seen. I've always built a PA flow with a button in a formatted column. This is so much better. Thanks for sharing. 

    • CLHess's avatar
      CLHess
      Copper Contributor
      Thank you, this fixed my issue and I've used it several time.
  • The Promoted State column in the Site Pages library is read-only and it is designed to be set by the system. It is not recommended to manually change the value of the Promoted State column, as this could have unintended consequences.

    There is no built-in way to change the Promoted State value without using Power Automate or PowerShell. You could use Power Automate to automate the change of the Promoted State value, or use PowerShell to update the value programmatically.

    If you do not want to use Power Automate or PowerShell, you could consider creating a new page and copying the content from the News page to the new page. You can then delete the News page if needed.
    • Adnan_Amin's avatar
      Adnan_Amin
      MVP
      Below is PowerShell script which require PnP PowerShell module to change the Promoted State of a page in the Site Pages library:

      $pageName = "YourPageName.aspx"
      $file = Get-PnPFile -Url "/SitePages/$pageName"
      $pageItem = Get-PnPListItem -List "Site Pages" -Id $file.ListItemAllFields.Id
      $pageItem["PromotedState"] = 0
      $pageItem.Update()
      Invoke-PnPQuery
      • CLHess's avatar
        CLHess
        Copper Contributor
        Line # 3 gives me an error that I don't know how to resolve (I am new to PNP). I get this error
        Get-PnPListItem : Cannot bind parameter 'Id' to the target. Exception setting "Id": "Cannot convert null to type
        "System.Int32"."
        At line:1 char:49
        + ... eItem=Get-pnpListItem -List "Site Pags" -ID $file.ListItemAllField.id
        + ~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo : WriteError: (:) [Get-PnPListItem], ParameterBindingException
        + FullyQualifiedErrorId : ParameterBindingFailed,PnP.PowerShell.Commands.Lists.GetListItem
    • Tamras1972's avatar
      Tamras1972
      Iron Contributor
      Thanks for confirming it. I was hoping there are new developments and/and or easier way to do this since most of the answers I found online where few years old.
    • Sturberg's avatar
      Sturberg
      Copper Contributor

      Adnan_Amin 

      My answer comes late, but I was able to edit this column with the quick edit function. 

Resources