<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>ajjose</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/ajjose/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/ajjose/feed.xml</link>
    <description>Project Server Customization Blog (Tips &amp;amp; Tricks)</description>
    <lastBuildDate>Wed, 17 Apr 2019 03:11:54 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Project Server 2013: Adding Project Site Button to Project Center - Customize Ribbon</title>
      <link>https://docs.microsoft.com/archive/blogs/ajjose/project-server-2013-adding-project-site-button-to-project-center-customize-ribbon</link>
      <pubDate>Thu, 28 May 2015 06:46:58 GMT</pubDate>
      <dc:creator><![CDATA[Ajith Jose - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ajjose/2015/05/28/project-server-2013-adding-project-site-button-to-project-center-customize-ribbon/</guid>
      <description><![CDATA[Description:
OOB we do not have "Project Site" Icon in Project Center compared to Project Server...]]></description>
      <content:encoded><![CDATA[<p>Description:</p>
<p>OOB we do not have "Project Site" Icon in Project Center compared to Project Server 2010</p>
<p>You can add a Button and get the same functionality by following the below steps</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/59/60/8078.ProjectSite.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-59-60/8078.ProjectSite.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/59/60/8078.ProjectSite.jpg" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-59-60/8078.ProjectSite.jpg" alt="" border="0" /></a></p>
<p>&nbsp;</p>
<p>Steps :</p>
<p>&nbsp;</p>
<p>1.&nbsp;Download the solution file from blog <a href="https://blogs.msdn.com/b/project_programmability/archive/2010/12/23/how-to-modify-the-ribbon-in-pwa.aspx">https://blogs.msdn.com/b/project_programmability/archive/2010/12/23/how-to-modify-the-ribbon-in-pwa.aspx</a><br />2.&nbsp;Replace the second custom action with the below content :<br />&lt;CustomAction Id="ProjectCenterPage.ProjectSiteIcon" Location="CommandUI.Ribbon"&gt;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; &lt;CommandUIExtension&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;CommandUIDefinitions&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;CommandUIDefinition Location="Ribbon.ContextualTabs.ProjectCenter.Home.GoTo.Controls._children"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Button <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Id="ProjectCenterPage.ProjectSiteIcon.newIcon"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Command="ProjectCenterShowSelected"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sequence="51"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Image16by16="/_layouts/15/$Resources:core,Language;/images/ps16x16.png?rev=23"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Image16by16Top="-32"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Image16by16Left="-112"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Image32by32="/_layouts/15/$Resources:core,Language;/images/ps32x32.png?rev=23"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Image32by32Top="-320"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Image32by32Left="-128"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LabelText="Project Site"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TemplateAlias="o2" <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ToolTipTitle="Project Workspace" <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ToolTipDescription="Go to the Project Site Associated with the Project"/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/CommandUIDefinition&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/CommandUIDefinitions&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;CommandUIHandlers&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;CommandUIHandler <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Command="ProjectCenterShowSelected" <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CommandAction="javascript:window.Temp_PCE.GetSelectedProject();"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EnabledScript="javascript: function AlwaysTrue(){return true;} AlwaysTrue();"/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/CommandUIHandlers&gt;<br />&nbsp;&nbsp;&nbsp; &lt;/CommandUIExtension&gt;<br />&lt;/CustomAction&gt;</p>
<p>3.&nbsp;Replace the javascript with the below content<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;reference name="MicrosoftAjax.js"/&gt;<br />/// &lt;reference path="~/_layouts/15/inc/pwa/library/Utility.debug.js"/&gt;<br />/// &lt;reference path="~/_layouts/15/inc/pwa/library/WebMethodManager.debug.js"/&gt;<br />/// &lt;reference path="~/_layouts/15/inc/pwa/library/shell.debug.js"/&gt;<br />/// &lt;reference path="~/_layouts/15/inc/pwa/library/TimesheetSatellite.js"/&gt;<br />/// &lt;reference path="~/_layouts/15/inc/pwa/library/RemoteTextConv.debug.js"/&gt;<br />/// &lt;reference path="~/_layouts/15/inc/pwa/library/ProjectFramework.debug.js"/&gt;<br />/// &lt;reference path="~/_layouts/15/inc/pwa/library/GridSatellite.debug.js"/&gt;<br />/// &lt;reference path="~/_layouts/15/inc/pwa/library/projectserverscripts.debug.js"/&gt;<br />/// &lt;reference path="~/_layouts/15/inc/pwa/library/pagepropertymgr.debug.js"/&gt;</p>
<p>/// &lt;reference path="~/_layouts/15/SP.core.debug.js"/&gt;<br />/// &lt;reference path="~/_layouts/15/JsGrid.debug.js"/&gt;<br />/// &lt;reference path="~/_layouts/15/JsGrid.Gantt.debug.js"/&gt;<br />var Temp_PCE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Contains the Project Center extension object.</p>
<p>_spBodyOnLoadFunctionNames.push("Temp_PCE_Main");</p>
<p>function Temp_PCE_Main() {<br />&nbsp;&nbsp;&nbsp; Temp_PCE = new Temp_GetPCE();<br />}</p>
<p>function Temp_GetPCE() {<br />&nbsp;&nbsp;&nbsp; this.GetSelectedProject = function () {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; selection = projectCenterComponent.get_GridSatellite().GetJsGridControlInstance().GetSelectedRecordKeys(false);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (selection.length == 0) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert('Please select a project.');<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if (selection.length &gt; 1) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert('Please select one project.');<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var uid = selection[0];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var ur = document.URL;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var pws = ur.substring(0, ur.indexOf('Projects.aspx'));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pws = pws + '_layouts/15/PWA/COMMON/wssnav.aspx?Project=' + uid;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; window.open(pws);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //return selection[0];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return null;<br />&nbsp;&nbsp;&nbsp; }<br />}</p>
<p>4.&nbsp;Deploy the solution to respective PWA instance</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>Project Server 2013 Updating Task level Lookup based custom field Using CSOM</title>
      <link>https://docs.microsoft.com/archive/blogs/ajjose/project-server-2013-updating-task-level-lookup-based-custom-field-using-csom</link>
      <pubDate>Thu, 28 May 2015 04:20:14 GMT</pubDate>
      <dc:creator><![CDATA[Ajith Jose - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ajjose/2015/05/28/project-server-2013-updating-task-level-lookup-based-custom-field-using-csom/</guid>
      <description><![CDATA[Below sample code is to update the task level Lookup table based custom fields for a given...]]></description>
      <content:encoded><![CDATA[<p>Below sample code is to update the task level Lookup table based custom fields for a given project:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; projectName = "ProjectTest";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pwapath = "<a href="https://Servername/pwa">https://Servername/pwa</a>";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; projContext = new ProjectContext(pwapath);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; projContext.Load(projContext.Projects);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; projContext.ExecuteQuery();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var proj = projContext.Projects.First(p =&gt; p.Name == projectName);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; projContext.ExecuteQuery();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var cfInternalName = "Custom_aaf4156c7804e511943500155d569905";&nbsp;&nbsp;&nbsp; //CustomField field uid without the "-" and small letters<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var draftProj = proj.CheckOut();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; projContext.Load(draftProj.Tasks);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; projContext.ExecuteQuery();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var tasks = draftProj.Tasks;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; foreach (DraftTask tsk in tasks)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string[] Newval = new string[] { "Entry_343982d27604e511943500155d569905" };&nbsp;&nbsp;&nbsp;&nbsp; //Lookup table value UID without "-"&nbsp;&nbsp; and small letters&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tsk[cfInternalName] = Newval;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; draftProj.Publish(true);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; QueueJob qJob = projContext.Projects.Update();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JobState jobState = projContext.WaitForQueue(qJob, 200);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.ReadKey();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (Exception exc)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine(exc.ToString());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.ReadKey();</p>
<p>&nbsp;</p>
<p>Happy coding ......Cheers .. Ajith</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>Project Server CSOM -Select few columns from a dataset</title>
      <link>https://docs.microsoft.com/archive/blogs/ajjose/project-server-csom-select-few-columns-from-a-dataset</link>
      <pubDate>Fri, 18 Jul 2014 09:07:52 GMT</pubDate>
      <dc:creator><![CDATA[Ajith Jose - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ajjose/2014/07/18/project-server-csom-select-few-columns-from-a-dataset/</guid>
      <description><![CDATA[Below sample code is to select only name and ID for a resource using CSOM
using System;using...]]></description>
      <content:encoded><![CDATA[<p>Below sample code is to select only name and ID for a resource using CSOM</p>
<p>using System;<br />using System.Collections.Generic;<br />using System.Linq;<br />using System.Text;<br />using System.Threading.Tasks;<br />using Microsoft.ProjectServer.Client;<br />using Microsoft.SharePoint.Client;</p>
<p>namespace ReadResources<br />{<br />&nbsp;&nbsp;&nbsp; class Program<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private static ProjectContext projContext;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private const string pwapath = "<a href="https://servername/pwa/">https://servername/pwa/</a>";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; static void Main(string[] args)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var resinfo =new EnterpriseResourceCreationInformation();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; projContext = new ProjectContext(pwapath);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; projContext.Load(projContext.EnterpriseResources, nm =&gt; nm.Include(ls =&gt; ls.Name, ls =&gt; ls.Id));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; projContext.ExecuteQuery();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; foreach (EnterpriseResource&nbsp; rs in projContext.EnterpriseResources)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine("Resource name and ID" + rs.Name + rs.Id);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.ReadKey();&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; }<br />}</p>
<p>&nbsp;</p>
<p>Happy coding ......Cheers .. Ajith</p>]]></content:encoded>
    </item>
    <item>
      <title>Deploy files to _layouts folder in SharePoint 2013 and provide anonymous access</title>
      <link>https://docs.microsoft.com/archive/blogs/ajjose/deploy-files-to-_layouts-folder-in-sharepoint-2013-and-provide-anonymous-access</link>
      <pubDate>Wed, 24 Jul 2013 08:04:00 GMT</pubDate>
      <dc:creator><![CDATA[Ajith Jose - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ajjose/2013/07/24/deploy-files-to-_layouts-folder-in-sharepoint-2013-and-provide-anonymous-access/</guid>
      <description><![CDATA[Below Sample code is to provide anonymous access to Custom files deployed under _layouts...]]></description>
      <content:encoded><![CDATA[<p>Below Sample code is to provide anonymous access to Custom files deployed under _layouts folder</p>
<p>using System;<br />using Microsoft.SharePoint;<br />using Microsoft.SharePoint.WebControls;</p>
<p>namespace Help.Layouts.Feature<br />{<br />&nbsp;&nbsp;&nbsp; public partial class Help : UnsecuredLayoutsPageBase<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; protected void Page_Load(object sender, EventArgs e)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string pagesource;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pagesource = Request.QueryString["q"].ToString();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.Write(pagesource);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.Write("&lt;object id=\"embeddedhtml\" type=\"text/html\" data=\"<a href="https://servername/sample.txt\&quot; data-mce-href=">https://servername/sample.txt\</a>" width=\"100%\" height=\"100%\"&gt;&lt;/object&gt;");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; protected override bool AllowAnonymousAccess { get { return true; } }<br />&nbsp;&nbsp;&nbsp; }<br />}</p>
<p>Happy coding ......Cheers .. Ajith</p>
<p>&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>Project Server 2010: Read groups and display user groups</title>
      <link>https://docs.microsoft.com/archive/blogs/ajjose/project-server-2010-read-groups-and-display-user-groups</link>
      <pubDate>Thu, 27 Jun 2013 11:02:00 GMT</pubDate>
      <dc:creator><![CDATA[Ajith Jose - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ajjose/2013/06/27/project-server-2010-read-groups-and-display-user-groups/</guid>
      <description><![CDATA[Below sample code is to read all the group members and display the group names where the mentioned...]]></description>
      <content:encoded><![CDATA[<p>Below sample code is to read all the group members and display the group names where the mentioned User name is present:</p>
<p>using System;<br />using System.Collections.Generic;<br />using System.Linq;<br />using System.Text;<br />using System.Net;<br />using System.Data;</p>
<p>namespace CheckUserGroup<br />{<br />&nbsp;&nbsp;&nbsp; class Program<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; static void Main(string[] args)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string resname = "User Name";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Guid resguid = Guid.NewGuid();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bool found = false;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WebSvcSecurity.Security objSecurity = new WebSvcSecurity.Security();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objSecurity.Credentials = CredentialCache.DefaultCredentials;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objSecurity.Url = "<a href="https://servername/pwa/_vti_bin/psi/security.asmx">https://servername/pwa/_vti_bin/psi/security.asmx</a>";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ResourceWS.Resource PSIResource = new ResourceWS.Resource();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PSIResource.Url = "<a href="https://servername/pwa/_vti_bin/psi/resource.asmx">https://servername/pwa/_vti_bin/psi/resource.asmx</a>";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PSIResource.Credentials = CredentialCache.DefaultCredentials;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ResourceWS.ResourceDataSet AllRes;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AllRes = PSIResource.ReadUserList(ResourceWS.ResourceActiveFilter.Active);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DataTable resultsres = (DataTable)AllRes.Tables[0];</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var result = from myRow in resultsres.AsEnumerable() where myRow.Field&lt;string&gt;("RES_NAME") == resname select myRow;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; foreach (DataRow row in result)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; resguid = row.Field&lt;Guid&gt;("RES_UID");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WebSvcSecurity.SecurityGroupsDataSet GroupListDs = new WebSvcSecurity.SecurityGroupsDataSet();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GroupListDs = objSecurity.ReadGroupList();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; foreach (WebSvcSecurity.SecurityGroupsDataSet.SecurityGroupsRow grow in GroupListDs.SecurityGroups)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WebSvcSecurity.SecurityGroupsDataSet GroupDs = new WebSvcSecurity.SecurityGroupsDataSet();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GroupDs = objSecurity.ReadGroup(grow.WSEC_GRP_UID);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DataTable results = (DataTable)GroupDs.GroupMembers;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var res = from myRow in results.AsEnumerable() where myRow.Field&lt;Guid&gt;("RES_UID") == resguid select myRow;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; foreach (DataRow row in res)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; found = true;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.Write(grow.WSEC_GRP_NAME);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!found)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.Write("User is not present in any groups");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.ReadLine();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; }<br />}</p>
<p>Happy coding ......Cheers .. Ajith</p>
<p>&nbsp;</p>
<p>&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>Creating a Project Server User and Adding User to a group through PSI</title>
      <link>https://docs.microsoft.com/archive/blogs/ajjose/creating-a-project-server-user-and-adding-user-to-a-group-through-psi</link>
      <pubDate>Fri, 24 May 2013 10:36:00 GMT</pubDate>
      <dc:creator><![CDATA[Ajith Jose - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ajjose/2013/05/24/creating-a-project-server-user-and-adding-user-to-a-group-through-psi/</guid>
      <description><![CDATA[Introduction
Below PSI sample code is to Create a user in Project server and Add the user to a...]]></description>
      <content:encoded><![CDATA[<p><strong>Introduction</strong></p>
<p>Below PSI sample code is to Create a user in Project server and Add the user to a specific Group</p>
<p><strong>Sample Code</strong></p>
<p>public static Guid CreatePsvrUser(string resname, string ntAcc)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Guid gpUID = new Guid("303D8BA6-BD1A-437A-984E-B19AD11EF345");&nbsp;&nbsp;&nbsp; //group UID can be found from MSP_WEB_SECURITY_GROUPS<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ResourceWS.Resource resourceClient = new ResourceWS.Resource();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; resourceClient.Credentials = nc;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ResourceWS.ResourceDataSet resDs = new ResourceWS.ResourceDataSet();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; srvSecurity.Security objSecurity = new srvSecurity.Security();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objSecurity.Credentials = nc;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ResourceWS.ResourceDataSet.ResourcesRow resourceRow = resDs.Resources.NewResourcesRow();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Guid NewResGuid = Guid.NewGuid();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; resourceRow.RES_UID = NewResGuid;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; resourceRow.RES_NAME = resname;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; resourceRow.RES_TYPE = (int)PSLibrary.Resource.Type.WorkResource;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; resDs.Resources.AddResourcesRow(resourceRow);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; resourceClient.CreateResources(resDs, false, true);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ResourceWS.ResourceDataSet.ResourceAvailabilitiesRow resAvailRow = resDs.ResourceAvailabilities.NewResourceAvailabilitiesRow();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; resAvailRow.RES_UID = resourceRow.RES_UID;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; resAvailRow.SetRES_AVAIL_FROMNull();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; resAvailRow.SetRES_AVAIL_TONull();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; resAvailRow.RES_AVAIL_UNITS = 100;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; resDs.ResourceAvailabilities.AddResourceAvailabilitiesRow(resAvailRow);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ResourceWS.ResourceAuthorizationDataSet resourceAuthDs = new ResourceWS.ResourceAuthorizationDataSet();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ResourceWS.ResourceAuthorizationDataSet.ResourcesRow resourceAuthRow = resourceAuthDs.Resources.NewResourcesRow();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; resourceAuthRow.RES_UID = resourceRow.RES_UID;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; resourceAuthRow.RES_IS_WINDOWS_USER = true;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; resourceAuthRow.WRES_ACCOUNT = ntAcc;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; resourceAuthDs.Resources.AddResourcesRow(resourceAuthRow);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; resourceClient.SetResourceAuthorization(resourceAuthDs);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; srvSecurity.SecurityGroupsDataSet secutiryAuthDs = new srvSecurity.SecurityGroupsDataSet();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; secutiryAuthDs = objSecurity.ReadGroup(gpUID);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; srvSecurity.SecurityGroupsDataSet.GroupMembersRow securityAuthRow = secutiryAuthDs.GroupMembers.NewGroupMembersRow();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; secutiryAuthDs.GroupMembers.AddGroupMembersRow(gpUID, resourceRow.RES_UID);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objSecurity.SetGroups(secutiryAuthDs);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return NewResGuid;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;Happy coding ......Cheers .. Ajith</p>]]></content:encoded>
    </item>
    <item>
      <title>Understanding Project Mini Category and Managing Project Mini Category</title>
      <link>https://docs.microsoft.com/archive/blogs/ajjose/understanding-project-mini-category-and-managing-project-mini-category</link>
      <pubDate>Fri, 24 May 2013 10:31:01 GMT</pubDate>
      <dc:creator><![CDATA[Ajith Jose - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ajjose/2013/05/24/understanding-project-mini-category-and-managing-project-mini-category/</guid>
      <description><![CDATA[Introduction on Project Mini Category
Project Mini categories are Categories in Project Server...]]></description>
      <content:encoded><![CDATA[<p><strong>Introduction on Project Mini Category</strong></p>
<p>Project Mini categories are Categories in Project Server Specific to a project in Project server</p>
<p>Project Mini Category gets created when you define a Project Level Permission.</p>
<p>Each project will have a Mini category and a Category Relation once you define permissions from Project Center (Project Permissions)</p>
<p>Individual Users or Groups can be given Specific Permission on a Project Using Mini Categories</p>
<p><strong>Available Permissions </strong></p>
<p>There are 7 Different permissions which can be defined on a project using Mini categories and each permission has a unique ID associated with it</p>
<p>View Project Schedule in Project Web App&nbsp;&nbsp;&nbsp; e98573c8-7ea6-41ab-8ea4-ff8da9730d0a<br />View the Project Summary in the Project Center&nbsp;&nbsp; a120a079-75bc-4f0f-b376-3fb0ae9ac940<br />Publish Project&nbsp; 0000c2b9-3f2b-48a4-b54f-a247cbbff5ba&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />Save Project to Project Server bf93a026-deac-4949-be19-c513701139ff<br />Open Project&nbsp;&nbsp; 3dee3fa0-1956-4b98-84bd-2259d5b8829c<br />Edit Project Summary Fields 0000c768-6d95-4c77-b7db-5d7cdafc1bea<br />View the Project Site 4B524550-2512-4D25-92B1-A4C888C66106</p>
<p><strong>How Do we create a Project Mini category , Relation and Associate a user with Project Mini Category using PSI</strong></p>
<p>Below Sample code is to Create a Project in Project Server and Create a mini Category for the newly created Project</p>
<p>const string RESOURCE_SERVICE_PATH = "_vti_bin/psi/resource.asmx";<br />const string PROJECT_SERVICE_PATH = "_vti_bin/psi/project.asmx";<br />const string QUEUESYSTEM_SERVICE_PATH = "_vti_bin/psi/queuesystem.asmx";<br />const string SECURITY_SERVICE_PATH = "_vti_bin/psi/security.asmx";</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guid resguid;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Guid projectID;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Guid jobId;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; projectID = Guid.NewGuid();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ProjectWebSvc.Project projectSvc = new ProjectWebSvc.Project();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; projectSvc.Url = PROJECT_SERVER_URI + PROJECT_SERVICE_PATH;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; projectSvc.Credentials = nc;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ResourceWS.Resource PSIResource = new ResourceWS.Resource();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PSIResource.Url = PROJECT_SERVER_URI + RESOURCE_SERVICE_PATH;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PSIResource.Credentials = nc;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; QueueSystemWebSvc.QueueSystem q = new QueueSystemWebSvc.QueueSystem();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; q.Url = PROJECT_SERVER_URI + QUEUESYSTEM_SERVICE_PATH;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; q.Credentials = nc;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ProjectWebSvc.ProjectDataSet projectDs = new ProjectWebSvc.ProjectDataSet();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ProjectWebSvc.ProjectDataSet.ProjectRow projectRoweng = projectDs.Project.NewProjectRow();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; projectRoweng.PROJ_UID = projectID;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; projectRoweng.PROJ_NAME = projName;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; projectRoweng.PROJ_TYPE = (int)PSLibrary.Project.ProjectType.Project;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; projectDs.Project.AddProjectRow(projectRoweng);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jobId = Guid.NewGuid();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; projectSvc.QueueCreateProject(jobId, projectDs, false);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WaitForQueue(q, jobId);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jobId = Guid.NewGuid();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; projectSvc.QueuePublish(jobId, projectID, true, string.Empty);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WaitForQueue(q, jobId);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string SESSION_DESC = "Check in Project from Custom code";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jobId = Guid.NewGuid();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; projectSvc.QueueCheckInProject(jobId, projectID, true, sessionUid, SESSION_DESC);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Create Project mini Category<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; srvSecurity.SecurityProjectCategoriesDataSet updatedPDS;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Guid CatGuid;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Guid[] guidarray = new Guid[1];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; guidarray[0] = projectID;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; srvSecurity.Security SVSecurity = new srvSecurity.Security();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SVSecurity.Url = PROJECT_SERVER_URI + QUEUESYSTEM_SERVICE_PATH;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SVSecurity.Credentials = CredentialCache.DefaultCredentials;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; updatedPDS = SVSecurity.ReadProjectCategory(guidarray[0]);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (updatedPDS.ProjectCategories.Rows.Count == 0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; srvSecurity.SecurityProjectCategoriesDataSet projectCategoryDataSet1 = new srvSecurity.SecurityProjectCategoriesDataSet();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; srvSecurity.SecurityProjectCategoriesDataSet.ProjectCategoriesRow row1 = projectCategoryDataSet1.ProjectCategories.NewProjectCategoriesRow();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CatGuid = Guid.NewGuid();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; row1.WSEC_CAT_UID = CatGuid;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; row1.PROJ_UID = projectID;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; projectCategoryDataSet1.ProjectCategories.AddProjectCategoriesRow(row1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SVSecurity.CreateProjectCategories(projectCategoryDataSet1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; updatedPDS = SVSecurity.ReadProjectCategory(projectID);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; updatedPDS = SVSecurity.ReadProjectCategory(guidarray[0]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CatGuid = updatedPDS.ProjectCategories[0].WSEC_CAT_UID;</p>
<p>Once the Mini Category is created for a project you can Create a Relation ship with the Mini Category and a User\Group&nbsp; (below Sample is for creating a relation ship for a User)</p>
<p>DSUpdated.UserRelations.AddUserRelationsRow(categoryguid, resguid);&nbsp;&nbsp; //DSUpdated is the Project Category Data set (SecurityProjectCategoriesDataSet )</p>
<p>Once the Relation ship is defines you can Add the respective Permissions for the data set for the above User&nbsp; (below ID's are for "View the Project Summary in the Project Center" and&nbsp; "View the Project Summary in the Project Center")</p>
<p>&nbsp;DSUpdated.UserPermissions.AddUserPermissionsRow(categoryguid, resguid, new Guid("A120A079-75BC-4F0F-B376-3FB0AE9AC940"));<br />DSUpdated.UserPermissions.AddUserPermissionsRow(categoryguid, resguid, new Guid("E98573C8-7EA6-41AB-8EA4-FF8DA9730D0A"));<br />SVSec.UpdateProjectCategories(DSUpdated);</p>
<p>Now you are all set with the Mini category.................</p>
<p>Happy coding ......Cheers .. Ajith</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>How do we apply a custom filter on Project Center webpart Dynamically(usefull when added on a custom site....)</title>
      <link>https://docs.microsoft.com/archive/blogs/ajjose/how-do-we-apply-a-custom-filter-on-project-center-webpart-dynamicallyusefull-when-added-on-a-custom-site</link>
      <pubDate>Thu, 23 May 2013 11:41:04 GMT</pubDate>
      <dc:creator><![CDATA[Ajith Jose - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ajjose/2013/05/23/how-do-we-apply-a-custom-filter-on-project-center-webpart-dynamicallyusefull-when-added-on-a-custom-site/</guid>
      <description><![CDATA[Welcome to First post ........
We can do a filtering(custom filter)&nbsp;on Project Center...]]></description>
      <content:encoded><![CDATA[<p>Welcome to First post ........</p>
<p>We can do a filtering(custom filter)&nbsp;on Project Center Dynamically. For instance Projet Center webpart is added on a Sitecolltion and while opening the site collection project Center should do a filtering based on a specific criteria</p>
<p>1. Sample code for extending Project Center is Available with SDK (CustomizeProjectCenter)</p>
<p>2. We have to attach a fuction to any of the event were we need to do the filtering on Project Center ( on the below sample code i have used onCellfocusChanged Event)</p>
<p>_grid.AttachEvent(SP.JsGrid.EventType.on, Cffilter);</p>
<p>&nbsp;</p>
<p>3. Write a fuction for the filtering</p>
<p>function Cffilter(eventArgs) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var a = {}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var sites = window.location.href;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var len = n.lastIndexOf("/");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var myString = n.substring(0, len+1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var stname = n.replace(myString, "");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a.ClientFilterXml = '&lt;Filter&gt;&lt;FieldComparison&gt;&lt;Field&gt;7806971e-9291-49ea-ba75-dd726faffba6&lt;/Field&gt;&lt;Operator&gt;Equals&lt;/Operator&gt;&lt;Operand&gt;' + stname + '&lt;/Operand&gt;&lt;/FieldComparison&gt;&lt;/Filter&gt;'<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a.ServerFilterXml='&lt;Filter xmlns:pwa=\"<a href="https://microsoft.com/ProjectServer/FilterSchema.xsd/%22%3E%3CCriteria%3E%3CLogicalOperator">https://microsoft.com/ProjectServer/FilterSchema.xsd\"&gt;&lt;Criteria&gt;&lt;LogicalOperator</a> logicalOperationType=\"Nop\"&gt;&lt;FieldOperator fieldOperationType=\"Equal\"&gt;&lt;CustomField fieldName=\"27955ccb-860b-45ec-8722-dfb02e6a2dca\" customFieldType=\"CodeValue\" ISMULTIVALUE=\"0\"/&gt;&lt;Operand LTUID=\"89417fcc-768c-47aa-aa4b-d71bd979825e\"&gt;8f8ecc68-ed8a-4bfa-89d8-424db1353a64&lt;/Operand&gt;&lt;/FieldOperator&gt;&lt;/LogicalOperator&gt;&lt;/Criteria&gt;&lt;/Filter&gt;'<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; projectCenterComponent.get_GridSatellite().HandleFilter(a)<br />}</p>
<p>Scenario : in This sample we are doing the filtering based on the site colleciton name and a custom field which is created in Project Server</p>
<p>This Project Level custom field should be present in the view</p>
<p>ServerFilterXml doenst have any effect on this, however a should have a dummy ServerFilterXml</p>
<p>ClientFilterXml parameter plays the role here</p>
<p>Parameters:</p>
<p>stname is the valiable based on which the filtering will be done</p>
<p>7806971e-9291-49ea-ba75-dd726faffba6 is the UID for Project Level Custom field.</p>
<p>4. Once you actiavate the feature on the site , above code will do the filtering...</p>
<p>Happy coding ......�&nbsp; Cheers .. Ajith ....</p>]]></content:encoded>
    </item>
  </channel>
</rss>