Auto-Updating features

3101
25
03-24-2022 12:43 PM
BrianBulla
Occasional Contributor III

Hi,

What I need to do is figure out how to update a field in any feature class each time an edit is made to it.  This is to support our asset management system, Maximo.

The field is called MXCREATIONSTATE and will exist on many different feature classes in our corporate SDE.  Some users use ArcMap, some use ArcGIS Pro, some use FME to make updates, some use web editing tools.  Going forward other front-end apps could also make edits.

What is the best way to handle this sort of situation?  The out-of-the-box Attribute Rules/Attribute Assistant don't really seem to cover all the bases here.

Basically, anytime an edit is made (or new feature is created) MXCREATIONSTATE must be updated to 1.

Any ideas are appreciated.

Thanks,

0 Kudos
25 Replies
Bud
by
Notable Contributor

Interesting idea! No, we hadn't looked into that.

In our case, we already had a status field in most of our asset feature classes. For example, we have proposed and future assets in there too. So we're used to filtering on status...it comes naturally at this point.

Bud
by
Notable Contributor

Some thoughts about your deletes idea:

I don't think you could use the out-of-box Maximo Spatial integration mechanism (called the ArcGISDataSync cron task) for your deletes idea. Unless you got your consultant to customize the Java, but that sounds pretty terrible.

You might need to do something like this in Maximo:

  • Create a custom cron task or escalation -- to run a Python or JavaScript "automation script" on a schedule.
  • The automation script would perform the logic you mentioned above (find GIS assets that have been deleted and mark them as decommissioned in Maximo). Would you connect to GIS using an HTTP call? Or a dblink?
  • The automation script would update the appropriate Maximo records by changing the status to decommissioned.
  • You might find this script interesting: Escalation: Email me if external web service returns any records (JSON) or if service is down. That script is totally different than what you want, but you still might be able to use parts of it. It makes HTTP calls to GIS on a schedule, which seems relevant.
  • I'm not an expert on this stuff. I would definitely recommend bouncing your idea off the folks in the IBM Maximo Community.

It's funny, at one point, I'd actually wondered if we'd create a custom Maximo/GIS integration mechanism ourselves, using logic similar to the above -- instead of using the OOB Maximo Spatial mechanism (ArcGISDataSync cron). That mechanism requires a lot of extra Maximo objects to be set up -- which is fiddly, when you have a lot of GIS layers to integrate. And it isn't customizable.

I had wondered if we might use the custom mechanism idea mentioned above...since most of the work is already done in that script I mentioned: Escalation: Email me if external web service returns any records (JSON) or if service is down.

We probably wouldn't have used it for asset integrations (not necessary in our case), but for integrating WOs from ArcGIS Collector/Field Maps...to Maximo. Either of the two methods would work (custom or ArcGISDataSync -- we tested the later and it worked fine). But it was still interesting to think about...what if we wanted to customize the integration? The automation script would be decent option, I think.

 

0 Kudos
Bud
by
Notable Contributor

Instead of creating a custom integration mechanism, I wonder if you could do the following:

  • Create a view in the GIS database that connects to Maximo via a dblink.
  • In the view, generate fake rows for the missing GIS assets -- if those assets haven't already been changed to decommissioned in Maximo. Flag the rows in the view as status=decommissioned (all done dynamically in the view -- we're not creating any data here). 
  • Then sync those fake rows to Maximo as decommissioned assets.
  • The view could contain your existing/real assets too -- not just the fake decommissioned ones.

That way, you could use the out-of-box Maximo/GIS integration mechanism that already exists (the ArcGISDataSync cron). No customization would be required! Sounds a bit too good to be true...

Edit:
One possible problem with that idea: With the fake decommissioned rows, what about all the other attributes that exist on the Maximo side? The fake row would have nulls in all it's fields, which would overrite your Maximo info, so that's likely a problem. Some of those fields would be mandatory in Maximo (the integration would throw an error if you tried to sync nulls). And I would think there would be other valuable fields in Maximo where you'd want to keep that information...you wouldn't want to set those fields to null.

You could grab the data from Maximo...for the missing fields...and put them in the GIS view..and sync the data back to Maximo. But now, this is feeling like a messy/bad idea.
Oh well, it was worth saying it out loud.

 

Just a side note:
If I remember correctly, when you're syncing an asset to Maximo for the first time, I don't think the status can be decommissioned. I think the status needs to be ACTIVE or something like that -- for the first sync.
You'd have to ask around for details if you thought it'd be an issue, although it sounds like it might not be an issue for you.

0 Kudos
MatthewDriscoll
MVP Alum

Have you tried managing the templates before publishing?  Just set the template property of the MXCREATIONSTATE attribute to 1 before publishing. This is how I manage something very similar.  I am not sure how it handles edits if they already have a different value, but this could probably be handled in the in the domains of the database and setting the properties of split/merge policy to default.  You will also need to change the default value of feature class' field value too.   Do all this before publishing as well.

https://pro.arcgis.com/en/pro-app/latest/help/editing/create-a-feature-template.htm

  Edit:  Here is an example.  To not confuse you, the Template Properties I did in pro, and the others I used old school ArcCatalog.

Template.jpgDB_Properties.jpgFC_Properties.jpg

 

Bud
by
Notable Contributor

If I've understood correctly (it's possible that I haven't), I think you're suggesting that all rows in all FCs be flagged as needing to be synced to Maximo. We wondered about that too...just sync everything...once a week or once a month. That would be nice and simple.

The problem with that is that the Maximo Integration Framework (MIF) is relatively slow. A municipality like @BrianBulla's (or ours) has hundreds of thousands, possibly millions, of asset records. Unfortunately, it would take Maximo several days or even weeks to do a sync like that. So it wouldn't be feasible.

The challenge is: How to flag new or updated GIS features -- so that only those changes, aka "the delta" are synced to Maximo. IBM's mechanisms for this sort of thing are naive/incorrect. A lot of organizations try to find alternatives. Companies like ActiveG and GeoNexus have made entire products for it.

BrianBulla
Occasional Contributor III

Yes, I'll need to look into templates a bit more.  That is one thing I haven't experimented with too much.