/// <summary> /// /// </summary> /// <param name="ctx"></param> /// <param name="tag"></param> /// <param name="parameterObject"></param> /// <returns></returns> public override int DoStartFragment(SqlTagContext ctx, SqlTag tag, object parameterObject) { IterateContext iterate = (IterateContext)ctx.GetAttribute(tag); if (iterate == null) { string propertyName = ((BaseTag)tag).Property; object collection; if (!string.IsNullOrEmpty(propertyName)) { collection = ObjectProbe.GetMemberValue(parameterObject, propertyName, AccessorFactory); } else { collection = parameterObject; } iterate = new IterateContext(collection); ctx.AddAttribute(tag, iterate); } if (iterate.HasNext) { return(INCLUDE_BODY); } return(SKIP_BODY); }
/// <summary> /// /// </summary> /// <param name="ctx"></param> /// <param name="tag"></param> /// <param name="parameterObject"></param> /// <returns></returns> /// Updated By: Richard Beacroft /// Updated Date: 11\10\2013 /// Description: Enables one to be able to have sql text within an iterate element that references the current item as "[]." /// This is then parsed, along with any reflection path suffix to get the object instance the used is interested in. /// and add it to an attributes collection for later use. public override int DoStartFragment(SqlTagContext ctx, SqlTag tag, object parameterObject) { var iterate = (IterateContext)ctx.GetAttribute(tag); if (iterate == null) { var baseTag = (BaseTag)tag; object collection; if (!string.IsNullOrEmpty(baseTag.Property)) { // this will either leave the property name as it is, or if it starts with "[].", the // current iterate context item value will be used, with the rest of the property name // walked to determine the field/property to get the value from. collection = _tagPropertyProbe.GetMemberPropertyValue(ctx, baseTag, parameterObject); } else { collection = parameterObject; } iterate = new IterateContext(collection); ctx.AddAttribute(tag, iterate); // if there is another item in the iterate array, then we need to include the body. if (iterate.MoveNext()) { return(INCLUDE_BODY); } iterate.IsCompleted = true; return(SKIP_BODY); } if (iterate.IsCompleted) { // reset the context to cater for nested iterations. ctx.RemoveAttibute(tag); // now re-process the tag which will re-add the now modified tag element back to the attributes collection. return(DoStartFragment(ctx, tag, parameterObject)); } else if (iterate.HasNext || iterate.IsLast) { if (iterate.MoveNext()) { return(INCLUDE_BODY); } } return(SKIP_BODY); }
/// <summary> /// /// </summary> /// <param name="ctx"></param> /// <param name="tag"></param> /// <param name="parameterObject"></param> /// <returns></returns> public override int DoStartFragment(SqlTagContext ctx, SqlTag tag, object parameterObject) { IterateContext iterate = (IterateContext) ctx.GetAttribute(tag); if (iterate == null) { string propertyName = ((BaseTag)tag).Property; object collection; if (!string.IsNullOrEmpty(propertyName)) { collection = ObjectProbe.GetMemberValue(parameterObject, propertyName, AccessorFactory); } else { collection = parameterObject; } iterate = new IterateContext(collection); ctx.AddAttribute(tag, iterate); } if (iterate.HasNext) { return INCLUDE_BODY; } return SKIP_BODY; }
/// <summary> /// /// </summary> /// <param name="ctx"></param> /// <param name="tag"></param> /// <param name="parameterObject"></param> /// <returns></returns> /// Updated By: Richard Beacroft /// Updated Date: 11\10\2013 /// Description: Enables one to be able to have sql text within an iterate element that references the current item as "[]." /// This is then parsed, along with any reflection path suffix to get the object instance the used is interested in. /// and add it to an attributes collection for later use. public override int DoStartFragment(SqlTagContext ctx, SqlTag tag, object parameterObject) { var iterate = (IterateContext)ctx.GetAttribute(tag); if (iterate == null) { var baseTag = (BaseTag)tag; object collection; if (!string.IsNullOrEmpty(baseTag.Property)) { // this will either leave the property name as it is, or if it starts with "[].", the // current iterate context item value will be used, with the rest of the property name // walked to determine the field/property to get the value from. collection = _tagPropertyProbe.GetMemberPropertyValue(ctx, baseTag, parameterObject); } else { collection = parameterObject; } iterate = new IterateContext(collection); ctx.AddAttribute(tag, iterate); // if there is another item in the iterate array, then we need to include the body. if (iterate.MoveNext()) return INCLUDE_BODY; iterate.IsCompleted = true; return SKIP_BODY; } if (iterate.IsCompleted) { // reset the context to cater for nested iterations. ctx.RemoveAttibute(tag); // now re-process the tag which will re-add the now modified tag element back to the attributes collection. return DoStartFragment(ctx, tag, parameterObject); } else if (iterate.HasNext || iterate.IsLast) { if (iterate.MoveNext()) return INCLUDE_BODY; } return SKIP_BODY; }