Monitor your hybrid network with Network insights

Monitor your hybrid network with Network insights

This article is contributed. See the original author and article here.

Customers monitoring their networks must scramble across dashboards and resources to find monitoring data leading to frustrations and troubleshooting delays.


 


Presenting Network insights – a centralized console for network monitoring and troubleshooting. Customers get an agentless health monitoring experience and access to resource topologies along with key resource metrics – all with zero configuration. 


 


Network insights drilldownNetwork insights drilldown


 


 


Unified network monitoring and troubleshooting console



  • Single console to access all network monitoring and troubleshooting experiences

  • Unified health & alerts view across all networking resources. The one place to start your monitoring & troubleshooting journey

  • Integrated with NSG Flow Logs, Traffic Analytics and Connection Monitor – showing traffic and connectivity monitoring information in one place


Resource-specific troubleshooting



  • 1-click access to resource-specific metrics, functional views, diagnostics and documentation

  • Visually identify resource components using the topology to easily detect, diagnose and fix issues

  • Analyze issues and find root causes from resource metrics without writing queries or authoring workbooks


Integrated & ready from Day 1



  • No agent installation or configuration required

  • Available in all clouds – public and air-gapped

  • Harmonized with the overall Azure Monitor experience to provide easier debugging across compute, storage and networking


Network insights also surfaces information from configuration-based monitoring tools as shown below.


 


Connectivity Monitoring Connectivity tabConnectivity tab


In the Connectivity tab, customers get an aggregated view of all the connectivity tests they have setup in Connection Monitor along with any test-related alerts. Customers can filter out tests based on source type, destination type, connectivity status and round trip time. The test drilldown allows customers to view test details including exact source and destination names, protocol used, RTT history and more. Customer can clickthrough to the tests they are interested in investigating further.


 


Traffic Monitoring


Traffic tabTraffic tab


The Traffic tab allows customers to understand their traffic monitoring coverage in a single glance and review any alerts from Traffic Analytics. Customers can view NSGs grouped by regions and filter them based on the enablement status of NSG Flow Logs and Traffic Analytics. Using the drilldown customers can click through to individual NSGs and modify their traffic monitoring coverage as needed.


 


You’re invited to comment and share your thoughts on Network Insights and what you’d like to see coming next. 


 


Useful links



 


 

 

 

 

 

 

 

The Tenets of Knowledge Management Adoption

This article is contributed. See the original author and article here.

Knowledge Management Systems and Adoption Key Tenets: 


Sonia M. Ang – CSA 


 


In today’s competitive business environment organizations need a clear roadmap that aligns with their training needs and focuses on both short-and long-term objectives.  Knowledge Management is a tool that can be implemented to identify and appeal to the training needs of the modern employee.  A successful Enterprise Learning system goes beyond the organizational level and allows employees access to information and knowledge, thus creating better alignment at the enterprise level.   A well-designed Knowledge Management System can break down barriers by providing partners, clients, and customers with not only essential information and robust training, but also opportunities to promote and inform your organization’s products and services. 


Employee retention and customer satisfaction are essential to any organizations long-term success.   When considering your organization’s ROI, the benefits of Enterprise Learning are threefold:  retention (customers and employees), satisfaction, and improved profitability.  Enterprise Learning can be leveraged to provide better development and training opportunities thus promoting a feeling of empowerment amongst your team.  Enterprise Learning promotes efficiencies in training, in turn your organization will recognize the cost-saving benefits due to lower employee turnover and customer churn. 


Enterprise Knowledge Management Adoption  


1. Management Sponsorship and a COE   


 An executive sponsor provides that critical link between executive leadership and project management and helps support projects successfully to their completion at their expected performance.  Sponsorship of the Enterprise Knowledge Management Project will enhance your product base and create opportunities for your company in the rapidly advancing Knowledge Management sector.  Executive sponsorship will align with our company’s strategy to be experts in Knowledge Management.  Microsoft will be at the forefront of Knowledge Management as organizations rush to adopt more efficient and effective training strategies that better align to the modern worker’s needs. 


 


 2. Beyond Training but Execution  


