<?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>Portals - Recent Threads</title><link>https://community.appian.com/discussions/f/portals</link><description>Portals related discussions</description><dc:language>en-US</dc:language><generator>Telligent Community 12</generator><item><title>Unable to rename documents with special characters/spaces in S3 integration via Portal and WebAPI</title><link>https://community.appian.com/thread/40259?ContentTypeID=0</link><pubDate>Fri, 06 Mar 2026 18:47:16 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:9a729fb0-3120-4ce3-87e6-d41c0bf568db</guid><dc:creator>Silas. B. Ferreira</dc:creator><slash:comments>5</slash:comments><comments>https://community.appian.com/thread/40259?ContentTypeID=0</comments><wfw:commentRss>https://community.appian.com/discussions/f/portals/40259/unable-to-rename-documents-with-special-characters-spaces-in-s3-integration-via-portal-and-webapi/rss?ContentTypeId=0</wfw:commentRss><description>&lt;h1&gt;&lt;/h1&gt;
&lt;p class="mb-2 whitespace-pre-wrap"&gt;Hi, how are y&amp;#39;all doing?&lt;/p&gt;
&lt;p class="mb-2 whitespace-pre-wrap"&gt;&lt;/p&gt;
&lt;p class="mb-2 whitespace-pre-wrap"&gt;I&amp;#39;m currently facing a challenging issue related to &lt;strong&gt;document renaming in a Portal environment using an S3 integration&lt;/strong&gt;, and I would really appreciate any guidance or suggestions from the community.&lt;/p&gt;
&lt;p class="mb-2 whitespace-pre-wrap"&gt;&lt;strong&gt;Context&lt;/strong&gt;&lt;/p&gt;
&lt;p class="mb-2 whitespace-pre-wrap"&gt;I&amp;#39;m trying to rename a document using the &lt;strong&gt;&amp;quot;Edit Document Properties&amp;quot;&lt;/strong&gt; smart service inside a &lt;strong&gt;Portal&lt;/strong&gt;, but the behavior is inconsistent depending on the environment and the file name used.&lt;/p&gt;
&lt;p class="mb-2 whitespace-pre-wrap"&gt;&lt;strong&gt;Problem Description&lt;/strong&gt;&lt;/p&gt;
&lt;p class="mb-2 whitespace-pre-wrap"&gt;The issue is that I cannot use the &lt;strong&gt;&amp;quot;Edit Document Properties&amp;quot;&lt;/strong&gt; smart service directly in a Portal, so I&amp;#39;ve been trying to work around this by calling an integration through a &lt;strong&gt;WebAPI&lt;/strong&gt;. The WebAPI and the integration themselves work correctly, however, the &lt;strong&gt;S3 integration does not recognize the new name&lt;/strong&gt; when it contains spaces or special characters.&lt;/p&gt;
&lt;p class="mb-2 whitespace-pre-wrap"&gt;What makes this even more confusing is that on a &lt;strong&gt;regular Interface&lt;/strong&gt;, the rename works fine regardless of whether the file name contains spaces, special characters, or any other improper naming conventions. On the &lt;strong&gt;Portal side&lt;/strong&gt;, it only works when the file name is considered proper, meaning it has no spaces, no special characters, and follows a clean naming pattern. As soon as the file name contains any of those elements, the S3 integration simply fails to recognize it.&lt;/p&gt;
&lt;p class="mb-2 whitespace-pre-wrap"&gt;&lt;strong&gt;What I&amp;#39;ve Already Tried&lt;/strong&gt;&lt;/p&gt;
&lt;p class="mb-2 whitespace-pre-wrap"&gt;I tried changing the document name through an expression rule before passing it to the integration, attempting to sanitize it beforehand, but it did not work. I also tried setting the &lt;code&gt;fileNames&lt;/code&gt; parameter directly on the S3 integration node, but the result was the same.&lt;/p&gt;
&lt;p class="mb-2 whitespace-pre-wrap"&gt;&lt;strong&gt;Questions&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p class="mb-2 whitespace-pre-wrap"&gt;Is there a known limitation with S3 integrations in Appian Portals when document names contain spaces or special characters?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p class="mb-2 whitespace-pre-wrap"&gt;Is there a recommended way to sanitize or encode file names before sending them to the S3 integration so it recognizes the new name properly?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p class="mb-2 whitespace-pre-wrap"&gt;Is the WebAPI approach the correct way to handle &amp;quot;Edit Document Properties&amp;quot; in a Portal, or is there a better alternative?&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p class="mb-2 whitespace-pre-wrap"&gt;&lt;/p&gt;
&lt;p class="mb-2 whitespace-pre-wrap"&gt;Thank you all in advance for your time and support!&lt;/p&gt;
&lt;p class="mb-2 whitespace-pre-wrap"&gt;&lt;img style="max-height:240px;max-width:320px;" alt=" " src="/resized-image/__size/640x480/__key/communityserver-discussions-components-files/66/appiandocrl.png" /&gt;&lt;/p&gt;
&lt;p class="mb-2 whitespace-pre-wrap"&gt;&lt;/p&gt;
&lt;p class="mb-2 whitespace-pre-wrap"&gt;With Special Character on file name during upload:&lt;/p&gt;
&lt;p class="mb-2 whitespace-pre-wrap"&gt;&lt;img style="max-height:240px;max-width:320px;" alt=" " src="/resized-image/__size/640x480/__key/communityserver-discussions-components-files/66/spec.png" /&gt;&lt;/p&gt;
&lt;p class="mb-2 whitespace-pre-wrap"&gt;Without Special Character on file name during upload:&lt;/p&gt;
&lt;p class="mb-2 whitespace-pre-wrap"&gt;&lt;img alt=" " src="/resized-image/__size/640x480/__key/communityserver-discussions-components-files/66/abc.png" /&gt;&lt;/p&gt;
&lt;p class="mb-2 whitespace-pre-wrap"&gt;even though it says &amp;quot;error&amp;quot;, when I get the link, it&amp;#39;s possible to download when it returns the link (Without Special Character)&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Portal Errors first time loading</title><link>https://community.appian.com/thread/40159?ContentTypeID=0</link><pubDate>Wed, 04 Feb 2026 15:27:10 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:ff9adf8f-0d25-43f5-87db-b3e1de0aa530</guid><dc:creator>anshumanm</dc:creator><slash:comments>5</slash:comments><comments>https://community.appian.com/thread/40159?ContentTypeID=0</comments><wfw:commentRss>https://community.appian.com/discussions/f/portals/40159/portal-errors-first-time-loading/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Hello,&lt;/p&gt;
&lt;p&gt;We are experiencing issues with a portal using a!queryRecordType. On the home page of the portal we have richTextDisplay that is fed from a queryRecordType. The first time entering the portal it gives an error (ss attached) saying the input is null. Refreshing the page allows the portal to load and everything loads correctly. I think its an issue with queryRecordType not loading quick enough to be used as text on the portal. Has anyone been able to use a!queryRecordType on the home page of their portals without issue? Or is there a better way to reference data on the home page to avoid the error? Thank you.&lt;br /&gt;&lt;br /&gt;This is the code for our query:&lt;br /&gt;&lt;pre class="ui-code" data-mode="text"&gt;local!reports: a!refreshVariable(
    value: a!queryRecordType_25r3(
      recordType: &amp;#39;recordType!{81df50d7-662a-4e27-9236-7c155c79c0b5}OW Report&amp;#39;,
      fields: {
        &amp;#39;recordType!{81df50d7-662a-4e27-9236-7c155c79c0b5}OW Report.fields.{7764c501-7bc3-4d78-bac3-922803158f04}reporttypeId&amp;#39;,
        &amp;#39;recordType!{81df50d7-662a-4e27-9236-7c155c79c0b5}OW Report.fields.{075bbb3b-097b-4886-9e4f-2031db58b527}id&amp;#39;,
        &amp;#39;recordType!{81df50d7-662a-4e27-9236-7c155c79c0b5}OW Report.fields.{10976e33-4cf5-4af8-b8b0-9c33f57369ea}location&amp;#39;,
        &amp;#39;recordType!{81df50d7-662a-4e27-9236-7c155c79c0b5}OW Report.fields.{73dfdd9f-46ff-4507-945e-8ee4711f83dc}reportNumber&amp;#39;,
        &amp;#39;recordType!{81df50d7-662a-4e27-9236-7c155c79c0b5}OW Report.relationships.{b5856472-4f10-44cc-8133-36dd3ca41e74}documents.fields.{97c879c5-64e6-45d0-ad1f-7a782e0941c2}name&amp;#39;,
        &amp;#39;recordType!{81df50d7-662a-4e27-9236-7c155c79c0b5}OW Report.relationships.{b5856472-4f10-44cc-8133-36dd3ca41e74}documents.fields.{3ffe510a-aa2a-4511-b087-c34189e1d805}publishDate&amp;#39;
      },
      pagingInfo: a!pagingInfo(
        startIndex: 1,
        batchSize: 4,
        sort: a!sortInfo(
          field: &amp;#39;recordType!{81df50d7-662a-4e27-9236-7c155c79c0b5}OW Report.relationships.{b5856472-4f10-44cc-8133-36dd3ca41e74}documents.fields.{3ffe510a-aa2a-4511-b087-c34189e1d805}publishDate&amp;#39;,
          ascending: false()
        )
      ),
      fetchTotalCount: true()
    ),
    refreshAlways: true()
  ),&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This is where it is being used in the interface:&lt;br /&gt;&lt;pre class="ui-code" data-mode="text"&gt;a!richTextDisplayField(
                                    labelPosition: &amp;quot;COLLAPSED&amp;quot;,
                                    value: {
                                      if(
                                        a!isNotNullOrEmpty(local!recentReports[1][&amp;#39;recordType!{81df50d7-662a-4e27-9236-7c155c79c0b5}OW Report.relationships.{b5856472-4f10-44cc-8133-36dd3ca41e74}documents.fields.{3ffe510a-aa2a-4511-b087-c34189e1d805}publishDate&amp;#39;]),
                                        text(
                                        local!recentReports[1][&amp;#39;recordType!{81df50d7-662a-4e27-9236-7c155c79c0b5}OW Report.relationships.{b5856472-4f10-44cc-8133-36dd3ca41e74}documents.fields.{3ffe510a-aa2a-4511-b087-c34189e1d805}publishDate&amp;#39;],
                                        &amp;quot;MMMM dd, yyyy&amp;quot;
                                      ),
                                        &amp;quot;&amp;quot;
                                      ),&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="max-height:240px;max-width:320px;" src="/resized-image/__size/640x480/__key/communityserver-discussions-components-files/66/pastedimage1770218633091v1.png" alt=" " /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Appian Portal</title><link>https://community.appian.com/thread/40158?ContentTypeID=0</link><pubDate>Wed, 04 Feb 2026 15:21:20 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:a84f4889-58f0-4b06-a224-9678c517c054</guid><dc:creator>jojog0003</dc:creator><slash:comments>3</slash:comments><comments>https://community.appian.com/thread/40158?ContentTypeID=0</comments><wfw:commentRss>https://community.appian.com/discussions/f/portals/40158/appian-portal/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Hi Experts ,&lt;/p&gt;
&lt;p&gt;I am facing issue in this portal UI. when i submit the order and then click on new order then the previous Ui is open and the issue is below:&lt;/p&gt;
&lt;ul&gt;
&lt;li data-start="586" data-end="653"&gt;
&lt;p data-start="588" data-end="653"&gt;Required validation still appears when returning to the interface&lt;/p&gt;
&lt;/li&gt;
&lt;li data-start="654" data-end="718"&gt;
&lt;p data-start="656" data-end="718"&gt;Existing grid rows show red validation when a new row is added&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I need fields to be &lt;strong data-start="406" data-end="451"&gt;required only when the user clicks Submit&lt;/strong&gt;, not on initial load or when adding new grid rows.please help me on this problem .&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/66/pastedimage1770218457235v1.png" alt=" " /&gt;&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;a!localVariables( 
  local!targetValue,
  local!submitted: false,
  local!docID,
  local!selectedProvince,
  local!submitClicked: false,
  local!isValidationOn: and(local!submitClicked, not(local!submitted)),
  local!responsibleSecurityStaff: if(
    isnull(local!selectedProvince),
    null,
    tostring(
      a!queryRecordType_24r4(
        recordType: &amp;#39;recordType!{0f0e20fd-4510-4559-b087-8f3f057fa550}CDMP Province2TechMap&amp;#39;,
        filters: a!queryLogicalExpression(
          operator: &amp;quot;AND&amp;quot;,
          filters: {
            a!queryFilter(
              field: &amp;#39;recordType!{0f0e20fd-4510-4559-b087-8f3f057fa550}CDMP Province2TechMap.fields.{0525145e-b0fb-45bd-b8c6-c5af97956f08}province&amp;#39;,
              operator: &amp;quot;=&amp;quot;,
              value: local!selectedProvince
            )
          },
          ignoreFiltersWithEmptyValues: true
        ),
        pagingInfo: a!pagingInfo(startIndex: 1, batchSize: 1),
        fetchTotalCount: false()
      ).data[&amp;#39;recordType!{0f0e20fd-4510-4559-b087-8f3f057fa550}CDMP Province2TechMap.fields.{b2391a21-46ab-4e4f-a239-0e3ceea5a054}responsibleSecurityStaff&amp;#39;]
    )
  ),
  local!checkIsActiveRecords: a!refreshVariable(
    value: if(
      a!isNotNullOrEmpty(
        &amp;#39;recordType!{dc89af02-aaa8-4089-b223-17115bc848a3}CDMP RT Access Detail.fields.{id}id&amp;#39;
      ),
      a!queryRecordType_24r4(
        recordType: &amp;#39;recordType!{dc89af02-aaa8-4089-b223-17115bc848a3}CDMP RT Access Detail&amp;#39;,
        fields: {
          &amp;#39;recordType!{dc89af02-aaa8-4089-b223-17115bc848a3}CDMP RT Access Detail.fields.{id}id&amp;#39;,
          &amp;#39;recordType!{dc89af02-aaa8-4089-b223-17115bc848a3}CDMP RT Access Detail.fields.{isActive}isActive&amp;#39;
        },
        filters: a!queryLogicalExpression(
          operator: &amp;quot;AND&amp;quot;,
          filters: {
            a!queryFilter(
              field: &amp;#39;recordType!{dc89af02-aaa8-4089-b223-17115bc848a3}CDMP RT Access Detail.fields.{officerDetailId}officerDetailId&amp;#39;,
              operator: &amp;quot;=&amp;quot;,
              value: ri!officerDetails.id
            )
          },
          ignoreFiltersWithEmptyValues: true()
        ),
        pagingInfo: a!pagingInfo(startIndex: 1, batchSize: 1),
        fetchTotalCount: false()
      ).data[&amp;#39;recordType!{dc89af02-aaa8-4089-b223-17115bc848a3}CDMP RT Access Detail.fields.{isActive}isActive&amp;#39;][1],
      {}
    ),
    refreshAlways: true(),
    refreshInterval: 5
  ),
  /*local!currentpage1:a!refreshVariable(*/
  /*value: false,*/
  /*refreshOnVarChange: local!submitted*/
  /*),*/
  local!currentpage2: a!refreshVariable(
    value: false,
    refreshOnVarChange: local!submitted
  ),
  {
    a!sectionLayout(
      label: &amp;quot;Submit Jurisdiction Request&amp;quot;,
      contents: {},
      showWhen: not(local!submitted),
      divider: &amp;quot;ABOVE&amp;quot;
    ),
    a!sectionLayout(
      contents: {
        a!columnsLayout(
          columns: {
            a!columnLayout(
              contents: {
                a!fileUploadField(
                  label: &amp;quot;Upload JR document/T&amp;#233;l&amp;#233;charger le document JR&amp;quot;,
                  labelPosition: &amp;quot;JUSTIFIED&amp;quot;,
                  target: cons!CDM2_FOL_ATTACHMENTS,
                  maxSelections: 1,
                  value: local!docID,
                  saveInto: {
                    local!docID,
                    if(
                      a!isNotNullOrEmpty(local!docID),
                      {
                        a!save(ri!comments.appianDocId, local!docID),
                        a!save(ri!comments.commentBy, &amp;quot;svc_cdm2portal&amp;quot;),
                        a!save(ri!comments.commentOn, now()),
                        a!save(
                          ri!comments.comments,
                          &amp;quot;JR Document uploaded by &amp;quot; &amp;amp; ri!officerDetails.officerFname
                        )
                      },
                      null
                    )
                  },
                  required:false,
                  validations: {
                    if(
                      contains(
                        { &amp;quot;docx&amp;quot;, &amp;quot;DOCX&amp;quot;, &amp;quot;pdf&amp;quot;, &amp;quot;PDF&amp;quot; },
                        fv!files.extension
                      ),
                      &amp;quot;&amp;quot;,
                      &amp;quot;Please upload a DOCX or Pdf file/ Veuillez t&amp;#233;l&amp;#233;charger un fichier DOCX et un fichier PDF&amp;quot;
                    ),
                    if(
                      and(
                        local!submitClicked,
                        a!isNullOrEmpty(local!docID)
                      ),
                      &amp;quot;A value is required&amp;quot;,
                      {}
                    ),
                  }
                )
              },
              width: &amp;quot;MEDIUM&amp;quot;
            ),
            a!columnLayout(contents: {}, width: &amp;quot;NARROW&amp;quot;),
            a!columnLayout(
              contents: {
                a!dropdownField(
                  choiceLabels: cons!CDM2_VAL_PROVINCE,
                  choiceValues: cons!CDM2_VAL_PROVINCE,
                  label: &amp;quot;Province/Province&amp;quot;,
                  labelPosition: &amp;quot;JUSTIFIED&amp;quot;,
                  placeholder: &amp;quot;Select a Province/S&amp;#233;lectionnez une province&amp;quot;,
                  value: local!selectedProvince,
                  saveInto: {
                    local!selectedProvince,
                    a!save(
                      ri!record.province,
                      local!selectedProvince
                    ),
                    a!save(
                      ri!record.responsible_security_staff,
                      local!responsibleSecurityStaff
                    )
                  },
                  searchDisplay: &amp;quot;OFF&amp;quot;,
                  required: true()
                )
              },
              width: &amp;quot;MEDIUM&amp;quot;
            )
          }
        ),
        a!richTextDisplayField(
          value: {
            a!richTextItem(
              text: &amp;quot;*TELUS retains wireline IP logs for 90 days from the event log’s date/TELUS conserve les journaux IP filaires pendant 90 jours &amp;#224; partir de la date du journal des &amp;#233;v&amp;#233;nements.&amp;quot;,
              color: &amp;quot;STANDARD&amp;quot;,
              size: &amp;quot;SMALL&amp;quot;
            ),
            char(10),
            a!richTextItem(
              text: &amp;quot;*Date and Time must be in UTC only/La date et l&amp;#39;heure doivent &amp;#234;tre uniquement en UTC.&amp;quot;,
              color: &amp;quot;STANDARD&amp;quot;,
              size: &amp;quot;SMALL&amp;quot;
            )
          },
          align: &amp;quot;LEFT&amp;quot;
        ),
        a!gridLayout(
          label: &amp;quot;&amp;quot;,
          labelPosition: &amp;quot;ABOVE&amp;quot;,
          /*instructions:&amp;quot;*Date and Time must be in UTC only.&amp;quot;,*/
          headerCells: {
            a!gridLayoutHeaderCell(label: &amp;quot;Serial No/Num&amp;#233;ro de s&amp;#233;rie.&amp;quot;),
            a!gridLayoutHeaderCell(
              label: &amp;quot;Target IP Address/Adresse IP cible*&amp;quot;
            ),
            a!gridLayoutHeaderCell(
              label: &amp;quot;Search Start Date/Date de d&amp;#233;but de la recherche*&amp;quot;
            ),
            a!gridLayoutHeaderCell(
              label: &amp;quot;Search Start Time/Heure de d&amp;#233;but de la recherche&amp;quot;
            ),
            a!gridLayoutHeaderCell(
              label: &amp;quot;Search End Date/Date de d&amp;#233;but de la recherche*&amp;quot;
            ),
            a!gridLayoutHeaderCell(
              label: &amp;quot;Search End Time/Heure de fin de la recherche&amp;quot;
            ),
            a!gridLayoutHeaderCell(label: &amp;quot;&amp;quot;),
            a!gridLayoutHeaderCell(
              label: &amp;quot;&amp;quot;/*, showWhen:ri!readonly*/
              
            )
          },
          columnConfigs: {
            a!gridLayoutColumnConfig(width: &amp;quot;DISTRIBUTE&amp;quot;, weight: 1),
            a!gridLayoutColumnConfig(width: &amp;quot;DISTRIBUTE&amp;quot;, weight: 3),
            a!gridLayoutColumnConfig(width: &amp;quot;DISTRIBUTE&amp;quot;, weight: 2),
            a!gridLayoutColumnConfig(width: &amp;quot;DISTRIBUTE&amp;quot;, weight: 2),
            a!gridLayoutColumnConfig(width: &amp;quot;DISTRIBUTE&amp;quot;, weight: 2),
            a!gridLayoutColumnConfig(width: &amp;quot;DISTRIBUTE&amp;quot;, weight: 2),
            a!gridLayoutColumnConfig(width: &amp;quot;ICON&amp;quot;),
            a!gridLayoutColumnConfig(width: &amp;quot;ICON&amp;quot;)
          },
          rows: {
            a!forEach(
              items: ri!targets,
              expression: a!gridRowLayout(
                id: fv!index,
                contents: {
                  a!textField(
                    label: &amp;quot;Target Sequence Number&amp;quot;,
                    labelPosition: &amp;quot;ABOVE&amp;quot;,
                    value: fv!index,
                    saveInto: { fv!item.targetSequenceNumber },
                    refreshAfter: &amp;quot;KEYPRESS&amp;quot;,
                    readOnly: true,
                    validations: {},
                    align: &amp;quot;CENTER&amp;quot;
                  ),
                  a!paragraphField(
                    label: &amp;quot;Target IP Address&amp;quot;,
                    labelPosition: &amp;quot;ABOVE&amp;quot;,
                    placeholder: &amp;quot;If you have a port number, please enter it with IP address separated by underscore as Port number is mandatory for Wireless IP and NAT IP&amp;quot;,
                    value: substitute(fv!item.target, &amp;quot;,&amp;quot;, char(10)),
                    saveInto: {
                      a!save(
                        fv!item.target,
                        substitute(
                          tostring(
                            reject(
                              fn!isnull,
                              a!forEach(
                                items: split(
                                  substitute(save!value, char(10), &amp;quot;,&amp;quot;),
                                  &amp;quot;,&amp;quot;
                                ),
                                expression: cleanwith(fv!item, &amp;quot;1234567890_:.abcdefABCDEF&amp;quot;)
                              )
                            )
                          ),
                          &amp;quot;; &amp;quot;,
                          char(10)
                        )
                      ),
                      a!save(fv!item.createdBy, &amp;quot;svc_cdm2portal&amp;quot;),
                      a!save(fv!item.createdDate, now()),
                      a!save(fv!item.targetSequenceNumber, fv!index),
                      a!save(
                        local!targetValue,
                        substitute(fv!item.target, char(10), &amp;quot; &amp;quot;)
                      )
                      /*a!save(*/
                        /*fv!item.ipType,*/
                        /*{*/
                          /*if(*/
                        /*find(&amp;quot;_&amp;quot;, fv!item.target),*/
                        /*rule!CDM2_ER_GetIpType(targetIP: split(fv!item.target, &amp;quot;_&amp;quot;)[1]),*/
                        /*rule!CDM2_ER_GetIpType(targetIP: fv!item.target),*/
                      /*),*/
                          /*if(*/
                        /*and(*/
                          /*a!isNotNullOrEmpty(fv!item.target),*/
                          /*a!isNotNullOrEmpty(fv!item.searchBy),*/
                          /*not(exact(fv!item.searchBy,cons!CDM2_SEARCH_BY_OPTIONS[5]))*/
                        /*),*/
                        /*&amp;quot;Not Applicable&amp;quot;,*/
                        /*&amp;quot;&amp;quot;*/
                      /*)*/
                        /*}*/
                      /*)*/
                    },
                    required:not(local!isValidationOn),
                    validations: {
                      
                      a!localVariables(
                        local!isIpValid: rule!CDMP_getIsIpValid(targetIp: substitute(fv!item.target, char(10), &amp;quot; &amp;quot;) ).result.body,
                        local!ipInfo: index(local!isIpValid, &amp;quot;ipValidation&amp;quot;, {}),
                        if(
                          a!isNotNullOrEmpty(local!ipInfo),
                          if(
                            find(&amp;quot;Invalid&amp;quot;, tostring(local!ipInfo)) &amp;gt; 0,
                            local!ipInfo,
                            &amp;quot;&amp;quot;
                          ),
                          &amp;quot;&amp;quot;
                        )                        
                      ),
                      /*Multiple IP Address Validation */
                      if(
                        and(
                          a!isNotNullOrEmpty(fv!item.target),
                          length(split(fv!item.target, char(10))) &amp;gt; 1
                        ),
                        &amp;quot;Multiple IP Addresses are not allowed.  &amp;quot;,
                        {}
                      ),
                      
                    }
                  ),
                  a!dateField(
                    label: &amp;quot;Search Start Date&amp;quot;,
                    labelPosition: &amp;quot;ABOVE&amp;quot;,
                    value: fv!item.startSearchDate,
                    saveInto: { fv!item.startSearchDate },
                    required:not(local!isValidationOn),
                    validations: {
                      if(
                        fv!item.startSearchDate &amp;gt; today(),
                        &amp;quot;Please select a day on or before today.&amp;quot;,
                        if(
                          and(
                            a!isNotNullOrEmpty(fv!item.startSearchDate),
                            a!isNotNullOrEmpty(fv!item.endSearchDate),
                            (
                              fv!item.startSearchDate &amp;gt; fv!item.endSearchDate
                            )
                          ),
                          &amp;quot;&amp;#39;Search Start Date&amp;#39; can not be after &amp;#39;Search End Date&amp;#39;&amp;quot;,
                          {}
                        )
                      ),
                     
                    }
                  ),
                  a!textField(
                    label: &amp;quot;Search Start Time&amp;quot;,
                    labelPosition: &amp;quot;ABOVE&amp;quot;,
                    placeholder: &amp;quot;HH:MM:SS&amp;quot;,
                    value: fv!item.startSearchTime,
                    saveInto: {
                      a!save(
                        fv!item.startSearchTime,
                        rule!CDM2_ER_CastTimeIn24Hrs(save!value)
                      )
                    },
                    refreshAfter: &amp;quot;KEYPRESS&amp;quot;,
                    required: true(),
                    validations: {}
                  ),
                  a!dateField(
                    label: &amp;quot;Search End Date&amp;quot;,
                    labelPosition: &amp;quot;ABOVE&amp;quot;,
                    value: fv!item.endSearchDate,
                    saveInto: { fv!item.endSearchDate },
                    required:not(local!isValidationOn),
                    validations: {
                      if(
                        fv!item.endSearchDate &amp;gt; today(),
                        &amp;quot;Please select a day on or before today.&amp;quot;,
                        if(
                          and(
                            a!isNotNullOrEmpty(fv!item.startSearchDate),
                            a!isNotNullOrEmpty(fv!item.endSearchDate),
                            (
                              fv!item.startSearchDate &amp;gt; fv!item.endSearchDate
                            )
                          ),
                          &amp;quot;&amp;#39;Search End Date&amp;#39; can not be before &amp;#39;Search Start Date&amp;#39;&amp;quot;,
                          {}
                        )
                      ),
                      
                    }
                  ),
                  a!textField(
                    label: &amp;quot;Search End Time&amp;quot;,
                    labelPosition: &amp;quot;ABOVE&amp;quot;,
                    placeholder: &amp;quot;HH:MM:SS&amp;quot;,
                    value: fv!item.endSearchTime,
                    saveInto: {
                      a!save(
                        fv!item.endSearchTime,
                        rule!CDM2_ER_CastTimeIn24Hrs(save!value)
                      )
                    },
                    refreshAfter: &amp;quot;KEYPRESS&amp;quot;,
                    required: true(),
                    validations: {}
                  ),
                  a!richTextDisplayField(
                    label: &amp;quot;Clone/Cloner&amp;quot;,
                    labelPosition: &amp;quot;COLLAPSED&amp;quot;,
                    value: {
                      a!richTextIcon(
                        icon: &amp;quot;files-o&amp;quot;,
                        caption: &amp;quot;Clone/Cloner&amp;quot;,
                        link: a!dynamicLink(
                          saveInto: {
                            a!save(
                              ri!targets,
                              append(
                                ri!targets,
                                &amp;#39;type!{urn:com:appian:types:CDM2}CDM2_Targets&amp;#39;(
                                  id: null,
                                  caseId: ri!record.id,
                                  targetSequenceNumber: {},
                                  systemOrderID: null(),
                                  agentID: local!responsibleSecurityStaff,
                                  searchSubmittedOn: now(),
                                  releasePursuant: fv!item.releasePursuant,
                                  searchBy: fv!item.searchBy,
                                  target: fv!item.target,
                                  targetSearchDate: fv!item.targetSearchDate,
                                  linkedTargetOrders: fv!item.linkedTargetOrders,
                                  isStandardTimeOnly: fv!item.isStandardTimeOnly,
                                  searchSiteId: fv!item.searchSiteId,
                                  searchECI: fv!item.searchECI,
                                  searchLAC: fv!item.searchLAC,
                                  searchSAC: fv!item.searchSAC,
                                  searchSector: fv!item.searchSector,
                                  searchAzimuth: fv!item.searchAzimuth,
                                  startSearchDateTime: fv!item.startSearchDateTime,
                                  startSearchDate: fv!item.startSearchDate,
                                  startSearchTime: fv!item.startSearchTime,
                                  timeZone: fv!item.timeZone,
                                  endSearchDateTime: fv!item.endSearchDateTime,
                                  endSearchDate: fv!item.endSearchDate,
                                  endSearchTime: fv!item.endSearchTime,
                                  endTimeZone: fv!item.endTimeZone,
                                  coStartDateTime: fv!item.coStartDateTime,
                                  coStartDate: fv!item.coStartDate,
                                  coStartTime: fv!item.coStartTime,
                                  coEndDateTime: fv!item.coEndDateTime,
                                  coEndDate: fv!item.coEndDate,
                                  coEndTime: fv!item.coEndTime,
                                  isDeleted: false(),
                                  deleteComment: null(),
                                  status: null(),
                                  downloadLink: null(),
                                  lastStatusUpdateDateTime: now(),
                                  groupID: fv!item.groupID,
                                  createdDate: now(),
                                  createdBy: &amp;quot;svc_cdm2portal&amp;quot;,
                                  updatedBy: &amp;quot;svc_cdm2portal&amp;quot;,
                                  updatedDate: now(),
                                  subInfoRecords: cons!CDM2_CHECKBOXES[16] &amp;amp; &amp;quot;; &amp;quot; &amp;amp; cons!CDM2_CHECKBOXES[49]
                                  
                                )
                              )
                            )
                          }
                        ),
                        linkStyle: &amp;quot;STANDALONE&amp;quot;,
                        size: &amp;quot;MEDIUM&amp;quot;
                      )
                    },
                    showWhen: {}
                  ),
                  a!buttonArrayLayout(
                    buttons: a!buttonWidget_23r3(
                      style: &amp;quot;LINK&amp;quot;,
                      confirmMessage: &amp;quot;Remove Target/Supprimer la cible ?&amp;quot;,
                      value: {},
                      saveInto: {
                        a!save(ri!targets, remove(ri!targets, fv!index))
                      },
                      icon: &amp;quot;times&amp;quot;,
                      tooltip: &amp;quot;Remove/Supprimer&amp;quot;
                    )/*showWhen: not(ri!readOnly)*/
                    
                  )
                }
              )
            )
          },
          selectionSaveInto: {},
          addRowLink: a!dynamicLink(
            label: &amp;quot;Add Target/Ajouter une cible&amp;quot;,
            /*showWhen: not(ri!readOnly),*/
            value: &amp;#39;type!{urn:com:appian:types:CDM2}CDM2_Targets&amp;#39;(
              startSearchTime: &amp;quot;00:00:00&amp;quot;,
              endSearchTime: &amp;quot;23:59:59&amp;quot;,
              groupID: 61,
              createdDate: now(),
              createdBy: &amp;quot;svc_cdm2portal&amp;quot;,
              updatedDate: now(),
              updatedBy: &amp;quot;svc_cdm2portal&amp;quot;,
              isDeleted: false(),
              status: null(),
              searchBy: cons!CDM2_SEARCH_BY_OPTIONS[5],
              subInfoRecords: cons!CDM2_CHECKBOXES[16] &amp;amp; &amp;quot;; &amp;quot; &amp;amp; cons!CDM2_CHECKBOXES[49],
              timeZone: &amp;quot;UTC&amp;quot;,
              endTimeZone: &amp;quot;UTC&amp;quot;,
              agentID: local!responsibleSecurityStaff,
              searchSubmittedOn: now(),
              lastStatusUpdateDateTime: now()
              
            ),
            saveInto: {
              a!save(
                ri!targets,
                append(ri!targets, save!value)
              )
            }
          ),
          validations: {},
          shadeAlternateRows: true,
          rowHeader: 1
        )
      },
      showWhen: not(local!submitted),
      divider: &amp;quot;BELOW&amp;quot;
    ),
    a!buttonArrayLayout(
      buttons: a!buttonWidget(
        label: &amp;quot;Submit Request/Soumettre la demande&amp;quot;,
        saveInto: {
          a!submitUploadedFiles(),
          a!save(
            ri!officerDetails.isAccessApproved,
            true
          ),
          a!save(
            ri!record.responsible_security_staff,
            local!responsibleSecurityStaff
          ),
          a!save(local!submitClicked,true),
          a!startProcess_24r3(
            processModel: cons!CDMP_PM_CONS_SUBMIT_JURISDICTION_REQUEST,
            processParameters: {
              record: ri!record,
              targets: ri!targets,
              comments: ri!comments,
              officerDetails: ri!officerDetails
            },
            onSuccess: {
              a!save(local!submitted, true),
              a!save(ri!record, fv!processInfo.pv.record),
              a!save(ri!targets, fv!processInfo.pv.targets)
            }
          )
        },
        submit: true,
        style: &amp;quot;SOLID&amp;quot;
      ),
      showWhen: not(local!submitted)
    ),
    a!cardLayout(
      contents: {
        a!richTextDisplayField(
          labelPosition: &amp;quot;COLLAPSED&amp;quot;,
          value: a!richTextIcon(
            icon: &amp;quot;check-circle-o&amp;quot;,
            color: &amp;quot;POSITIVE&amp;quot;,
            size: &amp;quot;EXTRA_LARGE&amp;quot;
          ),
          showWhen: and(
            local!submitted
            /*local!checkIsActiveRecords*/
            
          ),
          align: &amp;quot;CENTER&amp;quot;,
          marginAbove: &amp;quot;EVEN_LESS&amp;quot;
        ),
        a!richTextDisplayField(
          labelPosition: &amp;quot;COLLAPSED&amp;quot;,
          value: {
            a!richTextItem(
              text: &amp;quot;Thank you for your submission. The assigned Telus Order Number is &amp;quot; &amp;amp; ri!record.id &amp;amp; &amp;quot;. Your results will be provided to you within 5 business days.&amp;quot;,
              color: &amp;quot;POSITIVE&amp;quot;,
              size: &amp;quot;MEDIUM&amp;quot;,
              style: &amp;quot;STRONG&amp;quot;
            ),
            char(10),
            char(10),
            a!richTextItem(
              text: &amp;quot;Merci pour votre soumission. Le num&amp;#233;ro de dossier attribu&amp;#233; est &amp;quot; &amp;amp; ri!record.id &amp;amp; &amp;quot;. Vos r&amp;#233;sultats vous seront fournis dans les 5 jours ouvrables. &amp;quot;,
              color: &amp;quot;POSITIVE&amp;quot;,
              size: &amp;quot;MEDIUM&amp;quot;,
              style: &amp;quot;STRONG&amp;quot;
            )
            
          },
          showWhen: and(
            local!submitted
            /*local!checkIsActiveRecords*/
            
          ),
          align: &amp;quot;CENTER&amp;quot;,
          marginAbove: &amp;quot;MORE&amp;quot;
        ),
        a!columnsLayout(
          columns: {
            a!columnLayout(
              contents: {
                a!cardLayout(
                  contents: a!richTextDisplayField(
                    labelPosition: &amp;quot;COLLAPSED&amp;quot;,
                    value: a!richTextItem(
                      text: &amp;quot;New order / Nouvelle demande&amp;quot;,
                      link: a!dynamicLink(
                        value: true,
                        saveInto: {
                          a!save(local!currentpage2, true),
                          a!save(ri!targets, null),
                          a!save(local!targetValue,null),
                          /*a!save(local!selectedProvince,null),*/
                          a!save(ri!record,null),
                          a!save(local!docID,null),
                          a!save(local!submitted,false),
                          a!save(local!submitClicked, false),
                        }
                      ),
                      linkStyle: &amp;quot;STANDALONE&amp;quot;,
                      color: &amp;quot;ACCENT&amp;quot;,
                      size: &amp;quot;MEDIUM&amp;quot;,
                      style: &amp;quot;STRONG&amp;quot;
                    ),
                    align: &amp;quot;CENTER&amp;quot;
                  ),
                  height: &amp;quot;AUTO&amp;quot;,
                  showWhen: and(
                    /*not(local!currentpage1),*/
                    not(local!currentpage2),
                    local!checkIsActiveRecords
                  ),
                  style: &amp;quot;ACCENT&amp;quot;,
                  shape: &amp;quot;ROUNDED&amp;quot;,
                  marginabove: &amp;quot;MORE&amp;quot;,
                  showBorder: true
                )
              },
              width: &amp;quot;MEDIUM&amp;quot;
            ),
            a!columnLayout(
              contents: {}
            ),
            a!columnLayout(
              contents: {
                a!cardLayout(
                  contents: {
                    a!richTextDisplayField(
                      labelPosition: &amp;quot;COLLAPSED&amp;quot;,
                      value: a!richTextItem(
                        text: &amp;quot;Sign out/ Se d&amp;#233;connecter&amp;quot;,
                        link: a!safeLink(
                          label: &amp;quot;Sign out/ Se d&amp;#233;connecter&amp;quot;,
                          uri: cons!CDMP_VAL_PORTAL_WEB_ADDRESS,
                          openLinkIn: &amp;quot;SAME_TAB&amp;quot;
                        ),
                        linkStyle: &amp;quot;STANDALONE&amp;quot;,
                        color: &amp;quot;ACCENT&amp;quot;,
                        size: &amp;quot;MEDIUM&amp;quot;,
                        style: &amp;quot;STRONG&amp;quot;

                      ),
                      align: &amp;quot;CENTER&amp;quot;
                    )
                  },
                  height: &amp;quot;AUTO&amp;quot;,
                  showWhen: and(
                    /*not(local!currentpage1),*/
                    not(local!currentpage2)
                  ),
                  style: &amp;quot;INFO&amp;quot;,
                  shape: &amp;quot;ROUNDED&amp;quot;,
                  marginabove: &amp;quot;MORE&amp;quot;,
                  showBorder: false()
                )
              },
              width: &amp;quot;MEDIUM&amp;quot;
            )
          }
        )
      },
      height: &amp;quot;TALL&amp;quot;,
      showWhen: and(
        /*not(local!currentpage1),*/
        not(local!currentpage2),
        local!submitted
        /*local!checkIsActiveRecords*/
        
      ),
      Style: &amp;quot;#ffffff&amp;quot;
    ),
    a!sectionLayout(
      contents: {
        if(
          local!currentpage2 = true,
          a!sectionLayout(
            contents: {
              rule!CDMP_UI_SubmitJurisdictionRequest(
                targets: ri!targets,
                record: ri!record,
                comments: ri!comments,
                officerDetails: ri!officerDetails
              )
            }
          ),
          {}
        )
      },
      showWhen: and(
        local!submitted,
        /*local!checkIsActiveRecords,*/
        local!currentpage2
      )
    )/*a!sectionLayout(*/
    /*label:&amp;quot;&amp;quot;,*/
    /*contents:{*/
    /*rule!CDMP_UI_RaiseAccessRequest(record:null)},*/
    /*showWhen: */
    /*and(*/
    /*local!submitted,*/
    /*not(local!checkIsActiveRecords)*/
    /*),*/
    /*)*/
    
  }
)&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Document Viewer In Portals</title><link>https://community.appian.com/thread/40070?ContentTypeID=0</link><pubDate>Thu, 08 Jan 2026 05:54:12 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:f778cd17-39de-47b5-8490-57dde557d07f</guid><dc:creator>Saikrishnan V</dc:creator><slash:comments>7</slash:comments><comments>https://community.appian.com/thread/40070?ContentTypeID=0</comments><wfw:commentRss>https://community.appian.com/discussions/f/portals/40070/document-viewer-in-portals/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;In Portals, we are uploading pdf documents, and extracting the details, showing them to the user for field edits, but when populating the documents in Document Viewer field, it shows&lt;/p&gt;
&lt;p&gt;like this below.&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/66/pastedimage1767851393273v1.png" alt=" " /&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;The pdf is downloadable&amp;nbsp;, further when we refresh the portal the document is available for preview but not at first.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Does anyone&amp;nbsp;faced this issue and how could we handle this ?&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Portal access using  tokens</title><link>https://community.appian.com/thread/39932?ContentTypeID=0</link><pubDate>Mon, 17 Nov 2025 05:52:51 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:4af1b970-aaf2-453d-aeb7-6c68b41d4e52</guid><dc:creator>udayasai</dc:creator><slash:comments>6</slash:comments><comments>https://community.appian.com/thread/39932?ContentTypeID=0</comments><wfw:commentRss>https://community.appian.com/discussions/f/portals/39932/portal-access-using-tokens/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Hi Team,&lt;/p&gt;
&lt;p&gt;How can we restrict portal access to all the public users, Our requirement is can we access portal by using tokens? like will pass the token to the url parameters and validate it&amp;nbsp; with expiration time, if so how can we genarate tokens in appian and access it&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Thanks,&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Excel Tools Plug-in not supported in Portals – Alternatives</title><link>https://community.appian.com/thread/39769?ContentTypeID=0</link><pubDate>Thu, 25 Sep 2025 16:36:57 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:f3141a2f-47cd-4814-b7d5-dbdc456c33f4</guid><dc:creator> Manikanta009</dc:creator><slash:comments>6</slash:comments><comments>https://community.appian.com/thread/39769?ContentTypeID=0</comments><wfw:commentRss>https://community.appian.com/discussions/f/portals/39769/excel-tools-plug-in-not-supported-in-portals-alternatives/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p data-start="360" data-end="426"&gt;I&amp;rsquo;m working on publishing a Portal, and I&amp;rsquo;m seeing this warning:&lt;/p&gt;
&lt;p data-start="360" data-end="426"&gt;&lt;em data-start="430" data-end="701"&gt;Incompatible plug-in(s) detected. Refactor the portal object precedents to only use plug-ins compatible with portals. Using incompatible plug-ins can cause the published portal to error. Precedent(s) containing incompatible plug-in(s).&lt;/em&gt;&lt;/p&gt;
&lt;p data-start="360" data-end="426"&gt;&lt;em data-start="430" data-end="701"&gt;&lt;img style="max-height:240px;max-width:320px;" src="/resized-image/__size/640x480/__key/communityserver-discussions-components-files/66/pastedimage1758818118925v1.png" alt=" " /&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p data-start="905" data-end="944"&gt;Has anyone dealt with this before?&lt;/p&gt;
&lt;ul data-start="945" data-end="1311"&gt;
&lt;li data-start="945" data-end="1110"&gt;
&lt;p data-start="947" data-end="1110"&gt;What are the recommended &lt;strong data-start="972" data-end="1014"&gt;alternatives for Excel Tools functions&lt;/strong&gt; (like reading/writing Excel, parsing uploaded files, or exporting data) that work in Portals?&lt;/p&gt;
&lt;/li&gt;
&lt;li data-start="1111" data-end="1204"&gt;
&lt;p data-start="1113" data-end="1204"&gt;Are there any &lt;strong data-start="1127" data-end="1155"&gt;Appian-native approaches&lt;/strong&gt; or other supported plug-ins I can use instead?&lt;/p&gt;
&lt;/li&gt;
&lt;li data-start="1205" data-end="1311"&gt;
&lt;p data-start="1207" data-end="1311"&gt;Would shifting the Excel logic into a process model (triggered from the Portal) be a valid workaround?&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-start="1313" data-end="1381"&gt;Any best practices or migration tips would be greatly appreciated.&lt;/p&gt;
&lt;p data-start="360" data-end="426"&gt;&lt;em data-start="430" data-end="701"&gt;&lt;/em&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Portals – Prompt User to Save Before Leaving Page</title><link>https://community.appian.com/thread/39656?ContentTypeID=0</link><pubDate>Thu, 28 Aug 2025 17:22:11 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:9ce29486-809a-44ba-a682-e3fccb82e527</guid><dc:creator> Manikanta009</dc:creator><slash:comments>4</slash:comments><comments>https://community.appian.com/thread/39656?ContentTypeID=0</comments><wfw:commentRss>https://community.appian.com/discussions/f/portals/39656/portals-prompt-user-to-save-before-leaving-page/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p data-start="175" data-end="430"&gt;I&amp;rsquo;m working on an &lt;strong data-start="193" data-end="210"&gt;Appian Portal&lt;/strong&gt; where clients fill out survey details.&lt;br data-start="249" data-end="252" /&gt; Requirement: if a user tries to &lt;strong data-start="284" data-end="341"&gt;Alt+Tab, refresh, close the browser, or navigate away&lt;/strong&gt; without saving, we want to show a &lt;strong data-start="376" data-end="395"&gt;warning message&lt;/strong&gt; so they don&amp;rsquo;t lose entered data.&lt;/p&gt;
&lt;p data-start="432" data-end="672"&gt;Has anyone implemented this before?&lt;br data-start="467" data-end="470" /&gt; I&amp;rsquo;m currently tracking unsaved changes with a local flag, and I&amp;rsquo;m exploring using &lt;code data-start="552" data-end="573"&gt;a!webContentField()&lt;/code&gt; to inject JavaScript (&lt;code data-start="596" data-end="610"&gt;beforeunload&lt;/code&gt; event) to display the browser&amp;rsquo;s native confirmation prompt.&lt;/p&gt;
&lt;p data-start="674" data-end="725"&gt;Looking for best practices or recommendations on:&lt;/p&gt;
&lt;ul data-start="726" data-end="926"&gt;
&lt;li data-start="726" data-end="774"&gt;
&lt;p data-start="728" data-end="774"&gt;Reliable way to trigger warnings in Portals.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>URLforPortal Error not making any sense</title><link>https://community.appian.com/thread/39584?ContentTypeID=0</link><pubDate>Thu, 07 Aug 2025 18:02:02 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:f600645b-1efd-4ac4-badf-f46b20ee48d0</guid><dc:creator>spencerb0001</dc:creator><slash:comments>7</slash:comments><comments>https://community.appian.com/thread/39584?ContentTypeID=0</comments><wfw:commentRss>https://community.appian.com/discussions/f/portals/39584/urlforportal-error-not-making-any-sense/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Hello all,&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;I don&amp;#39;t post often, but this one has me stumped.&amp;nbsp; I&amp;#39;m getting an error in the portal for one environment (Test) with objects that work just fine in another (Dev).&amp;nbsp; I&amp;#39;ve looked at the supporting objects involved and I cannot see a delta (nor could compare and deploy).&amp;nbsp; Event the portal being referenced in Test works fine except for this one area. I would appreciate advice on what other avenues I should be looking at.&amp;nbsp; Below is the error and script from the 2 environments.&lt;/p&gt;
&lt;p&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/66/URLforPortal-Error.png" alt=" " /&gt;&lt;/p&gt;
&lt;p&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/66/URLforPortal-Script.png" alt=" " /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Auto-Saving Form Data Every 30 Seconds in Appian Portals – Is a!toJson() Supported</title><link>https://community.appian.com/thread/39573?ContentTypeID=0</link><pubDate>Tue, 05 Aug 2025 16:41:13 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:76b10148-0b31-4084-a84f-c11de12c0e9f</guid><dc:creator>harishbabub6381</dc:creator><slash:comments>5</slash:comments><comments>https://community.appian.com/thread/39573?ContentTypeID=0</comments><wfw:commentRss>https://community.appian.com/discussions/f/portals/39573/auto-saving-form-data-every-30-seconds-in-appian-portals-is-a-tojson-supported/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p data-start="243" data-end="256"&gt;Hi Community,&lt;/p&gt;
&lt;p data-start="258" data-end="366"&gt;I&amp;#39;m exploring a lightweight &lt;strong data-start="286" data-end="299"&gt;auto-save&lt;/strong&gt; strategy for a &lt;strong data-start="315" data-end="325"&gt;Portal&lt;/strong&gt; form and would appreciate some guidance.&lt;/p&gt;
&lt;p data-start="368" data-end="511"&gt;&lt;span class="emoticon" data-url="https://community.appian.com/cfs-file/__key/system/emoji/26a0.svg" title="Warning"&gt;&amp;#x26a0;&lt;/span&gt;️ I understand that triggering a Web API on every keystroke or field update is not supported or scalable in Portals &amp;mdash; totally agree with that.&lt;/p&gt;
&lt;p data-start="513" data-end="549"&gt;Here&amp;#39;s the approach I&amp;#39;m considering:&lt;/p&gt;
&lt;ul data-start="550" data-end="933"&gt;
&lt;li data-start="550" data-end="643"&gt;
&lt;p data-start="552" data-end="643"&gt;On initial form load, generate a &lt;code data-start="585" data-end="594"&gt;draftId&lt;/code&gt; (UUID) and store it (via URL or &lt;code data-start="627" data-end="641"&gt;localStorage&lt;/code&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;li data-start="644" data-end="682"&gt;
&lt;p data-start="646" data-end="682"&gt;Hold all inputs in &lt;code data-start="665" data-end="681"&gt;local!formData&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li data-start="683" data-end="838"&gt;
&lt;p data-start="685" data-end="838"&gt;Every &lt;strong data-start="691" data-end="705"&gt;30 seconds&lt;/strong&gt; (or on key actions like tab change or &amp;ldquo;Save Draft&amp;rdquo;), send a full snapshot of the form to a Web API using &lt;code data-start="811" data-end="837"&gt;a!toJson(local!formData)&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li data-start="839" data-end="933"&gt;
&lt;p data-start="841" data-end="933"&gt;On form reload, use the &lt;code data-start="865" data-end="874"&gt;draftId&lt;/code&gt; to fetch and restore the saved draft using &lt;code data-start="918" data-end="932"&gt;a!fromJson()&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-start="935" data-end="955"&gt;&lt;span class="emoticon" data-url="https://community.appian.com/cfs-file/__key/system/emoji/1f50d.svg" title="Mag"&gt;&amp;#x1f50d;&lt;/span&gt;&amp;nbsp;&lt;strong data-start="938" data-end="955"&gt;My questions:&lt;/strong&gt;&lt;/p&gt;
&lt;ol data-start="956" data-end="1262"&gt;
&lt;li data-start="956" data-end="1034"&gt;
&lt;p data-start="959" data-end="1034"&gt;Is &lt;strong data-start="962" data-end="995"&gt;&lt;code data-start="964" data-end="976"&gt;a!toJson()&lt;/code&gt; / &lt;code data-start="979" data-end="993"&gt;a!fromJson()&lt;/code&gt;&lt;/strong&gt; supported and reliable in &lt;strong data-start="1022" data-end="1033"&gt;Portals&lt;/strong&gt;?&lt;/p&gt;
&lt;/li&gt;
&lt;li data-start="1035" data-end="1160"&gt;
&lt;p data-start="1038" data-end="1160"&gt;Can we safely trigger a &lt;strong data-start="1062" data-end="1090"&gt;Web API every 30 seconds&lt;/strong&gt; to save the form data? Any performance or timeout issues to consider?&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Creating Portal for external users with access to internal objects to save the details in forms</title><link>https://community.appian.com/thread/39548?ContentTypeID=0</link><pubDate>Thu, 31 Jul 2025 07:36:43 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:707350ec-ca3f-48f8-8ee8-c164a25cefb3</guid><dc:creator>dheerajg0003</dc:creator><slash:comments>6</slash:comments><comments>https://community.appian.com/thread/39548?ContentTypeID=0</comments><wfw:commentRss>https://community.appian.com/discussions/f/portals/39548/creating-portal-for-external-users-with-access-to-internal-objects-to-save-the-details-in-forms/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Hi All,&lt;/p&gt;
&lt;p&gt;Hope you are doing well.!!,&lt;/p&gt;
&lt;p&gt;We have a requirement to create a portal for our application in which external users should be be able to save the details in different forms using user input task. Will this is requirement can be achieved through Appian portals.&lt;/p&gt;
&lt;p&gt;Requirement:&lt;/p&gt;
&lt;p&gt;We have single return or disposal user form, this form contains 5 sections. We have to split each section into 5 different forms, out of which 2 forms will be filled by Appian application users and three forms will be filled by the external users.&lt;/p&gt;
&lt;p&gt;Can someone suggest me what would be the best approach to do this.&lt;/p&gt;
&lt;p&gt;Regards,&lt;/p&gt;
&lt;p&gt;Dheeraj G&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>File Upload Authentication Error in Appian Portal – "Service account not found"</title><link>https://community.appian.com/thread/39499?ContentTypeID=0</link><pubDate>Tue, 22 Jul 2025 23:00:29 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:2237d3d6-8f49-4235-aa69-8f4d0b0bb4ba</guid><dc:creator>V&amp;#237;ctor Valenzuela</dc:creator><slash:comments>9</slash:comments><comments>https://community.appian.com/thread/39499?ContentTypeID=0</comments><wfw:commentRss>https://community.appian.com/discussions/f/portals/39499/file-upload-authentication-error-in-appian-portal-service-account-not-found/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p data-start="209" data-end="221"&gt;Hi everyone,&lt;/p&gt;
&lt;p data-start="223" data-end="399"&gt;I&amp;#39;m currently facing an issue and I&amp;rsquo;m not exactly sure what I&amp;rsquo;m missing. I&amp;#39;ve tried several things and searched through the Appian Community, but I keep getting the same error.&lt;/p&gt;
&lt;p data-start="401" data-end="615"&gt;I have an interface in an Appian Portal where users need to upload a document, and after that, a process should be triggered. However, when I try to upload the document in the portal, I receive the following error:&lt;/p&gt;
&lt;blockquote data-start="617" data-end="732"&gt;
&lt;p data-start="619" data-end="732"&gt;&lt;strong data-start="619" data-end="732"&gt;&amp;quot;File upload authentication error. Service account not found. A service account is required to upload files.&amp;quot;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-start="734" data-end="915"&gt;The strange thing is that when I test the same interface in Designer mode, it works perfectly&amp;mdash;the file uploads with no error. But in the published portal, this error always appears.&lt;/p&gt;
&lt;p data-start="917" data-end="1103"&gt;I&amp;rsquo;ve already configured the security settings on both the constant that holds the folder reference and the folder itself, granting proper write permissions to the Portal Service Account.&lt;/p&gt;
&lt;p data-start="1105" data-end="1146"&gt;Is there anything I might be overlooking?&lt;/p&gt;
&lt;p data-start="1148" data-end="1186"&gt;Any help would be greatly appreciated!&lt;/p&gt;
&lt;p data-start="1188" data-end="1206"&gt;Thanks in advance.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="max-height:382px;max-width:977px;" height="382" src="/resized-image/__size/1954x764/__key/communityserver-discussions-components-files/66/pastedimage1753224358998v1.png" width="977" alt=" " /&gt;&lt;br /&gt;&lt;img style="max-height:450px;max-width:974px;" height="450" src="/resized-image/__size/1948x900/__key/communityserver-discussions-components-files/66/pastedimage1753224543969v2.png" width="974" alt=" " /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="max-height:472px;max-width:566px;" height="472" src="/resized-image/__size/1132x944/__key/communityserver-discussions-components-files/66/pastedimage1753224607563v3.png" width="566" alt=" " /&gt;&lt;img style="max-height:472px;max-width:545px;" height="472" src="/resized-image/__size/1090x944/__key/communityserver-discussions-components-files/66/pastedimage1753224635897v4.png" width="545" alt=" " /&gt;&lt;br /&gt;&lt;img style="max-height:450px;max-width:565px;" height="450" src="/resized-image/__size/1130x900/__key/communityserver-discussions-components-files/66/pastedimage1753224719504v5.png" width="565" alt=" " /&gt;&lt;img style="max-height:414px;max-width:974px;" height="414" src="/resized-image/__size/1948x828/__key/communityserver-discussions-components-files/66/pastedimage1753224777161v6.png" width="974" alt=" " /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Error: Service account does not have access to record</title><link>https://community.appian.com/thread/39441?ContentTypeID=0</link><pubDate>Mon, 14 Jul 2025 09:31:31 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:00e8b814-320c-46c1-bfab-9238c049eca9</guid><dc:creator>Matthias Brixius</dc:creator><slash:comments>11</slash:comments><comments>https://community.appian.com/thread/39441?ContentTypeID=0</comments><wfw:commentRss>https://community.appian.com/discussions/f/portals/39441/error-service-account-does-not-have-access-to-record/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Hi all!&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I have been encountering&amp;nbsp;the&amp;nbsp;issue mentioned in the title for the first time. I&amp;#39;m currently building a Portal that serves as a starting point for a registration. One of the requirements is that the user can choose from 12 different languages, so I set up a record with the translation sets (since most of the locales are not supported by Appian). I created a service account for the Portal and gave it Viewer permission for the Record as well as the PM that is started from the form.&lt;/p&gt;
&lt;p&gt;Initially, it worked, and you could start the Process from the web portal successfully with the provided data. But for some reason none of the underlying record data can be queried anymore, and starting the PM after filling out the required info doesn&amp;#39;t either.&lt;/p&gt;
&lt;p&gt;I attempted to find the source of the error in the portal log files but I&amp;#39;m seeing an ERROR &amp;lt;timestamp&amp;gt; Service account does not have access to record.&lt;/p&gt;
&lt;p&gt;Not really descriptive, but I reviewed the service account&amp;#39;s permissions in the Portal object and everything seems to check out. What other troubleshooting can I perform before having to open a case with Appian?&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Thank you in advance,&lt;/p&gt;
&lt;p&gt;Matthias&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>The portal is not populating values in a Custom Picker for a service account.</title><link>https://community.appian.com/thread/39265?ContentTypeID=0</link><pubDate>Tue, 10 Jun 2025 14:20:13 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:346fa23c-f195-445e-a547-ae39caecd598</guid><dc:creator>MaryamLNU</dc:creator><slash:comments>7</slash:comments><comments>https://community.appian.com/thread/39265?ContentTypeID=0</comments><wfw:commentRss>https://community.appian.com/discussions/f/portals/39265/the-portal-is-not-populating-values-in-a-custom-picker-for-a-service-account/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Hi Appian Experts,&lt;/p&gt;
&lt;p&gt;Need you help in an issue that I am facing in the Portal.&lt;/p&gt;
&lt;p&gt;We have one Portal UI which is having a Custom Picker field which is extracting/suggesting the values based on the input given by the user from the Record Type which is fetching data from the DB:&lt;/p&gt;
&lt;p&gt;The below image is taken when accessing via a personal Admin account on the Interface itself:&lt;br /&gt;&lt;img style="max-height:240px;max-width:320px;" src="/resized-image/__size/640x480/__key/communityserver-discussions-components-files/66/pastedimage1749564879049v3.png" alt=" " /&gt;&lt;/p&gt;
&lt;p&gt;When using the Service account(Which is added in the Users group and having Viewer permissions) while accessing the Portal&amp;nbsp; the custom picker field is showing No Results found:&lt;/p&gt;
&lt;p&gt;The below image is taken when accessing the Portal via a Service Account:&lt;br /&gt;&lt;img style="max-height:240px;max-width:320px;" src="/resized-image/__size/640x480/__key/communityserver-discussions-components-files/66/pastedimage1749564854805v2.png" alt=" " /&gt;&lt;/p&gt;
&lt;p&gt;We are unable to identify why the list is not populating on the Portal. Although earlier it was working well. Do anybody else faced something like this while using the Portal ? If Yes, then what they did differently.&lt;br /&gt;Need help in this regards.&lt;br /&gt;&lt;br /&gt;Thank you for your time and patience!&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Redirect to portal URL if there is SAML login failure</title><link>https://community.appian.com/thread/39257?ContentTypeID=0</link><pubDate>Mon, 09 Jun 2025 14:15:43 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:46716417-0c75-43a0-8281-96ae2979e2d1</guid><dc:creator>bihitakdass</dc:creator><slash:comments>3</slash:comments><comments>https://community.appian.com/thread/39257?ContentTypeID=0</comments><wfw:commentRss>https://community.appian.com/discussions/f/portals/39257/redirect-to-portal-url-if-there-is-saml-login-failure/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Hi All,&lt;/p&gt;
&lt;p&gt;There is business need that if there is login failure in SAML authentication , user should be redirected to portals url page where then can see the steps related to contact admin for login .&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Is it possible to redirect to portal URL on SAML login failure ?&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Thanks&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Portal published but shows HTTP code 500</title><link>https://community.appian.com/thread/39194?ContentTypeID=0</link><pubDate>Fri, 30 May 2025 13:31:38 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:90e1397c-b3a3-44c1-99d0-7a3aa34a62d8</guid><dc:creator>Jack Ferguson</dc:creator><slash:comments>9</slash:comments><comments>https://community.appian.com/thread/39194?ContentTypeID=0</comments><wfw:commentRss>https://community.appian.com/discussions/f/portals/39194/portal-published-but-shows-http-code-500/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;I have a portal that I have successfully published, however, when I click on the URL to preview the portal I get the &amp;quot;The System Has Encountered an Error HTTP Code: 500&amp;quot; Appian pop up. Previously I was getting a &amp;quot;record does not exist, has been deleted, or you don&amp;#39;t have permission to access it&amp;quot; error on a record backed dropdown field, so I commented out those fields and now I&amp;#39;m getting this error.&lt;/p&gt;
&lt;p&gt;Looking in the Portal Server Log on the Troubleshoot tab in the Portal object, I noticed this error message &amp;quot;An error occurred while trying to read the security token from &amp;quot;/conf/appian.sec&amp;quot;. No security token will be sent when connecting to engines&amp;quot;. Would I be correct in thinking that this security token error is causing my issues? If so, what does this mean/how can I fix it?&lt;/p&gt;
&lt;p&gt;I have a service account associated with this portal that has viewer access to all record types referenced in the portal, and viewer access to the process model it starts on submission. Since this seems to be a security issue, I suspect something is wrong with the way that I have configured the service account, however, this service account has been used in other portals successfully.&lt;/p&gt;
&lt;p&gt;Any help or thoughts would be greatly appreciated. Thanks!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Incompatible Functions In Portals (Possible Workaround)</title><link>https://community.appian.com/thread/39146?ContentTypeID=0</link><pubDate>Thu, 22 May 2025 14:57:46 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:f0109aea-cdfc-4b17-97d2-352fbf9b504b</guid><dc:creator>Jamal Case</dc:creator><slash:comments>3</slash:comments><comments>https://community.appian.com/thread/39146?ContentTypeID=0</comments><wfw:commentRss>https://community.appian.com/discussions/f/portals/39146/incompatible-functions-in-portals-possible-workaround/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p data-sourcepos="3:1-3:4"&gt;Hi,&lt;/p&gt;
&lt;p data-sourcepos="5:1-5:401"&gt;We&amp;#39;re moving one of our sites to portals. We have functionality where the user clicks an upload button, which kicks off a process via &lt;code&gt;startProcessLink&lt;/code&gt; (incompatible in portals). This current process is chained, so it waits until the process is complete; the interface closes after the user submits the documents. Once the interface closes, the user instantly sees the new documents they&amp;#39;ve uploaded.&lt;/p&gt;
&lt;p data-sourcepos="7:1-7:582"&gt;Now, to convert this logic to be compatible with portals, we&amp;#39;ve changed &lt;code&gt;startProcessLink&lt;/code&gt; to &lt;code&gt;dynamicLink&lt;/code&gt; to just toggle between interfaces and use a &lt;code&gt;startProcess&lt;/code&gt; function (which is compatible with portals) to write the documents. This new approach is an asynchronous call, so it no longer shows the newly uploaded documents instantly. Even leveraging the &lt;code&gt;refreshVariable&lt;/code&gt; function with the &lt;code&gt;refreshAlways&lt;/code&gt; parameter set to &lt;code&gt;true&lt;/code&gt; doesn&amp;#39;t work as expected. The documents only show up after the user interacts with the screen. Any thoughts on how I can achieve this in portals?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Portals</title><link>https://community.appian.com/thread/39085?ContentTypeID=0</link><pubDate>Fri, 09 May 2025 16:02:27 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:a1573147-d49a-4e52-a2c5-550d40d5ced2</guid><dc:creator> Manikanta009</dc:creator><slash:comments>5</slash:comments><comments>https://community.appian.com/thread/39085?ContentTypeID=0</comments><wfw:commentRss>https://community.appian.com/discussions/f/portals/39085/portals/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;In Appian Portals, when I click the Appian icon, it currently redirects to the home page. Can I configure it to redirect to a specific URL instead?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Portal Timeout and Auto-Save Functionality</title><link>https://community.appian.com/thread/39071?ContentTypeID=0</link><pubDate>Wed, 07 May 2025 10:46:25 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:eb7f7956-4312-4389-a798-001646ed62dd</guid><dc:creator>harishbabub6381</dc:creator><slash:comments>6</slash:comments><comments>https://community.appian.com/thread/39071?ContentTypeID=0</comments><wfw:commentRss>https://community.appian.com/discussions/f/portals/39071/portal-timeout-and-auto-save-functionality/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p class="" data-start="131" data-end="255"&gt;We are exploring whether the client portal has a timeout mechanism for inactive sessions. Specifically:&lt;/p&gt;
&lt;ol data-start="257" data-end="476"&gt;
&lt;li class="" data-start="257" data-end="372"&gt;
&lt;p class="" data-start="260" data-end="372"&gt;Does the portal automatically log out users after &lt;strong data-start="310" data-end="324"&gt;15 minutes&lt;/strong&gt; of &lt;strong data-start="328" data-end="341"&gt;idle time&lt;/strong&gt; or &lt;strong data-start="345" data-end="369"&gt;total login duration&lt;/strong&gt;?&lt;/p&gt;
&lt;/li&gt;
&lt;li class="" data-start="373" data-end="476"&gt;
&lt;p class="" data-start="376" data-end="476"&gt;If a timeout occurs, is there an option to &lt;strong data-start="419" data-end="432"&gt;auto-save&lt;/strong&gt; the user&amp;rsquo;s progress to prevent data loss?&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;user logs into the client portal to update Location details. While entering data, the user gets distracted or steps away for more than 15 minutes. If the session times out, any unsaved data is lost, potentially requiring the user to re-enter all information.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Appian Sites: How to Navigate to a Site Page from an External Application/Website with Encrypted URL Parameters</title><link>https://community.appian.com/thread/38999?ContentTypeID=0</link><pubDate>Thu, 24 Apr 2025 19:05:18 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:9912f88b-dbd0-4d49-a6bc-b1a806f51fc4</guid><dc:creator>vinays346</dc:creator><slash:comments>7</slash:comments><comments>https://community.appian.com/thread/38999?ContentTypeID=0</comments><wfw:commentRss>https://community.appian.com/discussions/f/portals/38999/appian-sites-how-to-navigate-to-a-site-page-from-an-external-application-website-with-encrypted-url-parameters/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;&lt;span&gt;Business need: When a user is working in an external application with a record open and clicks a link within that record, the system should securely transfer certain parameters from the record to Appian and automatically open the corresponding page in Appian, allowing seamless navigation without requiring the user to re-enter the data in Appian. Additionally, the sensitive parameters passed from the external system to Appian must not be exposed in the URL. Is there a way to achieve this? Thanks in advance.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Note: User has privileges to access both the applications.&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Mask Portal URL</title><link>https://community.appian.com/thread/38951?ContentTypeID=0</link><pubDate>Thu, 17 Apr 2025 21:11:38 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:496b7265-4729-4aa7-bd25-6657fa47c1bc</guid><dc:creator>kfaa</dc:creator><slash:comments>6</slash:comments><comments>https://community.appian.com/thread/38951?ContentTypeID=0</comments><wfw:commentRss>https://community.appian.com/discussions/f/portals/38951/mask-portal-url/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;We have a request to ensure that a portal&amp;nbsp;link cannot be reused and that it cannot be accessed outside of the site that embedds the portal links. The client is concerned that the URL will be exposed and that a nefarious actor could use the URL to create cases using the same portal link.&lt;/p&gt;
&lt;p&gt;From my research I found that we can use a Web API can expose an encrypted URL using a!urlForPortal (source:&amp;nbsp;&lt;a href="https://docs.appian.com/suite/help/24.1/url-parameters.html#linking-from-an-external-website"&gt;https://docs.appian.com/suite/help/24.1/url-parameters.html#linking-from-an-external-website&lt;/a&gt;), but the client says this won&amp;#39;t solve the problem because a person could still grab the encrypted URL and reuse it.&lt;/p&gt;
&lt;p&gt;I realize portals are for anonymous users, but the client is asking about this regardless.&lt;/p&gt;
&lt;p&gt;Any suggestions would be helpful.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Portal Best Practices For Communicating With External Users</title><link>https://community.appian.com/thread/38943?ContentTypeID=0</link><pubDate>Wed, 16 Apr 2025 23:16:56 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:941c9c61-ef76-431d-938c-693f6d1246cf</guid><dc:creator>Jamal Case</dc:creator><slash:comments>1</slash:comments><comments>https://community.appian.com/thread/38943?ContentTypeID=0</comments><wfw:commentRss>https://community.appian.com/discussions/f/portals/38943/portal-best-practices-for-communicating-with-external-users/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;I&amp;#39;m exploring the use of Appian Portals to allow external users to submit applications without requiring a login. One challenge I&amp;#39;m facing is figuring out the best way to communicate back to those users after they&amp;rsquo;ve submitted the form to make edits. I also wanted to know thoughts on some sort of messaging mechanism for back and forth communication similar to an email inbox but within Appian portals/site for internal users who have logins to the environment.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Since these users don&amp;rsquo;t have Appian accounts and can&amp;rsquo;t log in to view tasks or records, what are some recommended design patterns or best practices for enabling this kind of communication?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>typeof() function returns invalid value while opening the interface in portal</title><link>https://community.appian.com/thread/38839?ContentTypeID=0</link><pubDate>Wed, 02 Apr 2025 10:51:24 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:09e421ab-c8d0-4c58-adcc-22d31d342cee</guid><dc:creator>hamsaviruthan.ss</dc:creator><slash:comments>6</slash:comments><comments>https://community.appian.com/thread/38839?ContentTypeID=0</comments><wfw:commentRss>https://community.appian.com/discussions/f/portals/38839/typeof-function-returns-invalid-value-while-opening-the-interface-in-portal/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Does any faced the issue in interface when you use the typeOf() function against record in any interface or rule. In my case I have use a condition to check for particular record type against a list of variants. Its working fine during unit testing in interface level, but while opening that interface via portal link, data are not properly returned because of the invalid value returned in this function.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Unable to call integration in portals.</title><link>https://community.appian.com/thread/38736?ContentTypeID=0</link><pubDate>Thu, 20 Mar 2025 07:37:59 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:ea67fe31-50c0-4022-8f6f-19f3c73b4ee2</guid><dc:creator>rajvardhand1234</dc:creator><slash:comments>5</slash:comments><comments>https://community.appian.com/thread/38736?ContentTypeID=0</comments><wfw:commentRss>https://community.appian.com/discussions/f/portals/38736/unable-to-call-integration-in-portals/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;&lt;img style="max-height:240px;max-width:320px;" src="/resized-image/__size/640x480/__key/communityserver-discussions-components-files/66/pastedimage1742455809804v2.png" alt=" " /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Facing an issue while trying to call a integration object in portal.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Agenda: Trying to insert new row in DB.&lt;/p&gt;
&lt;p&gt;I created a webApi which contains a startprocess and calling the webapi into an integration. Type of connection used is OAuth 2.0 client credentials. When tried to trigger the same from interface it is working fine but problem arises when calling via Portal.&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Multilingual portal implementation</title><link>https://community.appian.com/thread/38530?ContentTypeID=0</link><pubDate>Fri, 14 Feb 2025 07:54:15 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:98bc9ec1-17e2-4a96-a09a-eec842d06f65</guid><dc:creator>Neha Thimmaiah</dc:creator><slash:comments>5</slash:comments><comments>https://community.appian.com/thread/38530?ContentTypeID=0</comments><wfw:commentRss>https://community.appian.com/discussions/f/portals/38530/multilingual-portal-implementation/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;My requirement is to implement the multilingual portal based on the user selection to all the page in the portal at once. Now I am using the function a!portalUrlWithLocale(), but it seems that it is working for one page at a time and when I go to the other page, I need to select the preferred language again or else the default language (English) comes to other page.&lt;/p&gt;
&lt;p&gt;So Kindly can anyone suggest what needs to be done.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Expression evaluation error: You must specify a variable to save into, such as ri!name &lt;&lt; fn!sum. Received: List of Save.</title><link>https://community.appian.com/thread/38524?ContentTypeID=0</link><pubDate>Thu, 13 Feb 2025 15:36:03 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:3eff29cc-ab6e-43d6-a02a-c759a931f3e4</guid><dc:creator>Chris.Gillespie</dc:creator><slash:comments>4</slash:comments><comments>https://community.appian.com/thread/38524?ContentTypeID=0</comments><wfw:commentRss>https://community.appian.com/discussions/f/portals/38524/expression-evaluation-error-you-must-specify-a-variable-to-save-into-such-as-ri-name-fn-sum-received-list-of-save/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;I have a portal set up to use the a!verifyRecaptcha function.&amp;nbsp; I am receiving the following error referencing the line the buttonWidget starts.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;quot;Expression evaluation error: You must specify a variable to save into, such as ri!name &amp;lt;&amp;lt; fn!sum. Received: List of Save.&amp;quot;&lt;/p&gt;
&lt;p&gt;Based on the error and I know that you can&amp;#39;t have both the saveInto and the recaptchaSaveInto in the same buttonWidget, but it looks to me that I am trying to have too many saves?!?!&lt;/p&gt;
&lt;p&gt;Here is the code.&amp;nbsp; I checked all of the a!save and they all have the target and value defined.&amp;nbsp; I&amp;#39;m not sure what is throwing the error.&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="json"&gt;                        a!buttonWidget(
                            label: &amp;quot;Check Your User Account&amp;quot;,
                            recaptchaSaveInto: a!verifyRecaptcha(
                              onSuccess: {
                                a!match(
                                  value: fv!score,
                                  whenTrue: fv!value &amp;gt; .7,
                                  then: {
                                    saveInto: {
                                      a!save(local!mainSignUpSectionAction, null),
                                      a!save(local!userAccountSectionAction, &amp;quot;R&amp;quot;),
                                      if(
                                        a!isNotNullOrEmpty(local!speakerRecord),
                                        a!save(local!userAccountReactivatedSectionAction,&amp;quot;R&amp;quot;),
                                        a!save(local!userAccountNotActivatedSectionAction,&amp;quot;R&amp;quot;)
                                      ),
                                      if(
                                        a!isNotNullOrEmpty(local!speakerRecord),
                                        a!startProcess(
                                          processModel: cons!PMSO_ReactivateSpeaker_PM,
                                          processParameters: {
                                            speakerId: local!speakerRecord[&amp;#39;recordType!PMSO Speaker.fields.speakerId&amp;#39;],
                                            speakerRecord: local!speakerRecord,
                                            volunteerRequest: local!volunteerRequest,
                                            speakerDocument: local!speakerDocuments
                                          }
                                        ),
                                        a!save(local!userAccountNotActivatedSectionAction,&amp;quot;R&amp;quot;)
                                      )
                                    },
                                    
                                  },
                                  whenTrue: fv!value &amp;gt; .3,
                                  then: {
                                    saveInto: {
                                      a!save(local!mainSignUpSectionAction, null),
                                      a!save(local!userAccountSectionAction, &amp;quot;R&amp;quot;),
                                      if(
                                        a!isNotNullOrEmpty(local!speakerRecord),
                                        a!save(local!userAccountReactivatedSectionAction,&amp;quot;R&amp;quot;),
                                        a!save(local!userAccountNotActivatedSectionAction,&amp;quot;R&amp;quot;)
                                      ),
                                      if(
                                        a!isNotNullOrEmpty(local!speakerRecord),
                                        a!startProcess(
                                          processModel: cons!PMSO_ReactivateSpeaker_PM,
                                          processParameters: {
                                            speakerId: local!speakerRecord[&amp;#39;recordType!PMSO Speaker.fields.speakerId&amp;#39;],
                                            speakerRecord: local!speakerRecord,
                                            volunteerRequest: local!volunteerRequest,
                                            speakerDocument: local!speakerDocuments
                                          },
                                          
                                        ),
                                        a!save(local!userAccountNotActivatedSectionAction,&amp;quot;R&amp;quot;)
                                      )
                                    },
                                    
                                  },
                                  default: {
                                    a!save(local!reCAPTCHAfailSectionAction, &amp;quot;C&amp;quot;)
                                  }
                                )
                              },
                              onError: {
                                a!save(local!reCAPTCHAfailSectionAction, &amp;quot;C&amp;quot;)
                              }
                            ),
                            style: &amp;quot;GHOST&amp;quot;,
                            color: &amp;quot;ACCENT&amp;quot;,
                            disabled: not(local!activateAccount)
                          )&lt;/pre&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>