Automating GDPR Request for Microsoft Dynamics

And just like Office 365, On-Premises SharePoint and any other application that has a Privacy Central application stub sitting in front of it, you can also automate your Microsoft Dynamics privacy requests.

Check out the video here:

Privacy Central – Privacy Score – What is it?

Not all applications or companies will take advantage of the new Privacy Platform. Reasons being they may be large social media companies such as Facebook (et all), Google (et all), Apple, Microsoft…etc.

Why? Because they implement something on their own. Its their best try at giving you something to appease the regulators in Europe, California or wherever else you may have regulations.

Ok, good to know they can’t use the platform so what’s the point?

The SaaS platform, www.privacycentral.com, allows for what are called “Redirect Applications”. These are applications that will redirect to the companies data request form or link. These links are usually hidden or only visible as a logged in user. These are the applications we are targeted for Privacy Scores. Although, there are some instances such as SalesForce, Dynamics, etc that will also get a privacy score.

What is the Privacy Score? It is a proprietary set of evaluation points (over 75+) that evaluate a company or a specific company’s application to tell you how safe it is. The specifics of the score are a close secret, but a couple things I can share is that some of the points are evaluated on the privacy policy and the terms of usage.

The goal is to add 2-3 Privacy Scores every week and post them to the PrivacyInc twitter handle along with the score to the SaaS platform. Eventually all major applications will be scored you will have a full view as to what applications are safe, and which ones are incredibly lacking.

You can get a view of the current set of scores here. Notice Instagram is the worst application you could possible utilize. And to think of all the children that are using that thing…not good.

Automating GDPR for On-Premises SharePoint

Yes, you can do it! Utilizing the Privacy Central privacy platform and its application stub framework, you can seamlessly operationalize your privacy requests for on-premises applications like SharePoint or any homegrown application.

Check out the video here:

Automating GDPR for Office 365

Yes, you can do it. Utilizing the Privacy Central privacy platform and its application stub framework, you can seamlessly operationalize your privacy requests for Office 365 and any other SaaS or homegrown application.

Check out the video here:

My Symphony

My name is Chris. This…is my 40-year symphony. It is choreographed to “Chopin”, and only “the best of”. So start this before you read on!

https://www.youtube.com/watch?v=wygy721nzRc

I, just like you, have 20+ years of hard work and ‘potential’.

We have startups galore under our belts.

And oh so many years of “keeping up” with the technology (for all you MCTs).

Let downs.

Beat downs.

Stock market disappointments

Divorce.

Life.

The dreaded, mid-life crisis.

Death.

We entirely…on our accord…”own” this “disappointing” world of ours.

Just like you, we are smart.

We know what the world wants.

We get it.

We know things before others do, yet we fail to act.

We lack the experience, yet we have…the “know-how”.

Some of you. Entire-ly possess it.

Call it…”courage”, if you will.

Yet….will you be one?

Will you, can you?

Take the risk?

We put in days. Months. Years.

Our entire life-force is put into something.

Something others may or may not ever appreciate. Or even know existed.

Creations.

Creations that change the very fabric of reality. Of humanity?

Of us? Or of we?

Visions…

Thoughts…

Life.

From these.

“we” create.

Good for some, evil for others.

We create.

Things that people never thought could ever exist.

Paths, not evolved until we showed the way.

So, I present…my symphony.

Based on privacy. Built on honor.

Done for the greater good.

May we preserve our dignity and rights, as Martin Luther King envisioned for all humans and guided by the musical greatness and creativity of “Chopin”.

May we all enjoy what I consider to be…

My life’s work….

I look forward to all the things that evolve from it as it is now presented to the human race.

https://www.privacycentral.com.

My Friend Tom Castiglia

It all started in Los Angeles for TechEd 2010.