Training programs at the company level are often too extensive in complexity and the amount of learning material can be downright overwhelming.  Training professionals need to venture beyond traditional learning and utilize learning strategies that support the needs of today’s modern professionals.  Microlearning, for example, provides a host of benefits to your organization in terms of increased learner participation, memorability of courses, and quick deployment with easy updates to your digital learning assets. 


Knowledge Management allows for learning concepts to be extracted from larger training programs and utilized as checklists and instructional videos that are easily accessible at a moment’s notice.  When learning material is successfully mined it allows the learning process to be refined, thus challenging concepts can be identified and made easier to process and understand. 


 


3. Collaborative and Social Learning 


How does your organization support collaboration, problem-solving and the co-creation of knowledge?  A successful Enterprise Learning Strategy will push an organization forward by improving collaboration via robust communities and meaningful discussion forums.   Building professional learning communities on platforms like Slack and Microsoft TEAMS can help break the walls down in organizations where ideas and knowledge may be siloed.  In addition to collaborative discussion platforms that give all community members a voice, the development of Expert Finders can be an important catalyst for creating a robust culture of collaboration.  Hidden ideas and knowledge will organically emerge from people in your organization that may hold previously unearthed niche expertise. 


 


4. Where is the Data?  


Generating data for analysis is the foundation of a robust Enterprise Learning strategy.  The key to success is to build data collection directly into technical systems supported by a centralized knowledge repository.  Data collection in the education sphere has traditionally focused on summative assessments like exams that are intended to measure a learner’s mastery of objectives.  Using the specifications in Enterprise Learning provides another set of metrics by allowing an organization to track formative assessments, such as data and social learning activity.  For example, these metrics allows an organization to collect new data, adding another layer of data to your knowledge repository to support the creation of more meaningful formative and summative assessments. 


 


 


5. Reusable Content and Reproducibility  


How do organizations move past the traditional content development models where bulky training manuals were the norm?  Learning data and insights help organizations to build learning solutions that are reusable and provide 24/7 access to learning.  Additionally, a Headless CMS allows your organization’s content creators to move away from the rigid templates that most traditional learning management systems utilize. This means content creators have more control over the quality of their content, and this streamlines the process of creating unique digital learning experiences for both your employees and customers.  Perhaps your organization releases a short instructional video on company’s rules and regulations.  This learning asset has value as both a stand-alone content object in a knowledge base as well as a learning module in a more extensive communications course.  Content creators in your organization, ranging from instructional designers to marketing professionals, often create multiple versions of the same material.  Creating content that is reusable and not redundant is more efficient as you are not reinventing the wheel.  Additionally, you are not burdened with trying to maintain and keep up-to-date multiple versions of the same learning assets.  


 


6. “Findability” of Learning Assets: Digitization and Technology 


The successful implementation of KM tools can enhance the user experience through successful mining and classification of metadata.  The power of KM is powerful in that it provides a taxonomy, ontology, and a finely tuned search system. A well-designed metadata strategy will take advantage of your learning assets which may include courses, webinars, professional learning communities (PLCs) and subject matter experts in your organization.  This myriad of data exits across multiple systems in your organization. Using metadata that is contextualized and consistent will ensure that your data is findable.  Taking it one-step further ontologies can be tapped to support a complete network of shareable and reusable knowledge across a domain for each unique user. 


 


 


Summary 


The adoption of an Enterprise Management system can reframe your organization’s knowledge and learning infrastructure.  Modern learners need to consume information quickly thus allowing them to efficiently apply and master essential skills and strategies.  A well-engineered Enterprise Learning Plan that focuses on empowering your community will result in higher learner engagement, enhanced workplace skills and a robust culture-of-knowledge across your organization.  Curiosity will drive success rather than traditional command and control training strategies.  Empower your community by giving them the autonomy to self-direct their own learning.  As a result, your organization will enjoy increased engagement, enhanced workforce skills and, in turn, a robust learning culture will grow and flourish 

Getting started with SharePoint's custom view formatting

Getting started with SharePoint's custom view formatting

This article is contributed. See the original author and article here.

Introduction


In a previous blog post, the basic building blocks of custom column formatting were introduced to us. From that, we learned how to customize our columns to create some interesting visuals.


 


