2

ロータススクリプトを使用してWebページからフィールド値を読み取る必要があります。基本的に、特定のURLに移動し、ページから値を取得して、ユーザーを送信するURLにこの値を使用するエージェントを作成することを計画しています。

誰かが私にポインタを与えることができますか?

A

4

3 に答える 3

4

2019年12月の更新:Notes 10(2018年にリリース)の時点で、私のコードとまったく同じことを行うNotesHTTPRequestクラスがあります。

私はいつもこれをします、それは(Windows上で)まったく難しいことではありません。これを行うためのクラスを作成したので、実装は非常に簡単です。

これがあなたがそれを呼ぶ方法です:

Dim internet As New RemoteHTML()
Dim html As String
html = internet.GetHTTP("http://www.texasswede.com/mypage.html")

これで、html文字列から必要な情報を引き出すことができます。

クラスは次のとおりです。

Option Public
Option Declare

Class RemoteHTML
    Private httpObject As Variant
    Public httpStatus As Integer

    Public Sub New()
        Set httpObject = CreateObject("MSXML2.ServerXMLHTTP")
    End Sub

    Public Function GetHTTP(httpURL As String) As String
        Dim retries As Integer
        retries = 0     
        Do
            If retries>1 Then
                Sleep 1     ' After the two first calls, introduce a 1 second delay betwen each additional call
            End If
            retries = retries + 1   
            Call httpObject.open("GET", httpURL, False)
            Call httpObject.send()
            httpStatus = httpObject.Status
            If retries >= 10 Then
                httpStatus = 0  ' Timeout
            End If
        Loop Until httpStatus = 200 Or httpStatus > 500 Or httpStatus = 404  Or httpStatus = 0
        If httpStatus = 200 Then
            GetHTTP = Left$(httpObject.responseText,16000)
        Else
            GetHTTP = ""
        End If
    End Function


    Public Function GetFile(httpURL As String, filename As String) As Boolean
        Dim session As New NotesSession
        Dim retries As Integer
        Dim stream As NotesStream
        Dim flag As Boolean
        Dim responsebody As variant
        Dim cnt As Long
        Dim buffer As String
        Dim tmp As Byte

        Set stream = session.CreateStream
        retries = 0     
        Do
            If retries>1 Then
                Sleep 1     ' After the two first calls, introduce a 1 second delay betwen each additional call
            End If
            retries = retries + 1   
            Call httpObject.open("GET", httpURL, False)
            Call httpObject.send()
            httpStatus = httpObject.Status
            If retries >= 10 Then
                httpStatus = 0  ' Timeout
            End If
        Loop Until httpStatus = 200 Or httpStatus > 500 Or httpStatus = 404  Or httpStatus = 0
        If httpStatus = 200 Then
            flag = stream.Open(filename, "binary")
            If flag = False Then
                MsgBox "Failed to create " & filename & "..."
                GetFile = False 
                Exit function
            End If
            responsebody = httpObject.ResponseBody
            ForAll r in responsebody
                tmp = r
                Call Stream.Write(Chr$(CInt(tmp)))
                cnt = cnt + 1
            End ForAll
            MsgBox cnt
            GetFile = True
        Else
            GetFile = False
        End If

    End Function

    Private Function getString(ByVal StringBin As string)
        Dim intCount As Long
        getString =""
        For intCount = 1 To LenB(StringBin)
            getString = getString & Chr( Asc(MidB(StringBin, intCount, 1)) )
        Next
    End Function

End Class
于 2012-10-05T14:28:06.193 に答える
1

コードがWindowsで実行される場合は、WinHTTPまたはXMLHTTPCOMクラスのいずれかを使用してWebページを読み取ることができます。コードが他のプラットフォームで実行される場合は、LotusScriptの代わりにJavaを使用することをお勧めします。

于 2012-10-04T11:19:52.630 に答える
0

あなたがNotesFieldから読み込もうとしているなら、あなたは以下のアプローチに行くことができます。Thaクラスは、NotesRichTextアイテムに存在する可能性のある、他の種類の非表示の埋め込み画像(貼り付けられたグラフィック)を見つけるために、リッチテキストアイテムのhtml文字列へのエクスポートを具体的に処理するために作成されました。関数ExportDoc()は、html応答テキストを手元のドキュメントのユーザー定義フィールドにコピーします。

Public Class RTExporter
    session As NotesSession
    db As NotesDatabase
    doc As NotesDocument
    obj As Variant
    url As String

    Public Sub New()
        Set Me.session = New NotesSession()
        Set db = session.CurrentDatabase
        Set obj = CreateObject("Microsoft.XMLHTTP")
    End Sub

    ' Handles export from eventual NotesRichTextitems in the form of HTml
    Public Function ExportDoc(hostUrl As String, doc As NotesDocument, rtFieldName As String, htmlFieldName As String)
        Dim htmlString As String    

        url = hostUrl & Me.db.FilePath & "/0/" & doc.Universalid & "/" & rtFieldname & "?openfield&charset=utf-8        

        Set Me.doc = doc    

        htmlString = GetHtmlFromField(htmlFieldName)

        Call doc.ReplaceItemValue(htmlFieldName, htmlString)

        Call doc.Save(True, False)
    End Function

    ' Get http response text and store it in <fieldname>
    Private Function GetHtmlFromField(rtFieldName As String) As String
        Dim html As String      

        On Error Goto ERH

        obj.open "GET", Me.url, False, "", ""

        obj.send("")

        GetHtmlFromField = Trim$(obj.responseText)

        Exit Function
ERH:
        GetHtmlFromField = "Error " & Err & ": " & Error & " occured on line: " & Erl
    End Function

End Class
于 2014-09-19T08:56:56.303 に答える