stringerrorMessage=awaitQueuedTask.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){returnex.Message;}return"";});if(!string.IsNullOrEmpty(errorMessage))MessageBox.Show(errorMessage,"Get Active Record.");
Set the active record
stringerrorMessage=awaitQueuedTask.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=awaitmyParcelFabricLayer.SetActiveRecordAsync(sExistingRecord);if(!bSuccess)return"No record called "+sExistingRecord+" was found.";}catch(Exceptionex){returnex.Message;}return"";});if(!string.IsNullOrEmpty(errorMessage))MessageBox.Show(errorMessage,"Set Active Record.");
Create a new record
stringerrorMessage=awaitQueuedTask.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=awaitmyParcelFabricLayer.GetRecordsLayerAsync();vareditOper=newEditOperation(){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())returneditOper.ErrorMessage;vardefOID=-1;varlOid=editRowToken.ObjectID.HasValue?editRowToken.ObjectID.Value:defOID;awaitmyParcelFabricLayer.SetActiveRecordAsync(lOid);}catch(Exceptionex){returnex.Message;}return"";});if(!string.IsNullOrEmpty(errorMessage))MessageBox.Show(errorMessage,"Create New Record.");
Copy standard line features into a parcel type
stringerrorMessage=awaitQueuedTask.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=awaitmyParcelFabricLayer.GetParcelTypeNames();foreach(stringparcelTypeNminparcelTypeNames){varpolygonLyrParcelTypeEnum=awaitmyParcelFabricLayer.GetParcelPolygonLayerByTypeName(parcelTypeNm);foreach(FeatureLayerlyrinpolygonLyrParcelTypeEnum)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=awaitmyParcelFabricLayer.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=newEditOperation(){Name="Copy Line Features To Parcel Type",ProgressMessage="Copy Line Features To Parcel Type...",ShowModalMessageAfterFailure=true,SelectNewFeatures=true,SelectModifiedFeatures=false};varids=newList<long>((srcFeatLyrasFeatureLayer).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())returneditOper.ErrorMessage;}catch(Exceptionex){returnex.Message;}return"";});if(!string.IsNullOrEmpty(errorMessage))MessageBox.Show(errorMessage,"Copy Line Features To Parcel Type.");
Copy parcel lines to a parcel type
stringerrorMessage=awaitQueuedTask.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=awaitmyParcelFabricLayer.GetParcelLineLayerByTypeName(sTargetParcelType);if(destLineLEnum.Count()==0)return"";vardestLineL=destLineLEnum.FirstOrDefault();vardestPolygonLEnum=awaitmyParcelFabricLayer.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=newEditOperation(){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())returneditOper.ErrorMessage;}catch(Exceptionex){returnex.Message;}return"";});if(!string.IsNullOrEmpty(errorMessage))MessageBox.Show(errorMessage,"Copy Parcel Lines To Parcel Type.");
Assign features to active record
stringerrorMessage=awaitQueuedTask.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=newEditOperation(){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())returneditOper.ErrorMessage;}catch(Exceptionex){returnex.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=newEditOperation(){Name="Create Parcel Seeds",ProgressMessage="Create Parcel Seeds...",ShowModalMessageAfterFailure=true,SelectNewFeatures=true,SelectModifiedFeatures=false};editOper.CreateParcelSeedsByRecord(myParcelFabricLayer,guid,MapView.Active.Extent);if(!editOper.Execute())returneditOper.ErrorMessage;}catch(Exceptionex){returnex.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=newEditOperation(){Name="Build Parcels",ProgressMessage="Build Parcels...",ShowModalMessageAfterFailure=true,SelectNewFeatures=true,SelectModifiedFeatures=true};editOper.BuildParcelsByRecord(myParcelFabricLayer,guid);if(!editOper.Execute())returneditOper.ErrorMessage;}catch(Exceptionex){returnex.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=awaitmyParcelFabricLayer.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=awaitmyParcelFabricLayer.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=newEditOperation(){Name="Duplicate Parcels",ProgressMessage="Duplicate Parcels...",ShowModalMessageAfterFailure=true,SelectNewFeatures=true,SelectModifiedFeatures=false};editOper.DuplicateParcels(myParcelFabricLayer,sourceFeatures,theActiveRecord,targetFeatLyr);if(!editOper.Execute())returneditOper.ErrorMessage;}catch(Exceptionex){returnex.Message;}
Set parcels historic
stringerrorMessage=awaitQueuedTask.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=awaitmyParcelFabricLayer.GetParcelTypeNames();foreach(FeatureLayermapFeatLyrinMapView.Active.Map.GetLayersAsFlattenedList().OfType<FeatureLayer>()){foreach(stringParcelTypeinParcelTypesEnum){varlayerEnum=awaitmyParcelFabricLayer.GetParcelPolygonLayerByTypeName(ParcelType);foreach(FeatureLayerflyrinlayerEnum){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=newEditOperation(){Name="Set Parcels Historic",ProgressMessage="Set Parcels Historic...",ShowModalMessageAfterFailure=true,SelectNewFeatures=true,SelectModifiedFeatures=false};editOper.SetParcelHistoryRetired(myParcelFabricLayer,sourceFeatures,theActiveRecord);if(!editOper.Execute())returneditOper.ErrorMessage;}catch(Exceptionex){returnex.Message;}return"";});if(!string.IsNullOrEmpty(errorMessage))MessageBox.Show(errorMessage,"Set Parcels Historic.");
Shrink parcels to seeds
stringerrorMessage=awaitQueuedTask.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=awaitmyParcelFabricLayer.GetParcelTypeNames();foreach(FeatureLayermapFeatLyrinMapView.Active.Map.GetLayersAsFlattenedList().OfType<FeatureLayer>()){foreach(stringParcelTypeinParcelTypesEnum){varlayerEnum=awaitmyParcelFabricLayer.GetParcelPolygonLayerByTypeName(ParcelType);foreach(FeatureLayerflyrinlayerEnum){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=newEditOperation(){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())returneditOper.ErrorMessage;}catch(Exceptionex){returnex.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=newEditOperation(){Name="Change Parcel Type",ProgressMessage="Change Parcel Type...",ShowModalMessageAfterFailure=true,SelectNewFeatures=true,SelectModifiedFeatures=false};editOper.ChangeParcelType(myParcelFabricLayer,sourceFeatures,targetFeatLyr);if(!editOper.Execute())returneditOper.ErrorMessage;}catch(Exceptionex){returnex.Message;}return"";
Get parcel type name from feature layer
privateasyncTask<string>GetParcelTypeNameFromFeatureLayer(ParcelLayermyParcelFabricLayer,FeatureLayerfeatLayer,GeometryTypegeomType){if(featLayer==null)//nothing to do, return empty stringreturnString.Empty;IEnumerable<string>parcelTypeNames=awaitmyParcelFabricLayer.GetParcelTypeNames();foreach(stringparcelTypeNameinparcelTypeNames){if(geomType==GeometryType.Polygon){varpolygonLyrParcelTypeEnum=awaitmyParcelFabricLayer.GetParcelPolygonLayerByTypeName(parcelTypeName);foreach(FeatureLayerlyrinpolygonLyrParcelTypeEnum)if(lyr==featLayer)returnparcelTypeName;polygonLyrParcelTypeEnum=awaitmyParcelFabricLayer.GetHistoricParcelPolygonLayerByTypeName(parcelTypeName);foreach(FeatureLayerlyrinpolygonLyrParcelTypeEnum)if(lyr==featLayer)returnparcelTypeName;}if(geomType==GeometryType.Polyline){varlineLyrParcelTypeEnum=awaitmyParcelFabricLayer.GetParcelLineLayerByTypeName(parcelTypeName);foreach(FeatureLayerlyrinlineLyrParcelTypeEnum)if(lyr==featLayer)returnparcelTypeName;lineLyrParcelTypeEnum=awaitmyParcelFabricLayer.GetHistoricParcelLineLayerByTypeName(parcelTypeName);foreach(FeatureLayerlyrinlineLyrParcelTypeEnum)if(lyr==featLayer)returnparcelTypeName;}}returnString.Empty;}