Generování dynamicky skládaných reportů   otázka

C#

Zdravím ve spolek,

aktuálně řeším "problém", kdy potřebuji generovat automaticky reporty (zasílané emailem). Použil jsem pro tento účel T4 templates, nicméně zdrojová data se mohou dynamicky měnit (počet sloupců, složení sloupců, název, atd.) a já nyní řeším, jak co nejefektivněji napsat mechanismus, který by přečetl zdrojová data a doplnil je do template (jako HTML table).

Pokud by někdo měl nápad nebo hint jak pokračovat - budu vděčný.

děkuji a fajn den

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Dobrý den,

především by to chtělo uvést v jakém formátu data prochází... Xls, csv, xml...?

Jinak se radi velmi špatně

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Když se píše HTML table, tak půjde s největší pravděpodobností o HTML výstup. Nicméně, nevidím přímou souvislost mezi výstupním formátu a možnou radou.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Takže přicházejí data v podobě HTML stránky a vy je přepracováváte, nebo přicházejí v jiném formátu a vy z něho děláte HTML ?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Data jsou v databázi a já je potřebuji odeslat v HTML formátu. To samotné není problém, nicméně každý "běh" generování reportu může teoreticky být nad jinou sadou dat, s jiným počtem sloupců, jiných názvů, atp. Omlouvám se, pokud to ze zadání nebylo patrné.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Dobrý den,

z toho co píšete si budete muset generovat html dynamicky a vytvářet ho na základě dat. Jinou cestou to asi nepůjde (pokud jsem to správně pochopil), za tímto účelem bych vám doporučil využít TagBuilder nebo HtmlWriter.

http://msdn.microsoft.com/en-us/library/...

http://www.asp.net/mvc/tutorials/older-v...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

To mi bohužel nepomůže, jak jsem již psal, tak využívám pro tyto účely T4 template.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pokud trváte na T4 template, tak co vám brání kromě dat do nic automaticky generovat i HTML? Pomocí TagBuilder nebo HtmlWriter.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Otázka nebyla na VÝSTUPNÍ formát, ale na VSTUP, tzn., z jaké DB. Podle toho lze pak zvolit řešení. Nicméně, pokud jde o data z jedné a té samé tabulky, lze to řešit podmínkami při vstupech i výstupech...

Ale nemyslím si, že je to šťastné řešení.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Databáze je MSSQL. V konfiguračním souboru bude uložen SQL dotaz, který aplikace při svém startu načte a na jeho základě by měla vygenerovat formátováný email v HTML formátu. Já řeším tu část, kdy mám na jedné straně data z DB a na straně druhé T4 template a potřebuji to "propojit". Nicméně dopředu nikdy nevím kolik hodnot z DB budu fyzicky mít. Napadlo mě, že bych použil dvě template a jednu plnil to druhou.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Když jsem onehdy řešil takovouto zvrhlost, že jsem uživatelů nechal volit sloupce, řešil jsem to tak, že jsem si udělal podmínky pro každý sloupec a podle toho jsem zobrazoval/schovával sloupce v tabulce HTML. Dalo by se to řešit i checkboxama a podle zaškrtnutí dělat podmínky, ale i tak je to takové "drbání se přes hlavu na levé straně pravou rukou"...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ony ty změny nebudou nijak časté a standardní uživatelé nebudou mít ke konfiguračnímu souboru vůbec přístup. Nicméně bych nerad s každým požadavkem na změnu dělal nový build aplikace a editovat T4 šablony "offline" bohužel nelze.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Asi bych to řešil CheckBocxem a DropDownListem ke každému sloupci z tabulky, udělal bych podmínky pro výběr z DB pro každý sloupec a podle zaškrtnutí CheckBoxu by ta podmínka byla/nebyla akivní a následně bych zobrazil/nezobrazil sloupce tabulky podle výběru...

Nebo bez CheckBoxů, jen do každého DropDownListu bych přidal jednu položku "bez hodnoty", resp. bych tam dal hodnotu vybrat "vše"...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Půjde o službu, tedy aplikaci bez uživatelského rozhraní. Jak jsem již psal, SQL dotaz bude uložen v konfiguračním souboru (app.config).

nahlásit spamnahlásit spam 0 odpovědětodpovědět

A "co" bude rozhodovat o počtu a výběru sloupců?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Údaj v konfiguračním souboru. Generování bude probíhat jednou týdně.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

A v čem konkrétně máte problém? Při generování toho HTML prostě využijete informace o sloupcích, vrácených tím SQL dotazem.

Informace o počtu, pořadí, názvech sloupců a datovém typu nad objektem DataReader lze získat takto:

A DataReader has the following properties and methods for retrieving column information:

FieldCount - returns the number of columns in the result set.

GetFieldType(int) - returns the Type of the column.

GetDataTypeName(int) - returns the Name of the back-end database column type.

GetName(int) - returns the Column Name.

So you would start by getting the FieldCount, and create a loop to loop

through the Fields (columns) in the DataReader, getting whatever information

you need about each one.

Pokud budete potřebovat některé další informace, jako například převést název sloupce z SQL na titulek nebo např. nějakou délku buňky generované tabulky, tak tyto dodatečná data musíte mít také v té konfiguraci (jako samotný SQL dotaz).

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback