How can I programmatically get Approval Status in SharePoint?

13.1k views Asked by At

I wanted to programmatically get SharePoint Page Approval Status, I tried as below

public string GetApprovalStatus(string url, string listName, string fileref) { string result = string.Empty; string caml = @" " + fileref + @" ";

        using (SPSite site = new SPSite(url))
        {
            using (SPWeb web = site.OpenWeb())
            {
                SPList list = web.Lists[listName];
                SPQuery query = new SPQuery();
                query.Query = caml;

                SPListItemCollection myItems = list.GetItems(query);

                if (myItems != null && myItems.Count > 0)
                {
                    DataTable dt = myItems.GetDataTable();
                    result = dt.Rows[0]["_ModerationStatus"].ToString();
                    dt.Dispose();
                }
            }
        }
        return result;
    }

And I return a number, how can I get the Approval Status in text?

Appreciate any help, thank you in advanced

3

There are 3 answers

0
Kate On

Here is the full code that gets and sets (optional) approval status (Possible values for this.oListItem.get_item('_ModerationStatus'): 0 - "Approved", 1 - "Denied", 2- "Pending"):

<script type="text/javascript" src="/jquery-1.10.2.min.js"></script>
<script src="/jquery.SPServices-2013.02a.js" type="text/javascript"></script>

<script type="text/javascript">


$(document).ready(function () { ExecuteOrDelayUntilScriptLoaded(loadConstants, "sp.js"); });    


function loadConstants() {

    var userid= _spPageContextInfo.userId;
    var requestUri = _spPageContextInfo.webAbsoluteUrl + "/_api/web/getuserbyid(" + userid + ")";
    var requestHeaders = { "accept" : "application/json;odata=verbose" };
    $.ajax({
      url : requestUri,
      contentType : "application/json;odata=verbose",
      headers : requestHeaders,
      success : onSuccess,
      error : onError
    });

    function onSuccess(data, request){
        var loginName = data.d.Title;

        //get current (selected) list item id
        var docurl = document.URL;
        var beginindex = docurl.indexOf('?ID=') + 4;
        var endindex = docurl.indexOf('&Source=');
        var itemid = docurl.substring(beginindex, endindex);

        var ctx = new SP.ClientContext("your site url");
        var oList = ctx.get_web().get_lists().getByTitle('your list name');
        this.oListItem = oList.getItemById(itemid);         

        var appStatus = "";
        ctx.load(this.oListItem);

        ctx.executeQueryAsync(Function.createDelegate(this, function () {  
                                                    //get approval status
                                                    appStatus = this.oListItem.get_item('_ModerationStatus');                                                       

                                                    //set approval status to Approved (0)
                                                    this.oListItem.set_item('_ModerationStatus', 0);
                                                    this.oListItem.update();            

            ctx.executeQueryAsync(
                Function.createDelegate(this, this.onQuerySucceeded), 
                Function.createDelegate(this, this.onQueryFailed)
            );

        }),  function (sender, args) { alert('Error occured' + args.get_message());}); 

    }
    function onError(error) {
        alert("error");
    }       
}

</script>
0
Rodrigo Romano On

You can use the SPModerationStatusType enum SPModerationStatusType Enum - MSDN to get the text values that you want.

More info: http://spuser.blogspot.com.br/2011/03/how-to-programmatically-get-content.html

1
Per Jakobsen On

The following code is from the MSDN article for SPModerationInformation.Status:

using (SPSite oSiteCollection = new SPSite("http://localhost"))
{
  SPWebCollection collWebsites = oSiteCollection.AllWebs;

  foreach (SPWeb oWebsite in collWebsites)
  {
    SPListCollection collLists = oWebsite.Lists;

    foreach (SPList oList in collLists)
    {
        if (oList.BaseType == SPBaseType.DocumentLibrary)
        {
            SPDocumentLibrary oDocumentLibrary = (SPDocumentLibrary)oList;

            if (!oDocumentLibrary.IsCatalog && oDocumentLibrary.EnableModeration ==
                true)
            {
                SPQuery oQuery = new SPQuery();

                oQuery.ViewAttributes =
                    "ModerationType='Moderator'";

                SPListItemCollection collListItems =
                    oDocumentLibrary.GetItems(oQuery);

                foreach (SPListItem oListItem in collListItems)
                {
                    if (oListItem.ModerationInformation.Status ==
                        SPModerationStatusType.Pending)
                    {
                        Console.WriteLine(oWebsite.Url + "/" +
                            oListItem.File.Url);
                        oListItem.ModerationInformation.Comment =
                            "Automatic Approval of items";
                        oListItem.ModerationInformation.Status =
                            SPModerationStatusType.Approved;
                        oListItem.Update();
                    }
                }
            }
        }
    }
    oWebsite.Dispose();
  }
}