/// <summary> /// Helper function to create a new instance of the specified type of condition evaluator /// </summary> /// <param name="evalType"></param> /// <returns></returns> private IJTXConditionEvaluator CreateEvaluator(string evalType) { IJTXConditionEvaluator retVal = null; IJTXSpatialNotificationManager snManager = this.WmxDatabase.SpatialNotificationManager; IJTXConditionEvaluatorNameSet allEvaluators = snManager.ConditionEvaluators; // Find the type of evaluator specified for (int i = 0; i < allEvaluators.Count; i++) { IJTXConditionEvaluatorName tempEval = allEvaluators.get_Item(i); if (tempEval.Name.Equals(evalType)) { // Once found, create a new instance of this evaluator retVal = snManager.CreateConditionEvaluator(tempEval); break; } } return(retVal); }
/// <summary> /// Required by IGPFunction2 interface; this function is called when the GP tool is ready to be executed. /// </summary> /// <param name="paramValues"></param> /// <param name="trackCancel"></param> /// <param name="envMgr"></param> /// <param name="msgs"></param> public override void Execute(IArray paramValues, ITrackCancel trackCancel, IGPEnvironmentManager envMgr, IGPMessages msgs) { // Do some common error-checking base.Execute(paramValues, trackCancel, envMgr, msgs); try { // Ensure that the current user has admin access to the current Workflow Manager DB if (!CurrentUserIsWmxAdministrator()) { throw new WmauException(WmauErrorCodes.C_USER_NOT_ADMIN_ERROR); } IJTXSpatialNotificationManager snManager = this.WmxDatabase.SpatialNotificationManager; // Look up the change rule that we'll be modifying IJTXChangeRule2 changeRule = GetChangeRuleByName(m_spatialNotification) as IJTXChangeRule2; IJTXMultiDatasetConditionEvaluator datasetEvaluator = null; // Try to get an existing dataset evaluator if one exists. if (m_tryExistingEvaluator) { IJTXConditionEvaluatorSet allEvaluators = changeRule.Evaluators; for (int i = 0; i < allEvaluators.Count; i++) { IJTXConditionEvaluator tempEval = allEvaluators.get_Item(i); if (tempEval.Name.Equals(C_TYPE_DATASET_EVALUATOR) && tempEval is IJTXMultiDatasetConditionEvaluator) { datasetEvaluator = tempEval as IJTXMultiDatasetConditionEvaluator; break; } } } // If we don't have an evaluator at this point, then we need to create one if (datasetEvaluator == null) { datasetEvaluator = CreateEvaluator(C_TYPE_DATASET_EVALUATOR) as IJTXMultiDatasetConditionEvaluator; datasetEvaluator.DatasetConfigurations = new JTXDatasetConditionConfigurationSetClass(); changeRule.Evaluators.Add(datasetEvaluator as IJTXConditionEvaluator); } // Create a new dataset configuration IJTXDatasetConditionConfiguration datasetCondition = new JTXDatasetConditionConfigurationClass(); datasetCondition.DatabaseID = m_dataWorkspace; datasetCondition.DatasetName = m_featureClass; datasetCondition.ChangeCondition = m_whenToMonitor; datasetCondition.WhereConditions = m_whereClauses; datasetCondition.ChangeFields = m_monitorAllColumns ? "*" : m_columns.Replace(';', ','); datasetCondition.Name = this.WmxDatabase.GetDataWorkspaceName(m_dataWorkspace).Name + "/" + m_featureClass; // Store the configuration in the dataset evaluator datasetEvaluator.DatasetConfigurations.Add(datasetCondition); changeRule.Store(); // Set the output parameter WmauParameterMap paramMap = new WmauParameterMap(paramValues); IGPParameterEdit3 outParamEdit = paramMap.GetParamEdit(C_PARAM_OUT_SPATIAL_NOTIFICATION); IGPString outParamStr = new GPStringClass(); outParamStr.Value = m_spatialNotification; outParamEdit.Value = outParamStr as IGPValue; msgs.AddMessage(Properties.Resources.MSG_DONE); } catch (WmauException wmEx) { try { msgs.AddError(wmEx.ErrorCodeAsInt, wmEx.Message); } catch { // Catch anything else that possibly happens } } catch (Exception ex) { try { WmauError error = new WmauError(WmauErrorCodes.C_ADD_DATASET_COND_ERROR); msgs.AddError(error.ErrorCodeAsInt, error.Message + "; " + ex.Message); } catch { // Catch anything else that possibly happens } } finally { // Release any COM objects here! } }