I am trying to create a custom print service for an Experience Builder app in ArcGIS Online. I had some success until suddenly it stopped working and I can't figure out why it stopped working.
I followed these instructions (as best as I could since I wasn't using WAB) and the more recent/relevant advice in the comments. I was able to successfully share a custom layout from Pro to my organization's Enterprise (11.3) Portal and then use that web tool in ExB in ArcGIS Online. When I first shared the tool, the dynamic text in the layout was populating correctly, pulling data from the filtered layers in the map widget. At this point, I was using only part of the full dataset to test the layout and ExB app (about 500 records out of the ~166,000 total records). Once I was happy with the how the app was working, I updated the test dataset to the full dataset. I updated the layout to reflect the changes made in the full dataset and republished it as a different webtool. Then the print service stopped populating correctly and I haven't been able to get it to work correctly since. I tried rebuilding the app in Portal, and I was able to get the print service to work in the Portal ExB twice, but then that one stopped populating correctly too.
The weird thing is that the dynamic text for the date printed has populated correctly every time. It's just the dynamic text boxes linked to the dataset that aren't populating correctly.
I'm not sure if this is relevant information, but the print service in Online was working the morning of 11/24/25 and stopped working by end of day on 11/24/25. Just in case there was an update/patch/etc that I missed.
Any advice about custom print services would be helpful! Thank you!
Unfortunately I don't think I can be much of help without knowing all the details. I'd recommend you to reach out to support. Also, if it is possible for you, then I'd recommend you to upgrade to 11.5 - where dynamic text elements are supported out of the box. Because you are using ExB app, you should be able to make use of this capability without any customization.
Thank you for your response! Unfortunately, my organization doesn't plan to upgrade Enterprise until 12.1 is released.
I did meet with Esri Support and they think the issue is in the Arcade expression used in the dynamic text. The goal is for the layout to populate with ~2-15 records from a single layer in the web map based on a user-input filter. This is an example of the ideal output, where all of the red boxes (dynamic text boxes) are populated correctly.
An example of the second and third layouts. The red boxes are not part of the layout.
I've had three different layouts work at least once then stop working with the print service. For all three of these different layouts, the dynamic text was built from the Table Attribute: Value option. I've tried in-/excluding the CIMPATH for the mapMemberUri, making the field value lowercase, and removing all layers or just the referenced layers. I haven't noticed a major difference from any of those changes, or at least any that resulted in successful printing.
The first layout included one dynamic text box with an Arcade expression pulling the data from multiple fields of a single layer.
<BOL>SubjQuickRefID | ID | MktQuickRefID | JOINPIN | SaleDate | Price | TaxYear</BOL>
<dyn type="table" property="value" mapFrame="Map Frame" mapMemberUri="CIMPATH=Map/GISCompSales.json" isDynamic="true" arcade="var cntTxt = count(text($feature.Price));
var cost = When(cntTxt==7, '$#,000,000', cntTxt==6, '$000,000', cntTxt==5, '$00,000', '$000000');
$feature.SubjQuickRefID+' | '+$feature.comp_id+' | '+$feature.MktQuickRefID+' | '+$feature.JOINPIN+' | '+$feature.SaleDate+' | '+Text($feature.Price, cost)+' | '+$feature.TaxYear+TextFormatting.NewLine" delimiter=" "/>
The second layout included multiple dynamic text boxes, each with an Arcade expression customized to that field. With the addition of some lines and rectangles, this sort of made a makeshift table since I had issues getting a table frame to populate dynamically. Most fields had expressions like this one, except for the Price field that needed some formatting.
<dyn type="table" property="value" mapFrame="Map Frame" mapMemberUri="CIMPATH=Map/GISCompSales.json" isDynamic="true" arcade="$feature.JOINPIN+TextFormatting.NewLine" delimiter=" "/>
The third layout also included multiple dynamic text boxes, but instead of using an Arcade expression, they are directly connected to the field and use "[ENTER] " as the delimiter. Just like the second layout, most fields had expressions like this, except for the Price field.
<dyn type="table" property="value" mapFrame="Map Frame" mapMemberUri="CIMPATH=Map/GISCompSales.json" isDynamic="true" field="subjquickrefid" sortField="comp_id" sortAscending="true" delimiter="
"/>
Thank you for your help! Let me know if you need more information!
here is what I'd do:
This usually gives a good clue about what could go wrong.
Hope this helps.