Integrate Power Virtual Agent in Model drive App

Hi All ,


In the following post I will show how to integrate Power Virtual Agent in Model driven App.  I have already created a Model driven App with some use cases for this and I am integrating this on my existing model driven app.


1. Goto your Power Virtual Agent and click on Custom Website from the Channels.Copy the HTML Code .


2. Now We need to create a web resource in our solution. Open your solution , click on New - Others - Web Resource.





















Name your Web Resource and WebPage (HTML) from the Type and click on Text Editor 














 


Paste the HTML and click on OK.




















On click on OK, Web resource URL will be generated.














Now Create a Sub area and in model driven app and give the above web resource url .


Import Data From XML

 Hi All , 

In the following post I would like to show how to do the Import data from XML to Data verse using Power Apps and Power Automate.

I have defined my XML File like below and stored this file in SharePoint document library .

<?xml version="1.0"?>
<catalog>
<registration id="bk101">
<FirstName>PAUL KA</FirstName>
<LastName>WHITE</LastName>
<dob>2011-07-12</dob>
</registration>
<registration id="bk102">
<FirstName></FirstName>
<LastName></LastName>
<dob></dob>
</registration>
<registration id="bk103">
<FirstName></FirstName>
<LastName></LastName>
<dob></dob>
</registration>
</catalog>

















following is the Power Automate implementation at the high level.
























GetXML from the File Content.










GetXMLData from the Xpath xpath(xml(outputs('GetXML')), '//registration')








Now looping the XML content and adding the same to data verse table .

varXML - xpath(xml(item()), 'string(//author)')


















Checking for the dob null value before inserting to table.

empty(xpath(xml(item()),'string(//dob)'))

















DOB - xpath(xml(item()),'string(//dob)')

FirstName - xpath(xml(item()), 'string(//FirstName)')

LastName - xpath(xml(item()), 'string(//LastName)')


Calling Power Automate from Power Apps :

Now the above power automate will be called from Power Apps button , which will insert to records to data verse table .


UpdateContext({locSuccessMessage: ""});

Set(

    gblFlowStatus,

    Restore_GetData_XML.Run()

);

If(

    gblFlowStatus.completed = "true",

    UpdateContext({locSuccessMessage: "Import job completed successfully"});

    Refresh(Registrations)

);

ClearCollect(

    collErrorRegistration,

    Errors(Registrations)

);



Import Data from Excel to Dataverse using PowerApps

 Hi All , 

In this post , I would like to explain how Import the data from Excel to DataVerse(in my case) using Power Apps. 

I have defined one Excel file along with few columns and stored that excel file in sharepoint document library.Firstly I am fetching the values from Excel and passing this to PowerApps as an Output

Power Automate :

Please find the below Power Automate steps at high level ,










Add List rows Present in table connection and get the values from the Excel 








Now mapping the Excel columns











Respond sending back to Power Apps.




Power Apps :

I have created a button in Power Apps and added below code under OnSelect Property of the button.


UpdateContext({RegistrationData: ImportData_Excel_Restore.Run().registrationdetails});

ClearCollect(

    collRegistrationData,

    AddColumns(

        Split(

            ImportData_Excel_Restore.Run().registrationdetails,

            "|"

        ),

        "FirstName",

        Mid(

            Result,

            Find(

                "a/",

                Result

            ) + 4 + 1,

            Find(

                "b/",

                Result

            ) - (Find(

                "a/",

                Result

            ) + 4 + 2+2)

        ),

        "MiddleName",

        Mid(

            Result,

            Find(

                "b/",

                Result

            ) + 4 + 1,

            Find(

                "c/",

                Result

            ) - (Find(

                "b/",

                Result

            ) + 4 + 2+2)

        ),

        "LastName",

        Mid(

            Result,

            Find(

                "c/",

                Result

            ) + 4 + 1,

            Find(

                "d/",

                Result

            ) - (Find(

                "c/",

                Result

            ) + 4 + 2+2)

        ),

        "DOB",

     DateValue(   Mid(

            Result,

            Find(

                "d/",

                Result

            ) + 4 + 1,

            Find(

                "}",

                Result

            ) - (Find(

                "d/",

                Result

            ) + 4+2)

        ))

    )

);

The above code will generate the collection from the Output we received from the Power Automate.


Updating the Data verse table :

I have added another button , which will use the above generated collection and patch the records to Dataverse table


