public BlackboardConstraint() { m_firstValue = new MemoryVar(); m_secondValue = new MemoryVar(); m_valueType = ConditionValueType.Boolean; m_booleanComparison = BooleanComparison.IsTrue; m_numericComparison = NumericComparison.Equal; m_referenceComparison = ReferenceComparison.IsNotNull; }
/// <summary> /// Initializes a new instance of the <see cref="ConditionValue" /> class. /// </summary> /// <param name="DisplayName">DisplayName.</param> /// <param name="Type">Type.</param> /// <param name="DocPropName">DocPropName.</param> /// <param name="Constant">Constant.</param> /// <param name="Field">Field.</param> /// <param name="Expression">Expression.</param> /// <param name="FlowVariable">FlowVariable.</param> public ConditionValue(string DisplayName = default(string), ConditionValueType Type = default(ConditionValueType), string DocPropName = default(string), string Constant = default(string), string Field = default(string), string Expression = default(string), ConditionFlowVariable FlowVariable = default(ConditionFlowVariable)) { this.DisplayName = DisplayName; this.Type = Type; this.DocPropName = DocPropName; this.Constant = Constant; this.Field = Field; this.Expression = Expression; this.FlowVariable = FlowVariable; }
internal string GetConditionComputedValue(SPListItem item) { ConditionValueType valType = GetConditionValueType(); string propVal = this.StrValue.Trim(); switch (valType) { case ConditionValueType.StringLiteral: return(this.StrValue); case ConditionValueType.ItemPropertyValue: { string propName = propVal.Substring(1, propVal.Length - 2); SPField field = item.ParentList.Fields.TryGetFieldByStaticName(propName); if (field != null) { return(Convert.ToString(item[propName])); } } break; case ConditionValueType.FunctionOnPropertyValue: { int open = propVal.IndexOf('('); int close = propVal.IndexOf(')'); string funcName = propVal.Substring(1, open - 1); string propNameExp = propVal.Substring(open + 1, close - open - 1); string propName = propNameExp.Substring(1, propNameExp.Length - 2); SPField field = item.ParentList.Fields.TryGetFieldByStaticName(propName); if (field != null) { switch (funcName) { case "strlen": { return(Convert.ToString(Convert.ToString(item[propName]).Length)); } } } } break; } throw new Exception("Invalid argument for computed condition value"); }
// TODO: write a regular expression for this // TODO: Add validations for valid property name and function name // Valid condition values are: // value // [propName] // $FuncName(value or [propName]) internal ConditionValueType GetConditionValueType() { ConditionValueType ret = ConditionValueType.Invalid; String strVal = this.StrValue.Trim(); if (!string.IsNullOrEmpty(strVal)) { if (IsLiteralStringValue(strVal)) { return(ConditionValueType.StringLiteral); } if (IsValidItemPropertyExpression(strVal)) { return(ConditionValueType.ItemPropertyValue); } if (strVal[0] == '$') { int startFunc = strVal.IndexOf('(', 2); int endFunc = strVal.IndexOf(')', startFunc); if (startFunc > 0 && endFunc > startFunc + 1) { string propExp = strVal.Substring(startFunc + 1, endFunc - startFunc - 1); if (IsLiteralStringValue(propExp)) { // Not supporting function values on literals as it is not useful //return ConditionValueType.Function; return(ConditionValueType.Invalid); } if (IsValidItemPropertyExpression(propExp)) { return(ConditionValueType.FunctionOnPropertyValue); } } } } return(ret); }
protected override void DrawProperties() { BlackboardConstraint target = (BlackboardConstraint)Target; ConditionValueType oldValueType = target.ValueType; target.ValueType = (ConditionValueType)EditorGUILayout.EnumPopup("Value Type", target.ValueType); if (target.ValueType != oldValueType) { target.FirstValue.Value = ""; target.SecondValue.Value = ""; } switch (target.ValueType) { case ConditionValueType.Boolean: target.FirstValue.Value = EditorGUILayout.TextField("Value", target.FirstValue.Value); target.BooleanComparison = (BooleanComparison)EditorGUILayout.EnumPopup("Condition", target.BooleanComparison); break; case ConditionValueType.Integer: target.FirstValue.Value = EditorGUILayout.TextField("Value One", target.FirstValue.Value); target.SecondValue.Value = EditorGUILayout.TextField("Value Two", target.SecondValue.Value); target.NumericComparison = (NumericComparison)EditorGUILayout.EnumPopup("Condition", target.NumericComparison); break; case ConditionValueType.Float: target.FirstValue.Value = EditorGUILayout.TextField("Value One", target.FirstValue.Value); target.SecondValue.Value = EditorGUILayout.TextField("Value Two", target.SecondValue.Value); target.NumericComparison = (NumericComparison)EditorGUILayout.EnumPopup("Condition", target.NumericComparison); break; case ConditionValueType.GameObject: target.FirstValue.Value = EditorGUILayout.TextField("Value", target.FirstValue.Value); target.ReferenceComparison = (ReferenceComparison)EditorGUILayout.EnumPopup("Condition", target.ReferenceComparison); break; case ConditionValueType.UnityObject: target.FirstValue.Value = EditorGUILayout.TextField("Value", target.FirstValue.Value); target.ReferenceComparison = (ReferenceComparison)EditorGUILayout.EnumPopup("Condition", target.ReferenceComparison); break; } }
internal bool isValid(SPListItem item, AlertEventType eventType, SPItemEventProperties properties) { SPList list = item.ParentList; if (list == null) { return(false); } SPField field = list.Fields.TryGetFieldByStaticName(this.fieldName); ConditionValueType valType = GetConditionValueType(); if (field != null && valType != ConditionValueType.Invalid) { object fieldValue = item[this.fieldName]; if (eventType == AlertEventType.ItemUpdated && properties != null) { if (this.comparisionType != ConditionComparisionType.Always) { //if (!properties.AfterProperties.ChangedProperties.Contains(this.fieldName)) if (Convert.ToString(item[this.fieldName]) .Equals(Convert.ToString(properties.AfterProperties[this.fieldName]), StringComparison.CurrentCultureIgnoreCase)) { return(false); } else { fieldValue = properties.AfterProperties[this.fieldName]; } } } return(MatchItemValueBasedOnOperatorAndValueType(fieldValue, field.FieldValueType, eventType, item.ParentList.ParentWeb)); } return(false); }
public ConditionValue(ConditionValueType valueType, object value) { ValueType = valueType; Value = value; }