Hi,
I have been trying to figure out how to create an attribute rule to add a record in a related table based on certain criteria. I am not sure, since I am still learning quite a bit about arcade, how to go about it. I typically program in python, but I am trying to reduce the scripting that would be needed outside of a database when a simple attribute rule could accomplish a similar task.
// Function for defining whether or not a fieldname exists in another feature
function ValidateFieldNames( InputFieldsA, InputFieldsB ){
var AFields = [ ]
var BFields = [ ]
for ( var i = 'name' in InputFieldsA ){
return Push( AFields, InputFieldsA[ i ] )
}
for ( var i = 'name' in InputFieldsB ){
return Push( BFields, InputFieldsB[ i ] )
}
for ( var Fieldname in BFields ){
var FieldnameIndex = IndexOf( AFields, InputFieldsB[ Fieldname ] )
if ( Includes( AFields, InputFieldsB[ Fieldname ] ) == False ){
return Erase( AFields, FieldnameIndex )
}
}
}
// Current date
var CurrentYear = Year( Date( Now() ) )
// Inspection year and date
var InspectedYear = $feature.FieldYear
var InspectedDate = $feature.FieldDate
// Inspection record table
var InspectionRecords = FeatureSetByName( $datastore, "Featureclass", ['*'] )
Console( InspectionRecords )
// Get array of recorded inspection year and get only unique years in descending order
var RecordedDates = FeatureSetByName( $datastore, "Table", ['InspectionDate'] )
var RecordedYears = Max( Year( RecordedDates ) )
// Get the matching fieldnames that exist in both features
var InspectionRecordSchema = Schema( InspectionRecords ).fields
var MatchingFieldnames = ValidateFieldNames( InspectionRecords, $feature )
// Loop through the update items to create a concatenated text value of items
// to create a single text line of dictionary values
var UpdateItems = NULL
for ( var field in MatchingFieldnames ){
var ConcatText = Concatenate( field, ' : ', $feature[ field ] )
iif ( UpdateItems == NUll, UpdateItems == ConcatText, Concatenate( UpdateItems, ',', ConcatText ) )
}
var UpdateItems = Dictionary( UpdateItems )
// If the current inspection year in the inspected hydrant layer
// is not in the inspection records table. Then add the record to
// the inspection table
if ( CurrentYear == InspectedYear && InspectedYear >= RecordedYears ){
return {
'result' : InspectedDate,
'edit': [
{
'classname' : "Featureclass",
'adds' : [
{
'objectID': $feature.ObjectID,
'attributes' : UpdateItems
}
]
}
]
}
}
Any help with this would be greatly appreciated?
Never mind. I finally figured out a solution which works really well.