Beispiel #1
0
        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);
        }
Beispiel #2
0
 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();
     });
 }
Beispiel #3
0
 private Select GetFilterFromBlock(DCTemplateBlockModel block) =>
 SegmentationContext.Template.Attributes
 .FirstOrDefault(x => x.IsFilter() && (block.AttributeIndexes?.Contains(x.Index) ?? false))
 .ToFilter(SegmentationContext.UserConnection);