private bool CreateJob(ICadastralFabric Fabric, string JobDescription, out string NewJobName) { DateTime localNow = DateTime.Now; string sTime = Convert.ToString(localNow); ICadastralJob pJob = new CadastralJob(); pJob.Name = NewJobName = sTime; pJob.Owner = System.Windows.Forms.SystemInformation.UserName; pJob.Description = JobDescription; try { Int32 jobId = Fabric.CreateJob(pJob); return(true); } catch (COMException ex) { if (ex.ErrorCode == (int)fdoError.FDO_E_CADASTRAL_FABRIC_JOB_ALREADY_EXISTS) { MessageBox.Show("Job named: '" + pJob.Name + "', already exists"); } else { MessageBox.Show(ex.Message); } return(false); } }
public void UpdateCurves(ICadastralFabric pCadFabric, IFeatureClass pFabricLinesFC, IEnumerable<InferredCurve> curvesToUpdate, myProgessor progressor) { IEnumerable<InferredCurve> updateCurves = (from InferredCurve c in curvesToUpdate where c.Action == UpdateAction.Update select c); bool bIsFileBasedGDB = false; bool bIsUnVersioned = false; bool bUseNonVersionedDelete = false; IWorkspace pWS = m_pEd != null ? m_pEd.EditWorkspace : ((IDataset)pFabricLinesFC).Workspace; if (!SetupEditEnvironment(pWS, pCadFabric, m_pEd, out bIsFileBasedGDB, out bIsUnVersioned, out bUseNonVersionedDelete)) { messageBox.Show("The editing environment could not be initialized"); return; } #region Create Cadastral Job string sTime = ""; if (!bIsUnVersioned && !bIsFileBasedGDB) { //see if parcel locks can be obtained on the selected parcels. First create a job. DateTime localNow = DateTime.Now; sTime = Convert.ToString(localNow); ICadastralJob pJob = new CadastralJob(); pJob.Name = sTime; pJob.Owner = System.Windows.Forms.SystemInformation.UserName; pJob.Description = "Convert lines to curves"; try { Int32 jobId = pCadFabric.CreateJob(pJob); } catch (COMException ex) { if (ex.ErrorCode == (int)fdoError.FDO_E_CADASTRAL_FABRIC_JOB_ALREADY_EXISTS) { messageBox.Show("Job named: '" + pJob.Name + "', already exists"); } else { messageBox.Show(ex.Message); } return; } } #endregion #region Test for Edit Locks ICadastralFabricLocks pFabLocks = (ICadastralFabricLocks)pCadFabric; //only need to get locks for parcels that have lines that are to be changed ILongArray affectedParcels = new LongArrayClass(); IFIDSet parcelFIDs = new FIDSet(); foreach (int i in updateCurves.Select(w => w.Parcel).Distinct()) { parcelFIDs.Add(i); affectedParcels.Add(i); } if (!bIsUnVersioned && !bIsFileBasedGDB) { pFabLocks.LockingJob = sTime; ILongArray pLocksInConflict = null; ILongArray pSoftLcksInConflict = null; if (!bIsFileBasedGDB) progressor.setStepProgressorProperties(0, "Testing for edit locks on parcels..."); try { pFabLocks.AcquireLocks(affectedParcels, true, ref pLocksInConflict, ref pSoftLcksInConflict); } catch (COMException pCOMEx) { if (pCOMEx.ErrorCode == (int)fdoError.FDO_E_CADASTRAL_FABRIC_JOB_LOCK_ALREADY_EXISTS || pCOMEx.ErrorCode == (int)fdoError.FDO_E_CADASTRAL_FABRIC_JOB_CURRENTLY_EDITED) { messageBox.Show("Edit Locks could not be acquired on all selected parcels."); // since the operation is being aborted, release any locks that were acquired pFabLocks.UndoLastAcquiredLocks(); } else messageBox.Show(pCOMEx.Message + Environment.NewLine + Convert.ToString(pCOMEx.ErrorCode)); return; } } #endregion if (m_pEd != null && m_pEd.EditState == esriEditState.esriStateEditing) { try { m_pEd.StartOperation(); } catch { m_pEd.AbortOperation();//abort any open edit operations and try again m_pEd.StartOperation(); } } else { //this code is extecuted by the tests, only executed against a file gdb IWorkspaceEdit wsEdit = (IWorkspaceEdit)pWS; wsEdit.StartEditing(false); wsEdit.StartEditOperation(); } if (bUseNonVersionedDelete) { if (!StartEditing(pWS, bIsUnVersioned)) { messageBox.Show("Couldn't start an edit session"); return; } } ICadastralFabricSchemaEdit2 pSchemaEd = (ICadastralFabricSchemaEdit2)pCadFabric; pSchemaEd.ReleaseReadOnlyFields((ITable)pFabricLinesFC, esriCadastralFabricTable.esriCFTLines); //release for edits // m_pEd.StartOperation(); updateValues(updateCurves, progressor, pFabricLinesFC, bIsUnVersioned); ICadastralFabricRegeneration pRegenFabric = new CadastralFabricRegenerator(); #region regenerator enum // enum esriCadastralRegeneratorSetting // esriCadastralRegenRegenerateGeometries = 1 // esriCadastralRegenRegenerateMissingRadials = 2, // esriCadastralRegenRegenerateMissingPoints = 4, // esriCadastralRegenRemoveOrphanPoints = 8, // esriCadastralRegenRemoveInvalidLinePoints = 16, // esriCadastralRegenSnapLinePoints = 32, // esriCadastralRegenRepairLineSequencing = 64, // esriCadastralRegenRepairPartConnectors = 128 // By default, the bitmask member is 0 which will only regenerate geometries. // (equivalent to passing in regeneratorBitmask = 1) #endregion //pRegenFabric.CadastralFabric = pCadFabric; //pRegenFabric.RegeneratorBitmask = 7; //pRegenFabric.RegenerateParcels(parcelFIDs, false, progressor.cancelTracker); if (m_pEd != null) { m_pEd.StopOperation("Insert missing circular arc information."); } else { //this code is extecuted by the tests, only executed against a file gdb IWorkspaceEdit wsEdit = (IWorkspaceEdit)pWS; wsEdit.StartEditOperation(); wsEdit.StopEditing(false); } }
public bool CreateJob(ICadastralFabric Fabric, string JobDescription, out string NewJobName) { DateTime localNow = DateTime.Now; string sTime = Convert.ToString(localNow); ICadastralJob pJob = new CadastralJob(); pJob.Name = NewJobName = sTime; pJob.Owner = System.Windows.Forms.SystemInformation.UserName; pJob.Description = JobDescription; try { Int32 jobId = Fabric.CreateJob(pJob); return true; } catch (COMException ex) { if (ex.ErrorCode == (int)fdoError.FDO_E_CADASTRAL_FABRIC_JOB_ALREADY_EXISTS) { MessageBox.Show("Job named: '" + pJob.Name + "', already exists"); } else { MessageBox.Show(ex.Message); } return false; } }