public static DomainSubtypeLookup GetDomainSubTypeLookup(Layer layer, FieldInfo field) { if (field.DomainSubtypeLookup != DomainSubtypeLookup.NotDefined) { return(field.DomainSubtypeLookup); } ESRI.ArcGIS.Client.FeatureLayer featureLayer = layer as ESRI.ArcGIS.Client.FeatureLayer; if (featureLayer == null) { field.DomainSubtypeLookup = DomainSubtypeLookup.None; return(field.DomainSubtypeLookup); } ESRI.ArcGIS.Client.FeatureService.FeatureLayerInfo featureLayerInfo = featureLayer.LayerInfo; if (featureLayerInfo != null) { Client.Field f = GetField(field.Name, featureLayerInfo.Fields); field.DomainSubtypeLookup = GetDomainSubTypeLookup(featureLayerInfo, f); } return(field.DomainSubtypeLookup); }
public static Core.FieldInfo FieldInfoFromField(Layer layer, Client.Field field) { ESRI.ArcGIS.Mapping.Core.FieldInfo fieldInfo = new ESRI.ArcGIS.Mapping.Core.FieldInfo() { DisplayName = field.Alias, AliasOnServer = field.Alias, FieldType = mapFieldType(field.Type), Name = field.Name, VisibleInAttributeDisplay = true, VisibleOnMapTip = true, }; ESRI.ArcGIS.Client.FeatureLayer featureLayer = layer as ESRI.ArcGIS.Client.FeatureLayer; if (featureLayer != null) { ESRI.ArcGIS.Client.FeatureService.FeatureLayerInfo featureLayerInfo = featureLayer.LayerInfo; if (featureLayerInfo != null) { fieldInfo.DomainSubtypeLookup = GetDomainSubTypeLookup(featureLayerInfo, field); } } return(fieldInfo); }
public static DomainSubtypeLookup GetDomainSubTypeLookup(FeatureLayerInfo featureLayerInfo, Client.Field field) { DomainSubtypeLookup lookup = DomainSubtypeLookup.None; if (featureLayerInfo != null) { Client.Field f = GetField(field.Name, featureLayerInfo.Fields); //Field has domain if (f != null && f.Domain is CodedValueDomain) { lookup = DomainSubtypeLookup.FieldDomain; } //field is type id field else if (featureLayerInfo.TypeIdField == field.Name) { lookup = DomainSubtypeLookup.TypeIdField; } //feature type defines domain for field else if (featureLayerInfo.FeatureTypes != null) { foreach (KeyValuePair <object, FeatureType> fTypePair in featureLayerInfo.FeatureTypes) { if (fTypePair.Value != null && fTypePair.Value.Domains != null) { foreach (KeyValuePair <string, Domain> pair in fTypePair.Value.Domains) { if (pair.Key.Equals(field.Name) && pair.Value is CodedValueDomain) { lookup = DomainSubtypeLookup.FeatureTypeDomain; break; } } } } } } return(lookup); }
public static object GetDomainValue(FeatureLayer featureLayer, IDictionary <string, object> attibutes, FieldInfo field) { object originalValue = string.Empty; string fieldName = string.Empty; if (featureLayer == null) { return(originalValue); } if (field != null) { fieldName = field.Name; } if (attibutes != null) { originalValue = attibutes[field.Name]; if (originalValue == null) { if (attibutes.ContainsKey(field.DisplayName)) { fieldName = field.DisplayName; originalValue = attibutes[field.DisplayName]; } else { return(originalValue); } } } if (featureLayer == null) { return(originalValue); } if (field.DomainSubtypeLookup == DomainSubtypeLookup.None || field.DomainSubtypeLookup == DomainSubtypeLookup.NotDefined) { return(originalValue); } ESRI.ArcGIS.Client.FeatureService.FeatureLayerInfo featureLayerInfo = featureLayer.LayerInfo; if (featureLayerInfo == null) { return(originalValue); } IDictionary <object, FeatureType> featureTypes = featureLayerInfo.FeatureTypes; if ((featureTypes == null) && (field.DomainSubtypeLookup != DomainSubtypeLookup.FieldDomain)) { return(originalValue); } if (attibutes == null) { return(originalValue); } string domainCodedValue = string.Empty; object typeIdValue = null; switch (field.DomainSubtypeLookup) { case DomainSubtypeLookup.NotDefined: case DomainSubtypeLookup.None: break; case DomainSubtypeLookup.FieldDomain: Client.Field f = GetField(field.Name, featureLayerInfo.Fields); if (f == null) { return(originalValue); } return(GetDomainValue(originalValue, f.Domain as CodedValueDomain)); case DomainSubtypeLookup.TypeIdField: if (!attibutes.ContainsKey(featureLayerInfo.TypeIdField)) { return(originalValue); } typeIdValue = attibutes[featureLayerInfo.TypeIdField]; foreach (KeyValuePair <object, FeatureType> item in featureLayerInfo.FeatureTypes) { if (item.Key.Equals(typeIdValue) && item.Value != null) { return(item.Value.Name); } } break; case DomainSubtypeLookup.FeatureTypeDomain: if (!attibutes.ContainsKey(featureLayerInfo.TypeIdField)) { return(originalValue); } typeIdValue = attibutes[featureLayerInfo.TypeIdField]; foreach (KeyValuePair <object, FeatureType> fTypePair in featureLayerInfo.FeatureTypes) { if (fTypePair.Key.Equals(typeIdValue) && fTypePair.Value != null && fTypePair.Value.Domains != null) { foreach (KeyValuePair <string, Domain> pair in fTypePair.Value.Domains) { if (pair.Key.Equals(field.Name) && pair.Value is CodedValueDomain) { return(GetDomainValue(originalValue, pair.Value as CodedValueDomain)); } } } } break; default: break; } return(originalValue); }