CategoriesMicrosoft 365SharePointSharePoint Online

SharePoint – Team Site without Microsoft 365 Group

Hello, here really simple post to explain how to create a SharePoint site without Microsoft 365 group associated.

Create Site

Follow there instructions:

Clicck on App Launcher and then on “Admin”. Then click on “Expand all” , SharePoint and “Active sites”

Then we can create site:

Click on Create and “Other options”:

Now we can create our site:

Considerations

Why we should create site with no M365 group? If we don’t need Outlook, planner or Teams associated but just need a SharePoint Team Site. Just to remind…to do that, we should be are SharePoint Administrator.

Contact me for questions! Have a nice day!

CategoriesMicrosoft 365SharePoint Online

SPO – JSON form custom formatting

Hello, Today we spoke (write 🙂 )about SharePoint list form customization. Basically, we have two way to customize existing form:

  • JSON Formatting
  • Edit form with Power Apps

We try to Explain how to customize form formatting with Json.

Format Form

Go to your list, and click on New, click on the top right Edit form icon, e click on “Configure layout”.

Basically We can write some JSON to format these sections:

  • Header
  • Body
  • Footer

Header customization

Choose “Header”. How can we customize it?

We can start from official MS Docs , copy header JSON code and try it:

{
    "elmType": "div",
    "attributes": {
        "class": "ms-borderColor-neutralTertiary"
    },
    "style": {
        "width": "99%",
        "border-top-width": "0px",
        "border-bottom-width": "1px",
        "border-left-width": "0px",
        "border-right-width": "0px",
        "border-style": "solid",
        "margin-bottom": "16px"
    },
    "children": [
        {
            "elmType": "div",
            "style": {
                "display": "flex",
                "box-sizing": "border-box",
                "align-items": "center"
            },
            "children": [
                {
                    "elmType": "div",
                    "attributes": {
                        "iconName": "Group",
                        "class": "ms-fontSize-42 ms-fontWeight-regular ms-fontColor-themePrimary",
                        "title": "Details"
                    },
                    "style": {
                        "flex": "none",
                        "padding": "0px",
                        "padding-left": "0px",
                        "height": "36px"
                    }
                }
            ]
        },
        {
            "elmType": "div",
            "attributes": {
                "class": "ms-fontColor-neutralSecondary ms-fontWeight-bold ms-fontSize-24"
            },
            "style": {
                "box-sizing": "border-box",
                "width": "100%",
                "text-align": "left",
                "padding": "21px 12px",
                "overflow": "hidden"
            },
            "children": [
                {
                    "elmType": "div",
                    "txtContent": "='Contact details for ' + [$Title]"
                }
            ]
        }
    ]
}

So , now we can see result.

Before:

Before

After:

After

How to edit?

Basically, our JSON going to apply style to these section:

{
    "elmType": "div",
    "attributes": {
        "class": "ms-borderColor-neutralTertiary"
    },
    "style": {
        "width": "99%",
        "border-top-width": "0px",
        "border-bottom-width": "1px",
        "border-left-width": "0px",
        "border-right-width": "0px",
        "border-style": "solid",
        "margin-bottom": "16px"
    },

Element:

 "elmType": "div",
    "attributes": {
        "class": "ms-borderColor-neutralTertiary"
    },

Style

  },
    "style": {
        "width": "99%",
        "border-top-width": "0px",
        "border-bottom-width": "1px",
        "border-left-width": "0px",
        "border-right-width": "0px",
        "border-style": "solid",
        "margin-bottom": "16px"
    },

Some people asking me, “How can I find witch section I’m modifing? I’m not expert” , an Idea is : Add background color red to style to indentify section:

Before
After

Not beautiful to see, but simple to identify 🙂

Body customization

To customize Body, you should simply define Sections and fields, in my case:

{
    "sections": [
        {
            "displayname": "Basic information",
            "fields": [
                "Title",
                "Description"
            ]
        },
        {
            "displayname": "Worfkflow status",
            "fields": [
                "Step"
            ]
        },
        {
            "displayname": "Other",
            "fields": [
                "Attachments"
            ]
        }
    ]
}

Footer Customization

