Esempio n. 1
0
 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;
 }
Esempio n. 3
0
        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");
        }
Esempio n. 4
0
        // 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;
            }
        }
Esempio n. 6
0
        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);
        }
Esempio n. 7
0
 public ConditionValue(ConditionValueType valueType, object value)
 {
     ValueType = valueType;
     Value     = value;
 }