<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Stored Process to open data in browser, allow the user to edit it and return then data in Developers</title>
    <link>https://communities.sas.com/t5/Developers/Stored-Process-to-open-data-in-browser-allow-the-user-to-edit-it/m-p/456522#M5651</link>
    <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/50279"&gt;@Criptic&lt;/a&gt;&amp;nbsp;/&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/162038"&gt;@Kodit&lt;/a&gt;&amp;nbsp;- the site which explains the data editing tool is now live, and available&amp;nbsp;at &lt;A href="https://datacontroller.io" target="_self"&gt;https://datacontroller.io&lt;/A&gt;.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The documentation is available here:&amp;nbsp; &lt;A href="https://docs.datacontroller.io/" target="_blank"&gt;docs.datacontroller.io&lt;/A&gt;&lt;/P&gt;</description>
    <pubDate>Tue, 11 Sep 2018 14:18:07 GMT</pubDate>
    <dc:creator>AllanBowe</dc:creator>
    <dc:date>2018-09-11T14:18:07Z</dc:date>
    <item>
      <title>Stored Process to open data in browser, allow the user to edit it and return then data</title>
      <link>https://communities.sas.com/t5/Developers/Stored-Process-to-open-data-in-browser-allow-the-user-to-edit-it/m-p/450537#M5647</link>
      <description>&lt;P&gt;Hi,&amp;nbsp;&lt;/P&gt;&lt;P&gt;I'm trying to build a browser based interface where the user can update rows in a table using a SAS Stored Process.&lt;/P&gt;&lt;P&gt;So far I've been able to get the process to pick out the right row and print it in the browser using the following code;&lt;/P&gt;&lt;P&gt;&amp;amp;akt and &amp;amp;ref har variables telling which table and which row to pick.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New';"&gt;%&lt;STRONG&gt;&lt;I&gt;STPBEGIN&lt;/I&gt;&lt;/STRONG&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New'; color: navy;"&gt;%macro&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New';"&gt; &lt;STRONG&gt;&lt;I&gt;plock&lt;/I&gt;&lt;/STRONG&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New';"&gt;data tempplock;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New';"&gt;set &lt;SPAN style="color: teal;"&gt;t_stage.&lt;/SPAN&gt;&amp;amp;&lt;SPAN style="color: teal;"&gt;akt.&lt;/SPAN&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New'; color: blue;"&gt;%if&lt;/SPAN&gt;&lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New';"&gt; &lt;SPAN style="color: purple;"&gt;"&amp;amp;akt."&lt;/SPAN&gt;=&lt;SPAN style="color: purple;"&gt;"produkter"&lt;/SPAN&gt; &lt;SPAN style="color: blue;"&gt;%then&lt;/SPAN&gt; &lt;SPAN style="color: blue;"&gt;%do&lt;/SPAN&gt;; &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New';"&gt;where cat(compress(produkt),compress(kund))=&lt;SPAN style="color: purple;"&gt;"&amp;amp;ref."&lt;/SPAN&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New'; color: blue;"&gt;%end&lt;/SPAN&gt;&lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New';"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New';"&gt;run;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New'; color: navy;"&gt;%mend&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New';"&gt; plock;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New';"&gt;%&lt;STRONG&gt;&lt;I&gt;plock&lt;/I&gt;&lt;/STRONG&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New'; color: blue;"&gt;ods&lt;/SPAN&gt;&lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New';"&gt; &lt;SPAN style="color: blue;"&gt;html5&lt;/SPAN&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New'; color: navy;"&gt;proc&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New';"&gt; &lt;STRONG&gt;&lt;SPAN style="color: navy;"&gt;print&lt;/SPAN&gt;&lt;/STRONG&gt; &lt;SPAN style="color: blue;"&gt;data&lt;/SPAN&gt;=tempplock &lt;SPAN style="color: blue;"&gt;noobs&lt;/SPAN&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New'; color: navy;"&gt;run&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New';"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New'; color: blue;"&gt;ods&lt;/SPAN&gt;&lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New';"&gt; &lt;SPAN style="color: blue;"&gt;html5&lt;/SPAN&gt; &lt;SPAN style="color: blue;"&gt;Close&lt;/SPAN&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New';"&gt;%&lt;STRONG&gt;&lt;I&gt;STPEND&lt;/I&gt;&lt;/STRONG&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New';"&gt;which generates this table in the browser.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New';"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-left" image-alt="Skärmklipp.PNG" style="width: 200px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/19575i665B02F93AE42E1B/image-size/small?v=v2&amp;amp;px=200" role="button" title="Skärmklipp.PNG" alt="Skärmklipp.PNG" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New';"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Now my question is; how do I go about making the user be able to change the values and return these to SAS?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 03 Apr 2018 07:44:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Developers/Stored-Process-to-open-data-in-browser-allow-the-user-to-edit-it/m-p/450537#M5647</guid>
      <dc:creator>Kodit</dc:creator>
      <dc:date>2018-04-03T07:44:35Z</dc:date>
    </item>
    <item>
      <title>Re: Stored Process to open data in browser, allow the user to edit it and return then data</title>
      <link>https://communities.sas.com/t5/Developers/Stored-Process-to-open-data-in-browser-allow-the-user-to-edit-it/m-p/450549#M5648</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/162038"&gt;@Kodit&lt;/a&gt;&amp;nbsp;- GREAT question!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;A Stored Process Web Application is the perfect choice for letting users make changes to data, for&amp;nbsp;reasons such as the following:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;- Updates are made using a system account (eg sassrv) so the end user doesn't need to have write access to sensitive data&lt;/P&gt;&lt;P&gt;&amp;nbsp;- You can apply validation at point of data entry&lt;/P&gt;&lt;P&gt;&amp;nbsp;- It's much easier for users / developers alike&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The very first piece of advice I have for you is to separate your frontend web (web application logic) from backend SAS (data access and manipulation logic).&amp;nbsp; &amp;nbsp;For this you can use the open source Boemska h54s&amp;nbsp;&lt;A href="https://github.com/Boemska/h54s" target="_self"&gt;adapter&lt;/A&gt;.&amp;nbsp; I have written two guides to building web apps this way - a &lt;A href="https://www.rawsas.com/2015/12/building-web-apps-with-sas/" target="_self"&gt;short&lt;/A&gt; one and a more &lt;A href="http://support.sas.com/resources/papers/proceedings17/1091-2017.pdf" target="_self"&gt;detailed&lt;/A&gt; one.&amp;nbsp; Boemska even have a free application (the HOT editor) on github which may serve your initial requirements -&amp;nbsp;&lt;A href="https://github.com/Boemska/sas-hot-editor" target="_blank"&gt;https://github.com/Boemska/sas-hot-editor&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Note that the tool above will only work with SAS datasets, and does a complete replace (destroying indexes etc) of the backend table each time.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;For a complete solution, there are many more considerations.&amp;nbsp; Such as:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;- handling of numerical precision and special characters&lt;/P&gt;&lt;P&gt;&amp;nbsp;-&amp;nbsp;dynamically handling different data types (strings / numerics / dates / datetimes)&lt;/P&gt;&lt;P&gt;&amp;nbsp;- loading target tables of different types (retained keys, composite keys, scd2, bitemporal)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;You will also need to work with a database, or SAS Share (rather than SAS datasets) to enable concurrent access from multiple users.&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;If you'd like to truly delight your users / developers / admins (and save yourself several years of&amp;nbsp;development&amp;nbsp;and testing, as well as avoiding a custom build), I'd urge you to consider the Macro People&amp;nbsp;Data Controller.&amp;nbsp; This is a Stored Process Web App with the following features:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;- Secure, Real Time data uploads&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;- All changes routed through an approval mechanism (approver signs off changes and then they are applied)&lt;/P&gt;&lt;P&gt;&amp;nbsp;- Full audit history (what changed, when, by whom with reason capture)&lt;/P&gt;&lt;P&gt;&amp;nbsp;- Alerts&lt;/P&gt;&lt;P&gt;&amp;nbsp;- Documentation (user guide, admin guide)&lt;/P&gt;&lt;P&gt;&amp;nbsp;- Secured with SAS Metadata&lt;/P&gt;&lt;P&gt;&amp;nbsp;- Extensively battle tested&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;PM for&amp;nbsp;a no obligation demo!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 23 Apr 2018 13:37:30 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Developers/Stored-Process-to-open-data-in-browser-allow-the-user-to-edit-it/m-p/450549#M5648</guid>
      <dc:creator>AllanBowe</dc:creator>
      <dc:date>2018-04-23T13:37:30Z</dc:date>
    </item>
    <item>
      <title>Re: Stored Process to open data in browser, allow the user to edit it and return then data</title>
      <link>https://communities.sas.com/t5/Developers/Stored-Process-to-open-data-in-browser-allow-the-user-to-edit-it/m-p/450555#M5649</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/28909"&gt;@AllanBowe&lt;/a&gt;&amp;nbsp;- quick question: Where can I find out more about the&amp;nbsp;&lt;SPAN&gt;Macro People&amp;nbsp;Data Governor you mention in your response?&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Tue, 03 Apr 2018 09:37:23 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Developers/Stored-Process-to-open-data-in-browser-allow-the-user-to-edit-it/m-p/450555#M5649</guid>
      <dc:creator>Criptic</dc:creator>
      <dc:date>2018-04-03T09:37:23Z</dc:date>
    </item>
    <item>
      <title>Re: Stored Process to open data in browser, allow the user to edit it and return then data</title>
      <link>https://communities.sas.com/t5/Developers/Stored-Process-to-open-data-in-browser-allow-the-user-to-edit-it/m-p/450558#M5650</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/50279"&gt;@Criptic&lt;/a&gt;- I'm in the process of migrating the documentation onto Github pages.&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;But the best way is to send me a PM so I can 'live demo' the tool directly!&lt;/P&gt;</description>
      <pubDate>Mon, 23 Apr 2018 13:36:54 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Developers/Stored-Process-to-open-data-in-browser-allow-the-user-to-edit-it/m-p/450558#M5650</guid>
      <dc:creator>AllanBowe</dc:creator>
      <dc:date>2018-04-23T13:36:54Z</dc:date>
    </item>
    <item>
      <title>Re: Stored Process to open data in browser, allow the user to edit it and return then data</title>
      <link>https://communities.sas.com/t5/Developers/Stored-Process-to-open-data-in-browser-allow-the-user-to-edit-it/m-p/456522#M5651</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/50279"&gt;@Criptic&lt;/a&gt;&amp;nbsp;/&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/162038"&gt;@Kodit&lt;/a&gt;&amp;nbsp;- the site which explains the data editing tool is now live, and available&amp;nbsp;at &lt;A href="https://datacontroller.io" target="_self"&gt;https://datacontroller.io&lt;/A&gt;.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The documentation is available here:&amp;nbsp; &lt;A href="https://docs.datacontroller.io/" target="_blank"&gt;docs.datacontroller.io&lt;/A&gt;&lt;/P&gt;</description>
      <pubDate>Tue, 11 Sep 2018 14:18:07 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Developers/Stored-Process-to-open-data-in-browser-allow-the-user-to-edit-it/m-p/456522#M5651</guid>
      <dc:creator>AllanBowe</dc:creator>
      <dc:date>2018-09-11T14:18:07Z</dc:date>
    </item>
    <item>
      <title>Re: Stored Process to open data in browser, allow the user to edit it and return then data</title>
      <link>https://communities.sas.com/t5/Developers/Stored-Process-to-open-data-in-browser-allow-the-user-to-edit-it/m-p/463990#M5652</link>
      <description>&lt;P&gt;So I solved this by changing the ods template to output html-table in an editable table. Then I wrote a JavaScript to to create a json-string from the values in table and send it to SAS.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 22 May 2018 09:23:37 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Developers/Stored-Process-to-open-data-in-browser-allow-the-user-to-edit-it/m-p/463990#M5652</guid>
      <dc:creator>Kodit</dc:creator>
      <dc:date>2018-05-22T09:23:37Z</dc:date>
    </item>
  </channel>
</rss>

