2012-09-05 2 views
1

저는 여전히 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 문을 변경하는 경우처럼 보인다. 우리는 지금 아마 펄은 자바 스크립트가 클라이언트 측 스크립트 언어가

+0

는 브라우저에서 서버의 펄 스크립트를 열 수 있습니까? 무슨 일이야? 이것이 Windows의 경우, 어떤 perl 배포판을 사용하고 있습니까? 시 빵이 interprete의 경로와 일치합니까? – simbabque

+0

Simaque - 아무 것도 화면에 나타나지 않지만 소스를 볼 때 파일은 XML로 채워집니다 (). perl 버전은 서버에서 5.14.2이고 로컬 컴퓨터에서는 약간 더 오래되었지만 이것은 중요하지 않습니다. 위에 설정된 경로는 파일에 설정된 경로입니다 ... 스크립트가 scripts 폴더에서 시작하거나 전체 경로를 입력 하시겠습니까? (C : \ path \ etc) –

+0

그건 * 잘못되었습니다 * XML은 Perl 스크립트가 어느 수준에서 고장 났음을 나타냅니다. '게시'방법 (예 : 정적 HTML 양식)을 통해 스크립트를 실행할 때 더 좋은 결과를 얻습니까? Perl 스크립트의 디버그 정보가 있습니까? 스크립트를 브라우저에 연결하는 데 사용되는 인터페이스는 무엇입니까? Perl이나 서버 측 스크립팅을 처음 접하게 되었습니까? – amon

답변

2

자바 스크립트로되어 전송되고 서버에서 실행되지 않습니다 것을 iUserID을 잡 밤은 파일이라고 생각합니다.

Node.js를 더 도움이 될해야합니다 http://en.wikipedia.org/wiki/Node.js

관련 문제