/// <summary> /// 构造报表实例 /// </summary> /// <param name="p_inst"></param> public async Task Build(RptRootInst p_inst) { Inst = p_inst; await Header.Build(); await Body.Build(); await Footer.Build(); }
/// <summary> /// Builds the embed and returns a Discord.Net embed object. /// </summary> /// <param name="currentTimestamp">Determines whether the timestamp parameter should be set to the current UTC time.</param> /// <returns>A Discord.Net embed object.</returns> public Embed Build(bool currentTimestamp = false) { if (currentTimestamp) { this.Timestamp = DateTimeOffset.UtcNow; } EmbedBuilder emb = new EmbedBuilder(); // Title and Url. if (!string.IsNullOrWhiteSpace(Title)) { emb.WithTitle(Title); if (IsUrl(TitleUrl)) { emb.WithUrl(TitleUrl); } } // Description. if (!string.IsNullOrWhiteSpace(Description)) { emb.WithDescription(Description); } // Author embed. EmbedAuthorBuilder embAuth = Author.Build(); if (embAuth != null) { emb.WithAuthor(embAuth); } // Color. if (ColorStripe != null) { emb.WithColor((Color)ColorStripe); } // Footer embed. EmbedFooterBuilder embFoot = Footer.Build(); if (embFoot != null) { emb.WithFooter(embFoot); } // Field embeds. foreach (JEmbedField fld in Fields) { EmbedFieldBuilder embFld = fld.Build(); if (embFld != null) { emb.AddField(embFld); } } // Thumbnail. if (IsUrl(ThumbnailUrl)) { emb.WithThumbnailUrl(ThumbnailUrl); } // Image. if (IsUrl(ImageUrl)) { emb.WithImageUrl(ImageUrl); } // Timestamp. if (Timestamp != null) { emb.WithTimestamp((DateTimeOffset)Timestamp); } return(emb.Build()); }
internal DiscordApiData Build() { DiscordApiData data = new DiscordApiData(DiscordApiDataType.Container); if (Title != null) { data.Set("title", Title); } if (Description != null) { data.Set("description", Description); } if (Url != null) { data.Set("url", Url); } if (Timestamp.HasValue) { data.Set("timestamp", Timestamp.Value.ToUniversalTime().ToString("s", CultureInfo.InvariantCulture)); } if (Color.HasValue) { data.Set("color", Color.Value.ToHexadecimal()); } if (Footer != null) { data.Set("footer", Footer.Build()); } if (ImageUrl != null) { DiscordApiData imageData = new DiscordApiData(DiscordApiDataType.Container); imageData.Set("url", ImageUrl); data.Set("image", imageData); } if (Author != null) { data.Set("author", Author.Build()); } if (ThumbnailUrl != null) { DiscordApiData thumbnailData = new DiscordApiData(DiscordApiDataType.Container); thumbnailData.Set("url", ThumbnailUrl); data.Set("thumbnail", thumbnailData); } if (Fields != null) { DiscordApiData fieldArray = new DiscordApiData(DiscordApiDataType.Array); foreach (EmbedField field in Fields) { fieldArray.Values.Add(field.Build()); } data.Set("fields", fieldArray); } return(data); }
/// <summary> /// 构造报表项实例 /// </summary> public override async Task Build() { RptRootInst inst = _part.Inst; string tblName = _data.Str("tbl"); if (string.IsNullOrEmpty(tblName)) { return; } // 使用时再加载数据 var rptData = await inst.Info.GetData(tblName); if (rptData == null) { return; } inst.CurrentParent = null; RptTableInst tbl = new RptTableInst(this); inst.Body.AddChild(tbl); inst.CurrentTable = tbl; tbl.Data = rptData; Table data = tbl.Data.Data; if (Header != null && Header.Rows.Count > 0) { await Header.Build(); } if (Body != null) { for (int num = 0; num < data.Count; num++) { RptTblGroup group; Row curRow = data[num]; Row preRow = null; Row nextRow = null; if (num > 0) { preRow = data[num - 1]; } if (num < data.Count - 1) { nextRow = data[num + 1]; } // 分组头 if (Groups != null) { for (int i = 0; i < Groups.Count; i++) { group = Groups[i]; string field = group.Field; if (!string.IsNullOrEmpty(field) && (preRow == null || curRow.Str(field) != preRow.Str(field))) { for (int j = i; j < Groups.Count; j++) { group = Groups[j]; if (group.Header != null && group.Header.Rows.Count > 0) { Dictionary <string, string> dict = GetFilters(j, curRow); await group.Header.Build(dict); } } break; } } } await Body.Build(); // 分组尾 if (Groups != null) { for (int i = 0; i < Groups.Count; i++) { group = Groups[i]; string field = group.Field; if (!string.IsNullOrEmpty(field) && (nextRow == null || curRow.Str(field) != nextRow.Str(field))) { for (int j = Groups.Count - 1; j >= i; j--) { group = Groups[j]; if (group.Footer != null && group.Footer.Rows.Count > 0) { Dictionary <string, string> dict = GetFilters(j, curRow); await group.Footer.Build(dict); } } break; } } } } // 未达到最少行数时增加空行 int minCount = MinRowCount; if (minCount > 0 && minCount > data.Count) { int tail = minCount - data.Count; for (int i = 0; i < tail; i++) { await Body.Build(); } } } if (Footer != null && Footer.Rows.Count > 0) { await Footer.Build(); } }