column-formatting-after.png


Things look better, but each column is still a separate component. What if we want to tie them all together into a more cohesive presentation?


 


The good news is that we can! Just like we customized our columns, we can also customize SharePoint list views! That will allow us to go from a traditional table/column/cell view, to something that looks ‘put together’, like so…


view-formatting-after.png


 


Preparing for your journey


Before you get going, there are a few things that will help prepare you for the trek ahead.


 


If you haven’t, I would highly recommend reading the first blog post in this series: Getting started with SharePoint’s custom column formatting.


 


You can also refer to the official documentation for view formatting to help fill in any gaps not covered here.


 


I should also warn you that your HTML and CSS skills are going to come into play a lot more here, as you’ll be trying to work with multiple elements to position them correctly.


 


If you’re not an expert, that’s perfectly okay – I’m not one either – you’ll just need an extra dose of patience. Trial and error will get you there, eventually. I’m not going to dwell on the particular CSS used in these examples except in cases where it’s a pattern that could be applied to other use cases.


 


And that’s pretty much it. There’s some new stuff we’ll learn about that only applies to View formatting, but everything we learned from the previous blog post will apply here as well.


 


Choose your own adventure


In case you weren’t aware, views in a Modern SharePoint list come in a few flavors.


 


list-view-flavors.png


 


Most of us are probably already very familiar with the List layout; It’s what we’ve been used to for decades. Compact List is the same as List…just smaller. The Tiles view, frequently referred to as the Gallery view, is somewhat newer. As you may expect, it will display your list items as cards/tiles in a classic grid view. There’s also a Calendar view/layout that was recently added, but is not currently customizable.


 


When it comes to custom formatting, we can customize both the List and Gallery layouts. They do need to be customized separately, as their schemas are slightly different, but they’re close enough that you can usually take your JSON from one and apply it to the other with minimal changes.


 


For our journey here, we’re going to start with a List view and then use it to create a Tile view.


 


I wisely started with a map


Before we get into defining our custom view formatting, it may be helpful to spend some time up front thinking about how we’ll structure our view. The more you want to transform your view, the more important it will be to plan things out in advance. This is where some understanding of HTML will come in handy.


 


To help guide myself, I created the following image to try and visualize how my various DIVs and other elements would be laid out.


 


blowout-witharrows.png


 


This isn’t necessary, obviously, but I personally find it helpful to have a blueprint in front of me (even if it’s only a mental one).


 


Formatting List views


If you recall from the column formatting article, each custom format followed the same basic structure: A $schema definition along with a parent HTML element and optional attributes, styles and children.


 


{
“$schema”: “https://developer.microsoft.com/json-schemas/sp/v2/column-formatting.schema.json”,
“elmType”: “div”,
“attributes”: {
“iconName”: “Game”
},
“style”: {
“font-size”: “48px”,
“color”: “red”
},
“children: []
}

 


List views aren’t that much different.


 


{
“$schema”: “https://developer.microsoft.com/json-schemas/sp/v2/row-formatting.schema.json”,
“hideSelection”: true,
“hideColumnHeader”: true,
“rowFormatter”: {}
}

We still have our $schema property, but it’s important to notice that it’s pointing to a different schema definition. We also have some new optional properties: hideSelection & hideColumnHeader. As you may suspect, hideSelection will do away with the ability to select a particular list item while hideColumnHeader will do away with the the column headers normally present on a list.


 


What’s a little different here is that we’re missing our parent element. Instead, we have this rowFormatter property. The reason for this is that we can choose between using this and an additionalRowClass property. If you choose the latter, you’re limited to applying CSS classes to the entire row, similar to what you can do with the out-of-box “Conditional formatting”. If all you want to do is make your row a different color, you’re probably better off using the design mode tools, but if you’re interested in learning more about the additionalRowClass property, it is covered well enough in the official documentation.


 


We, however, will not be satifisfied with applying some simplistic styling. NO! We are bound for greater rowFormatter glory!


 



NOTE: There are other properties available that are not covered in this blog, most notably the groupProps property. This allows you to customize the grouping header that appears when items are grouped together by some column. There are also footerFormatter and hideFooter properties that affect the “List Footer” that appears if you’re displaying item totals.



 


