Quantcast
Channel: MSDN Blogs
Viewing all 12366 articles
Browse latest View live

TFVC and Git repositories in the same team project

$
0
0

Many teams are transitioning from TFVC to Git for version control and want to keep their work items, build definitions, and other data in their team project. Now with TFS Update 1 or Team Services, you can add Git repositories to your existing team project created with TFVC. In addition, you can add TFVC to an existing team project created with Git repositories.

This enables you to experiment with Git in your current team project or move all your TFVC code to Git. Teams often choose to only move the latest version of their code when they switch to Git, which is how we migrated the VSTS code from TFVC to Git. Having TFVC and Git repositories in the same team project allows you to easily access your work items, builds, and code history without switching team projects.

It’s easy to add Git to your team project:

  1. Go to the Code hub group

  2. Open the repository selector

  3. Select “New repository…”

  4. Enter the name of your new Git repository

  5. Select “Create”

You’ll be taken to the new empty Git repository page with instructions on how to add code. The new repo is in the repo selector along with your existing TFVC repository. Each repository type has its own icon so it’s easier to see which repos are TFVC or Git.


Depending on when your team project was created, you’ll need to modify version control permissions to allow access to the new repository type. This article provides details on how to update permissions, and we’ll remove the need to update permissions in more scenarios between now and Update 2.

If you use Visual Studio, Visual Studio 2015 Update 1 has support for team projects with both repo types. Just refresh the connection to your team project and the new repo type will appear. VS 2015 RTM and previous versions will only show the type of repo created with the team project.

I’m happy to deliver a top request on uservoice. More are on the way.

Jeremy Epling
VSTS / TFS Program Manager


Visual Awesomeness Unlocked – The Scroller Visual

$
0
0

By Amir Netz – Technical Fellow and Fredrik Hedenström- Visual Genius

Today I have the great pleasure introducing another great visual from the master - Fredrik Hedenström.

Those of you with a better-than-a-cat memory may remember Fredrick’s three submissions to the Power BI Custom Visual contest in September where won the overall second prize for his KPI indicators.

Fredrik’s new creation is the Scroller visual and with his usual attention to detail and great visual design he produced another clear winner.

The Scroller visual makes it possible to create an animating scrolling text from your measures and dimensions. It will be especially useful when displaying a dashboard on a large screen in a reception, on a production floor or something similar. Since it is constantly moving it will catch the viewers eye and make existing reports come more to life. You can also write your own custom text to use it to display a message or instruction. Various settings make it possible to control speed, size, status indications, coloring, etc.

As usual – you can find the new visual in the Power BI Visuals Gallery.

In the video below hear Fredrik showing off his new creation. The choice of background music (ancient 15th century Swedish music) was completely his and I wash my hands off it.

Enjoy!

Ok – the part about the 15th century Swedish music is not true. Everything else is.

Outlook 2016 – Quick Start Guide

$
0
0

Office 2016 is available within education at no cost, as part of your academic institution’s existing Microsoft licensing agreement. You can check your eligibility to upgrade to Office 2016 with your academic email address.

---

Outlook logo (2)

Following the launch of Office 2016 in September, we have been working our way through a number of Quick Start Guides to cover the basics and provide some usage tips. This is the final guide of the series, and looks at Outlook 2016.

Crucial to the smooth running of any school, college, university or business, is communication and organisation. Say 'Outlook' to someone, and they'll immediately think 'email'. But there is so much more to Outlook than simply the creation and exchange of emails. The Outlook 2016 Quick Start Guide below goes through a number of everyday features and highlights some of the ways you can use Outlook to stay organised, allowing you to focus on the teaching or learning.

Set up your account
You can use Outlook 2016 as soon as you enter your account info. On the ribbon, click File > Info and then click the Add Account button. Sign in with your preferred email address, or use the information provided by your company or school.

Create new items
In Mail view, on the Home tab, click New Email to compose a new email message, or click New Items and choose the type of item you want to create.

Organize mail with rules
If you regularly receive large amounts of email from different sources, consider setting up rules that automatically file messages into mail folders you’ve created. Start by clicking the Organize tab, and then click Rules > Create Rule.

Switch between views
There’s much more to Outlook than email. At the bottom of the app window, you can easily switch between the Mail, Calendar, People, Tasks, Notes, and Folders views to manage all aspects of your busy life.

Commands on the ribbon will switch to match the view you’ve selected, as will the information shown on the Outlook status bar at the bottom of the app window.

Set your preferences
Something not working quite as expected? It’s easy to change and customize options at any time. Click File > Options, and then set up Outlook 2016 the way you want.

Get help with Outlook
Type a keyword or phrase into the Tell me what you want to do box on the ribbon to find the Outlook features and commands that you’re looking for, read our online Help content, or perform a Smart Lookup on the Web for more insights.

Get other Quick Start Guides
Outlook 2016 is just one of the newly designed apps in the new Office 2016. Visit http://aka.ms/office-2016-guides to download our free Quick Start Guides for the other new versions of your favourite Office apps.

Outlook 2016 – Quick Start Guide

$
0
0

Office 2016 is available within education at no cost, as part of your academic institution’s existing Microsoft licensing agreement. You can check your eligibility to upgrade to Office 2016 with your academic email address.

---

Outlook logo (2)

Following the launch of Office 2016 in September, we have been working our way through a number of Quick Start Guides to cover the basics and provide some usage tips. This is the final guide of the series, and looks at Outlook 2016.

Crucial to the smooth running of any school, college, university or business, is communication and organisation. Say 'Outlook' to someone, and they'll immediately think 'email'. But there is so much more to Outlook than simply the creation and exchange of emails. The Outlook 2016 Quick Start Guide below goes through a number of everyday features and highlights some of the ways you can use Outlook to stay organised, allowing you to focus on the teaching or learning.

Set up your account
You can use Outlook 2016 as soon as you enter your account info. On the ribbon, click File > Info and then click the Add Account button. Sign in with your preferred email address, or use the information provided by your company or school.

Create new items
In Mail view, on the Home tab, click New Email to compose a new email message, or click New Items and choose the type of item you want to create.

Organize mail with rules
If you regularly receive large amounts of email from different sources, consider setting up rules that automatically file messages into mail folders you’ve created. Start by clicking the Organize tab, and then click Rules > Create Rule.

Switch between views
There’s much more to Outlook than email. At the bottom of the app window, you can easily switch between the Mail, Calendar, People, Tasks, Notes, and Folders views to manage all aspects of your busy life.

