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.CreateEx(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.GetParcelTypeNames();foreach(string parcelTypeNm in parcelTypeNames){varpolygonLyrParcelTypeEnum=await myParcelFabricLayer.GetParcelPolygonLayerByTypeName(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.GetParcelLineLayerByTypeName(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.GetParcelLineLayerByTypeName(sTargetParcelType);if(destLineLEnum.Count()==0)return"";vardestLineL= destLineLEnum.FirstOrDefault();vardestPolygonLEnum=await myParcelFabricLayer.GetParcelPolygonLayerByTypeName(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 KeyValuePairvarkvp=newKeyValuePair<MapMember,List<long>>(srcParcelFeatLyr, ids);varsourceParcelFeatures=newList<KeyValuePair<MapMember,List<long>>>{ kvp }; editOper.CopyParcelLinesToParcelType(myParcelFabricLayer, 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 KeyValuePairvarids=newList<long>(srcFeatLyr.GetSelection().GetObjectIDs());varkvp=newKeyValuePair<MapMember,List<long>>(srcFeatLyr, ids);varsourceFeatures=newList<KeyValuePair<MapMember,List<long>>>{ kvp }; editOper.AssignFeaturesToRecord(myParcelFabricLayer, 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.GetParcelPolygonLayerByTypeName("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.GetParcelPolygonLayerByTypeName("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 KeyValuePairvarkvp=newKeyValuePair<MapMember,List<long>>(sourcePolygonL, ids);varsourceFeatures=newList<KeyValuePair<MapMember,List<long>>>{ kvp };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, 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.GetParcelTypeNames();foreach(FeatureLayer mapFeatLyr in MapView.Active.Map.GetLayersAsFlattenedList().OfType<FeatureLayer>()){foreach(string ParcelType in ParcelTypesEnum){varlayerEnum=await myParcelFabricLayer.GetParcelPolygonLayerByTypeName(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 abovevarkvp=newKeyValuePair<MapMember,List<long>>(destPolygonL, ids);varsourceFeatures=newList<KeyValuePair<MapMember,List<long>>>{ kvp };vareditOper=new EditOperation(){Name="Set Parcels Historic",ProgressMessage="Set Parcels Historic...",ShowModalMessageAfterFailure=true,SelectNewFeatures=true,SelectModifiedFeatures=false}; editOper.SetParcelHistoryRetired(myParcelFabricLayer, 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.GetParcelTypeNames();foreach(FeatureLayer mapFeatLyr in MapView.Active.Map.GetLayersAsFlattenedList().OfType<FeatureLayer>()){foreach(string ParcelType in ParcelTypesEnum){varlayerEnum=await myParcelFabricLayer.GetParcelPolygonLayerByTypeName(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());varkvp=newKeyValuePair<MapMember,List<long>>(parcelPolygonLyr, ids);varsourceParcelFeatures=newList<KeyValuePair<MapMember,List<long>>>{ kvp }; editOper.ShrinkParcelsToSeeds(myParcelFabricLayer, 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 KeyValuePairvarids=newList<long>(sourcePolygonL.GetSelection().GetObjectIDs());varkvp=newKeyValuePair<MapMember,List<long>>(sourcePolygonL, ids);varsourceFeatures=newList<KeyValuePair<MapMember,List<long>>>{ kvp };try{vareditOper=new EditOperation(){Name="Change Parcel Type",ProgressMessage="Change Parcel Type...",ShowModalMessageAfterFailure=true,SelectNewFeatures=true,SelectModifiedFeatures=false};
editOper.ChangeParcelType(myParcelFabricLayer, sourceFeatures, targetFeatLyr);if(!editOper.Execute())return editOper.ErrorMessage;}catch(Exceptionex){return ex.Message;}return"";
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.GetParcelTypeNames();foreach(string parcelTypeName in parcelTypeNames){if(geomType== GeometryType.Polygon){varpolygonLyrParcelTypeEnum=await myParcelFabricLayer.GetParcelPolygonLayerByTypeName(parcelTypeName);foreach(FeatureLayer lyr in polygonLyrParcelTypeEnum)if(lyr==featLayer)returnparcelTypeName;polygonLyrParcelTypeEnum=await myParcelFabricLayer.GetHistoricParcelPolygonLayerByTypeName(parcelTypeName);foreach(FeatureLayer lyr in polygonLyrParcelTypeEnum)if(lyr==featLayer)returnparcelTypeName;}if(geomType== GeometryType.Polyline){varlineLyrParcelTypeEnum=await myParcelFabricLayer.GetParcelLineLayerByTypeName(parcelTypeName);foreach(FeatureLayer lyr in lineLyrParcelTypeEnum)if(lyr==featLayer)returnparcelTypeName;lineLyrParcelTypeEnum=await myParcelFabricLayer.GetHistoricParcelLineLayerByTypeName(parcelTypeName);foreach(FeatureLayer lyr in lineLyrParcelTypeEnum)if(lyr==featLayer)returnparcelTypeName;}}return String.Empty;}