Problem: wywołanie metody Pm.XXX w javascript

W tym forum można zgłaszać błędy, sugerować ulepszenia oraz wstawiać inne tematy.

Problem: wywołanie metody Pm.XXX w javascript

Postby kbrudzisz » Thu 05. Feb 2015 11:12:03

Witam,
WinXP, Promotic 8.218.
Mam problem z wywołaniem metody Pm.FileTextWrite z poziomu javascript. Ta sama metoda wywołana z panelu utworzonego na VBs działa bez problemu.

Konkretny przykład:
[
var waga1=pMe.Vars("waga1");
var waga2=pMe.Vars("waga2");
var ubytek= waga1-waga2;
var start_data= pMe.Vars("start_data");
var end_data= pMe.Vars("end_data");
//
/*
** pMe.Vars("header") = z pliku, konfigurowany przez użytkownika, logo, nazwa itp.. (;S;cfg\raporty_cfg\html_header1.ini;;) (wczytuje plik graficzny tylko ze ścieżki bezwzględnej)
<img src="C:/Pm/empol_02.jpg" alt="-EMPOL-" align="right" />
<p align="center"><font size="5" color="red" face="Arial"><b>
P.U.K. "EMPOL" Sp. z o.o.<br />
</u></i></b></font>
<font size="4" color="green" face="Courier New"><b><u><i>
oddz. Gorlice, Bioreaktor nr 1 <br /></u>
</u></i></b></font>
<font size="2" color="blue" face="Arial"><b>
dokumentacja przebiegu procesu kompostowania.<br />
</u></i></b></font></p>
*/
var tHead = pMe.Vars("header")+ ("<p><font size='4' color='black' face='Arial'><b><u>KOMORA nr 1<br /></u></i></b></font></p>"); //('<p>KOMORA nr1</p>');
var oText1 = ("<p><font size='3' color='black' face='Courier New'><b>Waga Wsadu przy ZAŁADUNKU ....") + waga1 + ("kg<br />");
oText1 = oText1 + ("Waga Wsadu przy ROZŁADUNKU....")+ waga2 + ("kg<br />");
oText1= oText1 + ("UBYTEK MASY...................")+ ubytek + ("kg<br /></u></i></b></font></p>");
oText1= oText1 + ("<br /><br /><br /><br /><font size='3' color='black' face='Courier New'><i>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;raport sporządził .............................</i></font>");
//oText1= oText1 + ("<br /><font size='2'><i> (c) 2014 Krzysztof Brudzisz(automatykb.cba.pl)</i></font>");
//tHead= tHead + oText1;
//
var oTView = pMe.Items("/Panel/AxTrendsView").Acx;
var sHtml = oTView.SaveToHtm("ver:1", "return:", "mode:" + oTView.ViewMode + ";");
sHtml = tHead + sHtml;
sHtml = sHtml + (" ******* <br /><br /> ")+ oText1;
if(sHtml != "") // print A4 width:700px;height:930px; (210x297), landscape width:930px;height:700px;
{
Pm.PrintHtmlPage(sHtml, "sourcetype:htmlstring;printer:preview;width:930px;height:700px;");
Pm.FileTextWrite("$path.data:raport1.htm", sHtml, "mode:new;");
}
Pm.FileTextWrite("C:/Pm/Data/raport1.htm", sHtml, "mode:new;"); // bezwarunkowy zapis - test (nie działa)
]

to samo (jako test działamia) w VBs:
[
Dim oTView
'Set oTView = pMe.Items("/PanelTr1/AxTrendsView").Acx
Set oTView = pMe.Items("../AxTr1").Acx
Dim sHtml
sHtml="string:"
oTView.SaveToHtm "ver:1", sHtml, "mode:" & oTView.ViewMode & ";"
Pm.PrintHtmlPage sHtml, "sourcetype:htmlstring;printer:preview;width:2100;height:2790;"
Pm.FileTextWrite "$path.data:raport.htm", sHtml
]
działa bez problemu.
Podobnie ma się rzecz z pMe.PmPanel.Print. Z poziomu VBs działa bez zarzutu
{ pMe.PmPanel.Print 0, "x:100;y:100;dx:300;dy:200;" },
a zpoziomu jscript nie.

Bardzo proszę o pomoc, postawiłem na system Promotic, aplikacja liczy sobie ponad 50 000 lini kodu w XML (jestem na etapie podjęcia decyzji o zakupie licencji develop), zależy mi na tym aby bez problemu wyświetlała się w przeglądarkach i dlatego całość jest w jscript, przepisanie jej od nowa na tym etapie nie wchodzi w grę.
z poważaniem
K.B.
K.Brudzisz
kbrudzisz
 
Posts: 1
Joined: Thu 05. Feb 2015 10:09:49
Location: Poland

Re: Problem: wywołanie metody Pm.XXX w javascript

Postby Kazimierz Heczko » Fri 27. Feb 2015 13:26:32

Witam,
opisywany przez Pana problem polega na tym, że metoda Pm.FileTextWrite nie działa w środowisku WEBowym, może działać tylko i wyłącznie w aplikacji lokalnej.
Panel, który jest przełączony do trybu JavaScript nawet w aplikacji lokalnej działa jak by chodziło o panel WEBowy.
Dlatego metody, które pracują s plikami na dysku nie będą w ten sposób działać.
Jedyny sposób, jak opisywany przez Pana problem rozwiązać jest taki, że zamiast wywołania zapisu do pliku należy wywołać sobie własną metodę - albo metodę danego panelu albo globalną metodę aplikacji - i tej metodzie przekazać zapisywany tekst.
I ponieważ owa metoda będzie wykonywana zawsze na serwerze, to tam zapis już będzie funkcjonować.
W tym konkretnym przypadku zamiast wiersza skryptu:

Code: Select all
Pm.FileTextWrite("$path.data:raport1.htm", sHtml, "mode:new;");


można wpisać następujący kod:

Code: Select all
pMe.PmPanel.Methods.SaveToFile("$path.data:raport1.htm", sHtml, 0);


Oczywiście w tym przypadku w danym obiekcie PmPanel MUSI być wytworzona metoda o nazwie "SaveToFile" z trzema parametrami:
nazwą pliku, zawartością pliku i wartością, która określa czy plik ma zostać wytworzony na nowo (0) czy też takst ma zostać dodany na koniec istniejącego pliku (1).

Pozdrawiam

Kazimierz Heczko
Kazimierz Heczko
 
Posts: 68
Joined: Thu 13. Dec 2012 9:28:56


Return to Zgłaszanie błędów, propozycje ulepszenia, inne...

Who is online

Users browsing this forum: No registered users and 2 guests

cron