|
POST
|
I did a bit more testing and it looks like my chosen action (flash the data on the map) is actually working despite the error. Is this a benign error for all actions? I'd prefer not to dump weird errors into the console every time a user runs a task but that's better than not having it work at all.
... View more
a week ago
|
0
|
0
|
277
|
|
POST
|
I'm working on a widget for ExB 1.17 that will select a point and a polygon feature from the map's data sources if a selection action is added to the widget. I was able to get the Extent Change message type handled pretty easily so I figured this would be fine too, but instead I get this error after the message is published: Bad jimuLayerViewId:widget_6-dataSource_2-<layer_name_here> I'm incredibly confused because the actual ID's I'm passing in look like this: dataSource_1-<layer_name_here> This means the completely separate Data Source from the other half of my map widget is getting into the message somehow? My actions look just fine in the settings panel and I don't see any obvious issues with my invoker function, anything I'm missing here? const invokeSelectionMessages = async (polyJlv: JimuLayerView, polyResult: Graphic, pointJlv: JimuLayerView, pointResult: Graphic, widgetId: string) => {
const polyDs = await polyJlv.getOrCreateLayerDataSource() as QueriableDataSource;
const pointDs = await pointJlv.getOrCreateLayerDataSource() as QueriableDataSource;
const polyId = String(polyResult.getObjectId());
const pointId = String(pointResult.getObjectId());
const polyRecord = await polyDs.loadById(polyId, true);
const pointRecord = await pointDs.loadById(pointId, true);
polyDs.selectRecordById(polyId, polyRecord);
pointDs.selectRecordById(pointId, pointRecord);
MessageManager.getInstance().publishMessage(new DataRecordsSelectionChangeMessage(
widgetId,
[polyRecord, pointRecord],
[polyDs.id, pointDs.id]
));
} I tried running two publish actions (one per data source) but that just creates two errors.
... View more
a week ago
|
0
|
1
|
281
|
|
POST
|
Biggest thing that sticks out is: WARNING 003414: dataset does not match schema and will not be appended Did you try using the Append tool's field map option to assign the fields correctly? What you can also try is downloading the original data as a FGDB, doing the data design in another FGDB, appending the old data into the new schema, then publishing that as your service. That way you can check the validity of your data before it has to deal with ArcGIS Online.
... View more
2 weeks ago
|
0
|
2
|
200
|
|
POST
|
Ah, there's always something buried in the support code! I'll have to test this later but I think this does the trick: /** Scale a point symbol and return the original and new sizes. */
export async function scalePointSymbol(point: Graphic, to?: number, by?: number): Promise<[number, number]> {
if (!to && !by) {
throw new Error("Must provide at least one of \"to\" or \"by\"");
}
let prevSize: number;
let newSize: number = to ?? undefined;
switch (point.symbol.type) {
case "simple-marker":
case "point-3d":
prevSize = point.symbol.size;
newSize ||= prevSize * by;
point.symbol.size = newSize;
break;
case "text":
prevSize = point.symbol.font.size;
newSize ||= prevSize * by;
point.symbol.font.size = newSize;
break;
case "picture-marker":
const w = point.symbol.width;
const h = point.symbol.height;
const isWider = w > h;
prevSize = isWider ? w : h;
if (newSize) {
point.symbol.width = isWider ? newSize : newSize * (w / h);
point.symbol.height = isWider ? newSize * (h / w) : newSize;
} else {
point.symbol.width *= by;
point.symbol.height *= by;
newSize = prevSize * by;
}
break;
case "web-style":
point.symbol = await point.symbol.fetchCIMSymbol();
case "cim":
prevSize = getCIMSymbolSize(point.symbol);
newSize ||= prevSize * by;
scaleCIMSymbolTo(point.symbol, newSize, { preserveOutlineWidth: false });
break;
default:
throw new Error(`Graphic does not have a point symbol (${point.symbol.type})`);
}
return [prevSize, newSize]
}
... View more
2 weeks ago
|
0
|
0
|
150
|
|
POST
|
I need to take the 2D symbol of an arbitrary point Graphic and multiply the size by 1.5. Is there a sensible way to do this for all potential symbol types? I have simple and picture markers down but I have no idea where to begin with CIM Symbols, and I assume the 3D symbols need shader stuff to scale properly. I have the option of shoving this symbol in a separate layer and applying the scaling there if that works better. const scale = 1.5
let baseSize: number;
if (pointGraphic.symbol.size != null) {
baseSize = pointGraphic.symbol.size * scale;
pointGraphic.symbol.size = baseSize;
} else if ((pointGraphic.symbol as any)?.width != null) {
const baseWidth = (pointGraphic.symbol as any).width * scale;
const baseHeight = (pointGraphic.symbol as any).height * scale;
baseSize = baseWidth > baseHeight ? baseWidth : baseHeight;
(pointGraphic.symbol as any).width = baseWidth;
(pointGraphic.symbol as any).height = baseHeight;
} else if ((pointGraphic.symbol as any)?.font != null) {
baseSize = (pointGraphic.symbol as any).font.size * scale;
(pointGraphic.symbol as any).font.size = baseSize;
} else {
// TODO: Scale CIM point
}
... View more
2 weeks ago
|
0
|
2
|
265
|
|
POST
|
Webpack describes HMR on their official site as bypassing browser reloads entirely: you hit save, the page hotswaps the webpack chunks, now your webpage has the updated code ready to go, like "changing styles directly in the browser's dev tools." It also mentions this is something the "application" has to manage, which I assume is Experience Builder in this context, so we'd need someone with tons of internal ExB knowledge to weigh in on if this is feasible or not.
... View more
05-08-2026
08:24 AM
|
0
|
0
|
361
|
|
POST
|
I'm reaching the point of widget development where reloading and readding my custom widget for debugging is grinding my gears. The VSCode documentation suggests that webpack's HMR feature should just work for React, but they're using the default React toolchain, not whatever non-standard loadout the ExB team had to bolt together to get this all working. Has anyone had success getting HMR working? Is this even feasible with ExB's layout? In a perfect world I can hit save, wait for webpack to hot compile and then my next interaction with the debug browser instance pulls the hot-loaded code. At this point I'd settle for the hot-load only taking effect on remount.
... View more
05-07-2026
08:40 PM
|
0
|
2
|
440
|
|
POST
|
After beating my head against this wall for a while, I consistently get runtime import errors when I try to load something as simple as the basemap toggle widget from another version of the SDK. I'll leave this open just in case some brave soul ever figures this out, but I'll stick to making simpler widgets and maybe work myself up to a dead-simple bulk editing widget that uses the bundled SDK. Thanks again for all your help Jeff!
... View more
04-23-2026
02:15 PM
|
0
|
0
|
766
|
|
POST
|
Enterprise 11.5 The multiple feature editing workflows from the newer SDKs. We have dozens of apps with the WAB batch editing widget that we'd have to panic-port when we move to 12.1 so I want to provide a workaround. The map component is just for testing if anything will render, the final product will wrap the editor widget/component. I figured I'd start with the component used in nearly every code sample, just to avoid editor-specific issues for the time being. The map component I'm trying to import is the standard map component from all the SDK demos. The item id I'm providing is from a sample so it's publicly available. I've never seen a demo where the map component's CSS must be overridden to display properly, and when I check devtools the computed width and height are "auto" which means it should fill my parent div if there's anything to render. Your linked post looks fantastic (I can't believe none of my Google searches pulled it up) and I'll try and get your example implemented on my end just to see if there's any build/env issues. I did notice it's pulling in the bundled SDK's widgets and components, have you tried anything that involves using another version of the SDK like I'll need to do?
... View more
04-22-2026
03:19 PM
|
0
|
2
|
820
|
|
POST
|
I need to wrap an Editor widget from a newer release of the JavaScript SDK in a widget targeting an older version of Experience Builder so my org can migrate from Web Appbuilder to Experience Builder before we upgrade to Enterprise 12.1. Unfortunately, I'm at my wit's ends here, I can't even get a simple map component working in a widget! Attached is my current widget folder, run npm update to grab the dependencies and then combine it with Experience Builder Developer Edition 1.17. I've aliased the npm packages as @arcgis434/map-components, @arcgis434/core and @esri434/calcite-components to avoid grabbing the default packages, not sure if that works under ExB. The settings files are all copy-pasted from the built-in Editor widget just to get something working, the meat is in this minimal widget that tries to load a hardcoded map as a test: export default function EditWidget(props: AllWidgetProps<IMConfig>) {
const [jmv, setJmv] = React.useState<JimuMapView>(null);
const mapId = props.useMapWidgetIds?.[0];
const onActiveViewChange = (jmv: JimuMapView) => {
setJmv(jmv)
}
return (
<div className="widget-editor-434" style={{height: "100%", width: "100%"}}>
{mapId != undefined ?
<JimuMapViewComponent useMapWidgetId={mapId} onActiveViewChange={onActiveViewChange} />
: <p>No map selected.</p>}
{jmv != null ?
<arcgis-map item-id="f2e9b762544945f390ca4ac3671cfa72"></arcgis-map>
: <p>Map not loaded.</p>}
</div>
)
} On my end this renders the placeholder elements if a map isn't selected, but renders an empty map component otherwise. Am I missing something small? Am I barking up the wrong tree? Will trying to mix JavaScript SDK components like this even work??
... View more
04-22-2026
01:33 PM
|
0
|
4
|
868
|
|
POST
|
This is an incredible amount of info, thank you so much! This should be more than enough for me to get started.
... View more
04-17-2026
09:09 AM
|
0
|
0
|
1385
|
|
POST
|
Right now I'm the sole widget dev on the team, but if it's not too onerous for one guy I'd like to have something that supports multiple devs on the same team for the future. What I can say for sure is it's not multi-team, if we need to integrate someone else's widget source into our collection I'm fine with dumping it into a monorepo.
... View more
04-17-2026
08:29 AM
|
0
|
0
|
1394
|
|
POST
|
I'm getting started with custom widget development and I want to make sure I'm handling my source data as best as possible: For a single organization, should I do a monorepo or one repository per widget? At what folder "level" do I create the repository? I assume for multi-repository workflows each widget folder is a repository but how high up should you go for a monorepo? The docs mention a "shared-code" directory that isn't compiled into a widget but can hold common code for all widgets. Is it a good idea to use that or to create standard node packages and load them as standard dependencies? Does this change depending on how you structure the repositories?
... View more
04-16-2026
11:26 AM
|
0
|
7
|
1467
|
| Title | Kudos | Posted |
|---|---|---|
| 1 | 05-24-2023 11:47 AM | |
| 2 | 04-09-2026 11:36 AM | |
| 1 | 09-08-2023 10:07 AM | |
| 3 | 03-26-2026 08:11 AM | |
| 2 | 03-12-2026 01:41 PM |
| Online Status |
Online
|
| Date Last Visited |
4 hours ago
|