Hello all,
I am trying to view related data in the attribute table widget in Web AppBuilder. It is a one-to-many relationship and everything works fine on the ArcGIS Online webmap. When I try the same thing in Web AppBuilder, the Attribute table widget comes back with "No related records found" but I know that there are records. The related records are stored in a table that is hosted on ArcGIS Online.
When I open the browser dev tools I see this error:
Error: Invalid URL
I do not have the table showing in the attribute table by default. I am not sure if this is causing the issue.
Thanks!
Chris
Solved! Go to Solution.
Hello all,
I contacted Esri support and they were able to help me with this issue.
The problem was not the proxy, the reason that I was getting "Invalid URL" errors in the console was because the app was changing the URL from
www.myorg.maps.arcgis.com/<orgcode>/arcgis/rest/services/<service>/FeatureServer/0
to
www.myorg.maps.arcgis.com/<orgcode>/arcgis/rest/services/<service>/MapServer/0
Map services cannot be hosted on ArcGIS Online, so this was causing my error.
Tech support and I looked at apps hosted on AGOL and were not able to reproduce this error. This seems to be an issue with Web AppBuilder Developer Edition Version 2.1. ArcGIS Online is running the next version of WAB.
The helpful folks at Esri support were able to provide a work-around for the issue:
In the proxy.ashx file, add the following (around line 114):
//if url is encoded, decode it.
if (uri.StartsWith("http%3a%2f%2f", StringComparison.InvariantCultureIgnoreCase) || uri.StartsWith("https%3a%2f%2f", StringComparison.InvariantCultureIgnoreCase))
uri = HttpUtility.UrlDecode(uri);
//Esri Support work around
if (uri.StartsWith("https://services.arcgis.com/<orgcode>/arcgis/rest/services/<MyService>/MapServer", StringComparison.InvariantCultureIgnoreCase))
{
uri = uri.Replace("MapServer", "FeatureServer");
}
//End Work around
log(TraceLevel.Info, uri);
ServerUrl serverUrl;
try {
This addition basically waits for this URL to pass through the proxy and then when it sees it, it replaces 'MapServer' with 'FeatureServer' and sends it on its merry way.
Esri support created bug for the issue:
Thanks!
Chris
Hello all,
I have been working on this and I think I found out why I am having issues.
After comparing the network traffic with Fiddler web debugger between the app that is not working and one on AGOL that works, I found that the difference between the tow was that the local app (not working one) was using a proxy and the proxy was not including a token on the end of the URL.
This is further confirmed when I run the app with out any proxy settings and log in when it loads. If I do it this way, no issues, but when I use the proxy, it will not load related data.
If anyone has come across this issue and worked around it, please let me know.
Thanks!
Chris
Christopher,
I believe that this is a known Proxy issue with passing tokens. I would give tech support a call to confirm.
Thanks Robert,
I will give them a call.
Chris
Hello all,
I contacted Esri support and they were able to help me with this issue.
The problem was not the proxy, the reason that I was getting "Invalid URL" errors in the console was because the app was changing the URL from
www.myorg.maps.arcgis.com/<orgcode>/arcgis/rest/services/<service>/FeatureServer/0
to
www.myorg.maps.arcgis.com/<orgcode>/arcgis/rest/services/<service>/MapServer/0
Map services cannot be hosted on ArcGIS Online, so this was causing my error.
Tech support and I looked at apps hosted on AGOL and were not able to reproduce this error. This seems to be an issue with Web AppBuilder Developer Edition Version 2.1. ArcGIS Online is running the next version of WAB.
The helpful folks at Esri support were able to provide a work-around for the issue:
In the proxy.ashx file, add the following (around line 114):
//if url is encoded, decode it.
if (uri.StartsWith("http%3a%2f%2f", StringComparison.InvariantCultureIgnoreCase) || uri.StartsWith("https%3a%2f%2f", StringComparison.InvariantCultureIgnoreCase))
uri = HttpUtility.UrlDecode(uri);
//Esri Support work around
if (uri.StartsWith("https://services.arcgis.com/<orgcode>/arcgis/rest/services/<MyService>/MapServer", StringComparison.InvariantCultureIgnoreCase))
{
uri = uri.Replace("MapServer", "FeatureServer");
}
//End Work around
log(TraceLevel.Info, uri);
ServerUrl serverUrl;
try {
This addition basically waits for this URL to pass through the proxy and then when it sees it, it replaces 'MapServer' with 'FeatureServer' and sends it on its merry way.
Esri support created bug for the issue:
Thanks!
Chris
Update:
Here is the link to the bug:
BUG-000099764: Querying a related table in Web AppBuilder for ArcGI..
Hello all,
I found this solution for those applications that do not use a proxy.
//working around an arcgis server feature service bug. Requests to queryRelatedRecords operation fail with feature service 10.
//Detect if request conatins the queryRelatedRecords operation and then change the source url for that request to the corresponding mapservice
esriRequest.setRequestPreCallback(function(ioArgs) {
if (ioArgs.url.indexOf("queryRelatedRecords") !== -1) {
ioArgs.url = ioArgs.url.replace("FeatureServer", "MapServer");
}
return ioArgs;
});
It intercepts the request like the proxy and changes the URL.
This was found on this site: Query and edit related records | ArcGIS API for JavaScript 3.20
Thanks,
Chris