After moving from Seattle with a big friend base, we found ourselves starting all over again. It didn’t take us long, but eventually we found intelligence gold! A very knowledgeable individual was doing a deep dive presentation on Windows Workflow Foundation. I was quite impressed and made it a point to strike up a conversation. Little did I know would this person, Zoiner Tejada, would eventually end up being one of my best friends, but also introducing me to his boss at the time, Tom Castiglia, co-owner of Hershey Technologies.

Hershey had a competitive product to SharePoint and Zoiner thought it a good idea to do a review of features between the two. I ended up meeting Tom and chatting for a few hours about the feature gaps between the two and if they should continue development. I was impressed with Tom’s quick acumen to pick up what I was saying…in typical Tom fashion:

“Gotcha”

Being that I had just left an incredible user group in Seattle (Puget Sound User Group) I was looking for something similar in San Diego. We had one, but it wasn’t doing what I felt it needed to do at the time, so I created SanSPUG.org. I was lucky enough to have my friend Kevin Landry offer his facilities at New Horizons Miramar and after the first couple of meetings, Tom started attending. He offered up to be a sponsor and eventually became my founding member and vice president. As it started to grow, Galen and Tony came into the picture and joined our board.

Tom Castiglia and our first year of SanSpug.org

Little did I know that these friendships would evolve into something magical. SharePoint Saturday’s were still in there beginnings back then and were on the upswing. I decided to pursue our first SPSSAN and we went big. I was able to call in a lot of personal favors and we had an amazing budget that allowed us to host it at the San Diego convention center.

If you run a user group or a SPS, you know how much work it is. After the first couple and $20K of my own money into it I decided to pass on the reins and Tom gladly accepted the role as President. He did an amazing job with the group and eventually convinced Microsoft to host us at the La Jolla office. And that’s where the lovely Sal Rosales came into the picture. He has been our sponsor and biggest fan. Through the years we were able to create incredible presentations and invite speakers from all over the world. Our user group and our events are, in my opinion, second to none. I believe that to be true due to the incredible bond we all have with each other.

It was always nice to go out afterwards and have a beer…that was definitely Tom’s favorite. He loved to go to Brewski’s Bar & Arcade. We’d all meet and talk about our month and what we were working on, do a little gossip of the what’s happening around town, they were insightful chats. In many cases, raw, unfiltered and full of trust.

As we worked more and more with the user group, I came to appreciate Tom’s hard work and dedication. It was at this time I was approached by eBay/PayPal to look at performing their SharePoint migration. I knew that it would be a big project and I’d need help. I approached Tom and he gladly accepted the challenge and trusted my estimate of the work. Hershey and I was able to complete the project successfully and within $5K of my original estimate.

It was quite the project and Tom and I talked almost every day for 4 months and we had a blast running around San Jose and San Francisco together. After we finished the project, we continued our user group activities and then Tom and his wife would join me on all my SharePoint conference adventures. eBay was featured that year as a reference customer and we had the Microsoft video crew out to eBay to film all our hard work.

As the years went by, Tom made a global name for himself and took advantage of every opportunity. I watched him from a far and we talked about a lot of stuff (selling Hershey, hiring Joel, leaving Konica and doing his own thing….). We trusted each other and he was a good friend that had his opinions on things but always accepted my crazy odd-ballness over the years. He was a true friend in every sense.

I’d have parties at my house, he and Martha was at every one. He had parties and we would go over and we had a blast!

Just last year I made it a point to get out of the country more. I was able to join Joel and Paul for China; Sheila and I went to Singapore. But more importantly, we also were able to make it down to Cuba. Running around Havana with Tom and Martha was a once in a lifetime experience and I’m happy that we got to have it with them.

Since the original crew started (Tom, Galen, Tony, etc), we have only grown our family here in San Diego. We now have Joel and David, and Ryan. Ryan has been generous enough to step in to take over the San Diego user group reins. With Tom no longer here, Ryan’s help is even more needed to keep things going as we all have so many things going on.

It’s hard to come to terms with the fact I won’t get to see him again. It’s also tough to know that he had such a exponential curve going for him; business, career and life-wise. He had big plans, and although the road was slow going, he kept at it. Everyday.

