in

Dot Net Mafia

Group site for developer blogs dealing with (usually) Ionic, .NET, SharePoint, Office 365, Mobile Development, and other Microsoft products, as well as some discussion of general programming related concepts.

This Blog

Syndication

Archives

Corey Roth [MVP]

A SharePoint MVP bringing you the latest time saving tips for Ionic, SharePoint, and Office 365.
  • Use the new IE11 Polyfill package with PnPJS 1.2.4

    Recently, I posted about the error (TypeError: Object doesn't support property or method 'from') you received in Internet Explorer 11 (IE11) when you didn't include the necessary polyfills for PnP JS to work.  To resolve the error, previously you had to include the following Polyfills to provide support for things like proxy, fetch, and map.

    import "core-js/modules/es6.promise"

    import "core-js/modules/es6.array.iterator.js"

    import "core-js/modules/es6.array.from.js"

    import "whatwg-fetch"

    import "es6-map/implement"

    Now with PnPJS 1.2.4, this has been simplified a bit with a new single package.  First, install the package @pnp/polyfill-ie11.

    npm install --save @pnp/polyfill-ie11

    Now remove all of the previous imports from your web part class and replace it with the following single import.

    import "@pnp/polyfill-ie11";

    Now, give your code a try inside Internet Explorer.  All of your PnPJS calls should work normally.  What's nice about this version of the Polyfill si that we have support for SearchQueryBuilder which I believe wasn't there before.

    You can read more about the new Polyfill package on the PnPJS site.

  • Become a beta tester for the Office Apps on iOS

    Apple recently gave developers the ability to sign up testers using just a URL in TestFlight.  Previously, it required the developer to manage a list of E-mail addresses which quickly becomes unwieldy.  If you are interested in testing pre-release versions of Word, Excel, Outlook, and more then check out the links below.  You first need to install the TestFlight app on your iOS device.  This is how you install pre-release apps in iOS.  In fact, all of the links you see today need to be accessed directly from your iPhone or iPad.  Click on any of the links below to get started.

    As usual, if you install pre-release software, you assume all risk such as the app not working, crashing, or worse.  Another thing to remember is that TestFlight only allows 10,000 users in a beta test.  Therefore,you may not be able to join the test at some point when either they run out of invitations or MIcrosoft closes the program early.

  • Building with Ionic 4.0 Beta? Be sure and update to Node v10

    We were discussing build times in #ionic-questions Slack channel today and Mike noted that you should be on Node v10.  Apparently, the @LTS has some bugs that are affecting performance.  If you haven't upgraded and plan to do any work with Ionic v4.0, I recommend it.  It significantly improves build and refresh tine.  Specifically, I installed v10.12.0. 

    Posted Oct 16 2018, 02:47 PM by CoreyRoth with no comments
    Filed under:
  • Fixing horizontal scrolling in your DetailsList using ScrollablePane and Sticky

    The  Fabric React DetailsList component is a great way to display your tabular data when building an SPFx web part.  It's nice, but if you have a lot of rows in your list, you might need a sticky header so that you can see which column you are looking at.  As a developer building out this scenario for the first time, you might run into guidance and a code sample from the ScrollablePane documentation.  I found this hard to find because I would expect this example to be linked to the DetailsList documentation.  This will get you up and going fairly quickly.  However, when you are implementing it using the code sample, you'll find that there isn't an event called onScroll on DetailsList when you are building an SPFx web part.  That's because that event doesn't exist in Fabric React 5.  Maybe you proceed anyways and notice that the sticky header is working just fine. At least you thogught it was working.

    Here's where the problem starts.  if you have a lot of columns (or your users' screen resolution is very low), you may need to deal with horizontal scrolling.  Nothing good ever comes from horizontal scrolling.  When you need to horizontally scroll, a scrollbar appears in the sticky header.  Great.  That's exactly what you wanted.  The problem is the rows in the grid, don't scroll with it.  Now you have columns that don't line up to the data.  That's a problem. 

    When trying to fix it, you might run into the following issue on GitHub.  This pointed me in the right direction.  The answer is to react to the scroll events and set the scrollLeft property to match.  You need to create a new function to listen to the scrolling of the div element.  This effectively responds to the scrolling of the div element where your content is and sets the scroll of the Sticky to match it.  It's pretty simple.

    private handleScroll(event) {
    let element = document.querySelector("[class*='stickyAbove-']");
    if (element != null)
    element.scrollLeft = event.target.scrollLeft;
    }

    Then all you need to do is add the event to your div element that contains the ScrollablePane.

    <div
       style={{
         height: '1000px',
         position: 'relative',
         maxHeight: 'inherit'
         }}
        onScroll={this.handleScroll}
    >

    This helped me to part of the solution but not all of it.  This only handles when the user scrolls the data using the scrollbar at the bottom.  What we need to add to it is an event to respond to when the user scrolls the Sticky element.  I did this by registering an event handler in componentDidMount.  I used pure JavaScript in my example, but you could reference the Sticky component using componentRef if you wanted.

    public componentDidMount(): void {
    let stickyElemrent = document.querySelector("[class*='stickyAbove-']")
    if (stickyElemrent != null) {
    stickyElemrent.addEventListener('scroll', this.hnadleStickyScroll);
    }
    }

    In my event handler, we have similar code except that we are getting a reference to the DetailsList element.

     private hnadleStickyScroll(event) {
    let gridElement = document.querySelector("[class*='ms-DetailsList']");
    if (gridElement)
    gridElement.scrollLeft = event.target.scrollLeft;
    }

    Once you add this, you should be able to scroll your rows of content or the sticky header horizontally and they will stay in sync.  If you have run into this issue, give it a try.

  • TypeError: Object doesn't support property or method 'from' with PnPJS and Internet Explorer 11

    You just built this amazing SPFx web part and it works great in modern browsers.  You then go to test (or even worse your users go to test) and you find that nothing works.  After examining your logs, you start finding the following error message.

    TypeError: Object doesn't support property or method 'from'

    What does that mean?  Basically, all of your calls to SharePoint made through PnPJS are failing.  You start to panic as you realize everything you built doesn't work in IE11.  Not to worry though, this can be fixed.  After doing some research, you might stumble upon this issue reported in GitHub.  The reason for this is that in version PnPJS 1.2.0, they dropped direct support for Internet Explorer.  That doesn't mean you are out of luck though and you need to go tell the client the solution you spent weeks on won't work for half their users.  You just need to add the right polyfills to your project and you are back in business.

    Just add the following polyfills to the relevant part of your project.

    import "core-js/modules/es6.promise"

    import "core-js/modules/es6.array.iterator.js"

    import "core-js/modules/es6.array.from.js"

    import "whatwg-fetch"

    import "es6-map/implement"

    I find that if you are developing an SPFx web part, you can just add this to the web part's class (not the React component).  Add them anywhere near the top of that class and your IE users should be able to use your web part as intended.

  • Hands on with OneDrive File-On-Demand for Mac

    Today, Microsoft released the long waited Files-On-Demand support in macOS Mojave. As you might know Files-On-Demand (or FOD) has been available in Windows 10 for a while but it has been a featured that we have been waiting for in macOS for quite some time. Now at Ignite, Microsoft is giving you the opportunity to try it out. In order to try it out, you first have to upgrade to macOS Mojave 10.14. The latest version of macOS just came out today on September 24th and is now available to download. If you are running on a beta version still, you can try it out as well.

    The second thing, you need to do is make sure you are in the Insiders Ring for Office and / or OneDrive. If you aren’t sure, download the script from the installation site. It’s a bash script, so you will need to make the script executable. If you aren’t familiar with this process, you have to get back to the Unix / BSD roots of OS X. Open a new Terminal, and go to the directory where you downloaded the script and then execute the following command:

    chmod u+x ./EnableMacFilesOnDemand.sh

    Screen Shot 2018-09-24 at 1.32.24 PM

    If you’ve had OneDrive installed on your Mac before, you’ll need to delete some cache files in the following folder: ~/Library/Caches/OneDrive. Delete *.json in that folder.  I didn't actually do this step, but you may need to.

    Now you can install the OneDrive client. Download the client from the install link and then go through the install process. Launch OneDrive when it’s complete. If you run into issues, there are a few troubleshooting tips about force closing Finder. I didn’t have to do that but you may need to on your machine.

    If you have enabled the new macOS Mojave Dark Mode, the first thing you might notice is that the OneDrive client respects that and will also show using Dark Mode. Good job, OneDrive engineering team! That makes for a nice experience.

    Screen Shot 2018-09-24 at 1.40.33 PM

    I had to setup one of my Office 365 accounts on this particular machine but that’s good because it gave me an idea for the new account setup experience. After you sign in, you’ll get this new dialog that explains the icons that you will see in Finder.  Cloud = online only, checkbox = the file is on disk.  This is helpful, because I’ve always had trouble remembering what the icons mean in FOD for Windows 10.

    Screen Shot 2018-09-24 at 1.11.55 PM

    For existing accounts, you may need to turn on Files-On-Demand manually. I didn’t have to in my case, but it’s good to know where to go. Go to Preferences in OneDrive and then look for the Files-On-Demand section. You can see verify whether it has been turned on or not.

    Screen Shot 2018-09-24 at 2.27.40 PM

    Now we can go find our OneDrive folder inside Finder and see how it all works. When I open one of my synced folders, you’ll notice that I am now seeing files that I have not downloaded yet indicated by the cloud icon next to each one. That’s right, I am seeing files that are online, but not yet downloaded.

    Screen Shot 2018-09-24 at 1.45.20 PM

    Clicking on an online file will immediately download it and you can access it like you had it all along. This is what we have been waiting for. If you right click on a file, you now see the option to Always keep on this device. This is how you tell OneDrive to keep that file on your device for offline use.

     Screen Shot 2018-09-24 at 1.43.28 PM

    Once you do that, you’ll notice the icon changes from a cloud to a check mark.

    Screen Shot 2018-09-24 at 1.44.10 PM

    I’m looking forward to using this on a day-to-day basis. This should make working with OneDrive files online and offline much easier with macOS Mojave 10.14.

  • SPFx Basics: How to create a page anchor

    With React, sometimes the simplest of things are overly complicated.  When it comes to creating a page anchor so your users can jump down to a specific point in the page, this one is no exception.  From our old HTML4 days, you probably remember you create an anchor by doing something like the following:

     <a name="my-anchor-name"></a>

    When you look for the name attribute of an anchor in React though, it's nowhere to be found.  Ultimately this has to do with React's routing system, but that doesn't really do you any good in your SPFx Web Part.  How do you get around it?  One way is to use the Link component from Fabric React.  You'll notice it does have a name attribute but using it isn't quite straight forward.  First, include Link on the page you are building.

    import { Link } from 'office-ui-fabric-react/lib/Link';

    Once you do that, add your Link to the page using the name attribute and a unique identifier.  This will be the destination we are jumping to.

    <Link name={'my-uniqud-id'} href={'#'}></Link>

    You might be wondering why I have the href tag there on the anchor tag.  That is because the Link element renders a Link element as a button instead of an anchor tag if there isn't an href tag.  You can include any value you want there, but a value is required.

    Now to jump to our anchor tag, use the Link tag and include a hash tag and your unique identifier.

    <Link href={'#my-unique-id'}></Link>

    Again this seems like a simple topic, but if you are new to React because you just started SPFx development, this might take you a minute to figure out.

  • SPFx Basics: How to get a query string value

    Contrary to popular belief, I still do development.  In fact, I do quite a bit of development.  In the last couple of years, I have built two mobile platforms as a service using Ionic and Angular.  This node.js based development stack positioned me well to start working with SPFx.  I'm starting up a string of blog posts that help cover the basics that I think that we often overlook in the bigger picture of how to do things with SPFx.  Today's topic is simple: reading a value from the query string.  When I recently looked at this simple scenario, I thought sure I could go back to my JavaScript roots and use location.href but there has to be a better way now right?  The SPFx team thought of that and they included a nice helper class to get you going called UrlQueryParameterCollection.

    Start by including a reference to UrlQueryParameterCollection.

    import { UrlQueryParameterCollection } from '@microsoft/sp-core-library';

    We use the getValue() Like ASP.NET or other languages, you'll usually want to check to see if it has a value before using it.  I then cast it to an integer time after reading the value.

    if (queryParameters.getValue('id')) {
            id = parseInt(queryParameters.getValue('id'));
    }

    Again, this is a simple example, but hopefully it will keep you from going down the path with location.href.  The sp-core-library has all sorts of useful utitlities for you to use such as Environment, Random Number Generators, and logging.  Check it out the next time you start out a project.

  • How to: Default a date field to today's date in PowerApps

    When you add a date field in PowerApps, I find that the current default date of 12/31/2001 is not very useful for me.

    PowerAppsDefaultDate

    Changing the default date is not hard but you have to know where to look.  First, you have to realize a date field is actually three different controls DateValue, HourValue, and MinuteValue.  The default has to be set on each one. 

    Start by clicking on the Date Value where is says 12/31/2001.  In the properties, go to the Advanced Tab and click the Unlock button. Now, iIn the property selector, look for DefaultDate and change the value to Now().

    PowerAppsDefaultDateSelected

    You'll notice the date changes to today's date now.  You can also use date manipulation functions if you want to choose another date.  Now, if you don't like the time defaulting to midnight, we can change that too.  Click on the HourValue and choose Default in the property selector.  Notice the formula it has.

    PowerAppsDefaultDateHourBeforeChange

    Let's change that to use today's date and time to get the default value with the following formula.

    Text(Hour(Now()), "00")

    You'll notice the hour has now updated.  PowerApps may apply a region identifier to your string when you update it.  That won't mess anything up.

    PowerAppsDefaultDateHourBeforeChange

    Now repeat the process for the MinuteValue with the following formula

    Text(Minute(Now()), "00")

    PowerAppsDefaultDateMinuteValueChanged

    That's all there is to it.  It may take a few extra steps than you expected but the process is pretty easy to follow.

  • Getting started with the new Microsoft Teams & Skype for Business Admin Center

    The new Microsoft Teams & Skype for Business Admin Center is starting to roll out to first release.  This post will show you some of the highlights and how to get started.  First, you have to know where to find it.  Currently, the Microsoft Teams & Skype for Business Admin Center does not show up in the list of Admin Centers on your Tenant.  To find it in your Admin Center, go to Settings -> Services & add-ins and then Microsoft Teams

    TeamsAdminCenterSettingsLink

    If the new admin center has been provisioned on your tenant, you will see a message at the top warning you that some settings are only available in the new admin center.

    TeamsAdminSettingsMigrated

    Click on the link to take you to the new admin center.  It will take you to the URL below.

    https://admin.teams.microsoft.com/

    The will take you a dashboard that looks a bit incomplete for the moment.  It lets you quickly get to your users as well as some help videos.

    TeamsAdminCenterDashboard

    On the Users page, you can see a dashboard of users, phone numbers (if any) and that one policy has been defined.  It looks like the RestrictedAnonymousAccess policy is assigned to everyone by default.

    TeamsAdminCenterUsers

    When you click on a user, you see a screen with some general information including the conference bridge and phone number (if assigned).  Here you can reset the conference ID or PIIN, set policies, and set defaults.

    TeamsAdminCenterUser

    If you click Edit next to Assigned policies, it will let you change the Teams Messaging policy but you cannot change the Teams Meeting Policy yet.  The option simply isn't present when you click on it.  I suspect that will come later in the future.

    TeamsAdminCenterUserPolicy

    If you click Edit next to Microsoft Teams, you can set the Default calling app and the Default chat appEach one has a value of Teams, Skype for Business, or Default.  However, when you try to change the Default calling app, you get an error:

    This combination of preferred applications isn't allowed.

    TeamsAdminCenterUserDefaults

    I suspect this will be resolved in the future as more of the Interop features on the roadmap are launched.

    Under Meetings, you can now manage your conference bridge phone numbers.  This is a welcome change from the old Skype for Business audio conference settings.

    TeamsAdminCenterMeetings

    Clicking Settings takes you to bridge settings include entry and exit notifications and PIN length.

    TeamsAdminCenterMeetingsSettings

    In reality, not that many settings have been migrated to the new admin center yet.  The most noticeable move will be the Messaging settings.

    TeamsAdminMessagingMoved

    Here you will see the new expanded Teams messaging policy with the ability to set more than one policy now.

    TeamsAdminCenterMessagingPolicies

    You can control External Access under Org-wide settings.  This is where you can turn off communication to external Skype (consumer) users.  By the way, Secure Score actually recommends you turn off communication to Skype users now.

    TeamsAdminCenterExternalAccess

    Under Guest Access you can control all of the settings that you allow guests of your Teams to do.

    TeamsAdminCenterGuestAccess

    That's all of the new settings for now.  Like the new SharePoint Admin Center, many of the legacy settings will take some time to migrate over to this new experience.  If you can't find the setting you are looking for, go back to the Skype for Business admin center or the Teams Settings menu.

  • Using Cloud Storage to create virtual folder hierarchies in Microsoft Teams

    One particular feature in Microsoft Teams that has been a success in my organization is the use of Cloud Storage to provide a hierarchy in Microsoft Teams. If you are not familiar with what I am talking about, I am referring to the Add cloud storage link you see in the Files tab of a Team.  You might have glossed over this link since you may be fully on Office 365, but this particular link has a lot of power.

    TeamsAddCloudStorage2

    Clicking that button will take you to a screen asking you which cloud storage provider you want to use.  In our case, we want to use SharePoint.

    TeamsAddCloudStorageChooseProvider

    However, you may have different options.  That's because they can be configured in the Office 365 Admin center under Settings -> Services & Add-ins -> Microsoft Teams -> Custom cloud storage.

    TeamsCustomCloudStorageAdmin

    Note, how most of mine are turned off.  Google Drive is about to join the off-club as well for us.  Having just migrated my organization off of G Suite this cloud storage provider approach has acted as a good transition since Google makes use of the virtual folders concept quite a bit.

    Now back when the user chooses SharePoint, it will present you a list of sites that it thinks might be relevant to you.  However, you can also paste in a link from any SharePoint site you have.  Don't worry about trimming the link or getting it exact either.  You can paste the URL of the site root, a document library, whatever.  Teams will figure out the site you want.

    TeamsAddSharePointLink

    Paste your URL,  select the site, and then click Next.  Now pick the document library you want to link in.

    TeamsCloudStorageDocumentLibrary

    Finally click Add Folder.

    You will be returned to the Files tab.  This part is a bit buggy because while the tab does refresh, it doesn't show you your new link.  Just switch off the tab and click back on the Files tab and you will then see your new link.

    TeamsWithVirtualLink

    It will create a link to the child site with a special SharePoint folder icon.  It names your folder based off of the site name and document library name.  Unfortunately, you don't have any control of that name and you can't rename it.

    When you click on the link, it will let you drill down into the document library of that site you linked in.  Notice it even maintains the bread crumbs from the Team you came from.

    TeamsChildSiite

    This is a great way to bring links to content from all over your organization into one central location.  It's pretty useful I think.

    What's the downside?

    I think the only other downside is that you can only see these links from the Teams client.  If you go into SharePoint directly, you won't see those links in your document libraries.  It's still pretty useful though.  Give it a try!

  • Understanding Site Collection creation with Microsoft Teams

    When you create a new site Microsoft Team, it creates a site collection for you rather quickly.  In general, it's ok to start working with this site collection right away.  You can upload files or do whatever you need.  However, you might have noticed before that certain menus are not available in Site Settings right away. and you can't do other administrative actions such as "Change the Look".  I started looking into this after I created a new Team and then started using Sharegate to move files there right away.  Sharegate gives me an error message that I don't have the necessary permissions to use Insane Mode.  This is no fault of Sharegate, something clearly wasn't ready yet in Office 365.

    Screen Shot 2018-03-15 at 10.02.07 AM

    I created the Team so shouldn't I be a site collection administrator?  I was confused because this was right after I successfully migrated files to a different Team that I had created last week.  It turns out even though I created the Team, I am not a Site Collection owner…yet.  The administration options are simply not there. That's because you don't have access yet. 

    I don't fully understand it, but after digging around in PowerShell, I do understand it a bit more now.  I went into SharePoint Online Management Shell and used Get-SPOUser on the site. 

    Get-SPOUser -site https://tenant.sharepoint.com/sites/teamname | Select LoginName, IsSiteAdmin

    Looking at the results, you can see that no one is a site collection admin.

    Screen Shot 2018-03-15 at 10.01.40 AM

    I suspected, I needed to wait and see what happens.  I knew my other Teams worked fine, so hopefully this one will work soon as well.  I came back about 40 minutes later, just shortly past the hour.  I then ran the same PowerShell command.  This time, the results were different.

    Screen Shot 2018-03-15 at 10.02.42 AM

    Notice how the GUID named account, ce738800-2aff-4c9f-b2cd-2b0521aa8a77_o, now is listed as a site admin?  Interesting.  After comparing the results of another Team, my account wasn't listed there as a Site Collection admin but everything there worked fine.  I decided to go back and try my migration.  Sure enough it worked.  I could use Change the Look now to change my site theme and all of my links were available on the Site Settings page now too. 

    I'm pretty sure what happens is that there is a job that runs once an hour at the top of the hour (although I am not really sure) that goes and sets permissions after the fact whenever you create a Team.  If you run into this issue, just be patient and everything should work shortly.

  • How to: Use QnA Maker with Azure Function Bots

    I have been working with bots a bit lately and wanted to share some of my experiences.  QnA Maker makes it really easy to built a bot to serve up a knowledge base based on simple question and answer pairs that you populate it with.  After you publish your knowledgebase with QnA Maker, it's a bit tricky to figure out what to do next.  When you click Publish, you get a screen like this.

    Screen Shot 2018-03-09 at 10.19.30 AM

    While this is useful information if you were going to interact with your bot directly via REST.  It doesn't tell you how to turn this into a bot.  In fact if you look for information on how to do this with an Azure Functions Bot, you'll find very little on it.  That's because all of the documentation and examples out there tell you how to do it with Bot Framework / Bot Service which is deprecated in lieu of the new Azure Functions Bot or Web App Bot. That's why I created this post to walk you through it.

    Start by creating a new Functions Bot or Web App Bot.  The difference really just depends on how you want to pay for your consumption.  If you are just experimenting, I would probably go with a Functions Bot.  You can find both under AI + Cognitive Services.

    Screen Shot 2018-03-09 at 10.37.34 AM

    You'll need to give your bot a unique name.  You'll select the typical things like the Location, Azure Storage account, and Resource Group.  The key things you want to set are the Pricing tier and the Bot template.  For Pricing tier use F0 which includes 10K Premium Messages

    Screen Shot 2018-03-09 at 10.40.47 AM

    For the Bot template, click on it choose either C# or Node.js and be sure and choose Question and Answer.

    Screen Shot 2018-03-09 at 10.40.13 AM

    You also want to set your Hosting Plan.  I am going with Consumption Plan but this is really up to you.

    Once your bot is provisioned, we now need to adjust a few settings.  This part used to be clearer with the old Bot Service stuff.  Click on Application Settings.

    Screen Shot 2018-03-09 at 10.46.35 AM

    Now we need a few values from QnA Maker.  Remember the publish screen?  It has the values we need.  We need the values for QnAKnowledgebaseId and QnASubscriptionKey.

    Screen Shot 2018-03-09 at 10.19.30 AM

    You can find QnAKnowledgebaseId in the GUID of the first line of the POST statement.  So in this case, mine is 73d71520-4c66-45ee-8fbf-acfeef3d1b05.

    You can find QnASubscriptionKey in the third line Ocp-Apim-Subscription-Key.  In this case, mine is 9343c969f7ab4ac28b559c87ae6eb3d0.

    Now we need to set these values in our Application Settings at the very bottom of the list.

    Screen Shot 2018-03-09 at 10.53.32 AM

    That's all you need to do.  Once you have configured those settings, your QnA bot is ready to go.  Try it out for yourself!

    Posted Mar 09 2018, 10:55 AM by CoreyRoth with no comments
    Filed under: ,
  • How to survive partnership renewal in the new Microsoft Partner Center

    If you managed the Microsoft partner relationship for your company, you know what the old Microsoft Partner Portal was like.  Every time I had to use it, I cried.  Microsoft recognized the problem and has come out with a brand new Partner Center.  While ultimately, the transition is a good thing, making the transition can be a bit bumpy.  Our partnership was up for renewal on 2/28/2018, so I had the distinct pleasure of requalifying our competencies on the new system

    Shift from Microsoft Account to Azure Active Directory

    In the old partner center, you logged in with your personal Microsoft Account.  This made sense to a degree because these are the same accounts that your consultants are using for Microsoft Learning and to take their exams.  Now everything is tied to your Azure Active Directory.  When you log into the old partner portal, you will be notified of the transition to the new partner center and it will tell you everything you need to make the transition.  It might be a bit more than you expected.

    Global Administrator Credentials Required

    That's right.  To make the change you need to be a global administrator of your Azure Active Directory.  For a small company like mine, that's no problem.  For a company with 5000 consultants, this is going to be an issue for you.  You are going to have to track that person down and convince he or she that you need to go through this process.  Good luck with all of that.

    Where did all of my competencies and benefits go?

    That's right they are gone in the new Partner Center.  When you click on Partnership -> Benefits, you will get a message that says:

    Benefits are not available yet.

    Awesome.  Will they be available soon?  Do I come back later?  No you have no benefits, because you lost all of your competencies in this process.  Why did you lose all of your competencies?  That's because of the change to Azure Active Directory.

    Importing Users

    When you click on View Users, you won't see the people in your org that have passed exams and associated themselves with your organization.  instead, you will see everything in your Azure Active Directory. 

    Now, if you weren't on Azure Active Directory yet, this makes things even more interesting.  We were actually in the process of moving from G Suite to Office 365.  We had an Azure Active Directory because of some Azure subscriptions, but none of our users were there yet.   Well, the Partner Center has created a process to create new accounts for any of your users associated in the old partner portal.  You just have to know where to find it.  On the User Management page, look for the link Add users using PMC data.  That's obvious right?

    Screen Shot 2018-03-07 at 8.18.33 AM

    On the next screen, it will show you what the account conversion process looks like and you have the opportunity to update account names.  When you continue, each user will get an e-mail with their account information just like the one from Office 365 when a new account is created.

    Screen Shot 2018-03-07 at 8.31.40 AM

    Action Required - Link your Microsoft Learning Account

    Your competencies are gone because there is no association between the old Microsoft Accounts of your consultants and their Azure Active Directory accounts.  Each user must log into the Partner Center URL below and then click on My Profile.  Then they have to click Associate next to Your Microsoft Learning account.

    Screen Shot 2018-03-07 at 8.44.12 AM

    https://partnercenter.microsoft.com/

    After they do that, any exams they have completed will start counting for your competencies.  However, it may take up to 24 hours for them to show up.  For a small organization, this might not be a big deal.  For a large organization, you may have to have hundreds (or even thousands) of people complete this process.  Good luck with that!

    Completing Your Competencies

    The Partner Center will automatically assign users to the relevant competencies. 

    Screen Shot 2018-03-07 at 8.49.54 AM

    However, if you are in the middle of qualifying for a particular competency, it's not obvious that people with their certifications are counting towards the competency until you have completed it.  Take a look at the example below.  We're in the middle of qualifying for Gold, but it doesn't show it.

    Screen Shot 2018-03-07 at 8.47.54 AM

    In fact, it will only show it once you achieve it.  What's even more confusing is that on the main page, it will list it as "Not Started".  The only way to see what exams are actually counting for what is to click on the Download Skills Report link at the top.  This will give you a CSV file that has the name of each MCP in your org, what exam they have passes, and what competency it counts for.

    Screen Shot 2018-03-07 at 8.51.29 AM

    Old SharePoint Exams still count

    Even though they aren't on the list, my SharePoint 2013 exams have qualified our org for the Cloud Productivity competency. 

    Screen Shot 2018-03-07 at 9.17.24 AM

    No Customer References Required

    Missing in the new Partner Center is the process that tracks customer references.  You no longer appear to need this to get your partnership.  I can't say I am missing this one bit.

    Getting your benefits

    Again, to access your benefits in the new portal, you have to requalify all of your competencies.  Otherwise, you have to access your benefits using the old portal.  Once you do qualify and you pay your fees for whatever partner levels you are purchasing, you can access your benefits from this portal.  It comes with benefits for Software, Cloud, Visual Studio Subscriptions, and Technical Benefits (Support).  You get licenses for a variety of software that you likely don't need any more with the shift to the cloud.  However, it does cover your Windows 10 licenses. For Silver, you get 10 Visual Studio Enterprise subscriptions.  Here is what the cloud benefits look like.

    Screen Shot 2018-03-07 at 8.53.41 AM

    Although we ran into a few snags along the way, I do think the new Partner Center is a good thing.  It's way easier to use and the change to Azure Active Directory makes a lot of sense.

  • Using Microsoft Flow to save copies of E-mail receipts

    If you are like me, you get a lot of receipts via e-mail for things like Internet, electricity, phone, flights, and more.  These things are usually business related, but they don't always get sent to the business account.  Before Flow, I used to go through my e-mail, save each one off as a PDF and drag it to a document library.  It was very time consuming.  Now I have automated all of this with Flow.

    In my example, I am setting up a Flow to capture receipts from my Internet provider.  First, you'll need to set up connections to wherever your e-mail is coming from.  This could be Outlook (consumer), Gmail, or Office 365 Outlook.  In this example, I set up a connection to Outlook.  Then I used the trigger "When a new e-mail arrives".  After you have added the trigger, click on Show advanced options to create a filter.  You can filter by To address, From address, or the subject.  In this case, I am looking for the Subject Filter of "Your AT&T online bill is ready to be viewed".  This will trigger the flow whenever an e-mail is received with the matching conditions.

    Screen Shot 2018-01-18 at 1.01.08 PM

    My goal is to save the contents of the E-mail as a PDF into a document library.  There is an action that lets you convert HTML files to PDF but it only works on files stored in OneDrive for Business.  As a result, I create the HTML file first in OneDrive for Business with the Create File action.  Use the Body field from the E-mail step as the File content.

    Screen Shot 2018-01-18 at 1.05.14 PM

    Now use the Convert file using path (preview) action to convert the file to a PDF.  Use the Name from the Create File action as the File Path.  Make sure Target type is set to PDF (currently the only valid value).

    Screen Shot 2018-01-18 at 1.07.16 PM

    Finally, we want to save the file into a document library where I keep receipts.  Use the SharePoint Create File action.  Specify the URL to your site first.  Then you can specify a Folder Path.  In this case I am telling Flow to save my file in the Company Documents document library and in the Receipts subfolder.  For the File Content parameter pass the File Content output from the Convert file using path activity. 

    Screen Shot 2018-01-18 at 1.13.45 PM

    You want the name of the file to be unique when it gets written to the document library.  Therefore, I use concat to create a filename with the vendor in the receipt along with the date for the File Name parameter.  Here's what mine looks like.

    Screen Shot 2018-01-18 at 1.15.31 PM

    That's it.  At this point, your Flow is ready to go.  When the flow runs, you'll see the file in your target document library if everything is correct.  Here is what the information looks like on the file.

    Screen Shot 2018-01-18 at 1.17.33 PM

    Viewing the file, you will see the PDF it created.  While the conversion process picks up the HTML formatting, tables, and CSS, it doesn't pick up the images unfortunately.  However, this is good enough for me for now. 

    Screen Shot 2018-01-18 at 1.18.32 PM

    I thought I would share this Flow today because I found it useful.  If you found some actions that you think might work better, leave a comment.

More Posts Next page »
2018 dotnetmafia.
Powered by Community Server (Non-Commercial Edition), by Telligent Systems