public void DataFunctionCall_SetDataDaysFrom_Date() { // Get the search builder. var mfSearchBuilder = this.GetSearchBuilder(); // Create the data function call. var dataFunctionCall = new DataFunctionCall(); dataFunctionCall.SetDataDaysFrom(); // Add a search condition for the SetDataDaysFrom data function call. mfSearchBuilder.Property ( PropertyValueSearchConditionTestBase.TestDatePropertyId, 5, dataFunctionCall: dataFunctionCall ); // Retrieve the search condition. var condition = mfSearchBuilder.Conditions[1]; // Ensure that the data type is correct. Assert.AreEqual ( MFDataType.MFDatatypeInteger, condition.TypedValue.DataType ); // Ensure that the search condition has the correct data function call setting. Assert.AreEqual ( MFDataFunction.MFDataFunctionDaysFrom, condition.Expression.DataPropertyValueDataFunction ); }
/// <summary> /// Adds a <see cref="SearchCondition"/> to the collection for a <see cref="MFDataType.MFDatatypeDate"/> /// or <see cref="MFDataType.MFDatatypeTimestamp"/> property definition. /// This method searches by how many days there are from the property, equivalent to using /// a <see cref="DataFunctionCall" /> set to <see cref="DataFunctionCall.SetDataDaysFrom"/>. /// </summary> /// <param name="searchBuilder">The <see cref="MFSearchBuilder"/> to add the condition to.</param> /// <param name="propertyDef">The ID of the property to search by.</param> /// <param name="value">The number of days to search by.</param> /// <param name="conditionType">What type of search to execute (defaults to <see cref="MFConditionType.MFConditionTypeEqual"/>).</param> /// <param name="parentChildBehavior">Whether to accept matches to parent/child values as well (defaults to <see cref="MFParentChildBehavior.MFParentChildBehaviorNone"/>).</param> /// <param name="indirectionLevels">The indirection levels (from the search object) to access the property to match.</param> /// <returns>The <paramref name="searchBuilder"/> provided, for chaining.</returns> public static MFSearchBuilder DaysFrom ( this MFSearchBuilder searchBuilder, int propertyDef, int value, MFConditionType conditionType = MFConditionType.MFConditionTypeEqual, MFParentChildBehavior parentChildBehavior = MFParentChildBehavior.MFParentChildBehaviorNone, PropertyDefOrObjectTypes indirectionLevels = null ) { // Sanity. if (null == searchBuilder) { throw new ArgumentNullException(nameof(searchBuilder)); } if (0 > propertyDef) { throw new ArgumentOutOfRangeException(nameof(propertyDef), "Property Ids must be greater than -1; ensure that your property alias was resolved."); } // What is the type of this property? var dataType = searchBuilder.Vault.PropertyDefOperations.GetPropertyDef(propertyDef).DataType; // What is the data type of the property? DataFunctionCall dataFunctionCall; switch (dataType) { case MFDataType.MFDatatypeTimestamp: case MFDataType.MFDatatypeDate: // Timestamps and dates should be converted to integer using a data function call. dataFunctionCall = new DataFunctionCall(); dataFunctionCall.SetDataDaysFrom(); break; default: throw new ArgumentException($"Property {propertyDef} is not a date or timestamp property.", nameof(propertyDef)); } // Use the property method. return(searchBuilder.Property ( propertyDef, value, conditionType, parentChildBehavior, indirectionLevels, dataFunctionCall )); }
public void DataFunctionCall_SetDataDaysFrom_InvalidValues(int?value) { // Get the search builder. var mfSearchBuilder = this.GetSearchBuilder(); // Create the data function call. var dataFunctionCall = new DataFunctionCall(); dataFunctionCall.SetDataDaysFrom(); // Add a search condition for the SetDataDaysFrom data function call. mfSearchBuilder.Property ( PropertyValueSearchConditionTestBase.TestTimestampPropertyId, value, dataFunctionCall: dataFunctionCall ); }