Втянуть файл через Web-сервис в базу. Можно ли?

Тема в разделе "Lotus - Программирование", создана пользователем susinmn, 4 июн 2010.

  1. susinmn

    susinmn Well-Known Member

    Регистрация:
    16 окт 2007
    Сообщения:
    530
    Симпатии:
    8
    Можно ли через Web-сервис втянуть файл, ну и прикрепить его к документу?
    Подскажите в какую сторону копнуть
     
  2. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Запрос и ответ — это xml. Нужно разработать соответствующий интерфейс. В запросе указывать путь и имя файла или другую идентифицирующую информацию, в ответ "упаковывать" файл в xml в соответствующей кодировке, на приёме "распаковывать". Ключевые слова для поиска в справке Lotus: wsdl, dxl, NotesDOMParser, NotesDXLExporter, NotesDXLImporter, NotesSAXParser, NotesXSLTransformer, NotesXMLProcessor. Ну и тут на форуме примеры мелькали.
     
  3. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.046
    Симпатии:
    18
    susinmn
    а вы смогли для начала просто втянуть какую нить страничку?
    если смогли то в чем проблема втянуть файл?
     
  4. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
  5. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    есть по этой ссылке такой раздел...
    Скачал базу, решил посмотреть что к чему.

    Есть там такой ЛОтусовый вебсервис BookDownloadUpload, который якобы должен создавать новый документ и крепить к нему аттачмент.
    Всё через SOAP Toolkit 3.0

    Попробовал его заюзать с помощью опять же уже написанного агента в этой базе, который обращается к этому веб сервису (MSSOAP BookDownloadUpload Test).

    в вызове вебсервиса обращаюсь к функции addNewFile из сервиса BookDownloadUpload и передаю туда 5 параметров, последний из которых
    бинарный stream

    Код (Text):
    Sub Initialize
    Dim wsdl As String
    Dim client As Variant
    Dim result As Variant
    Dim result2 As Variant


    Dim startTime As Single
    Dim endTime As Single

    '** create the MSSOAP object, based on our WSDL file
    startTime = Timer
    wsdl = "http://test.server/WSBookstore.nsf/BookDownloadUpload?WSDL"

    '** try to use MSSOAP 3.0, if available
    On Error Resume Next
    Set client = CreateObject("MSSOAP.SoapClient30")
    On Error Goto processError

    '** if not, use whatever version is on the workstation
    If (Err > 0) Then
    Err = 0
    Set client = CreateObject("MSSOAP.SoapClient")
    End If
    Call client.MSSoapInit(wsdl)

    '** call the GetFirstTitleMatch method (note that MSSOAP is
    '** NOT case-sensitive with the method names)
    Set result = client.getFirstTitleMatch("T")
    endTime = Timer
    Print "Total elapsed time: " & Fix((endTime - startTime) * 1000) & " milliseconds"

    '================================
    Dim session As New NotesSession
    Dim fileIN As NotesStream
    Set fileIN = session.CreateStream


    If Not fileIN.Open("c:\teete.txt","Binary") Then
    Msgbox "Cannot open teete.txt", , "Error"  
    Exit Sub
    End If
    If fileIN.Bytes = 0 Then
    Msgbox "File did not exist or was empty", , "teete.txt"
    Exit Sub
    End If

    Set result2 = client.addNewFile("test","Test","description one sdfasf", "Reference", "teete.txt",fileIN)
    '==========================================з

    На этой строчке

    Set result2 = client.addNewFile("test","Test","description one sdfasf", "Reference", "teete.txt",fileIN)

    сваливается в ошибку о несоответствии типов... Хотя вроде бы написано что данный параметр может принимать либо бинарный либо ASCII поток...

    в функции addNewFile такая:

    Код (Text):
    Public Function addNewFile (title As String, author As String, description As String, _
    typeOfBook As BookType, fileName As String, base64file As XSD_BASE64BINARY, _
    returnFault As WS_FAULT) As String
    Dim book As New BookInfoAndFile
    book.title = title
    book.author = author
    Set book.typeOfBook = typeOfBook
    book.description = description
    book.fileName = fileName
    Set book.base64file = base64file
    addNewFile = addNewFileComplex(book, returnFault)
    End Function

    т.е. переменная типа base64file As XSD_BASE64BINARY

    что же в неё тогда передавать если не поток?? и что это за тип такой?
    Кто нибудь копал дальше?)))
     
  6. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Gor
    В справке дизайнера см. разделы "Java and LotusScript mappings", "Web services Java and LotusScript classes"
     
  7. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    почитал...


    Но всё равно непонятно, почему вызываемая функция
    Set result2 = client.addNewFile("test","Test","description one sdfasf", "Reference", "teete.txt",fileIN)

    Код (Text):
    Public Function addNewFile (title As String, author As String, description As String, _
    typeOfBook As BookType, fileName As String, base64file As XSD_BASE64BINARY, _
    returnFault As WS_FAULT) As String
    Dim book As New BookInfoAndFile
    book.title = title
    book.author = author
    Set book.typeOfBook = typeOfBook
    book.description = description
    book.fileName = fileName
    Set book.base64file = base64file
    addNewFile = addNewFileComplex(book, returnFault)
    End Function
    возвращает несоответствие форматов.
    На вход же подаётся формат notesstream...

    Или же пора мне с этим заканчивать и идти домой)))
     
  8. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Gor
    Читаем внимательно :blush::
    XSD_BASE64BINARY
    The proxy class mapped to XML Schema type base64Binary. Nillable.
    Super class:
    XSD_SIMPLETYPE
    methods:
    SUB setValueFromNotesStream (nsValue As NotesStream)
    Sets the XML representation by converting bytes in the NoteStream to a base64-encoded string.
    FUNCTION getValueAsNotesStream () As NotesStream
    Converts the current base64-encoded XML representation to bytes in the returned NotesStream.
    Inherited methods:
    SUB setValueFromString (value As String)
    Sets the current value from a string of base64-encoded characters
    FUNCTION getValueAsString () As String
    Returns the current value of base64-encoded characters.
     
Загрузка...

Поделиться этой страницей