ForAll(

    collRegistrationData,

    If(

        Not(

            Or(

                IsBlank(DOB),

                IsEmpty(DOB)

            )

        ),

        Patch(

            Registrations,

            Defaults(Registrations),

            {

                'First Name': FirstName,

                'Middle Name': MiddleName,

                'Last Name': LastName,

                'Date of Birth': Date(

                    Year(DateValue(Text(DOB))),

                    Month(DateValue(Text(DOB))),

                    Day(DateValue(Text(DOB)))

                ),

                IsImportedFromExcel: true

            }

        )

    )

);

Refresh(Registrations);

ClearCollect(

    collErrorRegistration,

    Errors(Registrations)

);

Thanks for reading 

Export to Excel in PowerApps

 Hi All ,

In the following post , we will see how to export DataTable / Gallery  data to Excel from the PowerApps.

For this I am calling a Power Automate from Power Apps by passing the Name of the File and file Content. On Click of the button Power Automate will be called and It will create the file in SharePoint document library with the mentioned file name which we passed as parameter while calling power automate and the file will be opened in another browser tab.

Code in PowerApps : 

1. Initially , I set the variable as empty/

Set(ExportCSVVar,"");

2. Set the Name of the file and below complete code will be executed when collection count is greater than zero

If(

    CountRows(collErrorRegistration) > 0,

    Set(

        gblExcelFileName,

        Concatenate(

            "Export-",

            Text(Year(Now())),

            Text(Month(Now())),

            Text(Day(Now())),

            "-",

            Text(Hour(Now())),

            Text(Minute(Now())),

            Text(Second(Now()))

        )

    );

3. here , I am defining the Header name of the Excel file and matching column names from the collection. In the below example \I have defined 3 column names .

Char(10) - will move to net row

    Set(

        ExportCSVVar,

        "Column, Error Message, Time" & Char(10) & Concat(

            collErrorRegistration,

            Column & "," & Message & Now() & Char(10)

        )

    );

4. Calling the Power Automate by passing the File Name and File Content as parameters  

Set(

        gblFlowStatus,

        ExportToExcel_ImportErrors_Restore.Run(ExportCSVVar,

            gblExcelFileName            

        )

    )

);

5. If the Power Automate returns Success , launching the exported file in new tab

If(

    gblFlowStatus.completed = "true",

    Launch(gblFlowStatus.url),

    scrError

);

Creation of Power Automate

following are the Power automate steps at high level ,
detailed snapshot of the step 2 and step 4 from the above.



Thanks for reading , hope it was helpful. 






How to reuse your code in PowerApps

Hi All ,



From version 2.0.702 we have a new function called Select(), which allows you to select (i.e. press/click) another control on the same screen or in the same container (i.e. a gallery’s template).
This means that you can set the OnSelect property of a hidden label (MyLabel) with some series of actions (i.e. reusable code), and then initiate these actions from any other control by using Select(MyLabel).






Components in PowerApps








                                          Coming Soon !

Portals using PowerApps


Hello Everyone ,

Have you ever thought that soon we are going to build Portals using Power Apps? Yes, you are right .We can create responsive Portals using low code PowerApps for the external/internal users.

Organizations can share Portals with external users either anonymously or through login provider like LinkedIn, Microsoft Account and other commercial login providers.

We can also integrate Enterprise login providers using industry standard protocols like SAML2, OpenId Connect and WS-Fed.
Employees can connect using their corporate Azure Active Directory (AAD) Account.
We can make portals responsive using bootstrap themes

They can interact with data stored in CDS(Common Data Service)

Licensing?

For internal users inside your company, this will work like any other PowerApps over CDS. For external portal users, there will be a new model as this is a new concept to PowerApps

When this features will be available?

Starting in next month, we’ll be able to create a new App type called “Portal” directly from PowerApps. Using a simple, dedicated designer experience, makers can create pixel perfect websites.




Thanks for reading !


Column formatting in modern list view


Hi All,

Column formatting is used to customize how fields in SharePoint lists and libraries are displayed, For this we need to construct JSON Object that describes the element that are displayed when a field is included in List/Library View .

Column formatting does not change the data , It only changes how it is displayed to users . For the demo purpose I have created below list and changed the column’s formatting as below .

NOTE : We will get the same column formats, If we restore the same list to another list as "Save As List Template".

Download List Template 

Procedure to format the column.

Select the column click on down arrow button -> Column Settings -> Format this column.


By default we can see this section as Empty. Here we need to update the JSON Code which will change the format.