Knowing that this didn’t have to happen and could have been prevented is one of the tougher parts to deal with. We can only focus on the “butterfly flaps its wings” purpose of it happening and how we’ll change ourselves to honor his memory. I’m by no means the person Tom was, but he gave me a template and something to work towards. It’s the best way I can honor his memory till it’s my time one day.

It’s inevitable that people will come and go in your life, some will be more influential than others. For Tom, he leaves a hole in our local and global community that can’t be filled by any one person. It will take a little bit of everyone to help fill that gap. Tom represented Satya’s and Microsoft’s vision of empathy and caring. The world could use more Tom’s, not less. I encourage you (and even more-so myself), to try to be like Tom.

Miss you brother. Love.

If you have a story or pictures that you’d like to share about Tom, please post them to the memorial site we setup in his honor:

https://www.forevermissed.com/tomcastiglia

Microsoft SharePoint Conference 2019

Another year, another conference! Microsoft and SharePoint has evolved immensely in the past 20 years. For those of us that have been around that long (inside and outside Microsoft, and those that were outside and are now inside), watching it grow with the industry and web technologies has been exciting and at times maybe not so much.

Probably the most interesting thing to watch has been seeing the community evolve. Just like the stock market, it comes and goes in cycles. Newbies come in, experts go out. Some strike it rich, others not so much. Entire ecosystems were built from SharePoint; companies were created, companies died.

So where do we reside today? From someone that has been around a while (yeah, there are a few left standing that have been around much longer), I see a new cycle starting. Lots of fresh newbies have arrived with energy and fresh ideas (well kinda, its hard to not think of something that someone hasn’t tried, but nice to watch someone attempt it again even if it may not go anywhere). I have always promoted finding super smart new speakers to fill the conference pool and now I find myself working for Solliance which has been a long time conference participant in conferences like DevIntersection, Azure AI, AngleBrackets and a few others. As part of that my voice is a bit bigger given all the time and energy I contribute (yes, I do most of this work for free as part of my contributing back to the community).

Running a conference is a lot of work. More than you could imagine. SharePoint Saturday’s are one thing, a full blown conference with 5000+ attendees and demanding speakers and conference owner(s) can drive any person a bit crazy at times (next time you see Lyman, you should buy him a a nice stiff drink).

This year has been a bit different from the logistics side as we have moved to the new Hubb platform for speaker and session management. This presents some interesting challenges as we have to sync the data from the Hubb to the Solliance backend. As a PowerShell master, I was able to take from the many millions lines of PowerShell I have laying around and easily build a sync layer (multi layers of auth, two different web technologies). This layer works great as a point to point sync, but as you start to add new rules and requirements such as:

  • Only speakers that have accepted and signed
  • Session must be approved
  • Only community ones should be published
  • Titles change with no static session codes
  • etc etc etc

As you can imagine and may have noticed once or twice, not a simple or well oiled machine starting out. However, things have converged and its working well now. Unfortunately, the back-end needed some work as we were not utilizing the awesome new “slot” technology of Azure Web Apps nor were we fully utilizing the CD/CI of AzureDev ops. And let’s just say there wasn’t really a naming convention implemented so managing the Azure resources was a real pain in the a$$. That has since been resolved and all of the Git repos are tied to build and release in AzureDev ops that then push to our staging slots. From there our release manager can then switch the production and stage slots for instant deployment. I am thoroughly enjoying not having to manage any of this now…automation is beautiful.

In addition to all the above, I have been busy running through security and testing of our GDPR\AB375\PIPEDA platform (which is the topic of my SPC19 session). Building a platform makes you realize just how much people don’t know about GDPR technical implementations. It is by far the best content I have ever produced and I guarantee you will learn things that the EU or CA lawyers never would be able to tell you.

Looking forward to seeing you at SPC19 in May! Register here for $50 off registration.

Content Type Document Template – The right way.

