2016-07-22 5 views
0

Word 문서를 업데이트하는 데 사용되는 PERL 스크립트가 작동합니다. PERL 스크립트는 MS Office 2003 또는 2007에서 작동하도록 코딩되었습니다. BF를 통해 업데이트를 수행하려는 컴퓨터에 Office 2003이 설치되어 있으면 적절한 템플릿이 설치되고 매크로 보안 설정이 업데이트되었습니다.PERL 및 Win32 :: OLE가있는 Word 문서 조작은 명령 줄에서 수행되지만 BuildForge 단계에서는 수행되지 않습니다.

BF를 명령 줄에서 사용하려는 정확한 명령을 실행하면 예상대로 작동합니다. BF 단계를 통해 실행할 때 "\ servername \ projectname \ bin \ updateVer.pl 줄 94에서 문서를 열 수 없습니다."(줄 번호는 Perl 스크립트의 croak입니다). ccperl \ 서버 이름 \ 프로젝트 이름 \ 빈 \ updateVer.pl -path "C : \ BuildForgeBuilds \ BFProjectName

# enable Sanity checking and make the variable names meaningful 
use strict; 
use warnings; 
use English; 
use Win32::OLE; 

# Gain access to MS Word 'wd' constants 
use Win32::OLE::Const ('Microsoft Word'); 

use FindBin qw($RealDir); 

use lib ($RealDir, "$RealDir/..", "$RealDir/../lib"); 

# include the common and log utilities 
use SCCM::Common; 
use SCCM::Logs; 

# use command line inputs 
use Getopt::Long qw(:config auto_abbrev permute ignore_case pass_through); 

# set up logs and process logfile options 
logOptions(qw(-log now)); 

my $bookmark_update_result = ""; 
my $update_ref_result = ""; 

# Get input from user 

my $path; 
my $bookmarkName; 
my $bookmarkValue; 
my $Word; 
my $newWord = 0; 

GetOptions("path=s"   => \$path, 
     "bookmarkName=s" => \$bookmarkName, 
    "bookmarkValue=s" => \$bookmarkValue); 

unless (defined($path)) 
    { croakf "%[Fail] Path and filename of SVD are required\n"; } 

unless (defined($bookmarkName) && defined($bookmarkValue)) 
    { croakf "%[Fail] bookmarkName and bookmarkValue parameters are both required.\n"; } 

# Start Word in a safer way, checking to see if user has it open first. 

eval 
{ 
    $Word = Win32::OLE->GetActiveObject('Word.Application'); 
    if (! $Word) 
    { 
    $newWord = 1; 
    $Word = Win32::OLE->new('Word.Application', 'Quit'); 
    } 
}; 

croakf "%[Fail] -- unable to start Word Engine: [email protected]\n", Win32::OLE->LastError() if ([email protected] || ! $Word); 

my $dispAlerts = $Word->{'DisplayAlerts'}; 
$Word->{'DisplayAlerts'} = wdAlertsNone; 

if ($newWord) 
{ 
    $Word->{'Visible'} = 0; 
} 

my $doc = $Word->Documents->Open($path) or 
    croakf ("%[Fail] Unable to open doc ", Win32::OLE->LastError()); 

이 스크립트는 다음과 같이 호출되는 :

이 스크립트는 최대 까악 까악 우는 소리에 다음과 같습니다 \ BFProjectName_0177 \ MyDocument.doc "-bookmarkName REV_Baseline -bookmarkValue My_Baseline_10.20.30

BF에게 내 작업 문서를 열어도된다는 확신을 줄 수있는 방향을 얻을 수 있습니까? 감사합니다.

+0

* "Perl"* – Borodin

+0

미안 해요 @ 보 로딘, 당신의 의견이 나를 어떻게 도울 지 모르겠군요. 우리는 모든 컴퓨터에 cc를 설치했기 때문에 ccperl을 사용하고 있습니다. – ChrisM

+0

질문에 대한 답변이 아닙니다. 그게 바로 이유입니다. Perl 언어의 이름을 올바르게 표기 할 수 있도록 도와줍니다. JAVA 나 PYTHON, 아니면 실제로 MS OFFICE를 쓰는 지 의심 스럽습니까? – Borodin

답변

0

작업이 실행되고있는 컴퓨터의 템플릿에서 '보관함'비트를 제거한 후에 BF가 작업을 성공적으로 실행할 수있었습니다.

웃긴 재미 템플릿에 '보관함'비트가 설정된 서버에서 직접 실행할 수 있습니다. 그러나 헤이, 나는 더이상 이것에 붙지 않는다.

내 질문을 읽고 심지어 문제가되었을 수도있는 사람을 생각해 본 사람 덕분입니다.