Now the last part, footer. Similar to header, we can write JSON for a part to customize

{
    "elmType": "div",
    "style": {
        "width": "100%",
        "text-align": "left",
        "overflow": "hidden",
        "border-top-width": "1px"
    },
    "children": [
        {
            "elmType": "div",
            "style": {
                "width": "100%",
                "padding-top": "10px",
                "height": "24px"
            },
            "children": [
                {
                    "elmType": "a",
                    "txtContent": "='This is footer section! ' + [$Title]",
                    "attributes": {
                        "target": "_blank",
                        "href": "='https://aka.ms/contacts?email=' + [$Title]",
                        "class": "ms-fontColor-themePrimary ms-borderColor-themePrimary ms-fontWeight-semibold ms-fontSize-m ms-fontColor-neutralSecondary–hover ms-bgColor-themeLight–hover"
                    }
                }
            ]
        }
    ]
}

As you can see , you can also use field of the record , in our example title: [$Title].

Before

References & info

Syntax

https://docs.microsoft.com/en-us/sharepoint/dev/declarative-customization/formatting-syntax-reference

Advanced formatting concepts

https://docs.microsoft.com/en-us/sharepoint/dev/declarative-customization/formatting-advanced

Where you can find icons name

https://developer.microsoft.com/en-us/fluentui#/styles/web/icons

Column formatting

https://docs.microsoft.com/en-us/sharepoint/dev/declarative-customization/column-formatting#creating-custom-json

Considerations

This is one way. Another option is modify form with Power Apps, let me know if you want an article to understand how.

Contact me for questions! Have a nice day!

CategoriesMicrosoft 365Power AppsSharePoint Online

Power Apps – Improve performance

Hello, Today I want to explain how to improve performance of yours Canvas App. Any comments, integrations or suggestions are welcome 🙂

Cache local data

Does your data chanche during session of your app? If you reply “No”, you should store your data into local variable and get record from it, instead always ask to database.

ClearCollect(CollProject,Projects_1)

PS: Keep mind delegation problem.

ClearCollect Function more informations here.

You should also cache for user data. Example, if you you email of connected user:

User().Email

Consider:

Set(UserEmail,User().Email)

Optimize OnStart Event – Concurrent

If you create and load collection on “OnStart” event (or on visibile), consider use of Concurrent Function. People tipically write this:

ClearCollect(CollProject,Projects_1);
ClearCollect(CollManager,Manager)

In this case, formula loads each tables one at a time. If you want optimize, you should write this:

Concurrent(
ClearCollect(CollProject,Projects_1),
ClearCollect(CollManager,Manager))

Now your app fetches the tables in parallel.

Use delegations

You shouden’t retrieve all data and then filter locally. Delegate data processing to data source (If is possible). See connectors documentation to learn about delegable formula.

For SharePoint check this link.

SharePoint delegation formula

For SQL Server:

SQL Server Delefation formula
Sql Server Delegation Formula

Use Indexes Column

Simple, but people sometimes forgot to set indexes on column. For SQL Server and SharePoint, check wich columns you’re using to filter, and set Index on these columns.

How to set index on SharePoint columns.

How to set index on SQL Server and Azure SQL.

Replace Defaults() with Variable

When you want to create new record in your table you , tipically you use Default() function. When you use it, there is a call to your datasource …

Defaults(Projects_1)

And Idea is store result of this function on variable, and use it instead call Default() every time:

Set(
    newProject,
    Defaults(Projects_1)
);

Debug – Monitoring Time

If you want to understand what happens “behind the scenes”, you should start a debugging session. From Power Apps portal, select your app and click Monitor:

Monitoring…

Now you can understand durations and respons size of your function to prevent performance issue.

Considerations

Check this official link for other tips .I hope this post was usefull for you.Leave me comment if you has appreciate it.

Contact me for questions! Have a nice day!

CategoriesMicrosoft 365

Outlook Disconnected

Hello, Today not very “tech” article, But maybe usefull 🙂 Yesterday I changed password of my account…and after few hours, I noticed Outlook didn’t receiving any emails… (I updated password anywhere but…). But Previusly it still working…

How to solve it

