Przekazanie wartości parametru do jeszcze nieistniejącego raportu w DevExpress

0

Witam, mam projekt, który wyświetla dane z bazy za pomocą stworzonych przeze mnie template'ów raportów.

MyTemplate raport=new Mytemplate();
raport.Parameters["myparameter"].Value = id;
@Html.DevExpress().WebDocumentViewer("DocumentViewer").Height("1000px").Bind(raport);

Problem mój polega na tym, że teraz dodając możliwość edycji/dodawania template użytkownika on może sobie zapisać go o dowolnej nazwie i zapisze się on u mnie w folderze Reports, tyle że skoro nazwa jego template'a jest typem raportu który tworzę, nie wiem jak mogę to zrobić, skoro nie znam JESZCZE tej nazwy.

@Html.DevExpress().WebDocumentViewer("DocumentViewer").Height("1000px").Bind("NAZWA_JEGO_TEMPLATE");

Jest jeszcze taka opcja, że mogę za pomocą stringa otworzyć jego template, ale w tym przypadku nie jestem w stanie przekazać id do parametru, więc nie otworzy określonych danych, tylko będzie pusty. No i tu moje pytanie, jako że nie znam jeszcze do końca C#, czy jest jakaś możliwość, żeby stworzyć template o nazwie, której jeszcze nie znam, a przy okazji przekazać parametr?

0

Spróbuj

@Html.DevExpress().WebDocumentViewer("DocumentViewer").Height("1000px").Bind("report_name.repx?myparameter=" + id);
0

Niestety taki zapis wywala FaultException: Could not find report 'PlayTemplate?parameter1=3'. (bez repx piszę, bo jest zmienna, która to dodaje)

0

Jak błąd wskazuję, nie ma pod tą ścieżką takiego pliku z raportem. Może masz literówkę, może brakuje Ci jakiegoś subfolderu

0
 public override byte[] GetData(string url)
        {
            // Returns report layout data stored in a Report Storage using the specified URL. 
            // This method is called only for valid URLs after the IsValidUrl method is called.
            try
            {
                if (Directory.EnumerateFiles(ReportDirectory).Select(Path.GetFileNameWithoutExtension).Contains(url))
                {
                    return File.ReadAllBytes(Path.Combine(ReportDirectory, url + FileExtension));
                }
                if (Reports.ReportsFactory.Reports.ContainsKey(url))
                {
                    using (MemoryStream ms = new MemoryStream())
                    {
                        Reports.ReportsFactory.Reports[url]().SaveLayoutToXml(ms);
                        return ms.ToArray();
                    }
                }
            }
            catch (Exception ex)
            {
                throw new DevExpress.XtraReports.Web.ClientControls.FaultException("Could not get report data.", ex);
            }
            throw new DevExpress.XtraReports.Web.ClientControls.FaultException(string.Format("Could not find report '{0}'.", url));
        }

to metoda, która zwraca błąd, ReportDirectory jest na folder z plkami i FileExtension to moje .repx

0

A ta treść błędu w twojej odpowiedzi wyżej to jest słowo w słowo z wyjątku z programu? Jeśli tak, to twoja metoda, ewidentnie, nie dopisuje repx

0

Kurcze, usunąłem teraz zmienną co dodaje .repx, ale FaultException: Could not find report 'PlayTemplate.repx?parameter1=3'. ogólnie chyba szuka raportu który nazywa się 'PlayTemplate.repx?parameter1=3', a nie raportu, który ma nazwę 'PlayTemplate.repx' i parametr =3

0

Może tutaj coś znajdziesz dla siebie
How to pass parameters to WebDocumentViewer in ASP Core ?

0
witeks44 napisał(a):

Problem mój polega na tym, że teraz dodając możliwość edycji/dodawania template użytkownika on może sobie zapisać go o dowolnej nazwie i zapisze się on u mnie w folderze Reports, tyle że skoro nazwa jego template'a jest typem raportu który tworzę, nie wiem jak mogę to zrobić, skoro nie znam JESZCZE tej nazwy.

Sam sobie tworzysz jakiś dziwny problem który próbujesz bohatersko rozwiązać dokładając niepotrzebnej złożoności. Jeśli użytkownik na bazie szablonu może utworzyć sobie raport który ty chcesz odnaleźć i otworzyć używając jakiegoś identyfikatora nadanego przez użytkownika to poczekaj aż go zapisze i dopiero wtedy umożliwiaj jego otwarcie.

Z drugiej strony cała złożoność raportu wynika pewnie z zestawu pól (albo i nie) i odpowiedniego zapytania - możesz w takim przypadku przekazać do odpowiedniej funkcji zestaw wszystkich parametrów wybranych przez użytkownika, wyświetlić go i umożliwić zapis w późniejszym momencie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1