ロータススクリプトを使用してWebページからフィールド値を読み取る必要があります。基本的に、特定のURLに移動し、ページから値を取得して、ユーザーを送信するURLにこの値を使用するエージェントを作成することを計画しています。
誰かが私にポインタを与えることができますか?
A
ロータススクリプトを使用してWebページからフィールド値を読み取る必要があります。基本的に、特定のURLに移動し、ページから値を取得して、ユーザーを送信するURLにこの値を使用するエージェントを作成することを計画しています。
誰かが私にポインタを与えることができますか?
A
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
コードがWindowsで実行される場合は、WinHTTPまたはXMLHTTPCOMクラスのいずれかを使用してWebページを読み取ることができます。コードが他のプラットフォームで実行される場合は、LotusScriptの代わりにJavaを使用することをお勧めします。
あなたが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