If your problem , is actually password…A simple way is:

  • Go to Outlook
  • Click of File/Office account
  • Click on “Sigh out”
  • Then re-sign

Others

Clear Cache

If problem persist, you can try clean cache.

  • Windows key+R.
  • In run dialog write: %localappdata%\Microsoft\Outlook
  • Open RoamCache folder
  • Backup your files 🙂
  • Delete all files
  • Start outlook again

Considerations

In my personal case the problem was password Update, but the real problem was that I updated correclty password after change, and Outlook worked correctly. It stopped after2 hours…

Contact me for questions! Have a nice day!

CategoriesListsMicrosoft 365Power Apps

Power Apps – Patch function

Hello, new Post Today. We’re going to understand how to use Patch function with SharePoint list. For this Example I used a “Task List” who contains text , choose , lookup and numeric columns.

Let’s see “Patch” Function.

Syntax

Patch( DataSource, BaseRecord , ChangeRecord1 ,ChangeRecord2,…)

Parameters:

  • Data source: the data source who contains your records. In our case is our SharePoint list.
  • BaseRecord : the record to update or use Defaults to create new one.
  • ChangeRecord(s): one or more record who contains properties to modify.

Pills:

  • You can use Patch tu create new record or update existing record.
  • Patch will update only specified properties, other will ignored.

Example

Here our task list:

Task list image

Create new record:

Patch(
    Tasks,
    Defaults(Tasks),
    {
        Title: "New Task",
        Description: "Our task descriptions",
        Status: {Value: "New"},
        Project: {
            '@odata.type': "#Microsoft.Azure.Connectors.SharePoint.SPListExpandedReference",
            Id: 1,
            Value: "Project 1"
        },
        ProjectID:1000
    }
)

Key points:

  • Title and Descriptions are text field, so we should pass text value. Same for ProjectID who is Number and we must pass numeric value.
  • For Choose value, function expect record: {Value: “New”}
  • For Lookup column, we must pass record with ‘@odata.type’, Id and Value:
 '@odata.type': "#Microsoft.Azure.Connectors.SharePoint.SPListExpandedReference",
            Id: 1,
            Value: "Project 1"
        }

That’s all! If we want to update an existing record? You must get it and pass to patch function instead Defaults(). In this case, I used Lookup function to retrieve record to update:

LookUp(Tasks,ID=4)

So, complete code is:

Patch(
    Tasks,
    LookUp(Tasks,ID=4),
    {
        Title: "Old Task",
        Description: "Our task descriptions",
        Status: {Value: "New"},
        Project: {
            '@odata.type': "#Microsoft.Azure.Connectors.SharePoint.SPListExpandedReference",
            Id: 1,
            Value: "Project 1"
        },
        ProjectID:2000
    }
)

This is the official link of patch function.

I hope this post should help you.

CategoriesMicrosoft 365SharePoint Framework

SPFx Failed to load component for guest users

If you’ve ever developed a custom Web Part for SharePoint, and “Failed to load components” message occures for guest users, here you can find possibile solution to fix it.

SPFx Failed to load component guest users

I develop a SPO Webpart…it run correctly but when my customer share site with guest user, it give us and error:

Something like this:

[SPLoaderError.loadComponentError]:

***Failed to load component "12345-c123-a1be27-223a-xxxx0" (MyWebpart Name).

Possible fix path

A possible problem is guest users can’t acess to ClientSideAssets library on AppCatalog site, so one way is:

  • Enable external sharing on AppCatalog site
  • Break permissions on ClientSideAssets library and give reading permission for guest users

If don’t work, you can try also to restore inherits permission and put guest users inside readers group of app catalog site. In this case, guest can Access to all site resources as reader, but if it work you can continue investigate on problem.

Have a nice day

CategoriesMicrosoft 365Power Automate

Power Automate – Get items – Filter by lookup columns

Today, let’s understand how to filter SharePoint Items, by lookup column, from Power Automate flow.

FILTER BY LOOKUP COLUMN

In this Example, I created two lists: Projects and Tasks. Every tasks has lookup to project.

filter-by-lookup-projectlist

And Tasks:

tasks

