# # # get_xrefs_data_util.cvf # # # xrefs_get_database_fields_dat() # # xrefs_get_xrefs_group_item_dat() # xrefs_get_xrefs_dat() # # # # # # # xrefs_get_database_fields_dat() # # # subroutine(xrefs_get_database_fields_dat( node database_fields, node database_field_ids), ( # database_field_ids is an empty global node which is populated here like # date_time = f0 # day_of_week = f1 # hours_of_day = f2 # etc. # Ids are part of databaseFieldsDb and used in the xref group fields instead of the database field names. # This handling is shorter and more convenient in the client side. sort(database_fields, "field:label,alphabetical,ascending", true); string dat = "["; if (num_subnodes(database_fields) > 0) then ( node item; string name; string label; string aggregation_method; bool is_aggregating_field; int item_count = 0; string field_id; string item_dat; foreach item database_fields ( name = node_name(item); field_id = "f" . item_count; label = get_field_label(item); aggregation_method = @item{"aggregation_method"}; is_aggregating_field = (aggregation_method ne "none"); item_dat = "{"; item_dat .= add_json("id", field_id, "string"); item_dat .= add_json("name", name, "string"); item_dat .= add_json("label", label, "string"); item_dat .= add_json("isAggregatingField", is_aggregating_field, "bool"); item_dat = close_json(item_dat); dat .= item_dat . ","; # Add name and id to database_field_ids set_subnode_value(database_field_ids, name, field_id); item_count++; ); dat = replace_last(dat, ",", "]"); ) else ( dat .= "]"; ); dat; )); # # # # xrefs_get_xrefs_group_item_dat() # # # subroutine(xrefs_get_xrefs_group_item_dat( node xref_item, node database_field_ids), ( string label = get_expanded_label(@xref_item{"label"}); bool use_flat_table = if (xref_item?{"use_flat_table"}) then (@xref_item{"use_flat_table"}) else (false); node fields = xref_item{"fields"}; string sort_by = if (xref_item?{"sort_by"}) then (@xref_item{"sort_by"}) else (""); string sort_direction = if (xref_item?{"sort_direction"}) then (@xref_item{"sort_direction"}) else (""); node item; string db_field_name; string fields_dat = "["; foreach item fields ( db_field_name = node_name(item); if (database_field_ids?{db_field_name}) then ( fields_dat .= '"' . @database_field_ids{db_field_name} . '",'; ); ); if (fields_dat ne "[") then ( fields_dat = replace_last(fields_dat, ",", "]"); ) else ( fields_dat .= "]"; ); string dat = "{"; dat .= add_json("label", label, "string"); dat .= add_json("use_flat_table", use_flat_table, "bool"); dat .= add_json("fields", fields_dat, "obj"); dat .= add_json("sort_by", sort_by, "string"); dat .= add_json("sort_direction", sort_direction, "string"); dat = close_json(dat); dat; )); # # # # xrefs_get_xrefs_dat() # # # subroutine(xrefs_get_xrefs_dat( node cross_reference_groups, node database_field_ids), ( string dat = "["; if (num_subnodes(cross_reference_groups) > 0) then ( node item; string item_id; bool is_active; string label; string item_dat; string group_item_dat; int item_count = 0; foreach item cross_reference_groups ( item_id = "i" . item_count; is_active = if (item?{"disabled"} and @item{"disabled"}) then (false) else (true); label = get_expanded_label(@item{"label"}); group_item_dat = xrefs_get_xrefs_group_item_dat(item, database_field_ids); item_dat = '{'; item_dat .= add_json("id", item_id, "string"); item_dat .= add_json("type", "", "string"); item_dat .= add_json("switch1", is_active, "bool"); item_dat .= add_json("label", label, "string"); item_dat .= add_json("dat", group_item_dat, "obj"); item_dat = close_json(item_dat); dat .= item_dat . ","; item_count++; ); dat = replace_last(dat, ",", "]"); ) else ( dat .= "]"; ); dat; ));