Hi, I am having an issue with an Arcade expression in a pop while using field maps, specifically in offline mode. I have a feature class (monitoring well) and a linked standalone table (gauging_data). For the popup, I have an arcade expression pulling the most recent data and then I pass that to a survey123 link for further data collection. This all works great online (as shown) but when I pull the map offline I get the following error:
Expression Name: expr1
Expression Title: Date
Error Domain: com.esri.arcgis.runtime.error
Error Code: 15
Error Description: Invalid call., Unable to evaluate arcade expression. Evaluation_error_code::field_not_found Line :19
My arcade expression is as follows:
var relatedrecords = FeatureSetByRelationshipName($feature,"Gauging_Data", ['Well_ID','Depth_to_Water_ft_BTOC', 'Total_Well_Depth_ft_BTOC'], false);
var cnt = Count(relatedrecords);
var relatedinfo = "Date_and_Time";
if (cnt > 0) {
var sortedrecords = OrderBy(relatedrecords, "Date_and_Time DES");
var latestinfo = First(sortedrecords);
relatedinfo = Text(ToLocal(latestinfo["Date_and_Time"]), "M/D/Y");
} else {
relatedinfo = "None available";
}
return relatedinfo
I am thinking it might have something to do with GUID/Global ID case sensitivities (https://community.esri.com/t5/arcgis-field-maps-questions/featureset-not-working-offline-in-field-ma...), but since I am using FeatureSetbyRelationshipName, I am not sure how to fix. In my case 'Well ID' is my GUID field I am using to link to the feature class. Thanks.
If I recall correctly, that FeatureSetByRelationshipName function queries the feature service URL. It does not require the layer to be present in the map, which in an online environment, is one of its benefits.
If you need to work offline, your best bet is to use FeatureSetByName or ID so that you can direct the map to look at already-loaded features in other layers.
Thanks for the help. I figured that may be an issue. I changed the expression to the following:
// first read out the GlobalID of the Feature
var code = $feature["GlobalID"];
// create a sql expression to query on GlobalID
var sql = "Well_ID = '{" + Upper(code) + "}'";
Console(sql);
// access the table
var tbl = FeatureSetByName($datastore,"Gauging_Data");
// filter the table using the sql expression
var relatedrecords = Filter(tbl, sql);
// get a count of the related records
var cnt = Count(relatedrecords);
// initialize a variable that will contain the information to return
var relatedinfo = "Depth_to_Water_ft_BTOC";
// only proceed if you have related records
if (cnt > 0) {
// sort those records by date descending
// change "insp_date" by the date field in your related data
var sortedrecords = OrderBy(relatedrecords, "Date_and_Time DES");
// get the first record of the sorted related info
var latestinfo = First(sortedrecords);
// get the last date and other information if relevant
relatedinfo = Text(latestinfo["Depth_to_Water_ft_BTOC"]);
} else {
// in case you don't have related info
relatedinfo = "None available";
}
// return the result
return relatedinfo
However, now the issue I am having is the expression isn't working at all online via the field maps mobile app (online or offline), but it works fine in Map Viewer. Is there something I am not understanding about how this expression is supposed to execute?
Also, the error I am getting in Field Maps is:
Expression Name: expr0
Expression Title: DTW:
Error Domain: com.esri.arcgis.runtime.services.error
Error Code: 400
Error Description: , Unable to perform query. Please check your parameters.
Strange. Does it work in Field Maps if your map is online, or is it not working at all?
Ordinarily, I'd suggest adding Console messages to the expression, but I don't know if there's a way to view console messages in Field Maps...
Yes Relationship by name has some bugs in it - one is a . in the name. Using By Name works better. Search the forum this has been posted a number of times.