As we can see , we have “Project” column. This is our lookup column.

Create a flow

To to this example I create a Simple flow wiht manually trigger (keep mind…this is just an example…). My flow has one Actions (“Get Items”). Let’s see how to filter task by Project. One way is filter by title column of lookup (In this case I used Title). Another options is filter by Lookup ID.

Code to copy, filter by Value

InternalFieldName/Title eq ‘Lookup Value’

Or, filter by

internalFieldName/Id eq ‘Lookup Id’

Let’s see our flow:

get-items-lookupfilter

Result: It get me one task, associated with “Project 1” .

lookup-filter-result

Have a nice day!

If you want to understand , in general, how to filter Items in Power Automate, click this link.

CategoriesMicrosoft 365Power Apps

Power Apps – Query String Parameter

Let’s learn how can we passing parameter to our Canvas Apps.

QUERY STRING PARAMETER

In this Example, I built a simple app to write a ticket in SharePoint List. In this case , I need to pass (from “external”) a parameter to our App, to set Ticket Type. My choose are:

  • Infrastructure
  • Software
  • Services

To achievement this, we should use “Query String” and Param Function. Query String is part of url , used to passing data to application.

Step 1 – Get query string from App

To get query string, I used param function in OnVisible event of my Screen to get date and store it on local variable. I can’t use “On Start” event of app because UpdateContext is only available while you are currently on a screen. When the OnStart code is executed no screen has loaded yet.

Code to copy:

If(
Param(“TicketType”) <> Blank(),
UpdateContext({selectedTicketType: Param(“TicketType”)}),
UpdateContext({selectedTicketType: “Infrastructure”})
);

Step 2 – Set Default Value to control

In my Example, I used a Form with SharePooint list as Datasource . My field “Ticket Type” is Choose field. To set value as default, I set Default property of datacard, only if the form is in “insert mode”. Why? because if we are in view or in edit, we need to see data of item, not our parameter. So:

Code to copy:

If(
frmCreateTicket.Mode = FormMode.New,
{
‘@odata.type’: “#Microsoft.Azure.Connectors.SharePoint.SPListExpandedReference”,
Id: 0,
Value: selectedTicketType
},
ThisItem.TicketType
)

Finally

You should call your app with query string, in my case:

https://apps.powerapps.com/play/xxx-xxx-xxx-xxx?tenantId=xxxx-xxx-xxx-xxxx&TicketType=Services

(xxxx are guid of your app and tenant id, you see it when you run an app in browser)

Have a nice day!

CategoriesListsMicrosoft 365SharePoint Online

Microsoft Lists in 1 Minute

What is Microsoft List

Let’s talk about Microsoft List. You can see “List” and others Mmicrosoft 365 App’s. You can use this awesome tool to create list to track informations (Assets, invetory, customers, issues ecc) and collaborate with your team members. If you know SharePoint List’s, this is appear very familiar.

Create new list

Click on the top-left corner:

 

App “Lists” and others Mmicrosoft 365 Apps…

 

 

 

 

 

 

 

 

 

Now you can View and Open your recent Lists or create New List. Click on button   “+ New List”.

Now you have 4 choises:

  1. “Blank list” to create new list from scratch (we do this for this tutorial…)
  2. “Form Excel” to create new list , starting from excel file. It’s good starting point if you have some excel files and want to use List instead of them.
  3. “From existing list” to create list , starting from another list (also from list create inside SharePoint site).
  4. “Templates” if you click on one on template, you can create list starting from it.

Click on “Blank list“, add list Name, description, color, icon,  choose where do you want to save your list (In “My List” or one of your SharePoint sites) and click create.

Customize your list

Now we have our Customer list and we can start to use it. First of all, we need to create some columns. Click on “+ Add Column”