Commands on the ribbon will switch to match the view you’ve selected, as will the information shown on the Outlook status bar at the bottom of the app window.

Set your preferences
Something not working quite as expected? It’s easy to change and customize options at any time. Click File > Options, and then set up Outlook 2016 the way you want.

Get help with Outlook
Type a keyword or phrase into the Tell me what you want to do box on the ribbon to find the Outlook features and commands that you’re looking for, read our online Help content, or perform a Smart Lookup on the Web for more insights.

Get other Quick Start Guides
Outlook 2016 is just one of the newly designed apps in the new Office 2016. Visit http://aka.ms/office-2016-guides to download our free Quick Start Guides for the other new versions of your favourite Office apps.

Outlook 2016 – Quick Start Guide

$
0
0
Office 2016 is available within education at no cost, as part of your academic institution’s existing Microsoft licensing agreement. You can check your eligibility to upgrade to Office 2016 with your academic email address. --- Following the launch of Office 2016 in September, we have been working our way through a number of Quick Start Guides to cover the basics and provide some usage tips. This is the final guide of the series, and looks at Outlook 2016. Crucial to the smooth...(read more)

Coded UI Test Extensibility V2

$
0
0

In VS2013 Update 2 we enhanced the Coded UI Test extensibility model to support plugins built for Windowless controls including controls in Modern Apps. These series of blogs should give an overview of the extensibility model exposed in Coded UI Test. Also, this blog explains a new extensibility QFE that we introduced earlier. In the current blog I will build upon the context from the above two links. These are the major goals that the new extensibility changes target:

  1. Windowless control support including extensibility for Modern Apps.
  2. Control Specific Support for only controls that the extension targets.
  3. Support API’s that are not closely tied to window handles.

Design Changes

For the above feature set, changes were made in the logic for Coded UI Tests authoring, playback and navigation. These changes involve the engine calling into a new set of API’s detailed below. These changes should be backward compatible and should continue to work for existing plugins since the base extensible points have default implementations for the new API’s to redirect to the existing API set.

Authoring

The Coded UI Test Technology Abstraction Layer (TAL) is now responsible for stitching the query ID of a control based on its corresponding UIA hierarchy. To elaborate on that the TAL would get a controls UIA hierarchy in terms of AutomationElements and then query each of the registered plugins for support for each node in the hierarchy. When a plugin claims support for a node through the GetControlSupportLevel API (surfaced in UITechnologyManagerProxy) it would then be queried again to create a query ID (from the Query Id property surfaced in UITechnologyElementProxy) for the range of nodes it supports. The TAL then would stitch the query ID’s (generated by the plugins) for controls in the hierarchy to obtain a leaf level control’s complete query ID. With this change TAL manages the generation of a complete query ID for an element as opposed to the earlier logic where individual plugins manage the generation of a query ID until it reaches a control in the hierarchy that it does not support. With this change, plugins providing control specific support for an intermediate control in the hierarchy take precedence over plugins providing default support.

 The below flowchart summarizes this change. Consider Tx to be technologies and Exx to be elements in the UIA hierarchy of a control.

 Playback/Navigation

Playback/Navigation is fairly the same as earlier except where there is a technology switch in the hierarchy in such cases, TAL would communicate across technologies via an AutomationElement which is now the common factor as opposed to a window handle earlier.

 

API Set

To better support Windowless controls, the following are the set of new API’s that we introduced.

Technology Manager

In UITechnologyManagerProxy/UITechnologyManager we added overrides for methods that were window handle based earlier to now also take AutomationElement:

  1. public virtual IUITechnologyElement GetElementFromPoint(int pointX, int pointY, AutomationElement ceilingElement)

    This method gets called from TAL and expects the plugin to return the element at the given point after creating its query ID. It is a requirement on the plugins to create a Query ID only until the ceiling element is reached. The ceiling element prevents plugins from encroaching into controls in the hierarchy that are better supported by other plugins. This API is called for the leaf nodes in the hierarchy.

  2. public virtual IUITechnologyElement GetElementFromAutomationElement(AutomationElement element, AutomationElement ceilingElement)

    This method gets called for intermediate elements in the hierarchy Query ID creation here follows the same strategy as earlier, having ceiling element as the limit for creating the query ID.

  3. public virtual IUITechnologyElement GetFocusedElement(AutomationElement ceilingElement)

    This is needed when recording so that the engine knows which control is being acted upon.

  4. public virtual int GetControlSupportLevel(AutomationElement element)

    Gets the support level of this technology manager for the control corresponding to the given Automation Element. The framework uses this function to select the right technology manager for the control.


Technology Element

In UITechnologyElementProxy/UITechnologyElement we added

  1. public virtual AutomationElement AutomationElement

    We use this AutomationElement value when we need to convert between technologies during playback.

In scenarios where a plugin does not implement these list of API’s we have default implementation to redirect to use the existing API functionalities based on window handles.

Resources

  1. This blog helps troubleshoot issues for plugin writers.

  2. Attached to this blog is a sample extension written for modern apps.

New book: Microsoft Office 2016 Step by Step

$
0
0

We’re pleased to announce the availability of Microsoft Office 2016 Step by Step (ISBN 9780735699236), by Joan Lambert and Curtis Frye.

Purchase from these online retailers:

Microsoft Press Store
Amazon.com
Barnes & Noble
Independent booksellers– Shop local

The quick way to get started with Microsoft Office 2016!

This is learning made easy. Get more done quickly with Microsoft Word, Excel, PowerPoint, and Outlook. Jump in wherever you need answers—brisk lessons and colorful screenshots show you exactly what to do, step by step.

• Covers Word, Excel, PowerPoint and Outlook
• Format documents for visual impact
• Quickly prepare personalized email messages and labels
• Build powerful workbooks for analysis and reporting
• Analyze alternative data sets with Quick Analysis Lens, Goal Seek, and Solver
• Prepare highly effective presentations
• Strengthen your presentations by adding tables and graphics
• Organize your email, scheduling, and contacts
• Look up just the tasks and lessons you need

About the authors

Joan Lambert is the author or coauthor of more than three dozen books about Windows and Office and three generations of Microsoft Office Specialist certification study guides. She has worked closely with Microsoft technologies since 1986, and in the training and certification industry since 1997. As President and CEO of Online Training Solutions, Inc. (OTSI), Joan guides the translation of technical information and requirements into useful, relevant, and measurable resources for people who are seeking certification of their computer skills or who simply want to get things done efficiently.

