Has anyone worked on filter expression from xConnect
, which filters contacts based on custom facet property (modified in last 24hrs)?
We have written a custom converter and expression fro the same
Converter:
Protected override ConvertResult<IEntityExpressionBuilder> ConvertSupportedItem(ItemModel source)
{
var convertResult = ConverttoDateTime(this.GetDateTimeValue(source,"ModifiedOn"));
if (!convertResult.WasConverted)
{
return NegativeResult(source, $"Cannot convert GUID condition expression to expression type.");
}
var expressionBuilder = new FacetPropertyModifiedOnExpression(convertResult.ConvertedValue,
base.GetFacetType(source),
base.GetFacetKeyName(source),
base.GetFacetPropertyName(source));
return PositiveResult(expressionBuilder);}
Since ModifiedOn is a Datetime
, we could not get a Converter which would solve the purpose, so we had to take ConverttoDateTime(this.GetDateTimeValue(source,"ModifiedOn"))
ConverttoDateTime
doesn’t do anything in specific it returns a positive result.
Custom Expression
var left = Expression.Property(getFacetExpression, this.FacetPropertyName);
var daybefore = Expression.Constant(DateTime.UtcNow.AddDays(-1));
var daynow = Expression.Constant(DateTime.UtcNow);
var ex1 =Expression.GreaterThanOrEqual(Expression.Convert(left, typeof(DateTime)), daybefore);
var ex2 = Expression.LessThan(Expression.Convert(left, typeof(DateTime)), daynow);
var finalexpression = Expression.AndAlso(ex1, ex2);
var exp1 = Expression.Lambda<Func<TEntity, bool>>(finalexpression, pe);
The result of exp1 is {entity => ((Convert(entity.GetFacet("DynamicsCrm").ProfileLastUpdatedOn) >= 6/9/2019 10:27:59 AM)
AndAlso (Convert(entity.GetFacet("DynamicsCrm").ProfileLastUpdatedOn) < 6/10/2019 10:27:59 AM))}
which seems to be correct.
With the above two custom code, it doesn't sync the leads/contacts in the past 24 hrs.
Kindly help