Now you must choose type of date you want to store in this column. Don’t worry if you don’t know what it is it…Ask yourself: “what I want to store in this column? Name of customer? Descriptions? Logo? if the customer is active or now?” This is the key, understand what you need to save. Let’s see common type of column:

  • Single line of text: Simply “text”: Use it for Customer Name or short description.
  • Multiple line of text.:Use it when you want to store more the one text rows…for example descriptions, notes etc.
  • Location: When you neet to track “where”.
  • Number: No description need 🙂
  • Yes/no: Use it if you want to track simply yes or no (Boolean) value. Fors example “is valid customer?” or “Is active customer?”
  • Person:To save People or group in your Microsoft 365 Tenant.
  • Date and Time:  To store date, for example “Expiration date”
  • Choice: To choice value inside a list of value. For example “New customer, Old customer, Inactive”. Or to save status: “Draft, Approved, Rejected”
  • Hyperlink: To save a link.
  • Currency: To store currency value…
  • Image: To store an image such as logo

Keep mind, you have by default “Title” field , in your list. You can rename it.

Now I rename “Title” with “Customer”, and create “Headquarters” and “Acquisitiond date”:

Use your list

Now your list should appear like this:

Now you can click on “New” to add one record a time, or click on “Edit in grid view” to edit it like’s Excel file:

Keep mind, remember to click on “Exit grid view” to save.

I hope it help you..let me know with comment if you want another article on this argumeent. For example how to collaborate with colleague on this list, or how to create rules to send an email when people do something to this list or something else.

CategoriesMicrosoft 365Power AutomateSharePoint Online

Power Automate – SharePoint Get Items – Filter

Power Automate – SharePoint Get Filtered Items

With this article I want to explain how we can get items with Power Automate (From SharePoint Online) and Filter them.

We have:

  • SharePoint list’s called “Offices” ,with some data:

  • Excel file where we save filtered items. I create and Excel file with same column of list, and store it in OneDrive. Keep mind, you must format sheet as a Table if you want to use it in Power Automate to add rows. 
  • Power Automate flow who get data and put it into Excel File. I used “Get Items” connector to retrieve data from SharePoint list.

Get Items

No Query

We can get data with no query. In this case, you mus put only “Site Adress” and “List Name Parameters”…keep mind “Top Count” parameter and it returs “All” items. I do not suggest this approach (And also Power Automate, who show you a Warning 🙂 )

 

 

 

Filter Query

Best approach, is write a Filter Query to retrieve only items you need. Basically you should write a formula like this: fieldname operation value. 

  • As fieldName you must use iternal field name of SharePoint (Write me a comment if you need a post on this argoument).
  • Operation available are:
    • eq (Equal to)
    • lt (Less Than)
    • gt (Greater Than)
    • ge (Greater than or Equal to)
    • le (Less than or Equal to)
    • ne (No Equal to)
  • Value: value to find, date and string must be inside ‘

We can use also logical operator like “and” and “or

Let’s see some example (I show query and result on Excel sheet):

Filter “eq”

Result:

Filter “lt”

Filter “lt”

Result:

Filter Query with Functions

You can also use functions for your filter query.

  • endswith
  • startswith
  • substringof
  • ….

The syntax is: functions(fieldName, value)

An Example:

Result:

I hope it help you

CategoriesLicensingMicrosoft 365

Microsoft 365 – New Pricing

Microsoft Announces New Pricing for Microsoft 365

After about 10 years , Microsoft will update Microsoft 365 licensing cost. All informations here

Quick recap:

Since Office 365 was launched, Microsoft released:

  • 24 apps (for example Microsoft Teams, Power Apps, Power BI, Power Automate, Stream, Planner etc…)
  • Over 1,400 features
  • AI and automations feature and tools
  • more…. (Read full article)

Price:

  • Microsoft 365 Business Basic (from $5 to $6 per user)
  • Microsoft 365 Business Premium (from $20 to $22)
  • Office 365 E1 (from $8 to $10)
  • Office 365 E3 (from $20 to $23)
  • Office 365 E5 (from $35 to $38)
  • Microsoft 365 E3 (from $32 to $36)

New pricing will start on March 1, 2022

Read full article for more informations.

I hope it help you…Have a good day!

My Agile Privacy
This website uses technical and profiling cookies. Clicking on "Accept" authorises all profiling cookies. Clicking on "Refuse" or the X will refuse all profiling cookies. By clicking on "Customise" you can select which profiling cookies to activate.
Warning: some page functionalities could not work due to your privacy choices