Provisioning Teams with Azure Functions and Microsoft Flow Part 5: A Change in Direction

It’s only been a few weeks since I published the 4-part blog series on Teams provisioning, and already I’ve learned a lot. So here is part 5 of the 4-part series, which will explore early learning and begin to discuss future directions for the project.

  1. Solution Overview
  2. Installing the solution
  3. Building a Flow for the solution
  4. Looking at the code
  5. A Change in Direction (this post)

ALSO – the code has moved to an official PnP repository! Please update your links accordingly.

Continue reading

Two Vantage Points

I just returned to Microsoft after a six-year adventure at a startup, BlueMetal. It was a great experience, but I was ready for a change, and I was fortunate to secure a great position as a Partner Technology Architect in Microsoft’s new One Commercial Partner (OCP) organization. I’m thrilled!

Now that I’m back, I’m able to blog on MSDN again! So which is it – MSDN, or my own blog at Bob1German.com? Decisions decisions!

For the time being, I’ve decided that “both” is a pretty good option; this will allow regular followers to keep going to the same place, while inviting MSDN readers to the party. So read either one; I plan to post the same content to both places.

Thanks, as always, for your interest and comments!

Office Developer Bootcamp Sponsors on Board

Some readers may already know that Scot Hillier and I are presenting an Office Developer Bootcamp focused on the SharePoint Framework on Friday, October 27, 2017 at the Microsoft office in Burlington MA. This is a great opportunity to learn SharePoint Framework development, including related technologies, Typescript, WebPack, and React. There are still openings, and it’s free! Please register here to join us!

I’m pleased to announce that we have some great sponsors for this event. Not only will they ensure that attendees are well fed, they were hand-picked as they bring key technologies that every SharePoint developer should know about!

Continue reading

New Release of Widget Wrangler

When you’re writing a widget in Angular 1.x, it’s possible to pass configuration information into the widget using the ng-init directive, as shown in this example. (Angular 2 isn’t ready for widgets yet since there’s no way to put multiple copies on the page; Microsoft is working with Google on a fix. Here’s a sample.)

That works fine in Angular, but what if you’re using some other framework? The Widget Wrangler has a feature, the ww-appBind attribute, that allows you to bootstrap your own widget; this allows pretty much any JavaScript framework. But then how can you pass in configuration information?

The answer came from colleague Brian McCullough, who contributed a new feature to the Widget Wrangler. I have to admit I’ve been kind of swamped at work lately; he submitted the pull request more than a month ago! Well today Brian’s new attribute, ww-appConfig, is released in version 1.02 of the Widget Wrangler.

Here’s an example:

<div>
<h1>Knockout Widget 1</h1>
<span data-bind="text: textboxLabel"></span>:
  <input data-bind="textInput: message, event: {keyup: messageChanged}" />
  <i>
    <span data-bind="text:messageLabel"></span>:
    <span class="secret" data-bind="text: message"></span>
  </i>

  <script type="text/javascript"
          src="pnp-ww.js"
          ww-appName="MyWidget"
          ww-appBind="myWidget.Load"
          ww-appConfig='{"textboxLabel":"Enter a secret message",
                         "messageLabel":"The secret message is"}'
          ww-appCss='[{"src": "style.css"}]'
          ww-appScripts='[{"src": "https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.0/knockout-min.js", priority":0},
                          {"src": "script.js", "priority":1}  ]'>
  </script></div>

In this example, two labels are passed into ww-appConfig in JSON format.The Widget Wrangler passes the appConfig value to the appBind function, myWidget.Load(), which parses the JSON and makes it available to the Knockout application.

var myWidget = myWidget || {};

myWidget.Load = function (element, config) {
  myWidget.Config = JSON.parse(config);
  ko.applyBindings(new myWidget.vm(), element);
}

You can see the whole thing in action in this Plunk.

Thanks Brian, this is a great addition and your contribution was clean and ready-to-go!

Roadmap to the Future of SharePoint

(cross-posted to the BlueMetal Blog)

This week Microsoft mapped out a bold new plan for SharePoint. Microsoft is investing heavily to modernize the product to make it work as well in the Device and Cloud era as it once did in when the Web was still shiny and new. This article will explain how these changes could affect your organization’s SharePoint plans and how you can start preparing.

FOSP-4Pillars

If you missed the announcement, this is a good place to start. Here are some of the highlights:

Continue Reading

Learning TypeScript: A Code Camp Adventure

Last weekend I had the pleasure of presenting a couple sessions on TypeScript at Boston Code Camp 25, one on my own and one with my good friend and colleague, Bob Goodearl. We’ve just posted the materials, which may be useful beyond the presentation.

TypeScript 101

This session covers the basics of the language. I tried to distill the whole thing into a set of code samples, inspired by the old “Got Dot Net” site from days of yore. You can find the Github repo here, including project folders for both Visual Studio Code and Visual Studio 2013.

TypeScript 102

This session delves into creating AngularJS 1.x applications in TypeScript. I started off with the simple example of a weather “widget”. A widget is a small application that runs independently on a page; in this case I used the Widget Wrangler library to place the widget on the page. Because it’s small and simple, you can easily see how to set up an Angular controller and service in TypeScript, and how to handle Angular promises.

After that, Bob Goodearl picked it up with a more advanced example that shows a hybrid Angular/ASP.NET MVC application with a WebAPI back-end service. Pointers to his code and the other session materials are here on his web site.

Please check it out and send feedback in the comments; thanks!

Microsoft’s New Approach to Collaboration and Portals

At the Ignite conference last week, Microsoft laid out a new vision for collaboration and portals that is a major departure from the site-based approach that has been the core of SharePoint for more than a decade. Microsoft still fully supports SharePoint in its current form and will continue to do so, both on premises and in Office 365, even as it introduces Office 365 Groups and a new suite of Office 365 “NextGen” portals that could replace SharePoint sites for enterprises that want a more modern, cloud based approach to collaboration. SharePoint sites will continue to work, but it’s unlikely Microsoft will invest in enhancing them beyond where they are in SharePoint 2013.

Continue Reading

A Brand New Vantage Point

OldVantagePointWelcome – you have arrived at my new blog!

After nearly a decade blogging at MSDN, it’s time for me to strike out on my own. Microsoft was really nice to let me keep blogging after I left their employ to work at BlueMetal Architects, and Chris Bortlik was good enough to sponsor me (thanks Chris!) But alas, all good things must come to an end; a policy change means that partners can no longer post on MSDN.

So welcome to my new blog! As far as I know, Microsoft will leave my old articles where they are for the time being, and I plan to update some of them and re-post them here. Thanks for reading!