<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://community.appian.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Logging Interface Access</title><link>https://community.appian.com/discussions/f/best-practices/39838/logging-interface-access</link><description>I hope this message finds you well. 
 I would like to log the event of an interface being opened. However, my understanding is that on the interface itself, unless an action such as clicking a button occurs, 
 it is not possible to write a record or start</description><dc:language>en-US</dc:language><generator>Telligent Community 12</generator><item><title>RE: Logging Interface Access</title><link>https://community.appian.com/thread/152119?ContentTypeID=1</link><pubDate>Tue, 21 Oct 2025 15:43:21 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:032644d4-37dd-47c6-9142-a76e5cece8dc</guid><dc:creator>Mike Schmitt</dc:creator><description>&lt;p&gt;Ok good, glad to hear you got the error resolved.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Logging Interface Access</title><link>https://community.appian.com/thread/152093?ContentTypeID=1</link><pubDate>Mon, 20 Oct 2025 07:06:23 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:dd062f22-6ab4-42aa-b647-dd8597b17167</guid><dc:creator>Keizo Watsuji</dc:creator><description>&lt;p&gt;I was able to resolve the issue on my own.&lt;/p&gt;
&lt;p&gt;The error was related to the setting in the onError of a!startProcess.&lt;br /&gt;In other words, the Process Model failed to start.&lt;/p&gt;
&lt;p&gt;Although I had configured the Web API authentication to use a security account,&lt;br /&gt;the security settings for the Process Model and Data Store Entity were missing, which caused the problem.&lt;/p&gt;
&lt;p&gt;I&amp;#39;ve already fixed it and the original goal of saving logs on the screen display has been about 80% completed.&lt;/p&gt;
&lt;p&gt;As for the remaining 20%, I will create a separate thread to ask questions.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Logging Interface Access</title><link>https://community.appian.com/thread/152089?ContentTypeID=1</link><pubDate>Sun, 19 Oct 2025 11:22:57 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:c96a3e0c-f67f-485e-bfe7-c0d164fbb540</guid><dc:creator>Keizo Watsuji</dc:creator><description>&lt;p&gt;Thanks Mike,&lt;br /&gt;&lt;br /&gt;I&amp;#39;ve tried implementing accoding to your advice and I&amp;#39;m stacking on the connection between integration and Web API.&lt;br /&gt;&lt;br /&gt;My Web API runs correctly when I click TEST button on it.&lt;br /&gt;&lt;span&gt;But when I click TEST button on my integration, it fails as below:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div class="FieldLayout---label_above"&gt;&lt;span id="4fb1bff43eb336aafd681a3127044a55" class="FieldLayout---field_label"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;-------------------------------------------------------&lt;/p&gt;
&lt;p&gt;Value&lt;br /&gt;Dictionary&lt;br /&gt; success: false&lt;br /&gt; result: HttpResponse&lt;br /&gt; statusLine: &amp;quot;HTTP/1.1 500 &amp;quot;&lt;br /&gt; statusCode: 500&lt;br /&gt; headers: Dictionary&lt;br /&gt; Date: &amp;quot;Sun, 19 Oct 2025 11:04:35 GMT&amp;quot;&lt;br /&gt; Content-Type: &amp;quot;text/plain;charset=ISO-8859-1&amp;quot;&lt;br /&gt; Transfer-Encoding: &amp;quot;chunked&amp;quot;&lt;br /&gt; Connection: &amp;quot;keep-alive&amp;quot;&lt;br /&gt; X-Trace-Id: &amp;quot;522127991e953a7fe2716155fe5ecddc&amp;quot;&lt;br /&gt; Strict-Transport-Security: &amp;quot;max-age=31536000; includeSubDomains; preload&amp;quot;&lt;br /&gt; Referrer-Policy: &amp;quot;strict-origin-when-cross-origin&amp;quot;&lt;br /&gt; X-Frame-Options: &amp;quot;SAMEORIGIN&amp;quot;&lt;br /&gt; Content-Security-Policy-Report-Only: &amp;quot;style-src &amp;#39;unsafe-inline&amp;#39; &amp;#39;self&amp;#39; &lt;a href="https://web-assets.appian-cdn.com"&gt;web-assets.appian-cdn.com&lt;/a&gt; &amp;#39;strict-dynamic&amp;#39; &amp;#39;nonce-YTlkMTBmNzUtZDRiMi00ZGEzLWFhMGYtYmM2NGExMWM5MWE1&amp;#39;; child-src &amp;#39;none&amp;#39;; script-src &amp;#39;self&amp;#39; &amp;#39;unsafe-inline&amp;#39; &amp;#39;unsafe-eval&amp;#39; &lt;a href="https://web-assets.appian-cdn.com"&gt;web-assets.appian-cdn.com&lt;/a&gt; &amp;#39;strict-dynamic&amp;#39; &amp;#39;nonce-NGVjYmY4NjMtZDUzZS00Y2VmLTk5MWEtMmI5Y2NlNjJkYTcy&amp;#39;; object-src https:; frame-src https:; img-src https:; default-src &amp;#39;self&amp;#39;; font-src &amp;#39;self&amp;#39; https: data:; report-uri /suite/rest/a/logging/latest/csp/report; report-to report;&amp;quot; Content-Security-Policy: &amp;quot;report-uri /suite/rest/a/logging/latest/csp/report; report-to report;&amp;quot;&lt;br /&gt; Reporting-Endpoints: &amp;quot;report=&amp;quot;/suite/rest/a/logging/latest/csp/report&amp;quot;&amp;quot;&lt;br /&gt;&lt;br /&gt; X-XSS-Protection: &amp;quot;1; mode=block&amp;quot;&lt;br /&gt; Requested-While-Authenticated: &amp;quot;false&amp;quot;&lt;br /&gt; contentType: &amp;quot;text/plain;charset=ISO-8859-1&amp;quot;&lt;br /&gt; body: &amp;quot;500 - Internal Server Error&amp;quot;&lt;br /&gt; error: IntegrationError title: &amp;quot;The external system encountered an error&amp;quot;&lt;br /&gt; message: &amp;quot;Failed to connect to https://{my appian url}/suite/webapi/{my end point}&amp;quot;&lt;br /&gt; detail: &amp;quot;HTTP/1.1 500 &amp;quot;&lt;br /&gt; connectedSystem: null (Connected System)&lt;br /&gt; binaryDoc75MbLimitExceeded: false&lt;/p&gt;
&lt;p&gt;-------------------------------------------------------&lt;/p&gt;
&lt;div class="FieldLayout---input_below"&gt;&lt;/div&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;br /&gt;I can see connected system setting on my integration but it says&amp;nbsp;&lt;br /&gt;&lt;span&gt;&amp;quot;connectedSystem: null (Connected System)&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Logging Interface Access</title><link>https://community.appian.com/thread/152088?ContentTypeID=1</link><pubDate>Sun, 19 Oct 2025 11:10:44 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:1250d72d-f8d3-4b84-968c-26d4feb21b39</guid><dc:creator>Keizo Watsuji</dc:creator><description>&lt;p&gt;Thanks &lt;span&gt;Lejanson&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&amp;gt;Create the Web API as a POST but make sure that you check the Queries Data and not Modifies data.&lt;br /&gt;It&amp;#39;s very useful for me.&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Logging Interface Access</title><link>https://community.appian.com/thread/152039?ContentTypeID=1</link><pubDate>Wed, 15 Oct 2025 13:50:08 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:2289d626-0af5-405d-96ff-e0e52836fffc</guid><dc:creator>Jesse Knight</dc:creator><description>&lt;p&gt;With the POST, be sure to select &amp;#39;queries data&amp;#39;, and this should work ok. If you select &amp;#39;modifies data&amp;#39;, you get an error related to the fact that the integration call is not in a &lt;code&gt;saveInto&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;A possible quirk about retrieving images via API:&amp;nbsp;We don&amp;#39;t know if there are performance issues at scale when retrieving images directly via API versus using &lt;code&gt;a!documentImage()&lt;/code&gt;.So to avoid any potential issues when using an image in this way, it&amp;nbsp;may be best for the API to return a document id&amp;nbsp;for use with &lt;code&gt;&lt;span&gt;a!documentImage()&lt;/span&gt;&lt;/code&gt;. That keeps the API layer small / concise, and keeps the performance of the UI expression in line with what&amp;#39;s generally expected when many users load the image.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a href="/members/harshas2775"&gt;Harsha Sharma&lt;/a&gt;&amp;nbsp; One possible reason to make this an image retrieval is so that there&amp;#39;s a reusable UI component that&amp;#39;s placeable in any UI, including collapsible sections / hidden parts of the UI that are conditionally shown. The reusable component would receive any metadata about the section context, automatically call the API on demand, and load&amp;nbsp;a 1x1 pixel image with no padding / borders onto the UI. Without the UI component aspect, the logging isn&amp;#39;t very reusable as an encapsulated rule.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Logging Interface Access</title><link>https://community.appian.com/thread/152013?ContentTypeID=1</link><pubDate>Wed, 15 Oct 2025 03:35:18 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:4651ddbe-ea27-478c-87c3-e33387b9402b</guid><dc:creator>Harsha Sharma</dc:creator><description>&lt;p&gt;Web APIs using &amp;#39;GET&amp;#39;&amp;nbsp;method cannot call any smart services as per Appian Design. So for intended functionality use the &amp;#39;POST&amp;#39; method in web API and setup an Integration that calls your web API from target interface. As soon as interface loads, the Integration (executed on load against a local variable) will call the API. API will execute the smart service and record log with a success response for integration. When setting up a!httpResponse for web API in response body you can send back the image as well. &lt;pre class="ui-code" data-mode="text"&gt;a!httpResponse(
  statusCode: 200,
  headers: {
    a!httpHeader(name: &amp;quot;content-type&amp;quot;, value: &amp;quot;application/json&amp;quot;)
  },
  body: a!iconIndicator(&amp;quot;STATUS_WARN&amp;quot;)
)&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;However as earlier discussed in this thread that to log the interface load activity you don&amp;#39;t necessarily need to follow what ChatGPT suggested.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The web API can write to db and respond back with a successful message. That web API can be called using an integration in the interface. So on load the integration-&amp;gt;web API-&amp;gt;write records will execute. On Error of API execution, response can be a user friendly message asking them to re-load the interface.&lt;/p&gt;
&lt;p&gt;Is there any reason for image to be involved in the response and showing it on interface if you just want to log the interface load activity?&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Logging Interface Access</title><link>https://community.appian.com/thread/152012?ContentTypeID=1</link><pubDate>Tue, 14 Oct 2025 23:56:10 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:c323676c-5fa3-41f8-992c-d31e3bba6798</guid><dc:creator>Keizo Watsuji</dc:creator><description>&lt;p&gt;&lt;span&gt;I&amp;#39;m sorry for causing confusion. The &amp;quot;Portal Site&amp;quot; I mentioned is not the Appian Portal, but a portal site in the usual sense, meaning the entry point for users.&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Logging Interface Access</title><link>https://community.appian.com/thread/152011?ContentTypeID=1</link><pubDate>Tue, 14 Oct 2025 23:48:54 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:b1844718-1d15-4594-be39-928d2d051cc8</guid><dc:creator>Keizo Watsuji</dc:creator><description>&lt;p&gt;Thanks Jesse.&lt;br /&gt;&lt;br /&gt;I understood that. But&amp;nbsp;the error&amp;nbsp;&lt;span&gt;&amp;quot;Smart Services cannot be executed in Web APIs that have a method of &amp;#39;GET&amp;#39;.&amp;quot; is still remaining...&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Logging Interface Access</title><link>https://community.appian.com/thread/152007?ContentTypeID=1</link><pubDate>Tue, 14 Oct 2025 16:30:24 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:5ae5a2a4-b70f-4bff-9458-eddad92eff91</guid><dc:creator>Mike Schmitt</dc:creator><description>&lt;p&gt;This isn&amp;#39;t really how to structure what I was suggesting.&amp;nbsp; My setup has 5 main layers - it could potentially be condensed some, but the layer structure defined here gives you levels of abstraction that will increase potential reusability and reduce rework efforts should you decide to change the way something works in the future.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;On your &lt;strong&gt;interface&lt;/strong&gt;, call an expression rule in a Local Variable definition, passing in the person&amp;#39;s username, and relevant details about where they&amp;#39;re viewing from.&lt;/li&gt;
&lt;li&gt;In the &lt;strong&gt;expression rule&lt;/strong&gt;, call an Integration you set up, and map the results.&amp;nbsp; It doesn&amp;#39;t need to do anything as complex as returning an &amp;quot;image file&amp;quot;, it could simply return a timestamp or boolean value.&amp;nbsp; My suggestion would be simply having it return a &amp;quot;last updated&amp;quot; timestamp (to be stored in the aforementioned Local Variable).&lt;/li&gt;
&lt;li&gt;In the &lt;strong&gt;integration&lt;/strong&gt;, call the Web API you set up, passing in the details sent in from the Expression Rule.&amp;nbsp; Tie it to a Connected System pointing at your own environment and with a Service Account that has permissions to launch the process model used in the Web API.&lt;/li&gt;
&lt;li&gt;in the &lt;strong&gt;Web API&lt;/strong&gt;, configure as a POST method and call the designated Process Model using &lt;em&gt;a!startProcess()&lt;/em&gt;, passing in the same relevant details having been passed down.&lt;/li&gt;
&lt;li&gt;In the &lt;strong&gt;process model&lt;/strong&gt;,&amp;nbsp;you can do your DB write / update, passing back values to the caller indicating that it ran successfully (such as a &amp;quot;last updated&amp;quot; timestamp value).&amp;nbsp; If you decide to look up an existing row for the user in question (such as grouping rows by day, so as not to clutter the table with a row for every single refresh), it will be trivially easy, for instance, to pre-query any relevant row for the user per location/day, and if one exists, update that row, and otherwise, create a new one.&amp;nbsp; Or just write a new row every time, that part is up to you.&lt;/li&gt;
&lt;/ol&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Logging Interface Access</title><link>https://community.appian.com/thread/152005?ContentTypeID=1</link><pubDate>Tue, 14 Oct 2025 14:45:26 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:36941846-6e67-410f-94e9-b53b07f016c5</guid><dc:creator>tamaraw</dc:creator><description>&lt;p&gt;Keizo,&lt;/p&gt;
&lt;p&gt;Create the Web API as a POST but make sure that you check the Queries Data and not Modifies data.&lt;/p&gt;
&lt;p&gt;- The webAPI must create an entry onto the database table where you are logging the event.&lt;/p&gt;
&lt;p&gt;Create an integration to call that webAPI&lt;/p&gt;
&lt;p&gt;In your interface, call the integration&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;a!localVariables(&lt;/p&gt;
&lt;p&gt;local!eventLog: rule!MY_Integration(),&lt;/p&gt;
&lt;p&gt;a!sectionLayout(&lt;/p&gt;
&lt;p&gt;label: &amp;quot;My Label&amp;quot;,&lt;/p&gt;
&lt;p&gt;contents: {}&lt;/p&gt;
&lt;p&gt;)&lt;/p&gt;
&lt;p&gt;)&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;This should work. Let me know if you got any questions&lt;/p&gt;
&lt;p&gt;Lejanson&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Logging Interface Access</title><link>https://community.appian.com/thread/152002?ContentTypeID=1</link><pubDate>Tue, 14 Oct 2025 13:03:12 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:ea572659-0925-4459-a41e-b8244451681d</guid><dc:creator>Jesse Knight</dc:creator><description>&lt;p&gt;Hi Keizo,&lt;/p&gt;
&lt;p&gt;It is not a hard requirement to write records from a Process Model. For APIs that are intended to be called frequently, it is better in practice to call &lt;code&gt;a!writeRecords()&lt;/code&gt; from the API object itself to remove the overhead and latency of starting a process.&lt;/p&gt;
&lt;p&gt;Keep in mind that, if enabled in the record types, you can write multiple related records at once if they are sync&amp;#39;ed records and have a relationship defined. For me, this has worked for 99% of my use cases. For the other 1%, I did&amp;nbsp;something like the following:&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;pre class="ui-code" data-mode="text"&gt;a!writeRecords(
    records: {Record A and its embedded related records}
    onSuccess: a!writeRecords(
        records: {Record not related to record A}
        onSuccess: a!httpResponse()
        onError: a!httpResponse()
    ),
    onError: a!httpResponse()
)&lt;/pre&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Logging Interface Access</title><link>https://community.appian.com/thread/152001?ContentTypeID=1</link><pubDate>Tue, 14 Oct 2025 12:52:42 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:39b71c53-c007-408e-b256-c2aff6a79b72</guid><dc:creator>Jesse Knight</dc:creator><description>&lt;p&gt;It is my understanding that portal users do not &amp;#39;log in&amp;#39; to Appian, and therefore &lt;code&gt;loggedInUser()&lt;/code&gt; will return the service account that is called from the portal rather than the person accessing the portal. You can probably add some metadata (headers, path, query param, etc) to your API call to get some sort of user info.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Logging Interface Access</title><link>https://community.appian.com/thread/151999?ContentTypeID=1</link><pubDate>Tue, 14 Oct 2025 11:06:41 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:7e316584-07c2-4291-92ad-58a57a8d4d04</guid><dc:creator>Keizo Watsuji</dc:creator><description>&lt;p&gt;Dear Harsha,&lt;/p&gt;
&lt;p&gt;Thank you for your advice.&lt;br /&gt;&lt;br /&gt;I reviewed the documentation again, modified my code and confirmed that a!startProcess() and a!writeRecord can be executed.&lt;/p&gt;
&lt;p&gt;However, as mentioned in my initial post,&lt;br /&gt;(1) Create a Web API on Appian that returns an image as the response and simultaneously saves a log.&lt;br /&gt;(2) Place an image on the target interface and set the endpoint of the Web API created in (1) as the image source.&lt;br /&gt;(3) As a result, when the interface is opened, the Web API in (1) is called, and the log is recorded.&lt;/p&gt;
&lt;p&gt;Since we intend to implement this behavior, the Web API must be implemented with the GET method.&lt;/p&gt;
&lt;p&gt;As a result, we encountered the error:&lt;br /&gt;&amp;quot;Smart Services cannot be executed in Web APIs that have a method of &amp;#39;GET&amp;#39;.&amp;quot;&lt;/p&gt;
&lt;p&gt;and cannot proceed further.&lt;/p&gt;
&lt;p&gt;Is there any way to work around this?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Logging Interface Access</title><link>https://community.appian.com/thread/151995?ContentTypeID=1</link><pubDate>Tue, 14 Oct 2025 10:04:37 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:418928cf-877e-4451-9d65-7dc2df230b01</guid><dc:creator>Keizo Watsuji</dc:creator><description>&lt;p&gt;Dear Stephan,&lt;/p&gt;
&lt;p&gt;I generally agree with your opinion.&lt;br /&gt;However, we are building a portal site for users and are considering displaying various information for them on the top page.&lt;br /&gt;Since there are quite a few users for whom simply viewing the portal site is sufficient, we would like to also track who has accessed the portal site.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Logging Interface Access</title><link>https://community.appian.com/thread/151991?ContentTypeID=1</link><pubDate>Tue, 14 Oct 2025 08:02:00 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:3759ce70-a9ac-46eb-ac2e-8e28931e0a55</guid><dc:creator>Stefan Helzle</dc:creator><description>&lt;p&gt;&amp;quot;Usage Rate&amp;quot; ... isn&amp;#39;t this about users actually doing something vs. just staring at a page? User activity in Appian is closely tied to starting processes. When writing records, you can also write record events which then should&amp;nbsp;correlate with &amp;quot;user activity&amp;quot;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Logging Interface Access</title><link>https://community.appian.com/thread/151990?ContentTypeID=1</link><pubDate>Tue, 14 Oct 2025 06:41:44 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:9bcdad01-4051-4a1f-bf9d-ae530a9bf08d</guid><dc:creator>Harsha Sharma</dc:creator><description>&lt;p&gt;You web API structure as per this sample code doesnt seem right! the smart servcies should not be related to a local variable.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Please check the &lt;a href="https://docs.appian.com/suite/help/25.3/Web_API_Tutorial_-_Level_II.html#create-a-web-api"&gt;documentation &lt;/a&gt;for steps/considerations. In you use case you can create a web API that has a!startProcess() in it. Whatever you are trying to accomplish in a!writeRecord() and a!writeToDataStoreEntity() should be moved inside the process.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The https Response configuration would also come within the onSuccess or onError of a!startProcess() configuration.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Logging Interface Access</title><link>https://community.appian.com/thread/151987?ContentTypeID=1</link><pubDate>Tue, 14 Oct 2025 03:39:53 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:cb736ad2-2ed6-4b26-b903-0a132584245f</guid><dc:creator>Keizo Watsuji</dc:creator><description>&lt;p&gt;Thank you all for your advice.&lt;/p&gt;
&lt;p&gt;Although I initially lacked some information, ultimately, I would like to calculate usage rates for each application from the log data. Therefore, I prefer to save the logs as records rather than text files. Additionally, since I need to calculate usage rates by organization, user information is also necessary.&lt;/p&gt;
&lt;p&gt;Hence, I believe the approach Mike has already implemented is the closest to what I need.&lt;/p&gt;
&lt;p&gt;I implemented the Web API as shown below. While it returns an image file as the response, it seems that neither a!startProcess, a!writeToDataStoreEntity, nor a!writeRecords functions are executing.&lt;/p&gt;
&lt;p&gt;I implemented it using the GET method to return the image file. Is there anything else I should do?&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;a!localVariables(&lt;br /&gt; &lt;br /&gt;&amp;nbsp; local!codea: 200,&lt;br /&gt;&amp;nbsp; local!codeb: 200,&lt;br /&gt;&amp;nbsp; local!codec: 200,&lt;/p&gt;
&lt;p&gt;&amp;nbsp; local!a: a!writeToDataStoreEntity(&lt;br /&gt;&amp;nbsp; &amp;nbsp; dataStoreEntity: cons!XLOG_EVENT,&lt;br /&gt;&amp;nbsp; &amp;nbsp; valueToStore: &amp;#39;type!{urn:com:appian:types:XLOG}XLOG_RT_EVENT&amp;#39;(&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; timestamp: now(),&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; appName: &amp;quot;Application Name&amp;quot;,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; functionName: &amp;quot;Function Name&amp;quot;,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; user: tostring(loggedInUser())&lt;br /&gt;&amp;nbsp; &amp;nbsp; ),&lt;br /&gt;&amp;nbsp; &amp;nbsp; onSuccess: a!save(local!codea, 201),&lt;br /&gt;&amp;nbsp; &amp;nbsp; onError: a!save(local!codea, 202)&lt;br /&gt;&amp;nbsp; ),&lt;/p&gt;
&lt;p&gt;&amp;nbsp; local!b: a!writeRecords(&lt;br /&gt;&amp;nbsp; &amp;nbsp; records: &amp;#39;recordType!{}XLOG rtEvent&amp;#39;(&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;#39;recordType!{}XLOG rtEvent.fields.{}timestamp&amp;#39;: now(),&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;#39;recordType!{}XLOG rtEvent.fields.{}appName&amp;#39;: &amp;quot;Application Name RT&amp;quot;,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;#39;recordType!{}XLOG rtEvent.fields.{}functionName&amp;#39;: &amp;quot;Function Name RT&amp;quot;,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;#39;recordType!{}XLOG rtEvent.fields.{}user&amp;#39;: tostring(loggedInUser())&lt;br /&gt;&amp;nbsp; &amp;nbsp; ),&lt;br /&gt;&amp;nbsp; &amp;nbsp; onSuccess: a!save(local!codeb, 201),&lt;br /&gt;&amp;nbsp; &amp;nbsp; onError: a!save(local!codeb, 202)&lt;br /&gt;&amp;nbsp; ),&lt;br /&gt; &lt;br /&gt;&amp;nbsp; local!c: a!startProcess(&lt;br /&gt;&amp;nbsp; &amp;nbsp; processModel: cons!XLOG_pmTest,&lt;br /&gt;&amp;nbsp; &amp;nbsp; onSuccess: a!save(local!codec, 201),&lt;br /&gt;&amp;nbsp; &amp;nbsp; onError: a!save(local!codec, 202)&lt;br /&gt;&amp;nbsp; ),&lt;/p&gt;
&lt;p&gt;&amp;nbsp; local!d: a!richTextDisplayField(&lt;br /&gt;&amp;nbsp; &amp;nbsp; value: &amp;quot;code: &amp;quot; &amp;amp; local!codea &amp;amp; &amp;quot; &amp;quot; &amp;amp; local!codeb&amp;amp; &amp;quot; &amp;quot; &amp;amp; local!codec&lt;br /&gt;&amp;nbsp; ),&lt;/p&gt;
&lt;p&gt;&amp;nbsp; a!httpResponse(&lt;br /&gt;&amp;nbsp; &amp;nbsp; statusCode: local!codec,&lt;br /&gt;&amp;nbsp; &amp;nbsp; headers: {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; a!httpHeader(name: &amp;quot;Content-Type&amp;quot;, value: &amp;quot;image/png&amp;quot;),&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; a!httpHeader(name: &amp;quot;Cache-Control&amp;quot;, value: &amp;quot;no-store, no-cache, must-revalidate, max-age=0&amp;quot;),&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; a!httpHeader(name: &amp;quot;Pragma&amp;quot;, value: &amp;quot;no-cache&amp;quot;)&lt;br /&gt;&amp;nbsp; &amp;nbsp; },&lt;br /&gt;&amp;nbsp; &amp;nbsp; body: cons!XLOG_PNG&lt;br /&gt;&amp;nbsp; )&lt;br /&gt;)&lt;/p&gt;
&lt;p&gt;NOTE:In this sample code, these local variables are only for debbuging.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Logging Interface Access</title><link>https://community.appian.com/thread/151986?ContentTypeID=1</link><pubDate>Mon, 13 Oct 2025 18:44:39 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:cb4fdeb6-ac91-4199-8c96-6dce989dae11</guid><dc:creator>Mike Schmitt</dc:creator><description>&lt;p&gt;If you absolutely must have this, it&amp;#39;s pretty easy to create an Appian Web API that accepts key info (i.e. the username of the current user, and the name or some sort of identifier for the interface in question), which you can then call from the interface at load time in a local variable declaraion calling an Integration.&amp;nbsp; The API would simply launch a process model that quickly makes an entry for that username and that identifier in a DB table you have previously created, as well as a &amp;quot;loaded at&amp;quot; timestamp.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I&amp;#39;ve implemented something like this for myself and decided to limit the DB table to 1 row per user per day per interface, so when it launches for a particular user, if there&amp;#39;s already a row for that date/user/interface, it updates the existing row (incrementing an &amp;quot;updated&amp;quot; timestamp, as well as a &amp;quot;counter&amp;quot; that starts at 1 and increments for every unique load by that user).&amp;nbsp; This is slightly extra work of course but has been pretty useful to me and our management team in tracking overall site usage.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Logging Interface Access</title><link>https://community.appian.com/thread/151973?ContentTypeID=1</link><pubDate>Mon, 13 Oct 2025 14:28:13 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:240d3bca-35d5-4e9a-8248-bedbfd665ba2</guid><dc:creator>Jesse Knight</dc:creator><description>&lt;p&gt;ChatGPT&amp;#39;s approach isn&amp;#39;t &amp;quot;wrong&amp;quot;, it&amp;#39;s just incomplete and can be misleading. Even 2025&amp;#39;s latest LLMs&amp;nbsp;are like the over-confident interns we&amp;#39;re constantly correcting and rolling our eyes at. Yet in this case, its approach is possible.&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:240px;max-width:320px;" src="/resized-image/__size/640x480/__key/communityserver-discussions-components-files/20/pastedimage1760365148976v1.png" alt=" " /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:240px;max-width:320px;" src="/resized-image/__size/640x480/__key/communityserver-discussions-components-files/20/pastedimage1760365176251v2.png" alt=" " /&gt;&lt;/p&gt;
&lt;p&gt;For this to work&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You need a what&amp;#39;s colloquially known as a &amp;quot;loopback&amp;quot; API call, where an Appian API is called via an Appian integration that uses an API key from the admin console. In theory it&amp;#39;s possible to have the logged in user authenticate to the Appian API as themselves, but in practice it&amp;#39;s a little more nuanced than that. Depending on your environment&amp;#39;s security requirements, loopback API&amp;#39;s may not be a good idea to do in production.&lt;/li&gt;
&lt;li&gt;API trace logging must be enabled in the admin console. Enabling this logging can cause a bit of overhead in production, and the logs will be overwritten every few days (or ~10MB) if there is a large volume of API calls.&lt;/li&gt;
&lt;li&gt;View &lt;a href="https://docs.appian.com/suite/help/25.3/Logging.html#web-api-performance-logs"&gt;perflogs/web_api_trace.csv&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;According to your prompt, you don&amp;#39;t need to know who loaded the page, just that the page was loaded. If you need to know who loaded the page, there&amp;#39;s a bit more development / complexity there.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Logging Interface Access</title><link>https://community.appian.com/thread/151969?ContentTypeID=1</link><pubDate>Mon, 13 Oct 2025 11:56:33 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:be37782c-4e19-4d90-b5cf-c531be0620da</guid><dc:creator>Stefan Helzle</dc:creator><description>&lt;p&gt;ChatGPT has no clue how Appian works.&lt;/p&gt;
&lt;p&gt;Did you check whether the records usage log meets your requirements?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>