Curtis Frye is the author of more than 30 books, including Microsoft Excel 2013 Step by Step for Microsoft Press and Brilliant Excel VBA Programming for Pearson, UK. He has also created and recorded more than three dozen courses for lynda.com, including Excel for Mac 2016 Essential Training and Excel 2013: PivotTables in Depth. In addition to his work as a writer, Curt is a popular conference speaker and performer, both as a solo presenter and as part of the Portland, Oregon ComedySportz improvisational comedy troupe. He lives in Portland with his wife and three cats.

[Guest Post] Announcing F# Support in Visual Studio Code with Ionide

$
0
0

This is a guest post by Krzysztof Cieślak, an F# community developer and contributor to the Ionide project including its Visual Studio Code extension. To learn more about F# and engage with the community, head to fsharp.org. To learn more about the Ionide project, head to ionide.io.

Ionide is a suite of packages for the Atom editor that aims to provide a fully-featured, modern, cross-platform, open-source IDE for F# development. It's available via download using the Atom Package Manager.

At Connect, we announced the release of a set of Ionide extensions for Visual Studio Code, adding F#, Paket and FAKE support to this newly open-sourced, cross-platform editor.

What is Ionide?

Ionide provides the option of a lightweight cross-platform editor for programmers who don’t want to rely on Visual Studio or Xamarin Studio for every project. While both are full-featured IDEs with great F# support - much better in terms of plain language support features - there are many programmers, especially those coming from a functional programming background, who prefer a different style of tools.

Another important feature of the Ionide project is its integration with popular tools used by the F# community - such as Paket (alternative NuGet client), FAKE (F# Make), and the F# Yeoman generator. Ionide enables developers to use this unique, integrated, open source tooling workflow from the comfort of their editor.

Ionide is an eight month-old project with almost 500 commits, 120 versioned releases, and 13 contributors for the core Atom F# support plugin. And now, we're excited to start a new pillar of the Ionide project - Ionide for Visual Studio Code.

Ionide for Visual Studio Code

Visual Studio Code is new, cross-platform text editor created by Microsoft that combines the streamlined UI of a modern editor with rich code assistance and navigation, and an integrated debugging experience – without the need for a full IDE. As such, it has an aim similar to the Ionide project, and the decision to create a set of Visual Studio Code plug-ins was simple and natural.

How to start

Ionide plugins for Visual Studio Code can be installed using the new Visual Studio Code extension gallery - Ionide-fsharp is one of the featured extensions there, and there are also individual plugins for Paket and FAKE.

F# support

Ionide-fsharp provides an F# IDE-like experience in Visual Studio Code, with features like

  • Better syntax highlighting
  • Auto-completion
  • Error highlighting and error list
  • F# Interactive integration
  • Tooltips
  • Go to Declaration
  • Show symbols in file

Paket support

Paket is package dependency manager for .NET with support for NuGet packages and GitHub repositories. Ionide-Paket allows users to use Paket commands and manage packages without leaving the editor.

FAKE support

