<?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>Project in the Wild</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/mpcartwright/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/mpcartwright/feed.xml</link>
    <description>Supporting and using Microsoft Project outside the 98052 zip code</description>
    <lastBuildDate>Wed, 17 Apr 2019 04:10:42 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Troubleshooting OData feeds in Project Server 2013</title>
      <link>https://docs.microsoft.com/archive/blogs/mpcartwright/troubleshooting-odata-feeds-in-project-server-2013</link>
      <pubDate>Tue, 16 Jun 2015 14:29:00 GMT</pubDate>
      <dc:creator><![CDATA[MPCartwright]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/mpcartwright/2015/06/16/troubleshooting-odata-feeds-in-project-server-2013/</guid>
      <description><![CDATA[Project Server 2013 has a problem that is resolved in the June 2015 CU that you will want to load....]]></description>
      <content:encoded><![CDATA[<p>Project Server 2013 has a problem that is resolved in the June 2015 CU that you will want to load. This is the <a href="https://blogs.technet.com/b/projectsupport/p/ps13cu.aspx">public guidance from Microsoft</a> in the June CU notes, but it has been observed to apply to more than just a lookup table with graphical indicators.</p>
<ul>
<li>When you import external data from an OData data feed to a workbook in Microsoft Excel 2013, you receive the following error message:&nbsp;</li>
</ul>
<p style="padding-left: 30px;">"The content of the data feed is not valid for an Atom feed."</p>
<p style="padding-left: 30px;">This issue occurs if the data feed has a custom field that has a lookup table and a graphical indicator.</p>
<p>Sometimes there are legitimate OData feed problems that are data related, rather than code related that can break. For instance, Projects with custom fields that have orphaned Lookup Table references, which can be fixed by simply opening them and&nbsp;republishing.&nbsp;Troubleshooting them to isolate the specific projects&nbsp;can be difficult, but I'd like to share one strategy I've found that works well. It also applies to any consumer of OData feeds, <strong>not just </strong><strong>Excel.</strong></p>
<ol>
<li>(Using Chrome, since it has a record count feature built into the Find feature) Open your base OData feed to get the first 100 records.</li>
<ol>
<li><a href="https://%3cSERVER_NAME%3e/%3cINSTANCE_NAME%3e/_api/ProjectData/%5ben-US%5d/Projects?$orderby=ProjectName">https://&lt;SERVER_NAME&gt;/&lt;INSTANCE_NAME&gt;/_api/ProjectData/[en-US]/Projects?$orderby=ProjectName</a>&nbsp;asc</li>
</ol>
<li>Hit Control-F to bring up the Find window in Chrome. Search for &ldquo;ProjectName&rdquo;. If there are no failures, you will get &ldquo;1 of 201&rdquo; as a record result.</li>
<li>If you find a failure, scroll to the bottom, and find the ProjectName of the last project that loaded. This will be the last good project. Sort the Project Center view by project name with no filters in a separate window, to find the name of the next project, and that will be the problem project.</li>
<li>Open and publish the project. Once the publish is complete, test again, and repeat steps 3-4 until you successfully get all 201 records from the first set.</li>
<li>Now open the OData feed for the next 100 records by injecting the SKIP verb.</li>
<ol>
<li><a href="https://%3cSERVER_NAME%3e/%3cINSTANCE_NAME%3e/_api/ProjectData/%5ben-US%5d/Projects?$skip=100&amp;$orderby=ProjectName">https://&lt;SERVER_NAME&gt;/&lt;INSTANCE_NAME&gt;/_api/ProjectData/[en-US]/Projects?$skip=100&amp;$orderby=ProjectName asc</a></li>
</ol>
<li>Control-F again on the result set, and verify 201 results on the &ldquo;ProjectName&rdquo; search. If there are no failures, you will get &ldquo;1 of 201&rdquo; as a record result.</li>
<li>If you find a failure, again scroll to the bottom, and find the ProjectName of the last project that loaded. This will be the last good project. Sort the Project Center view by project name with no filters in a separate window, to find the name of the next project, and that will be the problem project.</li>
<li>Open and publish the project. Once the publish is complete, test again, and repeat steps 5-7 until you get all 201 records from the first set.</li>
<li>Once that set returns clean, increment the SKIP verb value by 100 and repeat steps 6-8.</li>
<ol>
<li><a href="https://%3cSERVER_NAME%3e/%3cINSTANCE_NAME%3e/_api/ProjectData/%5ben-US%5d/Projects?$skip=200&amp;$orderby=ProjectName">https://&lt;SERVER_NAME&gt;/&lt;INSTANCE_NAME&gt;/_api/ProjectData/[en-US]/Projects?$skip=<span style="background-color: #00ff00;"><strong>200</strong></span>&amp;$orderby=ProjectName</a>&nbsp;asc</li>
</ol></ol>
<p>&nbsp;Keep repeating at step 9 until the entire project list loads correctly.</p>
<p>I highly recommend Chrome for this purpose because it loads the XML feed of the OData stream. IE gives you a summary that does indeed have a total record count, but does not list project names unless you View Source on the resulting page, and the Find works better in Chrome for this purpose. You can turn off the Atom View in IE by going to Internet Options, Content tab, select the setting for "Feeds and Web Sites" and turn off "Turn on feed reading view" checkbox. But this doesn't give you the nice visual row counts of found objects that Chrome has.<br />Pulling the MSP_PROJECTS_USERVIEW table and dropping it in Excel to get an index also helps identify the next project in the list, if you halve the X/200 record count in the find window. (one ProjectName value in the open xml brackets, another in the close brackets, so two per 100 records.)</p>
<p>Keep in mind, this technique of publishing won&rsquo;t fix the issue with the OData feed being broken between the March and June CU&rsquo;s. You still need to load the CU.</p>
<p>Hat tip to Dan MacDonald at <a href="https://www.senseiprojectsolutions.com/">Sensei Project Solutions</a> for initially putting me on the track of querying with OData verbs to narrow the problem down.</p>]]></content:encoded>
    </item>
    <item>
      <title>Enabling the SharePoint App Store on-premise</title>
      <link>https://docs.microsoft.com/archive/blogs/mpcartwright/enabling-the-sharepoint-app-store-on-premise</link>
      <pubDate>Tue, 31 Mar 2015 09:19:00 GMT</pubDate>
      <dc:creator><![CDATA[MPCartwright]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/mpcartwright/2015/03/31/enabling-the-sharepoint-app-store-on-premise/</guid>
      <description><![CDATA[There are some really great apps out there for Project Server and SharePoint 2013, especially the...]]></description>
      <content:encoded><![CDATA[<p style="margin-top: 0px; margin-bottom: 0px; vertical-align: middle;"><span style="font-family: Calibri; font-size: 11pt; font-style: normal; font-weight: normal;">There are some really great apps out there for Project Server and SharePoint 2013, especially the various Bulk Edit applications that mimic the built-in functionality of the Resource Bulk Edit feature in the Resource Center of Project Server 2013. There can be significant demand from the users to getting this functionality up and running. But, to enable them you have to do a little beyond-out-of-the-box configuration. If you are running Project Server inside a company, likely it's going to touch on networking and security configuration issues as well. There are already some great guides out there, but no all-in-one&nbsp;doc I can find that produces reliable results, so I'll take a stab based on what I've learned deploying this functionality. There's a lot of moving parts, so bear with;</span></p>
<p style="margin-top: 0px; margin-bottom: 0px; vertical-align: middle;">&nbsp;</p>
<p style="margin-top: 0px; margin-bottom: 0px; vertical-align: middle;"><span style="font-family: Calibri; font-size: 11pt; font-style: normal; font-weight: normal;">Overview (Things you need)</span></p>
<ul>
<li>
<div style="margin-top: 0px; margin-bottom: 0px; vertical-align: middle;"><span style="font-family: Calibri; font-size: 11pt; font-style: normal; font-weight: normal;">A Wildcard SSL Cert.</span></div>
</li>
<li>
<div style="margin-top: 0px; margin-bottom: 0px; vertical-align: middle;"><span style="font-family: Calibri; font-size: 11pt;">Wildcard DNS routing.</span></div>
</li>
<li>
<div style="margin-top: 0px; margin-bottom: 0px; vertical-align: middle;"><span style="font-family: Calibri; font-size: 11pt;">Enable internet endpoint routing.</span></div>
</li>
<li>
<div style="margin-top: 0px; margin-bottom: 0px; vertical-align: middle;"><span style="font-family: Calibri; font-size: 11pt;">Turn on App Management Service and the&nbsp;</span><span style="font-family: Calibri; font-size: 11pt;">Microsoft SharePoint Foundation Subscription Settings Service.</span></div>
</li>
<li>
<div style="margin-top: 0px; margin-bottom: 0px; vertical-align: middle;"><span style="font-family: Calibri; font-size: 11pt;">Create Subscription Settings Service&nbsp;and&nbsp;App Management Service&nbsp;app and proxy.</span></div>
</li>
<li>
<div style="margin-top: 0px; margin-bottom: 0px; vertical-align: middle;"><span style="font-family: Calibri; font-size: 11pt;">Configure App Store URL's in Central Admin.</span></div>
</li>
</ul>
<p style="margin-top: 0px; margin-bottom: 0px; vertical-align: middle;"><span style="font-family: Calibri; font-size: 11pt;">You'll want to familiarize yourself with the official documentation as well.</span></p>
<p style="margin-top: 0px; margin-bottom: 0px; vertical-align: middle;"><span style="font-family: Calibri; font-size: 11pt;"><a href="https://technet.microsoft.com/en-us/library/fp161236.aspx">https://technet.microsoft.com/en-us/library/fp161236.aspx</a></span></p>
<p style="margin-top: 0px; margin-bottom: 0px; vertical-align: middle;">&nbsp;</p>
<h2 style="margin-top: 0px; margin-bottom: 0px; vertical-align: middle;">Wildcard Certificates</h2>
<p style="margin-top: 0px; margin-bottom: 0px; vertical-align: middle;">There are some items not clearly covered in the documentation above. Like, where to put the cert, how to configure it, etc. I'll go over the items I've discovered, and between that and the documentation, should put all the pieces together for you:</p>
<ol>
<li>
<div style="margin-top: 0px; margin-bottom: 0px; vertical-align: middle;">DNS name needs a wildcard prefix: '*.Myserver.Mydoman.net'. The asterisk is the standard&nbsp;'wildcard' element.</div>
</li>
<li>
<div style="margin-top: 0px; margin-bottom: 0px; vertical-align: middle;">Friendly Name gets the prefix too. '*.Myserver.MyDomain.Net'.</div>
</li>
<li>
<div style="margin-top: 0px; margin-bottom: 0px; vertical-align: middle;">CN of the Subject gets it as well: "CN = *.Myserver.MyDomain.Net'.</div>
</li>
<li>
<div style="margin-top: 0px; margin-bottom: 0px; vertical-align: middle;">You want the certificate in the path of the trusted Root signer.</div>
</li>
<li>
<div style="margin-top: 0px; margin-bottom: 0px; vertical-align: middle;">You place the cert in the Personal Certificates folder of the Computer's zone, not the user zone when you start up the certificate snap-in to import&nbsp;it.</div>
</li>
<li>
<div style="margin-top: 0px; margin-bottom: 0px; vertical-align: middle;">Bind the cert in IIS Manager to your web application.</div>
</li>
<li>
<div style="margin-top: 0px; margin-bottom: 0px; vertical-align: middle;">The trickiest part I ran into was, you have to put the server names in the Subject Alternative Name zone of the certificate. Short and long names. Presumably you're running in SSL anyway, so this works for the apps, and the server,&nbsp;Example Subject Alternative Name:</div>
</li>
</ol>
<p style="padding-left: 60px; margin-top: 0px; margin-bottom: 0px; vertical-align: middle;">DNS Name=*.ProjectServer<br />DNS Name=*.ProjectServer.MyDomain.Net</p>
<p style="padding-left: 60px; margin-top: 0px; margin-bottom: 0px; vertical-align: middle;">DNS Name=ProjectServer</p>
<p style="padding-left: 60px; margin-top: 0px; margin-bottom: 0px; vertical-align: middle;">DNS Name=ProjectServer.MyDomain.Net</p>
<p style="padding-left: 60px; margin-top: 0px; margin-bottom: 0px; vertical-align: middle;">DNS Name=MyAppServer1</p>
<p style="padding-left: 60px; margin-top: 0px; margin-bottom: 0px; vertical-align: middle;">DNS Name=MyAppServer2<br />DNS Name=MyWFEServer1<br />DNS Name=MyWFEServer2<br />DNS Name=MyWFEServer3<br />DNS Name=MyWFEServer4</p>
<p style="padding-left: 60px; margin-top: 0px; margin-bottom: 0px; vertical-align: middle;">DNS Name=MyAppServer1.MyDomain.Net</p>
<p style="padding-left: 60px; margin-top: 0px; margin-bottom: 0px; vertical-align: middle;">DNS Name=MyAppServer2.MyDomain.Net<br />DNS Name=MyWFEServer1.MyDomain.Net<br />DNS Name=MyWFEServer2.MyDomain.Net<br />DNS Name=MyWFEServer3.MyDomain.Net<br />DNS Name=MyWFEServer4.MyDomain.Net</p>
<p style="margin-top: 0px; margin-bottom: 0px; vertical-align: middle;">&nbsp;</p>
<h2 style="margin-top: 0px; margin-bottom: 0px; vertical-align: middle;">Wildcard DNS Routing</h2>
<p style="margin-top: 0px; margin-bottom: 0px; vertical-align: middle;">This piece is covered pretty well in the docs. So I'll skip it, but I'll try and answer any questions that come up. I just create a zone for it.</p>
<p style="margin-top: 0px; margin-bottom: 0px; vertical-align: middle;">&nbsp;</p>
<h2 style="margin-top: 0px; margin-bottom: 0px; vertical-align: middle;">Enable Internet Endpoint Routing.</h2>
<p style="margin-top: 0px; margin-bottom: 0px; vertical-align: middle;">This is a proxy and firewall issue. Essentially you're just opening up access for the app store to reach out and hit the MSFT SharePoint store. It's possible to install apps from the store offline, if you can get the author to send you a copy of the installer package, but this is not guaranteed/out of your control, so probably not the best way to handle it. Plan ahead on this piece, because this will likely be a business decision around security, more than a config issue. The Config is generally easy, if your server can hit bing.com, you're there, and this piece is complete.</p>
<p style="margin-top: 0px; margin-bottom: 0px; vertical-align: middle;">&nbsp;</p>
<h2 style="margin-top: 0px; margin-bottom: 0px; vertical-align: middle;">Enable Services</h2>
<p style="margin-top: 0px; margin-bottom: 0px; vertical-align: middle;"><span style="font-family: Calibri; font-size: 11pt;">Very easy, just launch SharePoint Central Admin and click on 'Services on Server'. Turn on both services. But keep in mind, this does NOTHING to configure them, and the subscriptions settings literally cannot be configured through the Central Admin UI. You MUST use PowerShell.</span></p>
<p style="margin-top: 0px; margin-bottom: 0px; vertical-align: middle;">&nbsp;</p>
<h2 style="margin-top: 0px; margin-bottom: 0px; vertical-align: middle;">Create Proxies</h2>
<p style="margin-top: 0px; margin-bottom: 0px; vertical-align: middle;">Enter PowerShell. There's several example scripts out there, they vary in nuance, but this worked great for me. I run them line by line, just in case.</p>
<p style="margin-top: 0px; margin-bottom: 0px; vertical-align: middle;">&nbsp;</p>
<p style="padding-left: 30px; margin-top: 0px; margin-bottom: 0px; vertical-align: middle;">$account = Get-SPManagedAccount DOMAIN\FARMADMIN<br />$appPool = New-SPServiceApplicationPool -Name SubscriptionServiceAppPool -Account $account<br />$serviceApp = New-SPSubscriptionSettingsServiceApplication -ApplicationPool $appPool -name "Subscription Settings Service" -DatabaseName "FARMNAME_Subscription_Settings_DB" <br />$serviceAppProxy = New-SPSubscriptionSettingsServiceApplicationProxy -ServiceApplication $serviceApp<br />$appPoolAppSvc = New-SPServiceApplicationPool -Name AppServiceAppPool -Account $account<br />$appAppSvc = New-SPAppManagementServiceApplication -ApplicationPool $appPoolAppSvc -Name "AppServiceAppPool" -DatabaseName "FARMNAME_App_Service_DB"<br />$proxyAppSvc = New-SPAppManagementServiceApplicationProxy -ServiceApplication $appAppSvc</p>
<p style="margin-top: 0px; margin-bottom: 0px; vertical-align: middle;">Pretty easy. Moving on.</p>
<p style="margin-top: 0px; margin-bottom: 0px; vertical-align: middle;">&nbsp;</p>
<h2 style="margin-top: 0px; margin-bottom: 0px; vertical-align: middle;">Configure URL's</h2>
<p style="margin-top: 0px; margin-bottom: 0px; vertical-align: middle;">This piece is pretty straightforward. Pop back into Central Admin and click on the Apps section.</p>
<p style="margin-top: 0px; margin-bottom: 0px; vertical-align: middle;">Click Configure App URL's, and enter the app domain in the top box: ProjectServer.MyDomain.Net</p>
<p style="margin-top: 0px; margin-bottom: 0px; vertical-align: middle;">In the bottom box, enter the prefix for any app that will be running in the farm. I just use "App", nothing fancy.</p>
<p style="margin-top: 0px; margin-bottom: 0px; vertical-align: middle;">&nbsp;</p>
<p style="margin-top: 0px; margin-bottom: 0px; vertical-align: middle;">&nbsp;</p>
<h2 style="margin-top: 0px; margin-bottom: 0px; vertical-align: middle;">Troubleshooting</h2>
<p style="margin-top: 0px; margin-bottom: 0px; vertical-align: middle;">At this point, you should be able to add apps, and things should work great. Note the use of the word 'should'. There are some gotcha's, and items that may not have gotten set correctly.</p>
<p style="margin-top: 0px; margin-bottom: 0px; vertical-align: middle;">&nbsp;</p>
<ul>
<li>
<div style="margin-top: 0px; margin-bottom: 0px; vertical-align: middle;">The first, and most important, is to keep in mind <strong>who</strong> you are and <strong>where</strong> you are. If you are logged in as the FarmAdmin account, you cannot interact with the app store. You'll get cryptic errors.</div>
</li>
<li>
<div style="margin-top: 0px; margin-bottom: 0px; vertical-align: middle;">Second, you should be in the web app you want to add applications to. Most likely, your app install will be blocked if you entered the app store through <strong>Central Admin</strong>. Be in PWA or whatever you called your Project Server app when you enter the app store.</div>
</li>
<li>
<div style="margin-top: 0px; margin-bottom: 0px; vertical-align: middle;">"<span>Sorry, apps are turned off. If you know who runs the server, tell them to enable apps." This must be a catch-all error. Of course, it's caused by setting the option in <strong>Configure Store Settings</strong> in SharePoint Central&nbsp;Admin to 'no' for allowing users to get apps from the store. Assuming that is not the problem, the error can be very frustrating. Most likely cause is a config piece that sometimes gets set, sometimes not when creating the <strong>App Management Service</strong>.</span></div>
</li>
</ul>
<p style="padding-left: 60px; margin-top: 0px; margin-bottom: 0px; vertical-align: middle;"><span>In <strong>Central Admin</strong> go to <strong>Application Management</strong> and <strong>Manage web Applications.</strong></span></p>
<p style="padding-left: 60px; margin-top: 0px; margin-bottom: 0px; vertical-align: middle;">Highlight the web app you need to access the store on (where it is currently failing) and click <strong>Manage Features</strong>.</p>
<p style="padding-left: 60px; margin-top: 0px; margin-bottom: 0px; vertical-align: middle;">Activate the "<strong>Apps that require accessible internet facing endpoints</strong>" feature at the top. Click ok.</p>
<p style="padding-left: 60px; margin-top: 0px; margin-bottom: 0px; vertical-align: middle;">Click <strong>Service Connections</strong>. Most likely, the App Management Service Application for the '[custom]' connections group, is not checked. Turn it on.</p>
<ul>
<li>
<div style="margin-top: 0px; margin-bottom: 0px; vertical-align: middle;"><span>More specific to the bulk edit apps for Project Server, ensure the oData feed is functioning, or they will never work. </span><span>You should be able to see Project data at&nbsp;<em>&lt;ProjectServer.MyDomain.Net/PWA&gt;/_api/projectdata/Projects</em> . If you can't, the bulk edit apps won't work. This can be broken by having a reserved name in a Custom Field, such as naming a field "Project ID". If you need that name, try an underscore instead of a space, to make it unique. </span></div>
</li>
<li>
<div style="margin-top: 0px; margin-bottom: 0px; vertical-align: middle;"><span>Memory/CPU Consumption.&nbsp;Keep an eye on the W3WP process on your WFE servers. This is also&nbsp;where apps run, and if the app is badly designed or misbehaving, it can potentially bring down your farm. Especially if, again in the case of Project Bulk Edit apps, it allows your user to attempt to load every project and every field on the server.</span></div>
</li>
</ul>
<p style="margin-top: 0px; margin-bottom: 0px; vertical-align: middle;">&nbsp;</p>
<p style="margin-top: 0px; margin-bottom: 0px; vertical-align: middle;"><span>Hopefully this helps demystify the process a bit, and fills in some of the gaps on the documentation linked up towards the top. Have a great day!</span></p>
<p style="margin-top: 0px; margin-bottom: 0px; vertical-align: middle;">&nbsp;</p>]]></content:encoded>
    </item>
  </channel>
</rss>