One container to rule them all


The rowFormatter property is simply an object that wraps all of the HTML elements we’re going to create our view. If, for some reason, we wanted every row in our list to just simply display the basic column formatting shown in the previous section, we’d end up with the following JSON definition.


 


{
“$schema”: “https://developer.microsoft.com/json-schemas/sp/v2/row-formatting.schema.json”,
“hideSelection”: true,
“hideColumnHeader”: true,
“rowFormatter”: {
“elmType”: “div”,
“attributes”: {
“iconName”: “Game”
},
“style”: {
“font-size”: “48px”,
“color”: “red”
},
“children: []
}
}

That’s probably not the greatest idea, but it does illustrate the point. Once we make it inside of the rowFormatter object, it’s almost business as usual. There’s one more difference we need to understand…how we reference columns.


 


How to reference fields


When we were dealing with formatting individual columns, we always used the built-in variable @currentField, but what about when we’re dealing with more than one view? @currentField is still there, but it holds a slightly different meaning in this context. It will always be a reference to the standard Title field.


 


LOTR-Meme.png


 


Instead of using @currentField to reference a column, we’ll need to use a slightly different format: [$InternalColumnName].


 


In our list, we have a handful of columns including a Member lookup column. If we want to reference that field, we’d use [$Member]. Even if we change the display name from “Member” to “Hero”, our variable would still be [$Member]. And, since Member is a lookup column, if we want to show the display name of the user, we need to use the title property. We’d do that in the following way [$Member.title].


 


The World Is Not In Your Books And Maps. It Is Out There.


Alright. Enough with the lessons, it’s time to get started.


 


We can use the “map” we created earlier and turn it into a rough skeleton. Each layer in that blowout represent a parent/child relationship. So, by looking at our map…


 


blowout-witharrows.png


 


We come up with this.


 


{
“$schema”: “https://developer.microsoft.com/json-schemas/sp/v2/row-formatting.schema.json”,
“hideColumnHeader”: true,
“hideSelection”: true,
“rowFormatter”: {
“elmType”: “div”,
“attributes”: { “title”: “Parent Container” },
“children”: [{
“elmType”: “img”,
“attributes”: { “title”: “Background Image” },
“children”: [{
“elmType”: “div”,
“attributes”: { “title”: “Column Container” },
“children”: [
{
“elmType”: “div”,
“attributes”: { “title”: “Member/Role DIV” },
“children”: [
{
“elmType”: “img”,
“attributes”: { “title”: “Large Member profile picture” }
},
{
“columnFormatterReference”: “[$Title]”
}
]
},
{
“elmType”: “div”,
“attributes”: { “title”: “Text DIV” },
“children”: [{
“elmType”: “div”,
“attributes”: { “title”: “Member Name row/div” }
},
{
“elmType”: “div”,
“attributes”: { “title”: “Age row/div” }
},
{
“elmType”: “div”,
“attributes”: { “title”: “From row/div” }
}

]
},
{
“elmType”: “div”,
“attributes”: {
“title”: “Race/Weapons DIV/Column”
},
“children”: [{
“elmType”: “div”,
“attributes”: { “title”: “Race icon DIV/Row” },
“children”: []
},
{
“elmType”: “div”,
“attributes”: { “title”: “Weapon icons DIV/Row” },
“children”: []
}
]
}
]
}]
}]
}
}


 


That’s the basic layout of our custom view, simply a series of parent and child divs. We’ll start filling this skeleton out with content shortly, but there are a couple of things to point out already.


 


First, there are several examples of this “attributes”: { “title”: “<TEXT>” } pattern. We can use this as a means of commenting about the purpose of the element, since comments aren’t allowed in valid JSON and would break our view. Again, this isn’t required and adds absolutely no value to the view itself. It does, however, help keep us (and any future adventurer) oriented as to where we are in our JSON.


 



NOTE: Using the title attribute will cause whatever you specify to be displayed as a tooltip when a user hovers over the element. You can remove your titles after you done, if that bothers you. Otherwise, just be aware that users may see your witty comments.



Also, in the “Member/Role DIV” children, the second child looks a little peculiar.