FAKE (F# Make) is a build automation system with similar capabilities to make and rake. It uses a domain-specific language (DSL) to make it easy to start using FAKE without needing to learn F#. Ionide-FAKE allows the user to run any build target defined in a FAKE build script, define default targets to run using keyboard shortcuts, and cancel any task in progress.

What's next?

In the near future, we hope to add integration with F# Yeoman generator to Visual Studio code to provide scaffolding for different types of F# projects. We will also work to offer integrations with other popular tools created by community such as FSharpLint and Fantomas. There are also many possible expansions of the core language services - finding references and symbols across an entire project, or adding support for CodeLens feature of Visual Studio Code. Together, we will build and grow a more vibrant and powerful F# cross-platform ecosystem.

Contributing to Ionide

Ionide is open source project hosted on GitHub under an MIT license. We accept pull requests, new feature proposals, and any suggestions on how we can make Ionide better!


Deploy a WordPress Azure Web App with an Alternative MySQL Database

$
0
0

I was recently presented with an interesting question about Azure Web Apps, WordPress, and MySQL. While not necessarily a “hard” question, the answer wasn’t as readily available as I first anticipated. I thought I would share my experience here in hopes of helping others.

The Question

How can you deploy a WordPress site using Azure Web Apps that uses a MySQL database instance that is not a ClearDB database available in the Azure subscription?

Background

Normally when you create a WordPress site using Azure Web Apps you are presented with an option to select an existing ClearDB MySQL database, or create a new one. But what if you don’t want to use an existing instance or create a new one? What if you want to use a MySQL database instance deployed to an Azure VM or you have a ClearDB MySQL database that doesn’t show in the Azure Portal (e.g. one of the ClearDB Basic offerings)?

The Answer(s)

Like most technology related questions (or life in general), there are a few ways to solve this challenge. There is the “easy” way, and there is the more powerful, yet slightly more complicated, some would argue the “right” way.

The Easy Way

The easiest approach is to create a WordPress site with Azure Web Apps and select either an existing ClearDB database or create a new ClearDB database. Once the WordPress site is deployed, you can then change the database connection string in the wp-config.php file to be the database you want (e.g. a ClearDB Basic instance or a MySQL instance on an Azure VM).

  1. Let the WordPress site be deployed, but do not complete the installation. In other words, once the site is deployed, browsing to the site’s URL should result in the standard WordPress default installation prompt.
  2.  
  3. Open the Kudu console by going to http:[your-site-name].scm.azurewebsites.net. If you’re already signed into the Azure Portal, you should proceed through without any authentication challenge. Otherwise you’ll be challenged for your authentication credentials.
  4. Navigate to the Debug console (via the menu on the top). Browse to the \site\wwroot\ directory.
  5. Edit the wp-config.php file by clicking on the pencil icon to the left of the file name. Doing so will switch to an edit view for the file. Don’t click on the delete icon. . . that’d be a bad thing.
  6. Within the wp-config.php file, change the DB_NAME, DB_USER, DB_PASSWORD, and DB_HOST values to be that of the desired database. Save the file. 
  7. Now reload your site – http://[your-site-name].azurewebsites.net. This should load the default WordPress installation page prompting you to complete the WordPress installation.
  8. Complete the installation. This should use the database setting as configured in the wp-config.php file to finish the WordPress installation.
  9. If you created a free ClearDB database to start with, feel free to delete that ClearDB database.

The Alternative

And now the real fun begins! In this alternative approach, an Azure Resource Manager (ARM) template can be used to create the WordPress site on Azure Web Apps and wire up a database of your choosing. To make this happen you will need the ARM template and a MySQL database of your choosing.

To get the ARM template, my first thought was that I could download the template that the Azure Portal is using and simply modify the database connection details to be what I wanted. Wrong. The templates I tried turned out to be a bit more complicated that I wanted. However, they did provide a good start and helped me understand what I needed to do.

If you’re curious, you can get the templates by invoking the PowerShell script below.

# Retrieve all available items

$allGalleryItems = Invoke-WebRequest -Uri "https://gallery.azure.com/Microsoft.Gallery/GalleryItems?api-version=2015-04-01&includePreview=true" | ConvertFrom-Json

# Get all items published by WordPress

$allGalleryItems | Where-Object { $_.PublisherDisplayName -eq "WordPress" }

$allGalleryItems | Where-Object { $_.Identity -eq "WordPress.WordPress.1.0.0" }

# Save default template for all items under directory "C:\Templates"

$allGalleryItems | Foreach-Object
{

    $path = Join-Path -Path "C:\templates" -ChildPath $_.Identity

    New-Item -type Directory -Path $path -Force

 

    $.Artifacts | Where-Object { $.type -eq "template" } | ForEach-Object {

        $templatePath = Join-Path -Path $path -ChildPath ( $_.Name + ".json" )

 

        (Invoke-WebRequest -Uri $_.Uri).Content | Out-File -FilePath $templatePath

    }

}

 

(original PowerShell sample from https://github.com/Azure/azure-powershell/issues/1064)

Using the ARM template obtained from the gallery sample as inspiration, I created a new ARM template. You can get the full sample on my GitHub repo at https://github.com/mcollier/AzureWebApp-WordPress-AlternativeDatabase.

"resources": [

    {

      "apiVersion": "2014-06-01",

      "name": "[parameters('hostingPlanName')]",

      "type": "Microsoft.Web/serverfarms",

      "location": "[resourceGroup().location]",

      "tags": {

        "displayName": "HostingPlan"

      },

      "properties": {

        "name": "[parameters('hostingPlanName')]",

        "sku": "[parameters('sku')]",

        "workerSize": "[parameters('workerSize')]",

        "numberOfWorkers": 1

      }

    },

    {

      "apiVersion": "2014-06-01",

      "name": "[variables('webSiteName')]",

      "type": "Microsoft.Web/sites",

      "location": "[resourceGroup().location]",

      "tags": {

        "[concat('hidden-related:', resourceGroup().id, '/providers/Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]": "Resource",

        "displayName": "Website"

      },

      "dependsOn": [

        "[concat('Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]"

      ],

      "properties": {

        "name": "[variables('webSiteName')]",

        "serverFarm": "[parameters('hostingPlanName')]"

      },

      "resources": [

        {

          "apiVersion": "2014-11-01",

          "name": "connectionstrings",

          "type": "config",

          "dependsOn": [

            "[concat('Microsoft.Web/sites/', variables('webSiteName'))]"

          ],

          "properties": {

            "defaultConnection": {

              "value": "[variables('dbConnectionString')]",

              "type": 0

            }

          }

        },

        {

          "apiVersion": "2014-06-01",

          "name": "web",

          "type": "config",

          "dependsOn": [

            "[concat('Microsoft.Web/sites/', variables('webSiteName'))]"

          ],

          "properties": {

            "phpVersion": "5.6"

          }

        },

        {

          "name": "MSDeploy",

          "type": "extensions",

          "location": "[resourceGroup().location]",

          "apiVersion": "2014-06-01",

          "dependsOn": [

            "[concat('Microsoft.Web/sites/', variables('webSiteName'))]",

            "[concat('Microsoft.Web/Sites/', variables('webSiteName'), '/config/web')]"

          ],

          "tags": {

            "displayName": "WordPressDeploy"

          },

          "properties": {

            "packageUri": "https://auxmktplceprod.blob.core.windows.net/packages/wordpress-4.3.1-IIS.zip",

            "dbType": "MySQL",

            "connectionString": "[variables('dbConnectionString')]",

            "setParameters": {

              "AppPath": "[variables('webSiteName')]",

              "DbServer": "[parameters('databaseServerName')]",

              "DbName": "[parameters('databaseName')]",

              "DbUsername": "[parameters('databaseUsername')]",

              "DbPassword": "[parameters('databasePassword')]",

              "DbAdminUsername": "[parameters('databaseUsername')]",

              "DbAdminPassword": "[parameters('databasePassword')]"

            }

          }

        }

      ]

    }

 

The most relevant section is the MSDeploy resource extension.  It is this extension that deploys WordPress and gets the default database connection string set up. You provide the database server name, database name, database username and database password as input parameters to the ARM template. The ARM template will use those parameters to construct a database connection string in the proper format (set in a variable in the template).

Once the template is created, it can be deployed with a few lines of PowerShell:

$ResourceGroupName = "wordpress-001"

$ResourceGroupLocation = "East US"

$TemplateFile = "azuredeploy.json"

$TemplateParametersFile = "azuredeploy.parameters.json"

 

# Create or update the resource group using the specified
template file and template parameters file

New-AzureRmResourceGroup -Name $ResourceGroupName
-Location $ResourceGroupLocation
-Verbose -Force
-ErrorAction Stop

 

New-AzureRmResourceGroupDeployment -Name ((Get-ChildItem
$TemplateFile).BaseName
+ '-' + ((Get-Date).ToUniversalTime()).ToString('MMdd-HHmm')) `

                                   -ResourceGroupName $ResourceGroupName `

                                    -TemplateFile $TemplateFile `

                                   -TemplateParameterFile $TemplateParametersFile `

                                   -Force -Verbose

 

The reason I like this approach is that it is very clear what is being deployed. I can customize the template however I like, adding or removing additional resources as needed. Plus, I don’t have to go through that "create a database just to delete it" dance.

For instance, I can envision a version of this ARM template that may optionally set up a MySQL database on an Azure VM. Oh . . . look here, https://azure.microsoft.com/en-us/documentation/templates/wordpress-mysql-replication/.  Someone already did mostly just that! That template could be modified to have some options to allow for the creation of a database in a few different configurations. Thanks for saving me some work. Naturally I found this after I went through all the work above. Go figure! 

SQL Server Data Tools の入手と注意点

$
0
0

SQL Server Developer Support チーム

 

概要

SQL Server Reporting Services のレポートや、Integration Services パッケージ、Analysis Services のデータベース等を作成するにあたって、Business Intelligence Development Studio(SQL Server 2008 R2 までのツール) や SQL Server Data Tools(SQL Server 2012 以降のツール)を使用します。

SQL Server 2012 までは、SQL Server のインストーラーから、Business Intelligence Development Studio や SQL Server Data Tools をインストールすることができました。

SQL Server 2014 より、SQL Server Data Tools は SQL Server のインストーラーに含まれず、個別にダウンロードする必要があります。

ここでは、SQL Server Data Tools の入手先や注意点についてご案内します。

 

ダウンロード

 Visual Studio 2010Visual Studio 2012Visual Studio 2013
インストール済み未インストール
SQL Server 2012Visual Studio 2010 SP1 適用してから SQL Server 2012 メディアからインストール(*1)SQL  Server 2012 メディアからインストールこちら    (*2)なし
SQL Server  2014なしなしこちら    (*3)

※予め Visual Studio をインストールしていなくとも、上記ダウンロードのインストーラーで SQL Server Data Tools をインストールすることができます。

(*1)

Visual Studio 2010 が予めインストールされている環境に、SQL Server 2012 のインストールメディアから、SQL Server Data Tools をインストールする場合、Visual Studio 2010 に Service Pack 1 が適用されている必要があります。
もし、Service Pack が適用されていない場合、SQL Server Data Tools をインストールしようとしたインストーラー上で以下のエラーが発生します。

ルール "以前の Visual Studio 2010 のインスタンスは、更新する必要があります。" は失敗しました。
このコンピューターには、機能の選択に基づいて SQL Server を正常にインストールするための Service Pack 1 更新プログラムを必要とする、 Visual Studio 2010 のインストールがあります。続行するには、必要な Visual Studio 2010 Service Pack 1 を SQL Server メディアから、または
http://go.microsoft.com/fwlink/?LinkId=220649からインストールしてください。


(*2)

Microsoft SQL Server Data Tools - Business Intelligence for Visual Studio 2012 (SSDT-BI for VS 2012) のインストールには、事前に.NET Framework 4.5 が必要となります。
.NET Framework 4.5 は下記サイトからダウンロード可能です。
http://www.microsoft.com/ja-jp/download/details.aspx?id=30653

表中のダウンロード先のリンクの「システム要件」にこのほかのシステム要件も記載があります。詳細を確認してください。


(*3)

Microsoft SQL Server Data Tools - Business Intelligence for Visual Studio 2013 (SSDT-BI for VS 2013) のインストールには、事前に.NET Framework 4.5.1 が必要となります。
.NET Framework 4.5.1 は下記サイトからダウンロード可能です。
http://www.microsoft.com/ja-JP/download/details.aspx?id=40779

表中のダウンロード先のリンクの「システム要件」にこのほかのシステム要件も記載があります。詳細を確認してください。

 

インストール時のトラブルシュート

SSDT-BI for VS 2012 / 2013 のインストール時に次のエラーが発生する場合は、以降をご確認ください

ルール "同一アーキテクチャのインストール" は失敗しました。

インストールする機能の CPU アーキテクチャが、指定したインスタンスの CPU アーキテクチャと異なっています。
続行するには、このインスタンスと同じアーキテクチャの機能を追加してください。

エラーの原因

SSDT-BI for VS 2012 のインストーラーは [SQL Server 2012 セットアップ]、SSDT-BI for VS 2013 のインストーラーは [SQL Server 2014 セットアップ] を使用しています。
そのため、SQL Server 2012 / 2014 をインストール済みの環境では、[インストールの種類] ステップで「既存の SQL Server 2012 インスタンスに機能を追加する」または「既存の SQL Server 2014 インスタンスに機能を追加する」を選択できます。
また、SSDT-BI for VS 2012 / 2013 のインストールが開始される前にも、他の SQL Server の機能と同様に [機能構成ルール] ステップのチェックが行われます。

以上の動作より、既に x64 の SQL Server 2012 / 2014 がインストール済みの環境を対象に [インストールの種類] ステップで「既存の SQL Server 2012 インスタンスに機能を追加する」または「既存の SQL Server 2014 インスタンスに機能を追加する」を選択しますと、x86 の SSDT-BI for VS 2012 / 2013 と CPU アーキテクチャが異なるために、上述のエラーが発生します。

対処方法

下記のスクリーンショットのように既定値の「SQL Server 2012 の新規インストールを実行する」または「SQL Server 2014 の新規インストールを実行する」を選択した状態でインストールしてください。

image

 

関連情報

米国の MSDN Blog となりますが、以下の Blog にいち早く情報が記載されることがあります

Microsoft SQL Server Data Tools
http://msdn.microsoft.com/en-us/data/hh297027

SQL Server Data Tools Team Blog
http://blogs.msdn.com/b/ssdt/


更新履歴

2015/12/04: SSDT-BI for VS 2012 / 2013 のインストール時のトラブルシュートを追記しました。

Dynamics CRM 2016 SDK 8.0.0 がリリースされました!!

$
0
0

みなさん、こんにちは。

先日提供が開始された Microsoft Dynamics CRM 2016 に対応した
SDK 8.0.0 がリリースされました。以下の リンクよりダウンロード可能です。

Microsoft Dynamics CRM Software Development Kit (SDK) for CRM Online and on-premises CRM 2016
https://www.microsoft.com/en-us/download/details.aspx?id=50032

Dynamics CRM 2016 で提供される新しい SDK の情報は今後順次紹介して
行きますので、お楽しみに!

‐ 中村 憲一郎

X++ in AX7: Finally and using

$
0
0

Finally, X++ got support for the finally statement. It has exactly the same semantics as in C#. This means that you can now write: 

try 
{
}     
catch 
{
}      
finally 
{
}      
 

The contents of the finally block is guaranteed to be executed - regardless of exceptions or transactions. It is typically used to clean up any usage of none-managed resources. And to make that construct even cleaner, you can use the using keyword for types implementing the System.IDisposable interface.

using(var myObject = new MyObject()) 
{
    myObject.someMethod();  
}  
 

This is short hand for:

var myObject = new MyObject();  
try 
{
    myObject.someMethod();  

finally 
{
    myObject.Dispose();  
}  

One more thing…

Just like in C# the using statement can also be used to avoid providing fully qualified names when referencing .NET types. This means I can implement MyObject like this:

using System;  
class MyObject implements IDisposable   
{              
    public void Dispose()
    {
    }
}     

 

THIS POST IS PROVIDED AS-IS AND CONFERS NO RIGHTS

Authenticated Encryption - CAPI2 does not support authenticated encryption mode

$
0
0

Authenticated Encryption (AE) or Authenticated Encryption with Associated Data (AEAD) is a block cipher mode of operation which simultaneously provides confidentiality, integrity, and authenticity assurances on the data; decryption is combined in single step with integrity verification. - Referenced from Wikipedia. See reference below.

Crypto API’s or CAPI2 does not support authenticated encryption mode. This means there are no API's in CAPI2 that can be used to implement authenticated encryption.
It can only be done using CNG where BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO structure can be passed to CNG API’s for example BCryptEncrypt() to implement authenticated encryption.

Additional Info:

CryptoAPI’s such as CMS functions – they don’t have a way to pass an authenticated cipher mode structure. The API CryptMsgOpenToEncode or CryptMsgUpdate bails out with CRYPT_E_INVALID_MSG_TYPE when CMS encrypted message type is passed to it.

The open forum "Authenticated Symmetric Encryption in .NET" (Link: http://blogs.msdn.com/b/shawnfa/rss.aspx?Tags=Cryptography) shows a way to implement authenticated encryption in .Net. The open source also uses the implementation of AuthenticatedAesCng which is in Security.Cryptography.dll and is built on top of  CNG.

In summary, authenticated encryption was implemented over CNG's BCrypt APIs.

References:
https://msdn.microsoft.com/en-us/library/windows/desktop/cc562981(v=vs.85).aspx
https://en.wikipedia.org/wiki/Authenticated_encryption

Visual Studio Connect 2015 в России. Смотрите онлайн сегодня в 10:00 (МСК)

$
0
0

4 декабря в 10:00 (МСК) состоится онлайн-трансляция виртуального мероприятия «Visual Studio Connect в России», посвященного новым возможностям Visual Studio 2015 и экосистеме разработки Microsoft.

На мероприяти будут представлены новые возможности для разработчиков, инструменты, облегчающие создание приложений, их тестирование и другие этапы жизненного цикла разработки. Вы узнаете о последних глобальных нововведениях и функциях Visual Studio 2015, познакомитесь с облачными технологиями, инфраструктурой и кросс-платформенными возможностями.



В программе мероприятия:

  • Использование инструментов Visual Studio 2015 для создания кросс-платформенных и облачных приложений;
  • Новые возможности Visual Studio 2015 для эффективной разработки веб-приложений;
  • Облачные и локальные инструменты для тестирования и сопровождения кода;
  • Управление жизненным циклом проекта.


С подробной программой мероприятия можно ознакомиться на сайте.

Эксперты мероприятия:

  • Александр Белоцерковский, технологический евангелист, Microsoft
  • Владимир Юнев, технологический евангелист, Microsoft
  • Мария Горелкина, технологический евангелист, Microsoft
  • Евгений Шкляр, технологический евангелист, Microsoft

Подключайтесь к трансляции, задавайте вопросы докладчикам в прямом эфире и получайте ответы экспертов онлайн!

UWP : アプリ入ってますか? カスタム URI スキームをチェックする

$
0
0

UWP アプリ間で連携する際、連携先のアプリがあるかどうか確認したいことがあります。

例えば、新聞アプリやニュースアプリ上で選択したテキストに対して右ボタンクリックなどのコンテキストメニューから、辞書アプリを起動し選択した文字の意味を調べる、といったアプリ間連携のシナリオです。

 

この場合、アプリをアクティブ化する方法として、アプリに対してカスタム URI スキームを定義する方法があります。

プレインストールされているアプリでも URI スキームが用意されているものもあります。代表的なものとしてアプリが一覧表示されているマーケットプレイスである「ストア」アプリは、以下のリンクのように URI スキームが用意されています。

https://msdn.microsoft.com/ja-jp/library/windows/apps/mt228343.aspx

単に起動するだけではなく、パラメータを渡すこともできることが分かります。つまり、辞書アプリのシナリオ例もカバーできるアクティブ化の方法です。

 

さて、連携アプリ側でカスタム URI スキームを用意されていると、その URI が存在し必要な情報が一致すればアプリがインストールされているとみなしてアプリを起動する、といった方法をとることが少なくありません。

アプリがインストールされていない場合はボタンやトグルスイッチを disable 状態にして、アプリを起動したのにエラーになった、というユーザの満足度を下げるアプリのふるまいを制限することができます。

 

そこで、カスタム URI が存在しているかどうかのチェックですが、、、Windows 8/8.1 の Windows Runtime では残念ながらありませんでした。

Windows 10 では、Launcher クラスが強化され、URI スキームに対してアプリが割り当てられているかチェックする FindUriSchemeHandlersAsync メソッドが用意されました。

以下簡単な例です。

 private async void FindUriScheme()
 {
            var res = await Launcher.FindUriSchemeHandlersAsync("http");
            var resappinfo = res[0].PackageFamilyName;
}           
 

 

 

Classic Windows applications は対象ではありませんので、要注意です。

 

なお、ファイル拡張子によりアプリチェックする FindFileHandlersAsync メソッドも用意されています。このメソッドでは

Launcher.FindFileHandersAsync(".hoge")

といったように、. (ピリオド/ポチ)を付けて指定します。こちらも同様に、Classic Windows applications は対象ではありません。

 

 


XML signature & digest verification

$
0
0

.NET SignedXml class was only designed to adhere to the XMLDSIG specification. It has no knowledge of SAML, SAML 2.0, SOAP or any other higher level XML protocol. If you are using SignedXml for any other protocol other than XMLDSIG, the scenario is not supported.

SignedXml.CheckSignature method determines whether the signature property verifies for the specified key.
Ideally the CheckSignature method does two things:

1. Matches Signature
2. Validates digest value

How to match the signature? See code below.

For example consider the string named xmlString which has the signed XML.
We can do the following to get the SignedXml object say verifier.

XmlDocument doc = new XmlDocument();
doc.PreserveWhitespace = true;
doc.LoadXml(xmlString);
SignedXml verifier = new SignedXml();

Next, the SignedXml class must be given the value of the signature it is to validate. This can be done by looking for elements with the tag name of Signature. See code below:
verifier.LoadXml(doc.GetElementsByTagName("ds:Signature")[0] as XmlElement);

// Get the certificate from the XML. Say it is rawCertData (byte array)
X509Certificate2 x509 = new X509Certificate2();
x509.Import(rawCertData);

// Get the public key
AsymmetricAlgorithm key = x509.PublicKey.Key;
// =================================================================================
if (key == null)
    throw new ArgumentNullException("key");

SignatureDescription signatureDescription = CryptoConfig.CreateFromName(verifier.SignatureMethod) as SignatureDescription;
if (signatureDescription == null)
    throw new CryptographicException("123456789"); // "123456789" is an arbitrary value.

// Let's see if the key corresponds with the SignatureMethod
Type ta = Type.GetType(signatureDescription.KeyAlgorithm);
Type tb = key.GetType();
if ((ta != tb) && !ta.IsSubclassOf(tb) && !tb.IsSubclassOf(ta))
    // Signature method key mismatch
    return;

HashAlgorithm hashAlgorithm = signatureDescription.CreateDigest();
if (hashAlgorithm == null)
    throw new CryptographicException("123456789");

//====================================================
byte[] digestedSignedInfo = null;

string baseUri = (doc == null ? null : doc.BaseURI);
XmlResolver resolver = new XmlSecureResolver(new XmlUrlResolver(), baseUri);
XmlDocument docProcessed = PreProcessElementInput(verifier.SignedInfo.GetXml(), resolver, baseUri);
Transform c14nMethodTransform = verifier.SignedInfo.CanonicalizationMethodObject;
c14nMethodTransform.Resolver = resolver;
c14nMethodTransform.LoadInput(docProcessed);
digestedSignedInfo = c14nMethodTransform.GetDigestedOutput(hashAlgorithm);
//====================================================
AsymmetricSignatureDeformatter asymmetricSignatureDeformatter = signatureDescription.CreateDeformatter(key);

// Verify the signature
bool isSignatureOK = asymmetricSignatureDeformatter.VerifySignature(digestedSignedInfo, verifier.SignatureValue);
if (!isSignatureOK)
{
    Console.WriteLine("Signature invalid.");
}

Here is the code to verify the digest value.

string ObjId = ((System.Security.Cryptography.Xml.Reference)(verifier.SignedInfo.References[0])).Uri.Replace("#", "");
XmlElement xRefElement = verifier.GetIdElement(doc, ObjId);
XmlDocument xRefElementDoc = new XmlDocument();
xRefElementDoc.PreserveWhitespace = true;
xRefElementDoc.LoadXml(xRefElement.OuterXml);
// Get the digest value - customers code
byte[] rgb1 = ((System.Security.Cryptography.Xml.Reference)(verifier.SignedInfo.References[0])).DigestValue;

string strDigestValue = Convert.ToBase64String(rgb1);
// Verify the digest
bIsValid = VerifyDigest(xRefElementDoc, strDigestValue);

if (!bIsValid)
{
    Console.WriteLine("The computed digest & the digest present in the XML does not match.");
}

bool VerifyDigest(XmlDocument xAssertionDoc, string strDigestValue)
{
    // if xmlsignature is available in the XML then remove the signature node
    xAssertionDoc.DocumentElement.RemoveChild(xAssertionDoc.GetElementsByTagName("ds:Signature")[0]);

    //create c14n instance and load in xml file
    XmlDsigC14NTransform c14n = new XmlDsigC14NTransform(false);
 
   // Loading the Assetion Node into the canonicalization
   c14n.LoadInput(xAssertionDoc);

   //get canonalised stream
   Stream canonalisedStream = (Stream)c14n.GetOutput(typeof(Stream));

   //Creating SHA1 object to get Hash
   SHA1 sha1 = new SHA1CryptoServiceProvider();

   Byte[] output = sha1.ComputeHash(canonalisedStream);

   //Getting the Base64 version of digest Value computed
   string xmlDigestValue = Convert.ToBase64String(output);

   // If Computed and original digest value matches then return true else false.
   if (xmlDigestValue == strDigestValue)
   {
       Console.WriteLine("The computed hash matches with the Digest contained in the XML.");
       return true;
   }

   return false;
}

Reference:
https://msdn.microsoft.com/en-us/library/kd4wwa16(v=vs.110).aspx

Nový Azure portál je GA

$
0
0
Portál pro správu Microsoft Azure s kódovým označením "Ibiza", který byl dlouho v Preview včera toto stádium opustil a je nyní obecně dostupný. Zároveň se adresa portal.azure.com stává výchozí a nahrazuje dosavadní manage.windowsazure.com. Pokud jste s novým portálem v průběhu času pracovali, určitě si jako prvního všimnete výrazného zlepšení...(read more)

Azure News on Friday (KW49/15)

$
0
0

Auch diese Woche gab’s wieder viele Nachrichten zur Microsoft Azure Plattform. Hier sind nähere Infos dazu…

Aktuelle Neuigkeiten

DatumNachricht
03.12. Azure Managed Cache and In-Role Cache services to be retired on 11/30/2016
Wichtig für alle Nutzer von Azure Cache: Managed Cache und In-Role Cache nur noch bis 30.11.2016 nutzbar!
03.12. Azure Redis Cache: General availability of Premium tier
Azure Redis Cache Premium Tier verfügbar - Persistenz in Azure Storage, Clustering, höhere Performance
02.12. Announcing Microsoft Azure Backup Server
Azure Backup Server verfügbar - einfach Sicherungen für Microsoft Workloads (SQL, SharePoint, Exchange) erstellen
02.12. Announcing general availability of AzCopy 5.0 with File and Table Storage support
AzCopy 5.0 verfügbar - schnelles Kopieren von Inhalten in Azure Blob Storage, File Storage und Table Storage
02.12. Announcing general availability of App Service Mobile Apps
Die Azure App Service Mobile Apps sind allgemein verfügbar - Backends für mobile Apps schnell bereitstellen
02.12. Azure Container Service preview
Der Azure Container Service als Preview verfügbar - Bereitstellung von VM Clustern für Container-Deployments
02.12. Announcing Azure Portal general availability
Nach langem Warten... endlich ist es soweit: das Azure Portal (bisher Preview) ist allgemein verfügbar
02.12. Announcing new CDN features and capabilities in the new Azure Portal
Verbesserungen im Azure CDN - Verfügbarkeit im Azure Portal, neue SKUs (Standard und Premium), API Support etc.
02.12. Azure Security Center now available
Jetzt verfügbar: das Azure Security Center mit Möglichkeiten zur Überwachung und Absicherung eigener Cloud Apps
02.12. Announcing availability of Debian GNU/Linux as an endorsed distribution in Azure Marketplace
Azure Loves Linux - Jetzt auch Debian GNU Linux in Azure Virtual Machines unterstützt
01.12. Announcing Improved Azure SQL Database connection experience in SQL Server Data Tools
Neuerungen in den SQL Server Data Tools - Einfachere Connections zu Azure SQL Database (Auswahl aus Liste etc.)
01.12. Microsoft Azure DocumentDB: Retirement of Preview SDKs
Für Nutzer von Azure DocumentDB - Preview Versionen der REST API werden deaktiviert - deshalb jetzt upgraden!
01.12. Azure Stream Analytics Homepage
Azure Stream Analytics Homepage
01.12. Azure IoT Suite predictive maintenance now available
In der Azure IoT Suite ist jetzt eine vorgefertigte Lösung für Predictive Maintenance verfügbar
30.11. Announcing the Azure SDK 2.8.1 for .NET
Neues Azure SDK für .NET (Version 2.8.1) - Verbesserungen bei der Entwicklung App Service-basierter Anwendungen
30.11. Row-Level Security Block Predicates are Generally Available
Verbesserte zeilenbasierte Security in Azure SQL Database - Zugriffsschutz auf Zeilenebene
30.11. Azure SQL Data Warehouse: November 2015 Updates
Neuerungen in Azure SQL Data Warehouse - Verbesserungen im PolyBase Daten-Import, Clustered Columnstores etc.
29.11. Azure Toolkit For Eclipse With Java
Azure Toolkit For Eclipse With Java
29.11. Azure Chat for Java
Azure Chat for Java is a sample Java application designed to show key features of the Microsoft Azure SDK for Java

Neue Kurse in der MVA

DatumNachricht
29.11. Java on Microsoft Azure

Neue Videos

DatumNachrichtVideo
02.12. Cortana Analytics Vehicle Telemetry Analytics Solution Template

01.12. Tuesdays with Corey: Service Fabric public preview
Corey Sanders über die Azure Service Fabric, die aktuell als Public Preview zur Verfügung steht.
01.12. Azure Futures: Neues in der Azure Compute-Plattform
Überblick über die Azure Compute Platform - Virtual Machines, VM Scale Sets, Service Fabric, App Service etc.

TFS 2015 build drop folder explorer link not opening

$
0
0
Another amazing write up from Deepak Kumar Mishra, Emea Support Engineer, providing his experience while working on one of the issues with his customer, he has found that in Team Foundation Server(TFS) 2015 where we do not have the download link available in new build management system for the drops folder and while clicking on Explore; he got the following message as shown below. TFS 2015 Explore Link to open drop folder (explore button does not work as expected and shows the following message...(read more)

Holidays coming up? 5 things to do before you go on leave

$
0
0

 

Like an unstoppable force of nature, the festive season is rapidly approaching – for many, bringing with it an unrelenting barrage of good times, great food and a full compliment of (hopefully) much loved friends and family. Even if your Christmas break isn't quite like this, the last thing your want greeting you on your return is the news your email’s down as you forgot to renew the Office 365 Internal Use Rights subscription.

If you’re a Microsoft partner (or work for a partner organisation) and act as your Microsoft Partner Network (MPN) program administrator*, here are 5 things you need to do before that Christmas cheer whisks you away to your happy place.

*The program administrator (also known as the Primary Program Contact, or PPC) is in charge of managing an organisation’s MPN profile. They have the account privileges required to make profile changes and also receive communications pertinent to your membership. Don’t know who your PPC is? Sign in to the Partner Membership Centre, find your administrator and make sure they see this post!

 

1. Assign a replacement Primary Program Contact

If you’re going to be away for a while, be sure to assign a colleague as a temporary Primary Program Contact in your place. This way, if someone needs to change your profile whilst you’re gone, they’ll have the access rights to do so.

You can assign any staff member associated with your profile as PPC by signing in to the Partner Membership Centre, navigating to “Requirements & Assets” then “Assign Contact Roles”.

 

2. Ensure all staff are associated to your profile

Just because you’re going away doesn't mean others aren't working! Make sure all staff members are associated with your profile so they can access Microsoft Partner Network benefits such as no-cost training and sales & marketing assets. If they need to access other benefits such as Internal Use Rights software, be sure to grant them “Software Download” and “View Keys” privileges through the Partner Membership Centre. Need to get their hands on an MSDN subscription – there’s a guide for that too.

 

3. Check the timing of your MPN renewal

Every Microsoft Partner Network member has an Anniversary Date (AD) that marks the annual expiry of their membership. Don’t forget to renew in time (you can renew up to 90 days early)! Membership expiry will cause you to lose access to your benefits, including Digital Partner Of Record and incentive payments. Don’t get caught by surprise – know your AD and ensure you’re ready for your renewal. Silver and Gold partners might want to check out this blog post to help prepare for Competency renewal. Need additional assistance? The Regional Service Centre is on hand at 13 20 58 (Options 2,4,1). 

 

4. Make sure your O365 IUR isn’t about to expire

Did you know that renewing your Action Pack or Competency doesn't automatically extend your Office 365 Internal Use Rights (IUR) subscription? After renewing membership, partners receive fresh IUR codes, don’t forget to activate yours to prevent downtime (and be sure to sign in to your existing tenant rather than create a new one and to extend your subscription rather than adding new seats).

 

5. Implement a support strategy

Microsoft Partners are eligible for a wealth of support options. Don’t let your holiday prevent your colleagues from leveraging them! Download and share the “Partner Support 101” guide from www.aka.ms/mpnguides and save yourself the hassle of a New Years Day support call of your own.

 

With this out of the way, bring on the festive season!

 

 

Join the discussion in the Microsoft Australia Partner Yammer Community.

Want to become a Microsoft Partner Network master? See the MPN in 10 video then take the next steps with the MPN 101 and Competency Attainment guides from www.aka.ms/mpnguides

Need Support? Contact the Regional Service Centre on 13 20 58, Options 2,4,1 (Australian partners only) or visit the Partner Support Community.

Viewing all 12366 articles
Browse latest View live




Latest Images