Let’s see, How I achieved formatting for the below columns .

Assigned To:

{
  "$schema": "https://developer.microsoft.com/json-schemas/sp/column-formatting.schema.json",
  "elmType": "div",
  "children": [
    {
      "elmType": "div",
      "style": {},
      "children": [
        {
          "elmType": "img",
          "attributes": {
            "src": "='/_layouts/15/userphoto.aspx?size=S&accountname=' + @currentField.email",
            "title": "@currentField.title"
          },
          "style": {
            "position": "relative",
            "float": "left",
            "width": "32px",
            "height": "32px",
            "border-radius": "50%"
          }
        },
        {
          "elmType": "span",
          "style": {
            "padding-right": "8px"
          },
          "txtContent": "@currentField.title"
        },
        {
          "elmType": "a",
          "attributes": {
            "iconName": "Mail",
            "class": "sp-field-quickActions",
            "href": "='mailto:' + @currentField.email + '?subject=Task status&body=Hey, how is your task coming along?.\r\n---\r\n' + @currentField.title + '\r\nClick this link for more info. http://contoso.sharepoint.com/sites/ConferencePrep/Tasks/Prep/DispForm.aspx?ID=' + [$ID]"
          }
        }
      ]
    }
  ]
}

View:

{
  "$schema": "https://developer.microsoft.com/json-schemas/sp/column-formatting.schema.json",
  "elmType": "button",
  "customRowAction": {
    "action": "defaultClick"
  },
  "attributes": {
    "class": "ms-fontColor-themePrimary ms-fontColor-themeDark--hover",
    "title": "Open Item"
  },
  "style": {
    "border": "none",
    "background-color": "transparent",
    "cursor": "pointer"
  },
  "children": [
    {
      "elmType": "span",
      "attributes": {
        "iconName": "Read",
        "class": "ms-font-xl"
      }
    }
  ]
}

Edit:

{
  "$schema": "https://developer.microsoft.com/json-schemas/sp/column-formatting.schema.json",
  "elmType": "button",
  "customRowAction": {
    "action": "editProps"
  },
  "attributes": {
    "class": "ms-fontColor-themePrimary ms-fontColor-themeDark--hover",
    "title": "Edit Item"
  },
  "style": {
    "border": "none",
    "background-color": "transparent",
    "cursor": "pointer"
  },
  "children": [
    {
      "elmType": "span",
      "attributes": {
        "iconName": "Edit",
        "class": "ms-font-xl"
      }
    }
  ]
}

Share:


{
  "$schema": "https://developer.microsoft.com/json-schemas/sp/column-formatting.schema.json",
  "elmType": "button",
  "customRowAction": {
    "action": "share"
  },
  "attributes": {
    "class": "ms-fontColor-themePrimary ms-fontColor-themeDark--hover",
    "title": "Share Item"
  },
  "style": {
    "border": "none",
    "background-color": "transparent",
    "cursor": "pointer"
  },
  "children": [
    {
      "elmType": "span",
      "attributes": {
        "iconName": "Share",
        "class": "ms-font-xl"
      }
    }
  ]
}

Delete:

{
  "$schema": "https://developer.microsoft.com/json-schemas/sp/column-formatting.schema.json",
  "elmType": "button",
  "customRowAction": {
    "action": "delete"
  },
  "attributes": {
    "class": "ms-fontColor-themePrimary ms-fontColor-themeDark--hover",
    "title": "Delete Item"
  },
  "style": {
    "border": "none",
    "background-color": "transparent",
    "cursor": "pointer"
  },
  "children": [
    {
      "elmType": "span",
      "attributes": {
        "iconName": "Delete",
        "class": "ms-font-xl"
      }
    }
  ]
}

Complete:


{
  "elmType": "div",
  "children": [
    {
      "elmType": "span",
      "txtContent": "@currentField",
      "style": {
        "position": "absolute",
        "white-space": "nowrap",
        "padding": "0 4px"
      }
    },
    {
      "elmType": "div",
      "attributes": {
        "class": {
          "operator": "?",
          "operands": [
            {
              "operator": "&&",
              "operands": [
                {
                  "operator": "<",
                  "operands": [
                    0,
                    0
                  ]
                },
                {
                  "operator": ">",
                  "operands": [
                    100,
                    0
                  ]
                },
                {
                  "operator": ">=",
                  "operands": [
                    "@currentField",
                    0
                  ]
                }
              ]
            },
            "sp-field-dashedBorderRight",
            ""
          ]
        }
      },
      "style": {
        "min-height": "inherit",
        "box-sizing": "border-box",
        "padding-left": {
          "operator": "?",
          "operands": [
            {
              "operator": ">",
              "operands": [
                0,
                0
              ]
            },
            {
              "operator": "+",
              "operands": [
                {
                  "operator": "*",
                  "operands": [
                    {
                      "operator": "/",
                      "operands": [
                        {
                          "operator": "-",
                          "operands": [
                            {
                              "operator": "abs",
                              "operands": [
                                0
                              ]
                            },
                            {
                              "operator": "?",
                              "operands": [
                                {
                                  "operator": "<",
                                  "operands": [
                                    "@currentField",
                                    0
                                  ]
                                },
                                {
                                  "operator": "abs",
                                  "operands": [
                                    {
                                      "operator": "?",
                                      "operands": [
                                        {
                                          "operator": "<=",
                                          "operands": [
                                            "@currentField",
                                            0
                                          ]
                                        },
                                        0,
                                        "@currentField"
                                      ]
                                    }
                                  ]
                                },
                                0
                              ]
                            }
                          ]
                        },
                        100
                      ]
                    },
                    100
                  ]
                },
                "%"
              ]
            },
            0
          ]
        }
      }
    },
    {
      "elmType": "div",
      "attributes": {
        "class": {
          "operator": "?",
          "operands": [
            {
              "operator": "&&",
              "operands": [
                {
                  "operator": "<",
                  "operands": [
                    0,
                    0
                  ]
                },
                {
                  "operator": "<",
                  "operands": [
                    "@currentField",
                    0
                  ]
                }
              ]
            },
            "sp-css-backgroundColor-errorBackground sp-css-borderTop-errorBorder",
            "sp-css-backgroundColor-successBackground40 sp-css-borderTop-successBorder"
          ]
        }
      },
      "style": {
        "min-height": "inherit",
        "box-sizing": "border-box",
        "width": {
          "operator": "?",
          "operands": [
            {
              "operator": ">",
              "operands": [
                0,
                0
              ]
            },
            {
              "operator": "+",
              "operands": [
                {
                  "operator": "*",
                  "operands": [
                    {
                      "operator": "/",
                      "operands": [
                        {
                          "operator": "?",
                          "operands": [
                            {
                              "operator": "<=",
                              "operands": [
                                "@currentField",
                                0
                              ]
                            },
                            {
                              "operator": "abs",
                              "operands": [
                                0
                              ]
                            },
                            {
                              "operator": "?",
                              "operands": [
                                {
                                  "operator": ">=",
                                  "operands": [
                                    "@currentField",
                                    100
                                  ]
                                },
                                100,
                                {
                                  "operator": "abs",
                                  "operands": [
                                    "@currentField"
                                  ]
                                }
                              ]
                            }
                          ]
                        },
                        100
                      ]
                    },
                    100
                  ]
                },
                "%"
              ]
            },
            {
              "operator": "?",
              "operands": [
                {
                  "operator": ">=",
                  "operands": [
                    "@currentField",
                    100
                  ]
                },
                "100%",
                {
                  "operator": "?",
                  "operands": [
                    {
                      "operator": "<=",
                      "operands": [
                        "@currentField",
                        0
                      ]
                    },
                    "0%",
                    {
                      "operator": "+",
                      "operands": [
                        {
                          "operator": "*",
                          "operands": [
                            {
                              "operator": "/",
                              "operands": [
                                {
                                  "operator": "-",
                                  "operands": [
                                    "@currentField",
                                    0
                                  ]
                                },
                                100
                              ]
                            },
                            100
                          ]
                        },
                        "%"
                      ]
                    }
                  ]
                }
              ]
            }
          ]
        }
      }
    },
    {
      "elmType": "div",
      "style": {
        "min-height": "inherit",
        "box-sizing": "border-box"
      },
      "attributes": {
        "class": {
          "operator": "?",
          "operands": [
            {
              "operator": "&&",
              "operands": [
                {
                  "operator": "<",
                  "operands": [
                    0,
                    0
                  ]
                },
                {
                  "operator": ">",
                  "operands": [
                    100,
                    0
                  ]
                },
                {
                  "operator": "<",
                  "operands": [
                    "@currentField",
                    0
                  ]
                }
              ]
            },
            "sp-field-dashedBorderRight",
            ""
          ]
        }
      }
    }
  ]
}