{
“columnFormatterReference”: “[$Title]”
}

This columnFormatterReference property is a nifty shortcut that tells the view formatter to display the referenced field (Title, in this case) as it normally would, including any custom column formatting that may have been configured. This is a great opportunity for some reusability, especially if you want the column to show exactly the same way on every view.


 


If you take our skeleton and put it into SharePoint, there’s not going to be much to look at. So let’s fix that.


 


Putting some meat on the bone


Now that we’ve got our skeleton all rigged up, it’s time to fill it out some.


 


It’s certainly a little short and skinny, so let’s start by defining some CSS on our parent div. We know we want a border around the whole thing, as well as a particular font style and size, so we can apply those things at the top level.


 


“style”: {
“position”: “relative”,
“border”: “5px solid black”,
“border-radius”: “10px”,
“width”: “600px”,
“height”: “175px”,
“font-family”: “Luminari, Papyrus, Brush Script MT”,
“font-size”: “24px”
}

We’re also specifying a position value of “relative”, which tells the browser to display that DIV relative to it’s parent container. In this case, that parent container will be the row in the list. It won’t have any noticeable effect here, but will help us later.


 


Let’s also go ahead and setup our second layer too, our background image. Normally, we’d just use the css property background-image and point it to a URL. Unfortunately, we can’t do that here because the ( character is prohibited in most use cases. So, instead, we have to use an img element and size it appropriately.


 


{
“elmType”: “img”,
“style”: {
“width”: “100%”,
“height”: “100%”,
“z-index”: “-3”,
“opacity”: “.5”
},
“attributes”: {
“title”: “Background Image”,
“src”: “=@currentWeb + ‘/SiteAssets/MiddleEarthLocales/’ + [$From.lookupValue] + ‘.jpg'”
},
“children”: […]
}

We’ve added the src attribute, which should look mostly familiar. Notice, though, that we’re referencing the [$From] variable.


 


We’re also setting the width and height to be 100% of the parent so the image fills the space and we’re setting the opacity to half so that the image is a little on the transparent side (this will help the text and images we lay on top of it stand out more).


 


Finally, we’re setting this z-index property to a negative value. Typically, HTML will render any content inside of the div on top of the div. Think of it like a stack of plates. That last thing you put on the stack is the most visible. We can use the z-index property to affect that, and by setting to a negative value here, we’re ensuring that out content will be rendered behind our parent div. Without this, the background image would cover up our border.


 


Stylin’ and Profilin’


Now that we’ve got our first two layers done, let’s take a look at our third layer. If we refer back to our skeleton, we can see that our img element has a single child titled “Column Container”, and that child has three children of its own. What we want to happen is to have a three-column layout and to do that, we’re going to style this “column container” like so.


 


“style”: {
“position”: “absolute”,
“width”: “100%”,
“height”: “100%”,
“display”: “flex”
}

 


We have to specify the width and height here as being “100%” because, without it, the DIV will only grow as large as the content and we want to ensure that it stays as large as it can. We’re also specifying a different position value here – absolute – which basically tells the browser to render our DIV at a specific position. In this case, we’re letting it default the starting point, which is the “top left corner” of the first ancestor element with a “position” attribute on it (in this case, our parent div, which we said was relative positioned).


 


We’re also specifying a display property with a value of flex. This creates what’s known as “Flexbox” which will help us deal with the concept of turning our child DIVs into “Columns” and “Rows”.


 


Now that we’ve got our container, let’s work on the next three children, which will represent our three columns.


 


First column


We’ll just div right into the definition for our first column, which is a simple parent div to hold our image and role icon.


 


{
“elmType”: “div”,
“attributes”: { “title”: “Member/Role DIV” },
“children”: [
{
“elmType”: “img”,
“attributes”: {
“src”: “=replace([$Member.picture], ‘MThumb’, ‘LThumb’)”
},
“style”: {
“height”: “175px”,
“width”: “175px”,
“border-style”: “solid”,
“border-color”: “black”,
“border-width”: “0px 5px 0px 0px”
}
},
{
“columnFormatterReference”: “[$Title]”
}
]
}

Two points of interest here.


 


First, for the src attribute for our img property, we’re using the replace() function to swap out the text ‘MTHUMB’ for ‘LTHUMB’. When a user uploads a profile picture, SharePoint will create three versions of it (large, medium, and small). For formatting, referencing the picture property will always return the medium thumbnail. Rather than stretching a smaller thumbnail, we can use pattern to retrieve the larger one instead.


 


Also, because we formatted the Role (which is a rename of the Title column), we don’t have specify the definition here. Instead, we’re using the columnFormatterReference property and referencing our field.


 



NOTE: The column formatting for Role was slightly updated from the previous blog.



Just for reference, here’s the definition we created for the custom column formatting used on the Role field.


 


{
“$schema”: “https://developer.microsoft.com/json-schemas/sp/v2/column-formatting.schema.json”,
“elmType”: “div”,
“style”: {
“width”: “24px”,
“height”: “24px”,
“font-size”: “24px”,
“background-color”: “green”,
“color”: “white”,
“position”: “absolute”,
“left”: “0”,
“bottom”: “0”,
“border-radius”: “4px”
},
“children”: [{
“elmType”: “div”,
“style”: {
“margin”: “auto”
},
“attributes”: {
“iconName”: “=if(@currentField == ‘Ring-bearer’, ‘StatusCircleRing’, if(@currentField == ‘Guardian’, ‘Shield’, if(@currentField == ‘Melee’, ‘DecisionSolid’, ‘Bullseye’)))”
}
}]
}

At this point, we have something like the below image.


 


column-1.png


 


Second column


Our second column consists of three rows, each containing a different bit of text relating information about the current member. Here’s the definition for this section.


 


{
“elmType”: “div”,
“attributes”: {
“title”: “Text DIV”
},
“style”: {
“padding-left”: “5px”,
“color”: “white”,
“width”: “inherit”,
“text-shadow”: “2px 2px 0 #000000”,
“font-weight”: “bolder”,
“display”: “flex”,
“flex-direction”: “column”,
“justify-content”: “space-between”
},
“children”: [
{
“elmType”: “div”,
“style”: {
“font-size”: “1.5em”
},
“txtContent”: “[$Member.title]”
},
{
“elmType”: “div”,
“style”: {
“font-size”: “1.25em”
},
“txtContent”: “=’Age: ‘ + [$Age.displayValue]”
},
{
“elmType”: “div”,
“style”: {
“font-size”: “1.25em”
},
“txtContent”: “=’From: ‘ + [$From.lookupValue]”
}
]
}

 


The only thing of real note here is that our parent container in this case is again defining a “Flexbox” with its display property. We’re also using two new properties, flex-direction and justify-content, to control how our children are displayed relative to one another.


We’re using the width property with a value of inherit to force our column to take up the maximum amount of width possible. It won’t have a noticeable affect here, but will come into play in the next section.


 


The flex-direction property tells the browser to make each child grow to take up the entire column, width wise. That will force each child div onto its own line.


 


The justify-content property, on the other hand, tells the browser to evenly distribute our rows across the available height.


We’re getting closer to our desired end result.


 


column-2.png


 


The final column


Our last column consists of two rows of equal size to hold our Race and Weapon Icons. Let’s take a look.


 


{
“elmType”: “div”,
“attributes”: { “title”: “Race/Weapons DIV/Column” },
“style”: {
“width”: “48px”,
“padding”: “5px 5px 5px 0px”,
“display”: “flex”,
“flex-direction”: “column”
},
“children”: [
{
“elmType”: “div”,
“attributes”: { “title”: “Race icon DIV/Row” },
“style”: {
“flex-grow”: “1”
},
“children”: [{
“columnFormatterReference”: “[$Race]”
}]
},
{
“elmType”: “div”,
“attributes”: { “title”: “Weapon icons DIV/Row” },
“children”: [{
“columnFormatterReference”: “[$Weapons]”
}]
}
]
}

There’s nothing new to discuss here, but it does finish off our sample.


 


column-3.png


 


The Complete Schema


{
“$schema”: “https://developer.microsoft.com/json-schemas/sp/v2/row-formatting.schema.json”,
“hideColumnHeader”: true,
“hideSelection”: true,
“rowFormatter”: {
“elmType”: “div”,
“style”: {
“position”: “relative”,
“border”: “5px solid black”,
“border-radius”: “10px”,
“width”: “600px”,
“height”: “175px”,
“font-family”: “Luminari, Papyrus, Brush Script MT”,
“font-size”: “24px”
},
“attributes”: {
“title”: “Parent Container”
},
“children”: [{
“elmType”: “img”,
“style”: {
“width”: “100%”,
“height”: “100%”,
“z-index”: “-3”,
“opacity”: “.5”
},
“attributes”: {
“title”: “Background Image”,
“src”: “=@currentWeb + ‘/SiteAssets/MiddleEarthLocales/’ + [$From.lookupValue] + ‘.jpg'”
},
“children”: [{
“elmType”: “div”,
“attributes”: { “title”: “Column Container” },
“style”: {
“position”: “absolute”,
“width”: “100%”,
“height”: “100%”,
“display”: “flex”
},
“children”: [{
“elmType”: “div”,
“attributes”: {
“title”: “Member/Role DIV”
},
“children”: [{
“elmType”: “img”,
“attributes”: {
“src”: “=replace([$Member.picture], ‘MThumb’, ‘LThumb’)”
},
“style”: {
“height”: “175px”,
“width”: “175px”,
“border-style”: “solid”,
“border-color”: “black”,
“border-width”: “0px 5px 0px 0px”
}
},
{
“columnFormatterReference”: “[$Title]”
}
]
},
{
“elmType”: “div”,
“attributes”: {
“title”: “Text DIV”
},
“style”: {
“padding-left”: “5px”,
“color”: “white”,
“width”: “inherit”,
“text-shadow”: “2px 2px 0 #000000”,
“font-weight”: “bolder”,
“display”: “flex”,
“flex-direction”: “column”,
“justify-content”: “space-between”
},
“children”: [{
“elmType”: “div”,
“style”: {
“font-size”: “1.5em”
},
“txtContent”: “[$Member.title]”
},
{
“elmType”: “div”,
“style”: {
“font-size”: “1.25em”
},
“txtContent”: “=’Age: ‘ + [$Age.displayValue]”
},
{
“elmType”: “div”,
“style”: {
“font-size”: “1.25em”
},
“txtContent”: “=’From: ‘ + [$From.lookupValue]”
}
]
},
{
“elmType”: “div”,
“attributes”: { “title”: “Race/Weapons DIV/Column” },
“style”: {
“width”: “48px”,
“padding”: “5px 5px 5px 0px”,
“display”: “flex”,
“flex-direction”: “column”
},
“children”: [{
“elmType”: “div”,
“attributes”: { “title”: “Race icon DIV/Row” },
“style”: {
“flex-grow”: “1”
},
“children”: [{
“columnFormatterReference”: “[$Race]”
}]
},
{
“elmType”: “div”,
“attributes”: { “title”: “Weapon icons DIV/Row” },
“children”: [{
“columnFormatterReference”: “[$Weapons]”
}]
}
]
}
]
}]
}]
}
}

 


Our adventure draws near its end


Now that we’ve got our view formatted, we’re done, right? We could be, but the list view is off somehow…


 


list-view-complete.png


 


Look at all that empty white space! Such a waste, but showing each item in a row is what the list view does. Sometimes, that may be exactly what you need in some cases but here…we don’t need it.


 


Instead, we can use the “Gallery” (or “Tile)” view, which will display our items in a grid view.


 


We can copy the the schema we’ve already defined, and change the selected layout from “List” to “Gallery”


 


format-options.png


 


After that, we can paste it in, but we’ll need to modify things every so slightly, as the Gallery layout has some additional properties we need to specify. Let’s look at the basic schema for a gallery view.


 


{
“$schema”: “https://developer.microsoft.com/json-schemas/sp/v2/tile-formatting.schema.json”,
“height”: 175,
“width”: 650,
“fillHorizontally”: true,
“hideSelection”: true,
“formatter”: { }
}

Unlike columns and list view formats, the tile schema wants us to specify an exact width and height (in pixels) for each tile. It’s not strictly required, but we’ll want to supply our own values here to ensure that each card has the right dimensions.


 


We’re also using a new property, fillHorizontally, which will ensure that our cards do not overlap one another.


 


Finally, instead of the rowFormatter object we use in List views, we have a simple formatter property for our Tile views.


 


After that, we can simply copy the contents of the rowFormatter property in the list view example and paste them into the new formatter property.


 


Doing that should get us to where we want to be.


 


final-product.png


Prologue


Over the course of two blogs, we’ve covered the basic building blocks of custom column formatting as well as how to customize our list and gallery views. We turned a boring old list of text into far less boring visuals, and then turned those visuals into a “who’s who” of Middle Earth. 


 


And while our journey together might be coming to an end, it doesn’t mean your adventures are over. Take what you’ve learned, go out into the world, and make your lists beautiful!

Universal Print Lunch & Learn series

This article is contributed. See the original author and article here.

As Universal Print is generally available, we wanted to provide resources to help you get started with using your new subscription benefit. I created a Lunch & Learn video series that walks you through the setup process and provides an overview if you are just getting started.


As a Senior Program Manager in the Microsoft Customer Experience Engineering organization, I work daily with customers that want to set up Universal Print. This series covers a range of topics that these customers want to talk about and that will guide IT administrators in setting up Universal Print for optimal use.


Video topics include:



Each video contains scenarios and screenshots so you can follow along in your setup. Please visit the Universal Print video hub and enjoy—or watch the first video in the series below!


 



And, don’t forget to visit the Universal Print documentation for Universal Print fundamentals. There, you will find overviews, quick starts, licensing information and more.


Let us know what other topics would be helpful to cover so we can add more to our Lunch & Learn series in the future!


 

Friday Five: Azure Event Hubs, Ignite 2021, More!

Friday Five: Azure Event Hubs, Ignite 2021, More!

This article is contributed. See the original author and article here.

1097697_508329329238754_228724685_o.jpg


Build client web apps with “Prolog”


Jun-ichi Sakamoto is a Japanese MVP for Developer Technologies. The 10-time MVP title holder specializes in C#, ASP.NET, Blazor, Azure Web Apps, TypeScript. Jun-ichi’s publication of NuGet packages – like Entity Framework Core, helper, testing tools, Blazor components, and more – have been downloaded more than 18 million times. For more on Jun-ichi, check out his Twitter @jsakamoto


unnamed (1).jpg


How to request to Azure Event Hubs with Apache JMeter™


Kuniteru Asami is an Azure MVP and core staff member of the Japan Azure User Group. Kuniteru has been providing technical consulting for Microsoft Azure for more than 10 years since its initial release. Moreover, the Japanese Azure expert is the CEO of a company with six Azure MVPs on its staff. Follow him on Twitter @kunyami


image.png


Microsoft Ignite 2021: Important Announcements and Updates


Mohamed El-Qassas is a Microsoft MVP, SharePoint StackExchange (StackOverflow) Moderator, C# Corner MVP, Microsoft TechNet Wiki Judge, Blogger, and Senior Technical Consultant with +10 years of experience in SharePoint, Project Server, and BI. In SharePoint StackExchange, he has been elected as the 1st Moderator in the GCC, Middle East, and Africa, and ranked as the 2nd top contributor of all the time. Check out his blog here.


hal.jpg


A Brief MVP Summit History


Hal Hostetler is an Office Apps and Services MVP who has been in the MVP program since 1996. Now retired, Hal is a Certified Professional Broadcast Engineer and remains the regional engineer for Daystar Broadcasting and a senior consultant for Roland, Schorr, & Tower. He lives in Tucson, Arizona. For more on Hal, check out his Twitter @TVWizard


image.png


C#.NET: HOW TO COPY SYSTEM FOLDER(S)


Asma Khalid is an Entrepreneur, ISV, Product Manager, Full Stack .Net Expert, Community Speaker, Contributor, and Aspiring YouTuber. Asma counts more than 7 years of hands-on experience in Leading, Developing & Managing IT-related projects and products as an IT industry professional. Asma is the first woman from Pakistan to receive the MVP award three times, and the first to receive C-sharp corner online developer community MVP award four times. See her blog here.