Here is the code to set the document template for a Content Type such that when adding it the “Content Type” field in the library will be set properly.  Notice how you have to get the XmlSchema property for the _cts folder name (the content type name now, may not be the name later).

function SetDocumentTemplate($ctName, $filePath)
{
$fi = new-object system.io.fileinfo($filePath);

if (!$fi.exists)
{
return;
}

$contentTypes = $context.Site.RootWeb.ContentTypes
$context.Load($contentTypes)

try{
$context.executeQuery()
write-host "Getting Content Types - done." -ForegroundColor Green
}
catch{
write-host "Error While Fetching content types $($_.Exception.Message)" -foregroundcolor red
}

$contentType = $contentTypes | Where {$_.Name -eq $ctname}
$context.Load($contentType)
try{
$context.executeQuery()
write-host "Getting Content Type - done." -ForegroundColor Green
}
catch{
write-host "Error While Fetching $($ctName) content type $($_.Exception.Message)" -foregroundcolor red
}

[xml]$data = $contenttype.SchemaXml;

$folder = $context.Site.RootWeb.GetFolderByServerRelativeUrl("$($data.ContentType.Folder.Attributes["TargetName"].Value)");
#$folder = $context.Site.RootWeb.GetFolderByServerRelativeUrl("Document Templates")
#$ctsfolder = $context.Site.RootWeb.GetFolderByServerRelativeUrl("_cts");
#$subfolders = $ctsFolder.Folders;

$context.Load($folder)
#$context.Load($ctsfolder)
#$context.Load($subfolders)

try{
$context.executeQuery()
write-host "Loading folder done." -ForegroundColor Green
}
catch{
write-host "Error While Getting $($ctname) content type information $($_.Exception.Message)" -foregroundcolor red
}

<#
$enum = $subFolders.GetEnumerator();

while($enum.MoveNext())
{
write-host $enum.Current.ServerRelativeUrl;
}
#>

$templateName = $folder.ServerRelativeUrl + "/" + $fi.Name;

write-host "Uploading $($templateName) document template... " -NoNewline
$FileStream = New-Object IO.FileStream($filePath,[System.IO.FileMode]::Open)
$FileCreationInfo = New-Object Microsoft.SharePoint.Client.FileCreationInformation
$FileCreationInfo.Overwrite = $true
$FileCreationInfo.ContentStream = $FileStream
$FileCreationInfo.URL = $fi.Name;
$Upload = $folder.Files.Add($FileCreationInfo)

$contentType = $contentTypes | Where {$_.Name -eq $ctname}
$context.Load($contentType)
try{
$context.executeQuery()
write-host " done." -ForegroundColor Green
}
catch{
write-host "Error While Uploading $($templateName) document template $($_.Exception.Message)" -foregroundcolor red
}

write-host "Setting $($ctname) content type document template... " -NoNewline
$contentType.DocumentTemplate = $fi.Name;
$contentType.Update($true)

try{
$context.executeQuery()
write-host " done." -ForegroundColor Green
}
catch{
write-host "Error While Setting $($ctname) content type document template $($_.Exception.Message)" -foregroundcolor red
}
}

Event Grid Trigger to Cosmos DB Azure Function v2

I have about five different Microsoft Cloud Workshops (MCW)s that I support.  Every couple of months we have to update them due to the changes that are made to Azure UI and changes to the core functionality.

One of the MCWs is based on serverless architecture.  Part of the labs has you deploy an Azure function from Visual Studio, and another part has you manually create the Azure functions.  The thing is, they utilize CosmosDB as the output from a Event Grid trigger with “JavaScript”.

Turns out, they removed “JavaScript” from the list of options (actually, there are no more options) for some reason, although they did hint at it being an unsupported language.  So what does that mean for us?  Well, I had to convert the javascript to C# 2.0 function code and let’s just say, it took a while.  Here’s the original code for the JavaScript version of the function:

