stringerrorMessage=await QueuedTask.Run(()=>{try{varmyParcelFabricLayer= MapView.Active.Map.GetLayersAsFlattenedList().OfType<ParcelLayer>().FirstOrDefault();//if there is no fabric in the map then bailif(myParcelFabricLayer==null)return"There is no fabric in the map.";vartheActiveRecord= myParcelFabricLayer.GetActiveRecord();if(theActiveRecord==null)return"There is no Active Record. Please set the active record and try again.";}catch(Exceptionex){return ex.Message;}return"";});if(!string.IsNullOrEmpty(errorMessage))
MessageBox.Show(errorMessage,"Get Active Record.");
Set the active record
stringerrorMessage=await QueuedTask.Run(async()=>{try{stringsExistingRecord="MyRecordName";varmyParcelFabricLayer= MapView.Active.Map.GetLayersAsFlattenedList().OfType<ParcelLayer>().FirstOrDefault();//if there is no fabric in the map then bailif(myParcelFabricLayer==null)return"There is no fabric in the map.";boolbSuccess=await myParcelFabricLayer.SetActiveRecordAsync(sExistingRecord);if(!bSuccess)return"No record called "+sExistingRecord+" was found.";}catch(Exceptionex){return ex.Message;}return"";});if(!string.IsNullOrEmpty(errorMessage))
MessageBox.Show(errorMessage,"Set Active Record.");
Create a new record
stringerrorMessage=await QueuedTask.Run(async()=>{Dictionary<string,object>RecordAttributes=newDictionary<string,object>();stringsNewRecord="MyRecordName";try{varmyParcelFabricLayer= MapView.Active.Map.GetLayersAsFlattenedList().OfType<ParcelLayer>().FirstOrDefault();//if there is no fabric in the map then bailif(myParcelFabricLayer==null)return"There is no fabric in the map.";varrecordsLayer=await myParcelFabricLayer.GetRecordsLayerAsync();vareditOper=new EditOperation(){Name="Create Parcel Fabric Record",ProgressMessage="Create Parcel Fabric Record...",ShowModalMessageAfterFailure=true,SelectNewFeatures=false,SelectModifiedFeatures=false}; RecordAttributes.Add("Name", sNewRecord);vareditRowToken= editOper.Create(recordsLayer.FirstOrDefault(), RecordAttributes);if(!editOper.Execute())return editOper.ErrorMessage;vardefOID=-1;varlOid= editRowToken.ObjectID.HasValue ? editRowToken.ObjectID.Value :defOID;await myParcelFabricLayer.SetActiveRecordAsync(lOid);}catch(Exceptionex){return ex.Message;}return"";});if(!string.IsNullOrEmpty(errorMessage))
MessageBox.Show(errorMessage,"Create New Record.");
Copy standard line features into a parcel type
stringerrorMessage=await QueuedTask.Run(async()=>{// check for selected layerif(MapView.Active.GetSelectedLayers().Count ==0)return"Please select a target parcel polygon layer in the table of contents.";//get the feature layer that's selected in the table of contentsvardestPolygonL= MapView.Active.GetSelectedLayers().OfType<FeatureLayer>().FirstOrDefault();try{varmyParcelFabricLayer= MapView.Active.Map.GetLayersAsFlattenedList().OfType<ParcelLayer>().FirstOrDefault();//if there is no fabric in the map then bailif(myParcelFabricLayer==null)return"There is no fabric in the map.";varpRec= myParcelFabricLayer.GetActiveRecord();if(pRec==null)return"There is no Active Record. Please set the active record and try again.";stringParcelTypeName="";IEnumerable<string>parcelTypeNames=await myParcelFabricLayer.GetParcelTypeNamesAsync();foreach(string parcelTypeNm in parcelTypeNames){varpolygonLyrParcelTypeEnum=await myParcelFabricLayer.GetParcelPolygonLayerByTypeNameAsync(parcelTypeNm);foreach(FeatureLayer lyr in polygonLyrParcelTypeEnum)if(lyr==destPolygonL){ParcelTypeName=parcelTypeNm;break;}}if(String.IsNullOrEmpty(ParcelTypeName))return"Please select a target parcel polygon layer in the table of contents.";varsrcFeatLyr= MapView.Active.Map.GetLayersAsFlattenedList().OfType<FeatureLayer>().FirstOrDefault(l => l.Name.Contains("MySourceLines")&& l.IsVisible);if(srcFeatLyr==null)return"Looking for a layer named 'MySourceLines' in the table of contents.";//now get the line layer for this parcel typevardestLineLyrEnum=await myParcelFabricLayer.GetParcelLineLayerByTypeNameAsync(ParcelTypeName);if(destLineLyrEnum.Count()==0)//make sure there is one in the mapreturnParcelTypeName+" not found.";vardestLineL= destLineLyrEnum.FirstOrDefault();if(destLineL==null||destPolygonL==null)return"";vareditOper=new EditOperation(){Name="Copy Line Features To Parcel Type",ProgressMessage="Copy Line Features To Parcel Type...",ShowModalMessageAfterFailure=true,SelectNewFeatures=true,SelectModifiedFeatures=false};varids=newList<long>((srcFeatLyr as FeatureLayer).GetSelection().GetObjectIDs());if(ids.Count ==0)return"No selected lines were found. Please select line features and try again."; editOper.CopyLineFeaturesToParcelType(srcFeatLyr, ids, destLineL, destPolygonL);if(!editOper.Execute())return editOper.ErrorMessage;}catch(Exceptionex){return ex.Message;}return"";});if(!string.IsNullOrEmpty(errorMessage))
MessageBox.Show(errorMessage,"Copy Line Features To Parcel Type.");
Copy parcel lines to a parcel type
stringerrorMessage=await QueuedTask.Run(async()=>{// check for selected layerif(MapView.Active.GetSelectedLayers().Count ==0)return"Please select a source parcel polygon feature layer in the table of contents.";try{varmyParcelFabricLayer= MapView.Active.Map.GetLayersAsFlattenedList().OfType<ParcelLayer>().FirstOrDefault();if(myParcelFabricLayer==null)return"No parcel layer found in the map.";//get the feature layer that's selected in the table of contentsvarsrcParcelFeatLyr= MapView.Active.GetSelectedLayers().OfType<FeatureLayer>().FirstOrDefault();stringsTargetParcelType="Tax";vardestLineLEnum=await myParcelFabricLayer.GetParcelLineLayerByTypeNameAsync(sTargetParcelType);if(destLineLEnum.Count()==0)return"";vardestLineL= destLineLEnum.FirstOrDefault();vardestPolygonLEnum=await myParcelFabricLayer.GetParcelPolygonLayerByTypeNameAsync(sTargetParcelType);if(destPolygonLEnum.Count()==0)return"";vardestPolygonL= destPolygonLEnum.FirstOrDefault();if(destLineL==null||destPolygonL==null)return"";vartheActiveRecord= myParcelFabricLayer.GetActiveRecord();if(theActiveRecord==null)return"There is no Active Record. Please set the active record and try again.";vareditOper=new EditOperation(){Name="Copy Lines To Parcel Type",ProgressMessage="Copy Lines To Parcel Type ...",ShowModalMessageAfterFailure=true,SelectNewFeatures=true,SelectModifiedFeatures=false};varids=newList<long>(srcParcelFeatLyr.GetSelection().GetObjectIDs());if(ids.Count ==0)return"No selected parcels found. Please select parcels and try again.";//add the standard feature line layers source, and their feature ids to a new DictionaryvarsourceParcelFeatures=newDictionary<MapMember,List<long>>(); sourceParcelFeatures.Add(srcParcelFeatLyr, ids); editOper.CopyParcelLinesToParcelType(myParcelFabricLayer, SelectionSet.FromDictionary(sourceParcelFeatures), destLineL, destPolygonL,true,false,true);if(!editOper.Execute())return editOper.ErrorMessage;}catch(Exceptionex){return ex.Message;}return"";});if(!string.IsNullOrEmpty(errorMessage))
MessageBox.Show(errorMessage,"Copy Parcel Lines To Parcel Type.");
Assign features to active record
stringerrorMessage=await QueuedTask.Run(()=>{//check for selected layerif(MapView.Active.GetSelectedLayers().Count ==0)return"Please select a source feature layer in the table of contents.";//first get the feature layer that's selected in the table of contentsvarsrcFeatLyr= MapView.Active.GetSelectedLayers().OfType<FeatureLayer>().FirstOrDefault();varmyParcelFabricLayer= MapView.Active.Map.GetLayersAsFlattenedList().OfType<ParcelLayer>().FirstOrDefault();if(myParcelFabricLayer==null)return"No parcel layer found in the map.";try{vartheActiveRecord= myParcelFabricLayer.GetActiveRecord();if(theActiveRecord==null)return"There is no Active Record. Please set the active record and try again.";vareditOper=new EditOperation(){Name="Assign Features to Record",ProgressMessage="Assign Features to Record...",ShowModalMessageAfterFailure=true,SelectNewFeatures=true,SelectModifiedFeatures=false};//add parcel type layers and their feature ids to a new Dictionaryvarids=newList<long>(srcFeatLyr.GetSelection().GetObjectIDs());varsourceFeatures=newDictionary<MapMember,List<long>>(); sourceFeatures.Add(srcFeatLyr, ids); editOper.AssignFeaturesToRecord(myParcelFabricLayer, SelectionSet.FromDictionary(sourceFeatures), theActiveRecord);if(!editOper.Execute())return editOper.ErrorMessage;}catch(Exceptionex){return ex.Message;}return"";});if(!string.IsNullOrEmpty(errorMessage))
MessageBox.Show(errorMessage,"Assign Features To Record.");
Create parcel seeds
try{vartheActiveRecord= myParcelFabricLayer.GetActiveRecord();if(theActiveRecord==null)return"There is no Active Record. Please set the active record and try again.";varguid= theActiveRecord.Guid;vareditOper=new EditOperation(){Name="Create Parcel Seeds",ProgressMessage="Create Parcel Seeds...",ShowModalMessageAfterFailure=true,SelectNewFeatures=true,SelectModifiedFeatures=false};
editOper.CreateParcelSeedsByRecord(myParcelFabricLayer, guid, MapView.Active.Extent);if(!editOper.Execute())return editOper.ErrorMessage;}catch(Exceptionex){return ex.Message;}return"";
Build parcels
try{varmyParcelFabricLayer= MapView.Active.Map.GetLayersAsFlattenedList().OfType<ParcelLayer>().FirstOrDefault();if(myParcelFabricLayer==null)return"Parcel layer not found in map.";vartheActiveRecord= myParcelFabricLayer.GetActiveRecord();varguid= theActiveRecord.Guid;vareditOper=new EditOperation(){Name="Build Parcels",ProgressMessage="Build Parcels...",ShowModalMessageAfterFailure=true,SelectNewFeatures=true,SelectModifiedFeatures=true};
editOper.BuildParcelsByRecord(myParcelFabricLayer, guid);if(!editOper.Execute())return editOper.ErrorMessage;}catch(Exceptionex){return ex.Message;}return"";
Duplicate parcels
varmyParcelFabricLayer= MapView.Active.Map.GetLayersAsFlattenedList().OfType<ParcelLayer>().FirstOrDefault();if(myParcelFabricLayer==null)return"Parecl layer not found in the map.";//get the source polygon layer from the parcel fabric layer type, in this case a layer called LotvarsrcFeatLyrEnum=await myParcelFabricLayer.GetParcelPolygonLayerByTypeNameAsync("Lot");if(srcFeatLyrEnum.Count()==0)return"";varsourcePolygonL= srcFeatLyrEnum.FirstOrDefault();//get the target polygon layer from the parcel fabric layer type, in this case a layer called TaxvartargetFeatLyrEnum=await myParcelFabricLayer.GetParcelPolygonLayerByTypeNameAsync("Tax");if(targetFeatLyrEnum.Count()==0)return"";vartargetFeatLyr= targetFeatLyrEnum.FirstOrDefault();varids=newList<long>(sourcePolygonL.GetSelection().GetObjectIDs());if(ids.Count ==0)return"No selected parcels found. Please select parcels and try again.";//add polygon layers and the feature ids to be duplicated to a new DictionaryvarsourceFeatures=newDictionary<MapMember,List<long>>();
sourceFeatures.Add(sourcePolygonL, ids);try{vartheActiveRecord= myParcelFabricLayer.GetActiveRecord();if(theActiveRecord==null)return"There is no Active Record. Please set the active record and try again.";vareditOper=new EditOperation(){Name="Duplicate Parcels",ProgressMessage="Duplicate Parcels...",ShowModalMessageAfterFailure=true,SelectNewFeatures=true,SelectModifiedFeatures=false};
editOper.DuplicateParcels(myParcelFabricLayer,
SelectionSet.FromDictionary(sourceFeatures), theActiveRecord, targetFeatLyr);if(!editOper.Execute())return editOper.ErrorMessage;}catch(Exceptionex){return ex.Message;}
Set parcels historic
stringerrorMessage=await QueuedTask.Run(async()=>{varmyParcelFabricLayer= MapView.Active.Map.GetLayersAsFlattenedList().OfType<ParcelLayer>().FirstOrDefault();if(myParcelFabricLayer==null)return"Please add a parcel fabric to the map";try{FeatureLayerdestPolygonL=null;//find the first layer that is a parcel type, is non-historic, and has a selectionboolbFound=false;varParcelTypesEnum=await myParcelFabricLayer.GetParcelTypeNamesAsync();foreach(FeatureLayer mapFeatLyr in MapView.Active.Map.GetLayersAsFlattenedList().OfType<FeatureLayer>()){foreach(string ParcelType in ParcelTypesEnum){varlayerEnum=await myParcelFabricLayer.GetParcelPolygonLayerByTypeNameAsync(ParcelType);foreach(FeatureLayer flyr in layerEnum){if(flyr==mapFeatLyr){bFound= mapFeatLyr.SelectionCount >0;destPolygonL=mapFeatLyr;break;}}if(bFound)break;}if(bFound)break;}if(!bFound)return"Please select parcels to set as historic.";vartheActiveRecord= myParcelFabricLayer.GetActiveRecord();if(theActiveRecord==null)return"There is no Active Record. Please set the active record and try again.";varids=newList<long>(destPolygonL.GetSelection().GetObjectIDs());//can do multi layer selection but using single per code abovevarsourceFeatures=newDictionary<MapMember,List<long>>(); sourceFeatures.Add(destPolygonL, ids);vareditOper=new EditOperation(){Name="Set Parcels Historic",ProgressMessage="Set Parcels Historic...",ShowModalMessageAfterFailure=true,SelectNewFeatures=true,SelectModifiedFeatures=false}; editOper.SetParcelHistoryRetired(myParcelFabricLayer, SelectionSet.FromDictionary(sourceFeatures), theActiveRecord);if(!editOper.Execute())return editOper.ErrorMessage;}catch(Exceptionex){return ex.Message;}return"";});if(!string.IsNullOrEmpty(errorMessage))
MessageBox.Show(errorMessage,"Set Parcels Historic.");
Shrink parcels to seeds
stringerrorMessage=await QueuedTask.Run(async()=>{varmyParcelFabricLayer= MapView.Active.Map.GetLayersAsFlattenedList().OfType<ParcelLayer>().FirstOrDefault();if(myParcelFabricLayer==null)return"Please add a parcel fabric to the map";try{FeatureLayerparcelPolygonLyr=null;//find the first layer that is a polygon parcel type, is non-historic, and has a selectionboolbFound=false;varParcelTypesEnum=await myParcelFabricLayer.GetParcelTypeNamesAsync();foreach(FeatureLayer mapFeatLyr in MapView.Active.Map.GetLayersAsFlattenedList().OfType<FeatureLayer>()){foreach(string ParcelType in ParcelTypesEnum){varlayerEnum=await myParcelFabricLayer.GetParcelPolygonLayerByTypeNameAsync(ParcelType);foreach(FeatureLayer flyr in layerEnum){if(flyr==mapFeatLyr){bFound= mapFeatLyr.SelectionCount >0;parcelPolygonLyr=mapFeatLyr;break;}}if(bFound)break;}if(bFound)break;}if(!bFound)return"Please select parcels to shrink to seeds.";vareditOper=new EditOperation(){Name="Shrink Parcels To Seeds",ProgressMessage="Shrink Parcels To Seeds...",ShowModalMessageAfterFailure=true,SelectNewFeatures=true,SelectModifiedFeatures=false};varids=newList<long>(parcelPolygonLyr.GetSelection().GetObjectIDs());varsourceParcelFeatures=newDictionary<MapMember,List<long>>(); sourceParcelFeatures.Add(parcelPolygonLyr, ids); editOper.ShrinkParcelsToSeeds(myParcelFabricLayer, SelectionSet.FromDictionary(sourceParcelFeatures));if(!editOper.Execute())return editOper.ErrorMessage;}catch(Exceptionex){return ex.Message;}return"";});if(!string.IsNullOrEmpty(errorMessage))
MessageBox.Show(errorMessage,"Shrink Parcels To Seeds.");
Change parcel type
//add polygon layers and the feature ids to change the type on to a new Dictionaryvarids=newList<long>(sourcePolygonL.GetSelection().GetObjectIDs());varsourceFeatures=newDictionary<MapMember,List<long>>();
sourceFeatures.Add(sourcePolygonL, ids);try{vareditOper=new EditOperation(){Name="Change Parcel Type",ProgressMessage="Change Parcel Type...",ShowModalMessageAfterFailure=true,SelectNewFeatures=true,SelectModifiedFeatures=false};
editOper.ChangeParcelType(myParcelFabricLayer, SelectionSet.FromDictionary(sourceFeatures), targetFeatLyr);if(!editOper.Execute())return editOper.ErrorMessage;}catch(Exceptionex){return ex.Message;}return"";
Get parcel features
stringsReportResult="Polygon Information --"+ Environment.NewLine;stringsParcelTypeName="tax";stringerrorMessage=await QueuedTask.Run(async()=>{varmyParcelFabricLayer= MapView.Active.Map.GetLayersAsFlattenedList().OfType<ParcelLayer>().FirstOrDefault();//if there is no fabric in the map then bailif(myParcelFabricLayer==null)return"There is no fabric layer in the map.";//first get the parcel type feature layervarfeatSrcLyr= myParcelFabricLayer.GetParcelPolygonLayerByTypeNameAsync(sParcelTypeName).Result.FirstOrDefault();if(featSrcLyr.SelectionCount ==0)return"There is no selection on the "+sParcelTypeName+" layer.";sReportResult+=" Parcel Type: "+sParcelTypeName+ Environment.NewLine;sReportResult+=" Poygons: "+ featSrcLyr.SelectionCount + Environment.NewLine + Environment.NewLine;try{// ------- get the selected parcels ---------varids=newList<long>((featSrcLyr as FeatureLayer).GetSelection().GetObjectIDs());varsourceParcels=newDictionary<MapMember,List<long>>(); sourceParcels.Add(featSrcLyr, ids);//---------------------------------------------ParcelFeaturesparcFeatures=await myParcelFabricLayer.GetParcelFeaturesAsync(SelectionSet.FromDictionary(sourceParcels));//since we know that we want to report on Tax lines only, and for this functionality // we can use any of the Tax line layer instances (if there happens to be more than one)// we can get the first instance as followsFeatureLayermyLineFeatureLyr= myParcelFabricLayer.GetParcelLineLayerByTypeNameAsync(sParcelTypeName).Result.FirstOrDefault();if(myLineFeatureLyr==null)returnsParcelTypeName+" line layer not found";FeatureLayermyPointFeatureLyr= myParcelFabricLayer.GetPointsLayerAsync().Result.FirstOrDefault();if(myPointFeatureLyr==null)return"fabric point layer not found";varLineInfo= parcFeatures.Lines;//then get the line information from the parcel features object//... and then do some work for each of the linesintiRadiusAttributeCnt=0;intiDistanceAttributeCnt=0;sReportResult+="Line Information --";foreach(KeyValuePair<string,List<long>> kvp in LineInfo){if(kvp.Key.ToLower()!=sParcelTypeName)continue;// ignore any other lines from different parcel typesforeach(long oid in kvp.Value){varinsp= myLineFeatureLyr.Inspect(oid);vardRadius= insp["RADIUS"];vardDistance= insp["DISTANCE"];if(dRadius!= DBNull.Value)iRadiusAttributeCnt++;if(dDistance!= DBNull.Value)iDistanceAttributeCnt++;//Polyline poly = (Polyline)insp["SHAPE"];}sReportResult+= Environment.NewLine +" Distance attributes: "+ iDistanceAttributeCnt.ToString();sReportResult+= Environment.NewLine +" Radius attributes: "+ iRadiusAttributeCnt.ToString();}varPointInfo= parcFeatures.Points;//get the point information from the parcel features object//... and then do some work for each of the pointssReportResult+= Environment.NewLine + Environment.NewLine +"Point Information --";intiFixedPointCnt=0;intiNonFixedPointCnt=0;foreach(long oid in PointInfo){varinsp= myPointFeatureLyr.Inspect(oid);varisFixed= insp["ISFIXED"];if(isFixed== DBNull.Value ||(int)isFixed ==0)iNonFixedPointCnt++;elseiFixedPointCnt++;// var pt = insp["SHAPE"];}sReportResult+= Environment.NewLine +" Fixed Points: "+ iFixedPointCnt.ToString();sReportResult+= Environment.NewLine +" Non-Fixed Points: "+ iNonFixedPointCnt.ToString();}catch(Exceptionex){return ex.Message;}return"";});if(!string.IsNullOrEmpty(errorMessage))
MessageBox.Show(errorMessage,"Get Parcel Features");else
MessageBox.Show(sReportResult,"Get Parcel Features");
Get parcel fabric dataset controller from parcel layer
stringerrorMessage=await QueuedTask.Run(()=>{try{varmyParcelFabricLayer= MapView.Active.Map.GetLayersAsFlattenedList().OfType<ParcelLayer>().FirstOrDefault();//if there is no fabric in the map then bailif(myParcelFabricLayer==null)return"There is no fabric in the map.";varmyParcelFabricDataset= myParcelFabricLayer.GetParcelFabric();}catch(Exceptionex){return ex.Message;}return"";});if(!string.IsNullOrEmpty(errorMessage))
MessageBox.Show(errorMessage,"Get Parcel Fabric Dataset from layer.");
Get parcel topology of parcel fabric dataset
stringerrorMessage=await QueuedTask.Run(()=>{try{varmyParcelFabricLayer= MapView.Active.Map.GetLayersAsFlattenedList().OfType<ParcelLayer>().FirstOrDefault();//if there is no fabric in the map then bailif(myParcelFabricLayer==null)return"There is no fabric in the map.";varmyParcelFabricDataset= myParcelFabricLayer.GetParcelFabric();varmyTopology= myParcelFabricDataset.GetParcelTopology();}catch(Exceptionex){return ex.Message;}return"";});if(!string.IsNullOrEmpty(errorMessage))
MessageBox.Show(errorMessage,"Get Parcel Fabric Topology.");
Get point, connection, and record feature classes from the parcel fabric dataset
stringerrorMessage=await QueuedTask.Run(()=>{try{varmyParcelFabricLayer= MapView.Active.Map.GetLayersAsFlattenedList().OfType<ParcelLayer>().FirstOrDefault();//if there is no fabric in the map then bailif(myParcelFabricLayer==null)return"There is no fabric in the map.";varmyParcelFabricDataset= myParcelFabricLayer.GetParcelFabric();FeatureClassmyPointsFC= myParcelFabricDataset.GetSystemTable(SystemTableType.Points)as FeatureClass;FeatureClassmyCoonectionsFC= myParcelFabricDataset.GetSystemTable(SystemTableType.Connections)as FeatureClass;FeatureClassmyRecordsFC= myParcelFabricDataset.GetSystemTable(SystemTableType.Records)as FeatureClass;}catch(Exceptionex){return ex.Message;}return"";});if(!string.IsNullOrEmpty(errorMessage))
MessageBox.Show(errorMessage,"Get point, connection, and record feature classes.");
Get parcel type feature classes from the parcel fabric dataset
stringerrorMessage=await QueuedTask.Run(()=>{try{varmyParcelFabricLayer= MapView.Active.Map.GetLayersAsFlattenedList().OfType<ParcelLayer>().FirstOrDefault();//if there is no fabric in the map then bailif(myParcelFabricLayer==null)return"There is no fabric in the map.";stringmyParcelTypeName="Tax";varmyParcelFabricDataset= myParcelFabricLayer.GetParcelFabric();vartypeInfo= myParcelFabricDataset.GetParcelTypeInfo();FeatureClasslineFCType=null;FeatureClasspolyFCType=null;foreach(var info in typeInfo){if(info.Name.ToLower()== myParcelTypeName.ToLower()){lineFCType= info.LineFeatureTable as FeatureClass;polyFCType= info.PolygonFeatureTable as FeatureClass;break;}}}catch(Exceptionex){return ex.Message;}return"";});if(!string.IsNullOrEmpty(errorMessage))
MessageBox.Show(errorMessage,"Get Parcel Type feature classes.");
Get parcel type name from feature layer
privateasyncTask<string>GetParcelTypeNameFromFeatureLayer(ParcelLayermyParcelFabricLayer,FeatureLayerfeatLayer,GeometryTypegeomType){if(featLayer==null)//nothing to do, return empty stringreturn String.Empty;IEnumerable<string>parcelTypeNames=await myParcelFabricLayer.GetParcelTypeNamesAsync();foreach(string parcelTypeName in parcelTypeNames){if(geomType== GeometryType.Polygon){varpolygonLyrParcelTypeEnum=await myParcelFabricLayer.GetParcelPolygonLayerByTypeNameAsync(parcelTypeName);foreach(FeatureLayer lyr in polygonLyrParcelTypeEnum)if(lyr==featLayer)returnparcelTypeName;polygonLyrParcelTypeEnum=await myParcelFabricLayer.GetHistoricParcelPolygonLayerByTypeNameAsync(parcelTypeName);foreach(FeatureLayer lyr in polygonLyrParcelTypeEnum)if(lyr==featLayer)returnparcelTypeName;}if(geomType== GeometryType.Polyline){varlineLyrParcelTypeEnum=await myParcelFabricLayer.GetParcelLineLayerByTypeNameAsync(parcelTypeName);foreach(FeatureLayer lyr in lineLyrParcelTypeEnum)if(lyr==featLayer)returnparcelTypeName;lineLyrParcelTypeEnum=await myParcelFabricLayer.GetHistoricParcelLineLayerByTypeNameAsync(parcelTypeName);foreach(FeatureLayer lyr in lineLyrParcelTypeEnum)if(lyr==featLayer)returnparcelTypeName;}}return String.Empty;}
Get parcel fabric from table
publicstatic ParcelFabric GetParcelFabricFromTable(Tabletable){ParcelFabricmyParcelFabricDataset=null;if(table.IsControllerDatasetSupported()){// Tables can belong to multiple controller datasets, but at most one of them will be a parcel fabricIReadOnlyList<Dataset>controllerDatasets= table.GetControllerDatasets();foreach(Dataset controllerDataset in controllerDatasets){if(controllerDataset is ParcelFabric){myParcelFabricDataset= controllerDataset as ParcelFabric;}else{
controllerDataset.Dispose();}}}returnmyParcelFabricDataset;}