private InsertSelect BuildInsertSelect(DCTemplateBlockModel block, int groupIndex, Guid sessionId, bool isFirstSegment) { var withEntityColumnSelect = new Select(SegmentationContext.UserConnection) .Column(SegmentationContext.SourceAliasForFilter, SegmentationContext.EntityIdSourceColumn) .From(SegmentationContext.SourceAudience).As(SegmentationContext.SourceAliasForFilter); var extendedAudienceSelect = new Select(withEntityColumnSelect) .Column(Column.Parameter(sessionId)).As("SessionId") .Column(Column.Parameter(block.Index)).As("BlockIndex") .Column(Column.Parameter(groupIndex)).As("GroupIndex"); if (!block.IsDefault) { var filter = GetFilterFromBlock(block); ExtendAudienceSelectWithFilter(ref extendedAudienceSelect, filter); } if (!isFirstSegment) { ExtendAudienceSelectWithExceptCondition(ref extendedAudienceSelect, groupIndex); } extendedAudienceSelect.SpecifyNoLockHints(); var simpleInsert = new InsertSelect(SegmentationContext.UserConnection) .Into("DCRecipientOp") .Set("EntityId", "SessionId", "BlockIndex", "GroupIndex") .FromSelect(extendedAudienceSelect); return(simpleInsert); }
private void LinkBlockWithAttributes(T model, DCTemplateBlockModel block) { model.Attributes .Where(x => block.AttributeIndexes.Contains(x.Index)) .ForEach(attr => { var schema = UserConnection.EntitySchemaManager.GetInstanceByName(AttributeInBlockTableName); var attrInBlock = schema.CreateEntity(UserConnection); attrInBlock.SetDefColumnValues(); attrInBlock.SetColumnValue("DCAttributeId", attr.Id); attrInBlock.SetColumnValue("DCTemplateBlockId", block.Id); attrInBlock.Save(); }); }
private Select GetFilterFromBlock(DCTemplateBlockModel block) => SegmentationContext.Template.Attributes .FirstOrDefault(x => x.IsFilter() && (block.AttributeIndexes?.Contains(x.Index) ?? false)) .ToFilter(SegmentationContext.UserConnection);