module.exports = function (context, eventGridEvent) {
        context.log(typeof eventGridEvent);
        context.log(eventGridEvent);
        context.bindings.outputDocument = {
            fileName : eventGridEvent.Data["fileName"],
            licensePlateText : eventGridEvent.Data["licensePlateText"],
            timeStamp : eventGridEvent.Data["timeStamp"],
            exported : false
        }
        context.done();
    };
Here is the C# v2.0 version of the function:

#r "Microsoft.Azure.EventGrid"
#r "Microsoft.Azure.WebJobs"
#r "Newtonsoft.Json"
#r "Microsoft.Azure.DocumentDB.Core"
#r "Microsoft.Azure.WebJobs.Extensions.CosmosDB"
using Microsoft.Azure.EventGrid.Models;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.CosmosDB;
using Microsoft.Azure.WebJobs.Host;
using System.Collections.Generic;
using Microsoft.Extensions.Logging;

public static void Run(JObject eventGridEvent, out JObject outputDocument, ILogger log)
{
log.LogInformation(eventGridEvent.ToString());
dynamic data = eventGridEvent["data"];

outputDocument = new JObject();
outputDocument["fileName"] = data.fileName;
outputDocument["licensePlateText"] = data.licensePlateText;
outputDocument["timeStamp"] = data.timeStamp;
outputDocument["exported"] = false;
}

Enjoy!
Chris

CJG is joining Solliance!

Some exciting news in the land of CJG.

I’ll have made the move over to Solliance.net!

Solliance

This is exciting for me on many levels.  The first being the incredibly smart people I’ll be working with that include, not one, not two, but THREE Microsoft Regional Directors (Michele, Zoiner and Brian) with a fourth (Tim) but a stone throw away!  That’s 4 of 150 in the world!

For those of you that know all the things that Solliance actually does, I’m sure you are running through your mind all the ramifications of this move!

Solliance has gained an incredible trust with Microsoft internally and with customers globally and I’m looking forward to getting big things done in 2018!  Some of the fun things I can talk about include the Microsoft Partner Playbooks (which were a highlight of WPC\Inspire last year), high level internal Microsoft training and external partner training based on the partner playbooks, and so much more!

Without divulging the entire 2018 strategy, I’ll simply say that you’ll be seeing a lot of me (and possibly some other familiar names) out in the field when it comes to security and compliance work!

So what happened with ShareSquared?

The last two years have been spent working with the folks at ShareSquared building some cool products and doing some very interesting projects in the state and local government space.   I was able to build a product called PowerStreamECM that implemented many more features than the more marketed migration tools such as AvePoint or ShareGate.  Additionally Shannon Bray and I were able to build a very advanced Desired State Configuration (DSC) deployment configuration and execution engine that automated deployment of every top SharePoint vendor product (yes I decompiled all of them into deployable modules) with enforced governance and configuration (in ways that DSC was not originally destined to do).

Additionally, we also automated many of the operational things that come with running a consulting company to levels that I have never seen before in other consulting companies.  Oh and I moved us from on-premises to full Azure\Office 365 this year as well (I had to do something as CTO right?).

We got a lot of stuff done in two years and I’m proud of that, but its time to take my skills and my life to the next chapter!

Life

2015-2017 marked one of the more difficult periods of my life.  I wouldn’t exactly call it a “mid-life-crisis” but life certainly gave me a few scares and those crisis’ taught me it doesn’t get any easier the older you get, just more complex and that anything can happen at any time.

Ultimately, it’s how you handle it, grow from it and evolve.  Lucky to have so many supportive and wonderful people that were there for me throughout that crazy period and continue to be!

The best thing I can do now is to follow through and be an example for others to reference and show those that have faith in me that “I got this”.

From this past weekend at our SharePoint Saturday San Diego, the comments and compliments towards the notice in my “change” were very much appreciated.  As many of you know…lots of credit to Sheila E. and just the fact you have to grow up at some point!

2018

Bring on 2018 and the rest of our lives, let’s change the world!

Enjoy!
Chris