QlikView Script – 進階篇1 Script呼叫Macro之變化

askyer2006發表於2009-07-02

做一個簡單例子:

Macro中增加一個函式

function dosomeTest()

'如果取消Msgbox註釋,8.20+版本不執行

'msgbox test

end function

Load Script定義

Let abc = dosomeTest();

[@more@]

Case1: 如果'msgbox test修改為msgbox test

Qv8.01版本執行會彈出一個對話方塊 顯示“Test”。但如果在Qv8.20以後,該功能會導致abc變數為Null

原因分析Qv8.20開始,Script訪問Macro不再支援對ActiveDocument的訪問,雖然沒有提Msgbox全稱可以這樣寫ActiveDocument.GetApplication.MsgBox("Test")。所以也屬於不支援之列。

Case2:如何在Script中獲取當前文件的報表

Qv8.01版本寫法:

Macro:

function countReports

set ri = ActiveDocument.GetDocReportInfo

end function

function getReportInfo (i)

set ri = ActiveDocument.GetDocReportInfo

set r = ri.Item(i) & "," & r.Name & CHR(10)

end function

Script:

let noOfReports = countReports();

For i = 0 to noOfReports-1

let reportInfo = getReportInfo($(i));

reportInfo:

Load * INLINE [

reportID, reportName

$(reportInfo)];

Next

Qv8.20+版本寫法:

為了滿足對類似上述的需求,Qv增加了函式:NoOfTables, TableName, TableNumber, Report-

Name, NoOfReports, ReportId, ReportNumber and ReportComment

因此可以這樣修改:

let noOfReports = NoOfReports();

For i = 0 to noOfReports-1

Let repName = ReportName(i);

Let repID = ReportId(i);

reportInfo:

Load * INLINE [

reportID, reportName

$(repID),$(repName)];

Next

Case3:如果正常呼叫非Qv物件函式

如同dosomeTest()函式例項,在所有Qv版本中都可以呼叫。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10158957/viewspace-1023706/,如需轉載,請註明出處,否則將追究法律責任。

相關文章