저는 여전히 Perl의 초보자이며 어려움에 처해 있습니다.Javascript가 Dev 서버의 Perl 폼을 채우지 않습니다.
나는 사용자가 필요로 여기 시스템이 그들에게 보고서를 실행하기 위해서는 권한을 할당해야합니다.
시스템
은 시스템에서 호스트 로컬 테스트 환경에서 완벽하게 작동하지만,이 디바이스를위한 윈도우 서버 2008에 업로드 한 후에는 더 이상 할당 된 보고서 양식을 채울 것 같지 않습니다.우리는 사용자 드롭 다운 목록을 채울 자바 스크립트 기능을 사용하고도 작동 가능한 보고서를 채 웁니다. 할당 된 보고서에 대해서는 더 이상 채워지지 않습니다. 보관소에서 가져온 것과 똑같은 코드가 문제없이 지역 환경에서 작동합니다. 우리가 로컬 컴퓨터 환경으로 가리 키도록 펄 스크립트의 디렉토리를 변경하는 경우
할당 된 보고서는 대신에 펄 스크립트가 서버에 그게 전부의, 채 웁니다.
이것은 서버의 디렉토리 향해 지적이다
function ReadUserPermission(iUserID)
{
var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
var szURL;
var iPermNumber = 0;
szURL = "/Scripts/Security/ReadPermissions.pl";
xmlhttp.Open("POST", szURL, false);
xmlhttp.Send(iUserID);
var bRetVal = PermissionTab.loadXML(xmlhttp.responseText);
var rt = xmlhttp.responseText;
RGCollection = PermissionTab.XMLDocument.selectNodes("//REPORTGROUP");
for (var i=0; i< RGCollection.length; i++)
{
RGXML = new ActiveXObject("Msxml2.DOMDocument")
RGXML.loadXML(RGCollection.item(i).xml);
ReportCollection = RGXML.selectNodes("//REPORTGROUPNAME");
szReportGroupName = ReportCollection.item(0).text;
ReportCollection = RGXML.selectNodes("//REPORTGROUPID");
iReportGroupID = ReportCollection.item(0).text;
ReportCollection = RGXML.selectNodes("//REPORT");
for(var j=0; j < ReportCollection.length; j++)
{
IR = new ActiveXObject("MSXML2.DOMDocument");
IR.loadXML(ReportCollection.item(j).xml);
IRD = IR.selectNodes("//REPORTNAME"); szReportName = IRD.item(0).text;
IRD = IR.selectNodes("//REPORTID"); iReportID = IRD.item(0).text;
IRD = IR.selectNodes("//PERMISSION"); bPermission = IRD.item(0).text;
Users[iUserID].Permissions[iPermNumber] = new DataClass;
Users[iUserID].Permissions[iPermNumber].ReportGroupName = szReportGroupName;
Users[iUserID].Permissions[iPermNumber].ReportGroupID = iReportGroupID;
Users[iUserID].Permissions[iPermNumber].ReportName = szReportName;
Users[iUserID].Permissions[iPermNumber].ReportID = iReportID;
Users[iUserID].Permissions[iPermNumber].Permission = bPermission;
iPermNumber++;
}
}
}
을하지만은 = "//028-07743/Scripts/Security/ReadPermissions.pl은"그것은 아무런 문제없이 실행하는 szUrl 때.
누구나 저를 당황하게했습니다.
여기에 우리가 실행되지 않는 생각 ReadPermissions.pl 스크립트입니다.
use CGI qw/:standard *table start_ul :cgi-lib/;
use Win32::ODBC;
require "ServerDetails.cfg";
#Reads Details for Connection from CFG file
sub ReadCfg
{
my $file = $_[0];
our $err;
{ # Put config data into a separate namespace
package CFG;
# Process the contents of the config file
my $rc = do($file);
# Check for errors
if ([email protected]) {
$::err = "ERROR: Failure compiling '$file' - [email protected]";
} elsif (! defined($rc)) {
$::err = "ERROR: Failure reading '$file' - $!";
} elsif (! $rc) {
$::err = "ERROR: Failure processing '$file'";
}
}
return ($err);
}
# Get our configuration information
if (my $err = ReadCfg('ServerDetails.cfg')) {
print(STDERR $err, "\n");
exit(1);
}
$szDataSource = "DSN=$CFG::CFG{'server'}{'DSN'};UID=$CFG::CFG{'server'}{'UID'};PWD=$CFG::CFG{'server'}{'PWD'}";
%PARM = Vars;
$iUser = $PARM{'keywords'};
open TMP, ">dhtml.txt";
$db = OpenConnection($szDataSource);
$szSQLStatement = "EXEC spGetUserPermissionTabData '$iUser'";
$iNumRecordsRead = ReadData(-dbconnection=>$db, -sqlstatement=>$szSQLStatement, -datahash=>\%UserData);
$szXMLString = "<Permissions>\n";
$szCurrentReportGroupName = "";
foreach $KEY (sort{ $a <=> $b } keys %UserData)
{
if($szCurrentReportGroupName ne $UserData{$KEY}{AppGroupName})
{
if($szCurrentReportGroupName ne "") #Close any previous report groups
{
$szXMLString .= "\t</REPORTGROUP>\n";
}
$szXMLString .= "\t<REPORTGROUP>\n" .
"\t\t<REPORTGROUPNAME>$UserData{$KEY}{AppGroupName}</REPORTGROUPNAME>\n" .
"\t\t<REPORTGROUPID>$UserData{$KEY}{ApplicationGroupID}</REPORTGROUPID>\n";
$szCurrentReportGroupName = $UserData{$KEY}{AppGroupName};
}
$szXMLString .= "\t<REPORT>\n" .
"\t\t<REPORTNAME>$UserData{$KEY}{AppDisplayName}</REPORTNAME>\n" .
"\t\t<REPORTID>$UserData{$KEY}{ApplicationID}</REPORTID>\n" .
"\t\t<PERMISSION>$UserData{$KEY}{PermissionType}</PERMISSION>\n" .
"\t</REPORT>\n";
}
$szXMLString .= "\t</REPORTGROUP>\n" .
"</Permissions>";
print TMP "UserID = $szUser\n";
print TMP "XML = $szXMLString\n";
print TMP "Size of XML = " . length($szXMLString) . "\n";
close $TMP;
print "Content-Type: text/html\n\n";
print "$szXMLString";
sub OpenConnection()
{
my($szDSN) = @_;
my $db = new Win32::ODBC($szDSN);
if(!defined $db)
{
my $szLocalTime = localtime();
$szHTMLString = header;
$szHTMLString .= "Error creating ODBC connection\n";
$szHTMLString .= "<BR>Time: $szLocalTime\n";
$szHTMLString .= end_html();
print $szHTMLString;
return NULL;
}
return $db;
}
sub ReadData()
{
my (%fnArgs) = @_;
my $szSQLStatement = $fnArgs{-sqlstatement};
my $cDBConnection = $fnArgs{-dbconnection};
local(*DataHash) = $fnArgs{-datahash};
my $iRowID = 0;
if ($cDBConnection->Sql($szSQLStatement))
{
print "SQL failed. Error: " . $cDBConnection->Error() . "\n";
$cDBConnection->Close();
exit;
}
while($cDBConnection->FetchRow())
{
$DataHash{$iRowID++} = {$cDBConnection->DataHash()};
}
return $iRowID;
}
sub XMLizer
{
local (*DataHash) = @_;
my $szXMLString = "";
foreach $KEY (keys %DataHash)
{
$szXMLString .= "\t<" . $KEY . ">" . $DataHash{$KEY} . "</" . $KEY . ">\n";
}
return $szXMLString;
}
그것은 지금 우리가 사용자가 (예상) 선택되지 않은 경우에도, 그것은 특정 사용자의 보고서를 할당 창을 채 웁니다 $szSQLStatement = "EXEC spGetUserPermissionTabData 464";
에 파일 펄에서 SQL 문을 변경하는 경우처럼 보인다. 우리는 지금 아마 펄은 자바 스크립트가 클라이언트 측 스크립트 언어가
는 브라우저에서 서버의 펄 스크립트를 열 수 있습니까? 무슨 일이야? 이것이 Windows의 경우, 어떤 perl 배포판을 사용하고 있습니까? 시 빵이 interprete의 경로와 일치합니까? – simbabque
Simaque - 아무 것도 화면에 나타나지 않지만 소스를 볼 때 파일은 XML로 채워집니다 ( REPORTGROUP> Permissions>). perl 버전은 서버에서 5.14.2이고 로컬 컴퓨터에서는 약간 더 오래되었지만 이것은 중요하지 않습니다. 위에 설정된 경로는 파일에 설정된 경로입니다 ... 스크립트가 scripts 폴더에서 시작하거나 전체 경로를 입력 하시겠습니까? (C : \ path \ etc) –
그건 * 잘못되었습니다 * XML은 Perl 스크립트가 어느 수준에서 고장 났음을 나타냅니다. '게시'방법 (예 : 정적 HTML 양식)을 통해 스크립트를 실행할 때 더 좋은 결과를 얻습니까? Perl 스크립트의 디버그 정보가 있습니까? 스크립트를 브라우저에 연결하는 데 사용되는 인터페이스는 무엇입니까? Perl이나 서버 측 스크립팅을 처음 접하게 되었습니까? – amon