I'm struggling to get this attribute rule working.
My Setup:
Parent Layer: WNV_StagnantWaterSites (point feature class)
Related Layer: WNV_SiteVisits (point feature class)
Relationship: 1:M (SiteCode as Primary & Foreign Key, short numeric)
Notification: Both directions
Record Count: 628 parent records, 50,000+ related records
Relationship Class: WNV_StagnantWaterSites_TO_WNV_SiteVisits
Goal:
I need to update the SiteRisk field (text: "Other", "Low", "Moderate", "High") in WNV_StagnantWaterSites based on related WNV_SiteVisits records where LarvacideRequest = 1 (Yes) in the last 12 months (SiteVisitDate field).
Logic:
0 records → SiteRisk = Low
1 record → SiteRisk = Moderate
2+ records → SiteRisk = High
Downgrades:
High → Moderate if no Yes records in 12 months
Moderate → Low if no Yes records in 12 months
Issue:
My attribute rule validates and saves, but SiteRisk does not update, no matter how I modify WNV_SiteVisits. Any help from an Attribute Rule Guru would be greatly appreciated! 🙏
// Relationship class name
var relationshipName = "WNV_StagnantWaterSites_TO_WNV_SiteVisits";
// Define the cutoff date for the last 12 months
var today = Now();
var twelveMonthsAgo = DateAdd(today, -12, "months");
// Fetch related site visit records (Child Features)
var relatedVisits = FeatureSetByRelationshipName($feature, relationshipName, ["LarvacideRequest", "SiteVisitDate"], false);
// Debugging: Log how many related visits were found
Console("<span class="lia-unicode-emoji" title=":magnifying_glass_tilted_left:">🔍</span> Found " + Count(relatedVisits) + " related site visit records.");
// Filter visits where LarvacideRequest = 1 (Yes) AND occurred in the past 12 months
var recentLarvacideVisits = Filter(relatedVisits, "LarvacideRequest = 1 AND SiteVisitDate >= @twelveMonthsAgo");
// Count qualifying visits
var visitCount = Count(recentLarvacideVisits);
// Debugging: Log how many visits met the criteria
Console(":calendar:</img> " + visitCount + " site visits in the past 12 months had LarvacideRequest = 1.");
// Determine new SiteRisk value based on visit count
var newSiteRisk = "";
if (visitCount == 0) {
newSiteRisk = "Low";
} else if (visitCount == 1) {
newSiteRisk = "Moderate";
} else if (visitCount >= 2) {
newSiteRisk = "High";
}
// Fetch the parent feature (WNV_StagnantWaterSites)
var parentFeatures = FeatureSetByRelationshipName($feature, relationshipName, ["SiteRisk"], true);
// Ensure we have at least one parent
if (Count(parentFeatures) > 0) {
var parent = First(parentFeatures);
// Get the existing SiteRisk value
var currentRisk = parent.SiteRisk;
// Debugging: Log the existing SiteRisk before updating
Console("<span class="lia-unicode-emoji" title=":counterclockwise_arrows_button:">🔄</span> Current SiteRisk: " + currentRisk);
// Only update if the risk level actually changes
if (currentRisk != newSiteRisk) {
Console("<span class="lia-unicode-emoji" title=":white_heavy_check_mark:">✅</span> Updating SiteRisk from " + currentRisk + " to " + newSiteRisk);
return {
"edit": [
{
"className": "WNV_StagnantWaterSites",
"updates": [
{
"objectID": parent.OBJECTID,
"attributes": {
"SiteRisk": newSiteRisk
}
}
]
}
]
};
} else {
Console(":warning:</img> No update needed. SiteRisk remains: " + currentRisk);
}
} else {
Console("<span class="lia-unicode-emoji" title=":cross_mark:">❌</span> No parent found for this site visit.");
}
// No update needed
return null;