{"id":946,"date":"2018-11-13T06:51:56","date_gmt":"2018-11-13T06:51:56","guid":{"rendered":"https:\/\/www.tatvasoft.com.au\/blog\/?p=946"},"modified":"2022-03-17T09:08:22","modified_gmt":"2022-03-17T09:08:22","slug":"implementing-offline-capability-in-powerapps-with-sharepoint-part-1","status":"publish","type":"post","link":"https:\/\/www.tatvasoft.com.au\/blog\/implementing-offline-capability-in-powerapps-with-sharepoint-part-1\/","title":{"rendered":"Implementing Offline Capability in PowerApps with SharePoint- Part 1"},"content":{"rendered":"<p>The blog caters the information regarding the basic idea of PowerApps which is a tool for building the mobile apps. While creating the blog we have assumed that you have a good knowledge regarding the PowerApps so only the brief information is provided considering the same and implementation steps are mentioned right from the scratch.<span id=\"more-1264\"><\/span><\/p>\n<p>With less time and low <a href=\"https:\/\/www.tatvasoft.com.au\/services\/application-development\/\">custom software development<\/a> cost, PowerApps have the capability to transform your business. It extends or customizes the apps which are already being used. PowerApps acts as a service for using existing business applications that consumes data stored in a data source \u2013 may it be SharePoint, Office 365, Microsoft SQL Server, Twitter, Common Data Service, and Salesforce. At times, mobile devices loses connectivity or there is limited connectivity with the Internet and it can be extremely useful for users especially field workers or users that travel<br \/>\nregularly, to continue working. App users may need to process data even when there is no or very limited Internet connectivity. To cater to these needs, PowerApps is able to cache data locally on a device. One can use this feature to build offline apps.<\/p>\n<p>However, building a completely offline app is a manual task and it brings very difficult challenges such as Synchronization of data and Conflicts resolution.<\/p>\n<p>There are a few questions that arise in mind while developing a completely offline app using PowerApps:<\/p>\n<ul>\n<li>What if two users modify the same record during an offline session?<\/li>\n<li>Is it possible to merge changes from both the users together?<\/li>\n<li>How to cope up with a situation where an online user deletes a record that another user modifies while offline?<\/li>\n<li>How to add and modify records in offline mode?<\/li>\n<\/ul>\n<p>You will find out answers to these questions in this series of blogs. PowerApps provides a set of features that help mobile-app developers create offline-oriented apps. You can:<\/p>\n<ul>\n<li>Launch apps in PowerApps when offline<\/li>\n<li>Run apps when there is no or very little Internet connectivity<\/li>\n<li>Use Connection signal object to determine whether an app is offline, online or in a metered connection state.<\/li>\n<li>Utilize Collections and use basic data storage functions such as LoadData and SaveData for offline connectivity.<\/li>\n<\/ul>\n<p><em><strong>Note:<\/strong><\/em> Offline capability feature is still under implementation and not valid for all the scenarios.<\/p>\n<h2>Building Offline Capable Apps<\/h2>\n<p>The first query while working with offline scenarios is how apps work with data. Apps in PowerApps commonly access data through a variety of connectors provided by platforms such as SharePoint, Office 365 and Common Data Service. Custom connectors can also be built that enables apps to utilize RESTful endpoint services, for example, a Web API or Azure Functions. Users must be online to consume data as all these connectors make use of HTTPS.<\/p>\n<p><img loading=\"lazy\" class=\"aligncenter wp-image-1266 size-full\" style=\"max-width: 100%; height: auto;\" title=\"Custom Connectors\" src=\"https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Custom-Connectors.png\" sizes=\"(max-width: 503px) 100vw, 503px\" srcset=\"https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Custom-Connectors.png 503w, https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Custom-Connectors-300x85.png 300w\" alt=\"Custom Connectors\" width=\"503\" height=\"142\" \/><\/p>\n<h2>Handling offline data<\/h2>\n<p>Let\u2019s observe what happens when a device becomes offline. The app will continue to be mostly functional in the case of running app that becomes offline between the running sessions. PowerApps provides a set of capabilities to browser, filter, search, aggregate, manipulate and sort data in a consistent way irrespective of the data source utilized. This allows SharePoint programmers to reconsider an app using a different backend, enabling use of the local collections with very little change in app\u2019s logic.<\/p>\n<p>The landing screen i.e. the browser screen continues to show data even when the app becomes offline, while also providing search and sort options on the screen. Display screen opens up an individual record while edit screen enables modification of data.<\/p>\n<p>It is important to note that the refresh button on the browser screen and the save button on the edit screen will not work unless in an active Internet connection. Due to the lack of Internet connectivity, if PowerApps fails to carry out an action, it displays an error message.<\/p>\n<p><img loading=\"lazy\" class=\"aligncenter wp-image-1267 size-full\" style=\"max-width: 100%; height: auto;\" title=\"Error Message\" src=\"https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Error-Message.png\" alt=\"Error Message\" width=\"239\" height=\"30\" \/><\/p>\n<p>When a user starts an app in PowerApps in offline mode, the user can only retrieve app which was previously running on the device in online mode. In the case, where app loads in offline mode for the first time, it won\u2019t show any data. The best way to run an app in offline mode is to enable \u2018airplane mode\u2019 in a mobile device.<\/p>\n<p><em><strong>Note:<\/strong><\/em> This blog requires that you have the prior understanding of PowerApps concepts such as controls, screens, events, attributes, navigation etc. <a href=\"https:\/\/docs.microsoft.com\/en-us\/powerapps\/maker\/canvas-apps\/reference-properties\">More information regarding PowerApps<\/a>.<\/p>\n<h2>Techniques to Enable Offline Working<\/h2>\n<p>There are two vital features that help us create an app that works offline:<\/p>\n<h3>Connection Signal<\/h3>\n<ul>\n<li>The Connection signal provides information regarding the network connection information\/status of an app.<br \/>\n<style type=\"text\/css\">\n            .tg {<\/p>\n<p>border-collapse: collapse;<\/p>\n<p>border-spacing: 0;<\/p>\n<p>border-color: #9ABAD9;<\/p>\n<p>            }<\/p>\n<p>.tg td {<\/p>\n<p>font-family: Arial, sans-serif;<\/p>\n<p>font-size: 14px;<\/p>\n<p>padding: 10px 5px;<\/p>\n<p>border-style: solid;<\/p>\n<p>border-width: 1px;<\/p>\n<p>overflow: hidden;<\/p>\n<p>word-break: normal;<\/p>\n<p>border-color: #9ABAD9;<\/p>\n<p>color: #444;<\/p>\n<p>background-color: #EBF5FF;<\/p>\n<p>            }<\/p>\n<p>.tg th {<\/p>\n<p>font-family: Arial, sans-serif;<\/p>\n<p>font-size: 14px;<\/p>\n<p>font-weight: normal;<\/p>\n<p>padding: 10px 5px;<\/p>\n<p>border-style: solid;<\/p>\n<p>border-width: 1px;<\/p>\n<p>overflow: hidden;<\/p>\n<p>word-break: normal;<\/p>\n<p>border-color: #9ABAD9;<\/p>\n<p>color: #fff;<\/p>\n<p>background-color: #409cff;<\/p>\n<p>            }<\/p>\n<p>.tg .tg-73oq {<\/p>\n<p>border-color: #000000;<\/p>\n<p>text-align: left;<\/p>\n<p>vertical-align: top<br \/>            }<\/p>\n<\/style>\n<table class=\"blog-table\">\n<tbody>\n<tr>\n<th class=\"tg-73oq\"><span style=\"font-weight: bold;\">Signal Property<\/span><\/th>\n<th class=\"tg-73oq\"><span style=\"font-weight: bold;\">Description<\/span><\/th>\n<\/tr>\n<tr>\n<td class=\"tg-73oq\">Connection.Connected<\/td>\n<td class=\"tg-73oq\">returns true when a device is connected to a network<\/td>\n<\/tr>\n<tr>\n<td class=\"tg-73oq\">Connection.Metered<\/td>\n<td class=\"tg-73oq\">returns true when a network connection is metered<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/li>\n<li>The connection signal determines whether the active connection is metered or connected.<\/li>\n<li>The connection on mobile devices is generally a metered connection. It is useful to detect a metered connection because you can configure your app to consume less data in case of a device having a metered connection.<\/li>\n<\/ul>\n<h3>Saving and Loading Local Data<\/h3>\n<ul>\n<li>SaveData and LoadData functions enable us to build offline apps by storing collections of data in a private area on the local device.<br \/>\n<style type=\"text\/css\">\n            \/*<![CDATA[*\/<\/p>\n\n\n\n\n<p>.tg {<\/p>\n\n\n\n\n<p>border-collapse: collapse;<\/p>\n\n\n\n\n<p>border-spacing: 0;<\/p>\n\n\n\n\n<p>border-color: #999;<\/p>\n\n\n\n\n<p>            }<\/p>\n\n\n\n\n<p>.tg td {<\/p>\n\n\n\n\n<p>font-family: Arial, sans-serif;<\/p>\n\n\n\n\n<p>font-size: 14px;<\/p>\n\n\n\n\n<p>padding: 0px 7px;<\/p>\n\n\n\n\n<p>border-style: solid;<\/p>\n\n\n\n\n<p>border-width: 1px;<\/p>\n\n\n\n\n<p>overflow: hidden;<\/p>\n\n\n\n\n<p>word-break: normal;<\/p>\n\n\n\n\n<p>border-color: #999;<\/p>\n\n\n\n\n<p>color: #444;<\/p>\n\n\n\n\n<p>background-color: #F7FDFA;<\/p>\n\n\n\n\n<p>            }<\/p>\n\n\n\n\n<p>.tg th {<\/p>\n\n\n\n\n<p>font-family: Arial, sans-serif;<\/p>\n\n\n\n\n<p>font-size: 14px;<\/p>\n\n\n\n\n<p>font-weight: normal;<\/p>\n\n\n\n\n<p>padding: 0px 7px;<\/p>\n\n\n\n\n<p>border-style: solid;<\/p>\n\n\n\n\n<p>border-width: 1px;<\/p>\n\n\n\n\n<p>overflow: hidden;<\/p>\n\n\n\n\n<p>word-break: normal;<\/p>\n\n\n\n\n<p>border-color: #999;<\/p>\n\n\n\n\n<p>color: #fff;<\/p>\n\n\n\n\n<p>background-color: #26ADE4;<\/p>\n\n\n\n\n<p>            }<\/p>\n\n\n\n\n<p>.tg .tg-s6z2 {<\/p>\n\n\n\n\n<p>text-align: center<br \/>            }<\/p>\n\n\n\n\n<p>.tg .tg-s268 {<\/p>\n\n\n\n\n<p>text-align: left<br \/>            }<\/p>\n\n\n\n\n<p>\n            \/*]]>*\/<\/p>\n<\/style>\n<table class=\"blog-table\">\n<tbody>\n<tr>\n<th class=\"tg-s6z2\"><span style=\"font-weight: bold;\">Function<\/span><\/th>\n<th class=\"tg-s6z2\"><span style=\"font-weight: bold;\">Description<\/span><\/th>\n<th class=\"tg-s6z2\"><span style=\"font-weight: bold;\">Syntax<\/span><\/th>\n<\/tr>\n<tr>\n<td class=\"tg-s268\">SaveData<\/td>\n<td class=\"tg-s268\">Saves local data from a collection into a file<\/td>\n<td class=\"tg-s268\">SaveData(LocalBooks, \u201cOfflineBooksFile\u201d) LocalBooks &gt; target collectionOfflineBooksFile &gt; file<\/td>\n<\/tr>\n<tr>\n<td class=\"tg-s268\">LoadData<\/td>\n<td class=\"tg-s268\">Retrieves local data.<\/p>\n<p>Stores and encrypts data in an area isolated from other users and apps.<\/td>\n<td class=\"tg-s268\">LoadData(LocalBooks, \u201cOfflineBooksFile\u201d, true)LocalBooks &gt; target collection for data OfflineBooksFile &gt; file name from which retrieve data. True &gt; specifies whether a function should continue to proceed without error<br \/>\nif the file doesn\u2019t exist.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/li>\n<\/ul>\n<p>Using LoadData, we can only retrieve data that is saved via SaveData function from the same app. We cannot load data saved in other apps.<\/p>\n<p><em><strong>Note:<\/strong><\/em> To build an app having offline capability is a highly customized process. The main purpose of this blog is to provide an idea of the challenges that exist to build offline apps.<\/p>\n<h3>\u201cBest Books\u201d PowerApps app with Offline Capability<\/h3>\n<p>Let us consider a simple custom list \u201cBest Books\u201d in SharePoint Online to capture best books with \u201cBook Name\u201d (renamed Title column), \u201cAuthor\u201d (Single line of text) and Image (Hyperlink or Picture \u2013 Format URL as: Picture) as three fields. Our app logic relies on other two important fields \u2013 <em><strong>ID<\/strong> <\/em>and <em><strong>Modified<\/strong><\/em>. We will use the auto-generated ID field to uniquely identify records and <em>Modified<\/em> Date Time field to check when the changes have occurred during offline connectivity. For keeping it simple, we will not introduce any lookup column inside our list.<\/p>\n<p><em><strong>Note:<\/strong><\/em> Here, we will use SharePoint Online as a data source for our app. You are free to use any other data source like CDS, SQL etc. Offline implementation logic remains the same.<\/p>\n<h3>Create new PowerApps from your SharePoint Online list<\/h3>\n<p>SharePoint modern list experience provides the ability to create PowerApps directly from the UI.<\/p>\n<p><img loading=\"lazy\" class=\"wp-image-1272 size-full alignnone\" style=\"max-width: 100%; height: auto;\" title=\"Create new PowerApps\" src=\"https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Create-new-PowerApps.png\" sizes=\"(max-width: 521px) 100vw, 521px\" srcset=\"https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Create-new-PowerApps.png 521w, https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Create-new-PowerApps-300x148.png 300w\" alt=\"Create new PowerApps\" width=\"521\" height=\"257\" \/><\/p>\n<ul>\n<li>Click PowerApps and then select Create an app<img loading=\"lazy\" class=\"wp-image-1273 size-full alignnone\" style=\"max-width: 100%; height: auto;\" title=\"Create an app\" src=\"https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Create-an-app.png\" alt=\"Create an app\" width=\"153\" height=\"113\" \/><\/li>\n<\/ul>\n<ul>\n<li>Name your app \u201cBest Books\u201d in the PowerApps web designer in the right-hand pane and then click Create.<img loading=\"lazy\" class=\"wp-image-1274 size-full alignnone\" style=\"max-width: 100%; height: auto;\" title=\"Name your app\" src=\"https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Name-your-app.png\" sizes=\"(max-width: 313px) 100vw, 313px\" srcset=\"https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Name-your-app.png 313w, https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Name-your-app-185x300.png 185w\" alt=\"Name your app\" width=\"313\" height=\"508\" \/><\/li>\n<\/ul>\n<ul>\n<li>Based on the list schema and data, PowerApps studio will automatically set up app screens for you. You can use PowerApps studio to customize your app to meet your functional requirements. The landing screen i.e. the browser screen will display all the items in the list.<img loading=\"lazy\" class=\"wp-image-1275 size-full alignnone\" style=\"max-width: 100%; height: auto;\" title=\"PowerApps studio\" src=\"https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/PowerApps-studio.png\" sizes=\"(max-width: 334px) 100vw, 334px\" srcset=\"https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/PowerApps-studio.png 334w, https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/PowerApps-studio-300x219.png 300w\" alt=\"PowerApps studio\" width=\"334\" height=\"244\" \/><\/li>\n<\/ul>\n<ul>\n<li>By default, \u201cAttachments\u201d field is visible on the browser screen. You can hide the field by selecting View -&gt; Data Sources. It will open up data source from where the fields are populated.<img loading=\"lazy\" class=\"wp-image-1276 size-large alignnone\" style=\"max-width: 100%; height: auto;\" title=\"View Data Source\" src=\"https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/View-Data-Source-1024x191.png\" sizes=\"(max-width: 450px) 100vw, 450px\" srcset=\"https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/View-Data-Source-1024x191.png 1024w, https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/View-Data-Source-300x56.png 300w, https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/View-Data-Source-768x143.png 768w, https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/View-Data-Source.png 1597w\" alt=\"View Data Source\" width=\"450\" height=\"84\" \/><\/li>\n<\/ul>\n<ul>\n<li>Select BrowserGallery1 from the left pane, expand Layout and change the Gallery Layout to \u201cImage, title and subtitle\u201d.<img loading=\"lazy\" class=\"wp-image-1277 size-large alignnone\" style=\"max-width: 100%; height: auto;\" title=\"Select BrowserGallery1\" src=\"https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Select-BrowserGallery1-1024x400.png\" sizes=\"(max-width: 450px) 100vw, 450px\" srcset=\"https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Select-BrowserGallery1-1024x400.png 1024w, https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Select-BrowserGallery1-300x117.png 300w, https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Select-BrowserGallery1-768x300.png 768w, https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Select-BrowserGallery1.png 1582w\" alt=\"Select BrowserGallery1\" width=\"450\" height=\"176\" \/><\/li>\n<\/ul>\n<ul>\n<li>App now displays only \u201cImage\u201d, \u201cBook Name\u201d and \u201cAuthor\u201d.<img loading=\"lazy\" class=\"wp-image-1278 size-full alignnone\" style=\"max-width: 100%; height: auto;\" title=\"App now displays\" src=\"https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/App-now-displays.png\" sizes=\"(max-width: 384px) 100vw, 384px\" srcset=\"https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/App-now-displays.png 384w, https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/App-now-displays-300x223.png 300w\" alt=\"App now displays\" width=\"384\" height=\"286\" \/><\/li>\n<\/ul>\n<ul>\n<li>Similarly you can hide \u201cAttachments\u201d from the edit screen too.<img loading=\"lazy\" class=\"wp-image-1279 size-large alignnone\" style=\"max-width: 100%; height: auto;\" title=\"Hide Attachments\" src=\"https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Hide-Attachments-1024x448.png\" sizes=\"(max-width: 450px) 100vw, 450px\" srcset=\"https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Hide-Attachments-1024x448.png 1024w, https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Hide-Attachments-300x131.png 300w, https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Hide-Attachments-768x336.png 768w, https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Hide-Attachments.png 1586w\" alt=\"Hide Attachments\" width=\"450\" height=\"197\" \/><\/li>\n<\/ul>\n<ul>\n<li>Hide \u201cImage\u201d field from the edit screen, as the Picture column type is set read-only currently for PowerApps with SharePoint data source. Set Visible property \u201cOff\u201d for DataCard2.<img loading=\"lazy\" class=\"wp-image-1280 size-large alignnone\" style=\"max-width: 100%; height: auto;\" title=\"Set Visible property Off\" src=\"https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Set-Visible-property-Off-1024x230.png\" sizes=\"(max-width: 450px) 100vw, 450px\" srcset=\"https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Set-Visible-property-Off-1024x230.png 1024w, https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Set-Visible-property-Off-300x67.png 300w, https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Set-Visible-property-Off-768x172.png 768w, https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Set-Visible-property-Off.png 1426w\" alt=\"Set Visible property Off\" width=\"450\" height=\"101\" \/><\/li>\n<\/ul>\n<h3>Adapting an app working Offline<\/h3>\n<p>We have created an app that is based on a SharePoint list. The functionality will enable the users to view, add, update and delete items in offline mode. Keeping \u201cBest Books\u201d list entity in center, we will observe how offline capability will work with<br \/>\nSharePoint data source.<\/p>\n<style type=\"text\/css\">\n    .tg {<\/p>\n<p>border-collapse: collapse;<\/p>\n<p>border-spacing: 0;<\/p>\n<p>    }<\/p>\n<p>.tg td {<\/p>\n<p>font-family: Arial, sans-serif;<\/p>\n<p>font-size: 14px;<\/p>\n<p>padding: 10px 5px;<\/p>\n<p>border-style: solid;<\/p>\n<p>border-width: 1px;<\/p>\n<p>overflow: hidden;<\/p>\n<p>word-break: normal;<\/p>\n<p>border-color: black;<\/p>\n<p>    }<\/p>\n<p>.tg th {<\/p>\n<p>font-family: Arial, sans-serif;<\/p>\n<p>font-size: 14px;<\/p>\n<p>font-weight: normal;<\/p>\n<p>padding: 10px 5px;<\/p>\n<p>border-style: solid;<\/p>\n<p>border-width: 1px;<\/p>\n<p>overflow: hidden;<\/p>\n<p>word-break: normal;<\/p>\n<p>border-color: black;<\/p>\n<p>    }<\/p>\n<p>.tg .tg-lboi {<\/p>\n<p>border-color: inherit;<\/p>\n<p>text-align: left;<\/p>\n<p>vertical-align: middle<br \/>    }<\/p>\n<\/style>\n<table class=\"blog-table\">\n<tbody>\n<tr>\n<td class=\"tg-lboi\" style=\"background-color: #fff;\">Application start App copies SharePoint list \u201cBest Books\u201d into a local collection called BooksCollection<\/td>\n<td class=\"tg-lboi\" style=\"background-color: #fff;\">Best Books &gt; BooksCollection<\/td>\n<\/tr>\n<tr>\n<td class=\"tg-lboi\" style=\"background-color: #fff;\">Working offline App stores offline changes in a local collection called <span style=\"font-weight: bold;\">BooksChanges<\/span><\/td>\n<td class=\"tg-lboi\" style=\"background-color: #fff;\">Offline changes &gt; BooksChanges<\/td>\n<\/tr>\n<tr>\n<td class=\"tg-lboi\" style=\"background-color: #fff;\">Synchronizing changes App updates the item in SharePoint list and stores conflicting records in<br \/>\n<span style=\"font-weight: bold;\">BooksChangesConflict <\/span> collection<\/td>\n<td class=\"tg-lboi\" style=\"background-color: #fff;\">BooksChanges &gt; Best Books &gt; BooksChangesConflict<\/td>\n<\/tr>\n<tr>\n<td class=\"tg-lboi\" style=\"background-color: #fff;\">Resolving Conflicts User can retain item in SharePoint or discard offline changes<\/td>\n<td class=\"tg-lboi\" style=\"background-color: #fff;\">BooksChangesConflict &gt; Best Books OR &gt; Discard<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Setting the Data Source to a Local Collection<\/h3>\n<p>When the app loads, we need to check if internet connection is available and also load the source data from SharePoint to the local collection. We will need to build offline cache of \u201cBest Books\u201d list. We will check whether connection is available through<br \/>\nPowerApps object called \u201cConnection\u201d. We need to add code to the OnStart rule of the browser screen. Below are the high level steps to accomplish this:<\/p>\n<ul>\n<li>Check if the internet connection is available when app is loaded.<\/li>\n<li>If the app is online, retrieve data from SharePoint list entity \u201cBest Books\u201d and put it in a local collection \u201cBooksCollection\u201d.<\/li>\n<li>Save the collected data to local storage (local cache) of your device, so that we can retrieve cached data in offline mode.<\/li>\n<li>If the internet connection is not available, retrieve saved data from local cache and populate collection from local cache.<\/li>\n<li>Utilize a new collection for later use to help synchronize records that have data modifications while in offline mode.<\/li>\n<li>Also, there will be a collection to store data conflicts.<\/li>\n<\/ul>\n<p>Now, we are ready to show data in our app from the data source directly or the local storage based on internet connection availability.<\/p>\n<p><em><strong>Note:<\/strong><\/em> For now, you will receive error when you test app in browser and you can ignore that error. Please use mobile device to test LoadData and SaveData. Assumption is that you have started app at least once in online mode before you<br \/>\ntest offline functionality.<\/p>\n<h3>Reconfigure Screens to use Local Collection<\/h3>\n<p>The next step is to rename all references of \u201cBest Books\u201d data source to BooksCollection. We will need to reconfigure all the screens inside the app to use BooksCollection local collection.<\/p>\n<ul>\n<li>Browse Screen1 &gt; Browse Gallery1 &gt; Items (Only show the \u201cTitle\u201d and \u201cAuthor\u201d fields in the gallery, along with sorting and searching capability)<\/li>\n<li>DetailScreen1 &gt; DetailForm1 &gt; DataSource<\/li>\n<li>EditScreen1 &gt; EditForm1 &gt; DataSource<\/li>\n<\/ul>\n<h3>Refreshing the data<\/h3>\n<p>We need to update <strong>Refresh<\/strong> icon on the browser screen to save data to <strong>BooksCollection<\/strong> file after refresh occurs. We need to add code to the <strong>OnSelect<\/strong> rule of <strong>Refresh icon<\/strong> on the <strong>browser screen.<\/strong><\/p>\n<p><img loading=\"lazy\" class=\"wp-image-1281 size-full alignnone\" style=\"max-width: 100%; height: auto;\" title=\"Update Refresh icon\" src=\"https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Update-Refresh-icon.png\" sizes=\"(max-width: 545px) 100vw, 545px\" srcset=\"https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Update-Refresh-icon.png 545w, https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Update-Refresh-icon-300x40.png 300w\" alt=\"Update Refresh icon\" width=\"545\" height=\"73\" \/><\/p>\n<h3>Building a Synchronization screen to handle Syncing of Data<\/h3>\n<p>The next step is to build a synchronization screen to review and sync updated data. The screen displays a sync button which detects if the device is online and syncs data. Below is a flowchart of the synchronization process.<\/p>\n<p><img loading=\"lazy\" class=\"wp-image-1282 size-large alignnone\" style=\"max-width: 100%; height: auto;\" title=\"Synchronization process\" src=\"https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Synchronization-process-1024x518.png\" sizes=\"(max-width: 450px) 100vw, 450px\" srcset=\"https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Synchronization-process-1024x518.png 1024w, https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Synchronization-process-300x152.png 300w, https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Synchronization-process-768x388.png 768w, https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Synchronization-process.png 1044w\" alt=\"Synchronization process\" width=\"450\" height=\"228\" \/><\/p>\n<ul>\n<li>Add a new screen of type <strong>Scrollable<\/strong> to build synchronization feature.<img loading=\"lazy\" class=\"wp-image-1283 size-full alignnone\" style=\"max-width: 100%; height: auto;\" title=\"Scrollable\" src=\"https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Scrollable.png\" alt=\"Scrollable\" width=\"288\" height=\"219\" \/><\/li>\n<\/ul>\n<ul>\n<li>Right click and delete inbuilt Canvas<img loading=\"lazy\" class=\"wp-image-1284 size-full alignnone\" style=\"max-width: 100%; height: auto;\" title=\"Delete inbuilt Canvas\" src=\"https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Delete-inbuilt-Canvas.png\" sizes=\"(max-width: 307px) 100vw, 307px\" srcset=\"https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Delete-inbuilt-Canvas.png 307w, https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Delete-inbuilt-Canvas-300x209.png 300w\" alt=\"Delete inbuilt Canvas\" width=\"307\" height=\"214\" \/><\/li>\n<\/ul>\n<ul>\n<li>Rename synchronization screen to <strong>SyncScreen<\/strong>. Right click newly created screen and select <strong>Rename<\/strong>.<img loading=\"lazy\" class=\"wp-image-1285 size-full alignnone\" style=\"max-width: 100%; height: auto;\" title=\"Rename synchronization screen\" src=\"https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Rename-synchronization-screen.png\" alt=\"Rename synchronization screen\" width=\"201\" height=\"93\" \/><\/li>\n<\/ul>\n<ul>\n<li>Change the label text at the top to \u201cSync Offline Changes\u201d.<img loading=\"lazy\" class=\"wp-image-1286 size-full alignnone\" style=\"max-width: 100%; height: auto;\" title=\"Sync Offline Changes\" src=\"https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Sync-Offline-Changes.png\" sizes=\"(max-width: 215px) 100vw, 215px\" srcset=\"https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Sync-Offline-Changes.png 215w, https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Sync-Offline-Changes-156x300.png 156w\" alt=\"Sync Offline Changes\" width=\"215\" height=\"414\" \/><\/li>\n<\/ul>\n<ul>\n<li>Add a Gallery control of Vertical type and reset its positioning. <a href=\"https:\/\/docs.microsoft.com\/en-us\/powerapps\/maker\/canvas-apps\/controls\/control-gallery\">To know more about Gallery Control<\/a>.<img loading=\"lazy\" class=\"wp-image-1287 size-full alignnone\" style=\"max-width: 100%; height: auto;\" title=\"Keep appropriate space below\" src=\"https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Keep-appropriate-space-below.png\" sizes=\"(max-width: 387px) 100vw, 387px\" srcset=\"https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Keep-appropriate-space-below.png 387w, https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Keep-appropriate-space-below-169x300.png 169w\" alt=\"Keep appropriate space below\" width=\"387\" height=\"685\" \/><\/li>\n<\/ul>\n<p><em><strong>Note:<\/strong><\/em> We will need to add two buttons at the bottom. So, keep appropriate space below the Gallery Control.<\/p>\n<ul>\n<li>Set the<strong> Items<\/strong> property of the newly added Gallery control to <strong>BooksChanges<\/strong> collection.<img loading=\"lazy\" class=\"wp-image-1288 size-full alignnone\" style=\"max-width: 100%; height: auto;\" title=\"Set the Items property\" src=\"https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Set-the-Items-property.png\" sizes=\"(max-width: 310px) 100vw, 310px\" srcset=\"https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Set-the-Items-property.png 310w, https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Set-the-Items-property-242x300.png 242w\" alt=\"Set the Items property\" width=\"310\" height=\"384\" \/><\/li>\n<\/ul>\n<ul>\n<li>We can use <em>ThisItem.Record.&lt;Fieldname&gt;<\/em> syntax to display a record from offline mode. Below is the image of Image property which is set for \u201cThisItem.Record.Image\u201d<img loading=\"lazy\" class=\"wp-image-1289 size-large alignnone\" style=\"max-width: 100%; height: auto;\" title=\"Sync offline mode\" src=\"https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Sync-offline-mode-1024x326.png\" sizes=\"(max-width: 450px) 100vw, 450px\" srcset=\"https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Sync-offline-mode-1024x326.png 1024w, https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Sync-offline-mode-300x95.png 300w, https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Sync-offline-mode-768x244.png 768w, https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Sync-offline-mode.png 1091w\" alt=\"Sync offline mode\" width=\"450\" height=\"143\" \/><\/li>\n<\/ul>\n<p>Similarly, you can set properties for Book Name and Author as \u201cThisItem.Record.Title\u201d and \u201cThisItem.Record.Author0\u201d respectively.<\/p>\n<p><img loading=\"lazy\" class=\"wp-image-1290 size-large alignnone\" style=\"max-width: 100%; height: auto;\" title=\"Set properties\" src=\"https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Set-properties-1024x399.png\" sizes=\"(max-width: 450px) 100vw, 450px\" srcset=\"https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Set-properties-1024x399.png 1024w, https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Set-properties-300x117.png 300w, https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Set-properties-768x300.png 768w, https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Set-properties.png 1082w\" alt=\"Set properties\" width=\"450\" height=\"175\" \/><\/p>\n<ul>\n<li>Add a button below the gallery inside the synchronization screen to sync data from offline mode and rename the button text as \u201cSynchronize\u201d. Adjust the width and height of the button as needed.<img loading=\"lazy\" class=\"wp-image-1291 size-large alignnone\" style=\"max-width: 100%; height: auto;\" title=\"Add a button\" src=\"https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Add-a-button-1024x524.png\" sizes=\"(max-width: 450px) 100vw, 450px\" srcset=\"https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Add-a-button-1024x524.png 1024w, https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Add-a-button-300x154.png 300w, https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Add-a-button-768x393.png 768w, https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Add-a-button.png 1622w\" alt=\"Add a button\" width=\"450\" height=\"230\" \/><\/li>\n<\/ul>\n<ul>\n<li>We will need to add code on OnSelect property of the button for new records created offline and code to synchronize updated and deleted records. The code will carry out the process as described earlier in the flowchart.<\/li>\n<\/ul>\n<p>Below are the high-level steps to accomplish this: The code works by processing offline record modifications from \u201cBooksChanges\u201d collection. Once all the data is processed, \u201cBooksChanges\u201d collection will be empty.<\/p>\n<ul>\n<li>Save added records from \u201cBooksChanges\u201d collection inside \u201cBest Books\u201d list.<\/li>\n<li>Refresh \u201cBest Books\u201d list<\/li>\n<li>For the item modified offline, retrieve a current record from \u201cBooksChanges\u201d collection and save it inside \u201cBooksChangesReview\u201d<\/li>\n<li>If source record is not found in \u201cBooksChangesReview\u201d collection, add the record to \u201cBooksChangesConflict\u201d collection<\/li>\n<li>Load and process records from \u201cBooksChangesReview\u201d collection which are not modified<\/li>\n<li>After these remaining items in \u201cBooksChangesReview\u201d are conflicting records. Add those records inside \u201cBooksChangesConflict\u201d collection.<\/li>\n<li>Retrieve offline deleted records and load into \u201cBooksChangesReview\u201d collection<\/li>\n<li>Delete records from \u201cBooksChangesReview\u201d collection which are removed from the server<\/li>\n<li>Remove the records from \u201cBest Books\u201d list which are deleted in offline mode.<\/li>\n<li>After this remaining records in \u201cBooksChangesReview\u201d are conflicting. Add those records inside \u201cBooksChangesConflict\u201d collection.<\/li>\n<li>Update local cache file to include changes<\/li>\n<li>Alert the user in case of conflicting records.<\/li>\n<\/ul>\n<p>The code depends on the offline data modifications from the BooksCollection collection and once all the records are done, the collection will be empty.<\/p>\n<ul>\n<li>We can enable users to navigate to the conflict resolution screen by providing a \u201cConflicts\u201d button on the synchronization screen.<\/li>\n<li>Add code on DisplayMode action to disable conflicts button in case of no conflicting records.<\/li>\n<li>Also, add code on OnSelect action of conflicts button to navigate to the conflict resolution screen.<img loading=\"lazy\" class=\"wp-image-1292 alignnone\" style=\"max-width: 100%; height: auto;\" title=\"Disable conflicts button\" src=\"https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Disable-conflicts-button.png\" sizes=\"(max-width: 186px) 100vw, 186px\" srcset=\"https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Disable-conflicts-button.png 382w, https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Disable-conflicts-button-169x300.png 169w\" alt=\"Disable conflicts button\" width=\"186\" height=\"331\" \/><\/li>\n<\/ul>\n<ul>\n<li>Disable \u201cNext\u201d arrow from the gallery as it is not required. Instead, add a \u201cBack\u201d button at the top on sync screen.<img loading=\"lazy\" class=\"wp-image-1293 size-full alignnone\" style=\"max-width: 100%; height: auto;\" title=\"Add code on OnSelect\" src=\"https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Add-code-on-OnSelect.png\" sizes=\"(max-width: 384px) 100vw, 384px\" srcset=\"https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Add-code-on-OnSelect.png 384w, https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Add-code-on-OnSelect-300x150.png 300w\" alt=\"Add code on OnSelect\" width=\"384\" height=\"192\" \/><\/li>\n<\/ul>\n<ul>\n<li>Add code on <strong>OnSelect<\/strong> property of <strong>Back button<\/strong> on synchronization screen to navigate back to the browser screen.<\/li>\n<li>In order to navigate to the synchronization screen, add an icon on the browser screen.Open <strong>File<\/strong> menu and on the <strong>Content tab<\/strong>, choose <strong>Media<\/strong> and upload the required image.<img loading=\"lazy\" class=\"wp-image-1294 size-large alignnone\" style=\"max-width: 100%; height: auto;\" title=\"Upload Media\" src=\"https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Upload-Media-1024x144.png\" sizes=\"(max-width: 450px) 100vw, 450px\" srcset=\"https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Upload-Media-1024x144.png 1024w, https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Upload-Media-300x42.png 300w, https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Upload-Media-768x108.png 768w, https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Upload-Media.png 1724w\" alt=\"Upload Media\" width=\"450\" height=\"63\" \/>Press Esc to return to the workspace.Select Image under Media in the Insert tab<img loading=\"lazy\" class=\"wp-image-1295 size-full alignnone\" style=\"max-width: 100%; height: auto;\" title=\"Insert Media\" src=\"https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Insert-Media.png\" alt=\"Insert Media\" width=\"257\" height=\"151\" \/>Provide its<strong> Image<\/strong> property with the name of the file you uploaded, adjust the size of the image as needed to place it on the left of Refresh icon and rename it to \u201cSyncIcon\u201d. Provide its tooltip as \u201cSync Offline data\u201d.\n<p><img loading=\"lazy\" class=\"wp-image-1296 alignnone\" style=\"max-width: 100%; height: auto;\" title=\"Adjust the size\" src=\"https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Adjust-the-size.png\" sizes=\"(max-width: 524px) 100vw, 524px\" srcset=\"https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Adjust-the-size.png 737w, https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Adjust-the-size-300x128.png 300w\" alt=\"Adjust the size\" width=\"524\" height=\"224\" \/><\/li>\n<\/ul>\n<ul>\n<li>Set the OnSelect property of newly added sync icon on browser screen to navigate to sync screen.<\/li>\n<\/ul>\n<h3>Disabling Icons and Buttons<\/h3>\n<p>We can disable a control inside an app using DisplayMode property. The property has one of the three values: Disabled, Edit or View. When the device is offline, we need to disable synchronization button on the sync screen.<\/p>\n<h2>Conclusion<\/h2>\n<p>We saw how to enable offline capabilities in PowerApps with SharePoint development. By default, the app in offline mode shows no data as it does not retain data for future offline sessions and it will throw an unexpected error. To cater to these needs, we discussed two features. First, PowerApps can store and load data from local cache files. Secondly, it provides an ability to SharePoint developers to check whether the connection is available and also if the connection is a metered one.<\/p>\n<p><strong>In the <a href=\"https:\/\/www.tatvasoft.com.au\/blog\/implementing-offline-capability-in-powerapps-with-sharepoint-part-2\/\">next blog of the series<\/a><\/strong>, we have provided an overview of handling offline add, update and delete a record as well as handling data conflicts.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The blog caters the information regarding the basic idea of PowerApps which is a tool for building the mobile apps&#8230;.<\/p>\n","protected":false},"author":1,"featured_media":1905,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[29],"tags":[],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v15.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Offline Capability of PowerApps with SharePoint - Part 1<\/title>\n<meta name=\"description\" content=\"Implementation steps are mentioned right from the scratch on offline capabality of PowerApps with Sharepoint.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.tatvasoft.com.au\/blog\/implementing-offline-capability-in-powerapps-with-sharepoint-part-1\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Offline Capability of PowerApps with SharePoint - Part 1\" \/>\n<meta property=\"og:description\" content=\"Implementation steps are mentioned right from the scratch on offline capabality of PowerApps with Sharepoint.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.tatvasoft.com.au\/blog\/implementing-offline-capability-in-powerapps-with-sharepoint-part-1\/\" \/>\n<meta property=\"og:site_name\" content=\"TatvaSoft AU Blog\" \/>\n<meta property=\"article:published_time\" content=\"2018-11-13T06:51:56+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-03-17T09:08:22+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Offline-Capability-in-PowerApps-1.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"750\" \/>\n\t<meta property=\"og:image:height\" content=\"375\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\">\n\t<meta name=\"twitter:data1\" content=\"10 minutes\">\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.tatvasoft.com.au\/blog\/#website\",\"url\":\"https:\/\/www.tatvasoft.com.au\/blog\/\",\"name\":\"TatvaSoft AU Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":\"https:\/\/www.tatvasoft.com.au\/blog\/?s={search_term_string}\",\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/www.tatvasoft.com.au\/blog\/implementing-offline-capability-in-powerapps-with-sharepoint-part-1\/#primaryimage\",\"inLanguage\":\"en-US\",\"url\":\"https:\/\/www.tatvasoft.com.au\/blog\/wp-content\/uploads\/2018\/11\/Offline-Capability-in-PowerApps-1.jpg\",\"width\":750,\"height\":375,\"caption\":\"Offline Capability of PowerApps with SharePoint - Part 1\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.tatvasoft.com.au\/blog\/implementing-offline-capability-in-powerapps-with-sharepoint-part-1\/#webpage\",\"url\":\"https:\/\/www.tatvasoft.com.au\/blog\/implementing-offline-capability-in-powerapps-with-sharepoint-part-1\/\",\"name\":\"Offline Capability of PowerApps with SharePoint - Part 1\",\"isPartOf\":{\"@id\":\"https:\/\/www.tatvasoft.com.au\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.tatvasoft.com.au\/blog\/implementing-offline-capability-in-powerapps-with-sharepoint-part-1\/#primaryimage\"},\"datePublished\":\"2018-11-13T06:51:56+00:00\",\"dateModified\":\"2022-03-17T09:08:22+00:00\",\"author\":{\"@id\":\"https:\/\/www.tatvasoft.com.au\/blog\/#\/schema\/person\/99be98dec950f3b1cdc014df166dd95c\"},\"description\":\"Implementation steps are mentioned right from the scratch on offline capabality of PowerApps with Sharepoint.\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.tatvasoft.com.au\/blog\/implementing-offline-capability-in-powerapps-with-sharepoint-part-1\/\"]}]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.tatvasoft.com.au\/blog\/#\/schema\/person\/99be98dec950f3b1cdc014df166dd95c\",\"name\":\"tatvasoftadmin\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/www.tatvasoft.com.au\/blog\/#personlogo\",\"inLanguage\":\"en-US\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1ef69a3ae4a620ca0f649d8228bece0b?s=96&d=mm&r=g\",\"caption\":\"tatvasoftadmin\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","_links":{"self":[{"href":"https:\/\/www.tatvasoft.com.au\/blog\/wp-json\/wp\/v2\/posts\/946"}],"collection":[{"href":"https:\/\/www.tatvasoft.com.au\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tatvasoft.com.au\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tatvasoft.com.au\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tatvasoft.com.au\/blog\/wp-json\/wp\/v2\/comments?post=946"}],"version-history":[{"count":71,"href":"https:\/\/www.tatvasoft.com.au\/blog\/wp-json\/wp\/v2\/posts\/946\/revisions"}],"predecessor-version":[{"id":1991,"href":"https:\/\/www.tatvasoft.com.au\/blog\/wp-json\/wp\/v2\/posts\/946\/revisions\/1991"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.tatvasoft.com.au\/blog\/wp-json\/wp\/v2\/media\/1905"}],"wp:attachment":[{"href":"https:\/\/www.tatvasoft.com.au\/blog\/wp-json\/wp\/v2\/media?parent=946"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tatvasoft.com.au\/blog\/wp-json\/wp\/v2\/categories?post=946"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tatvasoft.com.au\/blog\/wp-json\/wp\/v2\/tags?post=946"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}