0

現在、ソース システム (Apptio) から宛先システム (PCM) へのフィードを自動化しようとしています。基本的に、組み込みの API を使用して .tsv ファイルを共有ドライブの場所にダウンロードし、インポート ジョブをトリガーしてそのファイルを PCM に処理しようとしています。

私はAPIを呼び出してファイルをダウンロードすることに少し行き詰まっていますが、いくつかのアプローチを試しました。そのうちの1つはうまくいくと思いますが、あまり信頼できません.

wscript.exeを使用してCMDプロンプトから次のVBScriptを呼び出してみました...

Dim oXMLHTTP
Dim oStream
dim urlstr

Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP.3.0")

urlstr = "https://SITE.apptio.com/biit/api/v1.tsv?date=Apr%3AFY2013&dataPath=-%40CSITE.co.uk%253AService%2BCosting%2Bv2%2FReports%2F.DateGoesHere%2FCostModels%2FDefault%2F.View%253Atab%253AService%2BCosting%2F.View%253AApptio%2BSandbox%2F.View%253"

urlstr = urlstr & "AABM%2FABM%2BOutput%2F%21GROUPBY%255B%257BABM%2BOutput.Account%2BProcess%257D%252C%257BABM%2BOutput.Channel%257D%252C%257BABM%2BOutput.Product%257D%255D%2F.Summary%2F%21NEWCOLUMN%255B%257BLTM%2BFixed%257D%253DPreviousYear%28Fixed%29%255D%255B%253DCurrency%28%2524_%29%255D%2F%21NEWCOLUMN%255B%257BLTM%2BSemi%2BVariable%257D%253DPreviousYear%28Semi%2BVariable%29%255D%255B%253DCurrency%28%2524_%29%255D%2F%21NEWCOLUMN%255B%257BLTM%2BVariable%257D%253DPreviousYear%28Variable%29%255D%255B%253DCurrency%28%2524_%29%255D%2F%21NEWCOLUMN%255B%257BLTM%2BCost%257D%253DPreviousYear%28Cost%29%255D%255B%253DCurrency%28%2524_%29%255D%2F%21SORT%255B%257BLTM%2BCost%257D%257Cdesc%255D%2F%21LIMIT%255B0%252C2147483647%252Cadd_total%255D%2F%21LIMIT_COLUMNS%255B%257BABM%2BOutput.Account%2BProcess%257D%252C%257BABM%2BOutput.Channel%257D%252C%257BABM%2BOutput.Product%257D%252C%257BLTM%2BFixed%257D%252C%257BLTM%2BSemi%2BVariable%257D%252C%257BLTM%2BVariable%257D%252C%257BLTM%2BCost%257D%255D%255B%255D%255B%255D%255B'orderByIncludeList%255D"

oXMLHTTP.Open "GET", urlstr, False
oXMLHTTP.Send

If oXMLHTTP.Status = 200 Then
    Set oStream = CreateObject("ADODB.Stream")
    oStream.Open
    oStream.Type = 1
    oStream.Write oXMLHTTP.responseBody
    oStream.SaveToFile "\\csdatg08\FinanceTransformationFM\Transformation\Josh\ABM Transfer\Apptio\DataFeed\Output.tsv"
    oStream.Close
End If

ただし、これにより次のエラーが発生します。

(12, 1) msxml3.dll: アクセスが拒否されました。

これは、私が API を呼び出しているという事実と関係があると思います。代わりに、同じサーバーでホストされているグラフィックの URL を使用してみましたが、問題なく指定された場所をダウンロードできます。

また、URL をブラウザーに直接貼り付けることも試みました。URL はユーザー認証を要求しますが (これは私が予想していたことです)、URL が正しいことを示す [名前を付けて保存] ダイアログ ボックスが表示されます。

それで..次に、IEのインスタンスを起動し、ログオンプロンプトを許可し、[名前を付けて保存]ダイアログを待ってから、キーを送信してファイルを保存するスクリプトを試しました。

これは機能しますが、私はそれを信頼していません。I>E 異なるバージョンの IE でプロセスを実行するとどうなるか、ダイアログ ボックスが開いているときに別の保存が行われるとどうなるか ....

したがって、本格的な SQL リンク ルートをたどる前に、より良い方法を誰かが知っているかどうかを確認したいと考えています。

ありがとう

(次の 2 番目のコード)

Dim objExplorer : Set objExplorer = CreateObject("InternetExplorer.Application") 
objExplorer.Navigate "https://SITE.apptio.com/biit/api/v1.tsv?date=Apr%3AFY2013&dataPath=-%40CSITE.co.uk%253AService%2BCosting%2Bv2%2FReports%2F.DateGoesHere%2FCostModels%2FDefault%2F.View%253Atab%253AService%2BCosting%2F.View%253AApptio%2BSandbox%2F.View%253AABM%2FABM%2BOutput%2F%21GROUPBY%255B%257BABM%2BOutput.Account%2BProcess%257D%252C%257BABM%2BOutput.Channel%257D%252C%257BABM%2BOutput.Product%257D%255D%2F.Summary%2F%21NEWCOLUMN%255B%257BLTM%2BFixed%257D%253DPreviousYear%28Fixed%29%255D%255B%253DCurrency%28%2524_%29%255D%2F%21NEWCOLUMN%255B%257BLTM%2BSemi%2BVariable%257D%253DPreviousYear%28Semi%2BVariable%29%255D%255B%253DCurrency%28%2524_%29%255D%2F%21NEWCOLUMN%255B%257BLTM%2BVariable%257D%253DPreviousYear%28Variable%29%255D%255B%253DCurrency%28%2524_%29%255D%2F%21NEWCOLUMN%255B%257BLTM%2BCost%257D%253DPreviousYear%28Cost%29%255D%255B%253DCurrency%28%2524_%29%255D%2F%21SORT%255B%257BLTM%2BCost%257D%257Cdesc%255D%2F%21LIMIT%255B0%252C2147483647%252Cadd_total%255D%2F%21LIMIT_COLUMNS%255B%257BABM%2BOutput.Account%2BProcess%257D%252C%257BABM%2BOutput.Channel%257D%252C%257BABM%2BOutput.Product%257D%252C%257BLTM%2BFixed%257D%252C%257BLTM%2BSemi%2BVariable%257D%252C%257BLTM%2BVariable%257D%252C%257BLTM%2BCost%257D%255D%255B%255D%255B%255D%255BorderByIncludeList%255D" 
objExplorer.ToolBar = 1 
objExplorer.StatusBar = 1 
objExplorer.Width = 800 
objExplorer.Height = 800 
objExplorer.Left = 1 
objExplorer.Top = 1 
objExplorer.Visible = 1 

wscript.echo "window open"
wscript.sleep 6000

Set wshShell = CreateObject("WScript.Shell") 

Do 
    ret = wshShell.AppActivate("File Download") 
    If ret = True Then 
        wshShell.SendKeys "%S" 
        Exit Do 
    End If 
    WScript.Sleep 500 
Loop 
wscript.echo "Save Selected"

Do 
    ret = wshShell.AppActivate("Save As") 
    If ret = True Then 
        wshShell.SendKeys "%S" 
        Exit Do 
    End If 
    WScript.Sleep 500 
Loop
wscript.echo "File Saved"

これまでの参考文献:

VBスクリプトでIEダウンロードダイアログを処理するには? 開いているメッセージ ボックスを検出して閉じる VBScript http://www.pctools.com/guides/scripting/detail/149/?act=reference

4

0 に答える 0