1

Тема: Lotus/Domino и вебсервер. Вебсервисы (web-services) в лотусе.

Для запуска на Domino  вебсервера
- запускаем серверную задачу http (Server->Status -> task -> start)
проверяем по ип в барузере, открывается ли сервак.
Должна открыться база  /homepage.nsf?Open

В нужной для работы в вебе базе смотрим, есть ли юзер Anonymous с правами не ниже Reader или Editor, иначе система просит логин и пароль.
В ацл в адвансед проверяем, какой есть максимум для интернет доступа, убираем no access


Возможные ошибки:
"Error while processing web service request" - если у Anonymous права не "no access"
"Error 500. HTTP Web Server: Lotus Notes Exception - The Address Book does not contain a cross certificate capable of validating the public key." - если сам вебсервис н подписан в дезайнере юзером с текущего сервака. Актуально при переносе базы на другой сервер.

Поделиться

2

Re: Lotus/Domino и вебсервер. Вебсервисы (web-services) в лотусе.

Web-сервисы - описание:
ibm.com/developerworks/ru/library/web-services1/index.html
ibm.com/developerworks/ru/library/web-services2/index.html


Логироваение вебсервиса: SoapLog - не работает с сишарпом!
nsftools.com/tools/soaplog.zip


SoapUI 5.0.0 - прога для тестирования вебсервисов

Формат открытия вебсервиса в данной программе:
http: // 192.168.200.123 /ben/БАЗА.nsf/Имя вебсервиса?WSDL


Пример 1 простейшего вебсервиса, который возвращает название базы данных

Class Yurclass
    Public Function getYurName  (sFullName As String) As String
        Dim session  As NotesSession 
        Set session = New NotesSession 
        Dim db2 As notesdatabase 
        Set db2 = session.GetDatabase("","OfficeWork\BN.nsf")
        getYurName  =  db2.Title
    End Function
End Class

Функция getYurName возвратит само название базы данных.

Поделиться

3

Re: Lotus/Domino и вебсервер. Вебсервисы (web-services) в лотусе.

Чтобы добавить запуск веб-сервера в автозагрузку, в notes.ini добавляем в запуск служба HTTP.

ServerTasks=Replica,Router,Update,AMgr,Adminp,Sched,CalConn,RnRMgr,HTTP

Поделиться

4

Re: Lotus/Domino и вебсервер. Вебсервисы (web-services) в лотусе.

Вот уже более сложный пример вебсервиса. результат в строке mas, значения разделяем символами "//" :


Public Function getYurName  (sFullName As String, Fault1 As WS_FAULT) As String
        On Error Goto processError
        Dim formula As String
        Dim mas As String
        Dim session  As NotesSession 
        Set session = New NotesSession 
        Dim db As notesdatabase 
        Dim db2 As notesdatabase 
        Set db = session.CurrentDatabase
        Set db2 = session.GetDatabase("","Offr\Arh.nsf")
        mas = ""
        formula =  {@Contains(FullName;"} & sFullName & {")}        
        Dim doc As notesdocument
        Dim dc As NotesDocumentCollection
        Set dc=db2.Search(formula,Nothing,0) 
        mas  = "найдено" &  dc.count & ": "
        For i=1 To dc.count
            Set doc = dc.GetNthDocument(i)        
            mas = mas & "//" &  doc.FullName(0) &    "-"    &  doc.Afiscod(0)     
        Next
        getYurName  = mas
        Exit Function
processError:
        Call Fault1.setFault(True)   ' необходимо для ошибочной активации 
        Call Fault1.setFaultString(Error$  & Erl())  
        Exit Function    
    End Function

Поделиться

5

Re: Lotus/Domino и вебсервер. Вебсервисы (web-services) в лотусе.

Следующий пример вебсервиса:
Где  returnArray - это двумерный массив, в котором пары значений 0 - текст и 1 - цифра.
Потом переносим все непустые значения из returnArray в Arr2


   

Public Function getYurName2  (sFullName As String, Fault1 As WS_FAULT) 'As VARIANTARRAY_HOLDER, STRINGARRAY_HOLDER
        On Error Goto processError
        Dim formula As String
        Dim session  As NotesSession 
        Set session = New NotesSession 
        Dim db As notesdatabase 
        Dim db2 As notesdatabase 
        Set db = session.CurrentDatabase
        Set db2 = session.GetDatabase("","OfficeWork\regpal\regjur\ArhivJL.nsf")
        
        Print "Запрос вебсервиса! " & sFullName
        'formula =  {@Contains(FullName;"} & sFullName & {")}         !@IsResponseDoc 
        formula =  {  [FullName] CONTAINS "} &  sFullName & {"}    
        
        Dim doc As notesdocument
        Dim dc As NotesDocumentCollection
        'Set dc=db2.Search(formula,Nothing,0) 
        Set dc=db2.FTSearch(formula,0) 
        
        Dim returnArray As New VARIANTARRAY_HOLDER'
        Redim returnArray.Value(dc.count,1)  
        For i=1 To dc.count
            Set doc = dc.GetNthDocument(i)    
            If Not doc.hasitem("$Ref") Then  ' чтобы последнее изменение юрлица было только.
                returnArray.Value(i,0) = doc.FullName(0)
                returnArray.Value(i,1) = doc.Afiscod(0) 
            End If
        Next
        
        j%=0    
        For i=1 To Ubound(returnArray.Value,1) ' ищем макс значение для Redim Arr2
            If returnArray.Value(i,0)<>"" Then
                j%=j%+1    
            End If
        Next    
        
        Dim Arr2() As String
        Redim Arr2(j%-1,1) As String
        
        j%=0    
        For i=1 To Ubound(returnArray.Value,1)
            If returnArray.Value(i,0)<>"" Then
                Arr2(j%,0)= returnArray.Value(i,0)                
                Arr2(j%,1)= returnArray.Value(i,1)
                'Print j%
                'Print Arr2(j%,0)
                'Print Arr2(j%,1)
                j%=j%+1
                
            End If
        Next
        
        
        getYurName2= Arr2        
        
        Exit Function
processError:
        Call Fault1.setFault(True)   ' необходимо для ошибочной активации 
        Call Fault1.setFaultString(Error$  & Erl())  
        Exit Function    
    End Function

Поделиться

6

Re: Lotus/Domino и вебсервер. Вебсервисы (web-services) в лотусе.

Вебсервис

Class myklass
    Public A() As String
    Public B() As String    
End Class

Class test
    Public Function BaseName  (xName As String,yName As String  ) As myklass
        Dim xxx As New myklass
        Redim xxx.A(5)
        Redim xxx.B(5)
        For x=0 To 5
            xxx.A(x) =  xName
            xxx.B(x)=  yName
        Next
        Set        BaseName = xxx
    End Function
End Class

возвращает:

 <BASENAMEReturn xsi:type="ns1:MYKLASS">
            <A xsi:type="soapenc:Array" soapenc:arrayType="xsd:string[6]">
               <item xsi:type="xsd:string">1</item>
               <item xsi:type="xsd:string">1</item>
               <item xsi:type="xsd:string">1</item>
               <item xsi:type="xsd:string">1</item>
               <item xsi:type="xsd:string">1</item>
               <item xsi:type="xsd:string">1</item>
            </A>
            <B xsi:type="soapenc:Array" soapenc:arrayType="xsd:string[6]">
               <item xsi:type="xsd:string">2</item>
               <item xsi:type="xsd:string">2</item>
               <item xsi:type="xsd:string">2</item>
               <item xsi:type="xsd:string">2</item>
               <item xsi:type="xsd:string">2</item>
               <item xsi:type="xsd:string">2</item>
            </B>
         </BASENAMEReturn>

Поделиться

7

Re: Lotus/Domino и вебсервер. Вебсервисы (web-services) в лотусе.

Для логирования работы вебсервиса можно:
1. Включить "HTTP Request Logs", тогда в папке  Lotus\Domino\data\IBM_TECHNICAL_SUPPORT\
будут создаваться файлики с логом запроса.
htthr_9c4_e40_20140904@134325.log
нечитаемые.
И вообще падает доступ к вебсервисам.
www-01.ibm.com/support/docview.wss?uid=swg27003598

1. Лог в базу Domino Web Server Log  (domlog.nsf) - более менее нормальный лог

Поделиться

8

Re: Lotus/Domino и вебсервер. Вебсервисы (web-services) в лотусе.

Еще чуть более сложный скрипт, который возвращает блоки полей.

%INCLUDE "lsxsd.lss"

Class BookPolya
    Public author As String
    Public description As String
End Class

Class myArray
    Public bookArray() As BookPolya
    
    Public Function    setmyArray  (x As String, Fault1 As WS_FAULT) As String
        On Error Goto processError
        Redim bookArray(2)
        For i=0 To 2
            Dim book As New BookPolya
            book.author = "author " &  i
            book.description = "description " &  i
            Set bookArray(i) = book
        Next
        Exit Function
processError:
        Call Fault1.setFault(True)
        Call Fault1.setFaultString(Error$  & Erl())  
        Exit Function
    End Function
End Class    

Class Yurclass
    Public Function Myfunk  (sName As String, Fault1 As WS_FAULT) As myArray ' Вызываемая функция
        On Error Goto processError
        Set Myfunk = New myArray
        Call Myfunk.setmyArray(sName,Fault1)
        Exit Function
processError:
        Call Fault1.setFault(True)
        Call Fault1.setFaultString(Error$  & Erl())  
        Exit Function
    End Function
End Class

Вот что в ответ приходит:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://_.w3.org/2001/XMLSchema" xmlns:xsi="http://_.w3.org/2001/XMLSchema-instance" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
   <soapenv:Body>
      <ns1:MYFUNKResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1="urn:DefaultNamespace">
         <MYFUNKReturn xsi:type="ns1:MYARRAY">
            <BOOKARRAY xsi:type="soapenc:Array" soapenc:arrayType="ns1:BOOKPOLYA[3]">
               <item xsi:type="ns1:BOOKPOLYA">
                  <AUTHOR xsi:type="xsd:string">author 0</AUTHOR>
                  <DESCRIPTION xsi:type="xsd:string">description 0</DESCRIPTION>
               </item>
               <item xsi:type="ns1:BOOKPOLYA">
                  <AUTHOR xsi:type="xsd:string">author 1</AUTHOR>
                  <DESCRIPTION xsi:type="xsd:string">description 1</DESCRIPTION>
               </item>
               <item xsi:type="ns1:BOOKPOLYA">
                  <AUTHOR xsi:type="xsd:string">author 2</AUTHOR>
                  <DESCRIPTION xsi:type="xsd:string">description 2</DESCRIPTION>
               </item>
            </BOOKARRAY>
         </MYFUNKReturn>
      </ns1:MYFUNKResponse>
   </soapenv:Body>
</soapenv:Envelope>

Поделиться

9

Re: Lotus/Domino и вебсервер. Вебсервисы (web-services) в лотусе.

Попытка добавить к строке ?WSDL  кусок  &outputformat=JSON чтобы вебсервис работал в JSON формате вместо XML -  неудачно.

Поделиться

10

Re: Lotus/Domino и вебсервер. Вебсервисы (web-services) в лотусе.

Пример: ПО ФАМИЛИИ и ПАСПОРТУ ВОЗВРАЩАЕМ МАССИВ "АДРЕС И ПЛОЩАДЬ"   

    Public Function getArea  (FIO As String, Pasp As String, Fault1 As WS_FAULT)  
        On Error Goto processError        
        Dim formula As String
        Dim session  As NotesSession 
        Dim dc As NotesDocumentCollection
        Dim doc As notesdocument
        Dim db2 As notesdatabase 
        Dim dblog As notesdatabase
        Dim doclog As notesdocument
        
        Set session = New NotesSession 
        Set db2 = session.GetDatabase("","....GosReRe.nsf")
        Set dblog = session.GetDatabase("","WebLog.nsf")
        
        Set doclog = New NotesDocument    (dblog)
        Dim dateTime As New NotesDateTime( "" )
        dateTime.LSLocalTime = Now
        doclog.Form ="Log Entry"
        doclog.text_log = FIO
        doclog.base_name="Недвижимость"
        Dim doc2 As NotesDocument ' Не всё логирует!!
        Set doc2 = session.DocumentContext
        doclog.ip = doc2.Remote_Addr(0)
        
        formula =  {([PravoObladF1_1] CONTAINS "} &  FIO & {")  &  ([PravoObladF1_1]  CONTAINS "} & Pasp  & {")  & ([Form] CONTAINS "forma1-3" OR "forma1-2" OR "forma1-1")}        
        
        If Pasp ="" Then
            formula =  {([PravoObladF1_1] CONTAINS "} &  FIO & {")  &   ([Form] CONTAINS "forma1-3" OR "forma1-2" OR "forma1-1")}            
        End If
        
        Set dc=db2.FTSearch(formula,0) 
        Print "найдено: " & dc.count
        
        If dc.count=0 Then
            getArea="ничего не найдено"    
        Else
            
            Dim returnArray As New VARIANTARRAY_HOLDER
        'Redim returnArray.Value(dc.count,2)
            Redim returnArray.Value(dc.count-1,1)
            For i=1 To dc.count
                Set doc = dc.GetNthDocument(i)    
                
                returnArray.Value(i-1,0) = doc.AdresF1_1(0)
                returnArray.Value(i-1,1) = doc.PloshF1_1(0) 
            'returnArray.Value(i,2) = doc.PravoObladF1_1(0)
            Next
            
            Set getArea =returnArray
        End If
        doclog.log_time=dateTime.LSLocalTime
        Call doclog.Save(True, False)
        
        Exit Function
processError:
        doclog.ERRMSG = Error$  & Erl()
        doclog.log_time=dateTime.LSLocalTime
        Call doclog.Save(True, False)
        Call Fault1.setFault(True)   ' необходимо для ошибочной активации 
        Call Fault1.setFaultString(Error$  & Erl())  
    End Function

Запрос:

  <urn:GETAREA soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
         <FIO xsi:type="xsd:string">Сиваков</FIO>

Ответ:

   <ns1:GETAREAResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1="urn:DefaultNamespace">
         <GETAREAReturn xsi:type="soapenc:Array" soapenc:arrayType="xsd:anyType[7]">
            <item xsi:type="xsd:string">С район, с. С, ул. Чапаева, 1</item>
            <item xsi:type="xsd:string">93</item>
            <item xsi:type="xsd:string">г. Т, ул. 20 , д. 1, ком. 98</item>
            <item xsi:type="xsd:string">199,0 кв.м.</item>
......
         </GETAREAReturn>

Поделиться

11

Re: Lotus/Domino и вебсервер. Вебсервисы (web-services) в лотусе.

Функция на запрос

   <urn:GETUSLOVNUMBER soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
         <TOWN xsi:type="xsd:string">Тирасполь</TOWN>
         <STREET xsi:type="xsd:string">Ленина</STREET>
         <HOUSE xsi:type="xsd:string">1</HOUSE>
         <FLAT xsi:type="xsd:string">1</FLAT>
      </urn:GETUSLOVNUMBER>

Возвращает:

 <GETUSLOVNUMBERReturn xsi:type="soapenc:Array" soapenc:arrayType="xsd:anyType[90]">
            <item xsi:type="xsd:string">г. Тирасполь, ул. Ленина, 1/1</item>
            <item xsi:type="xsd:string">00-01-00009</item>
            <item xsi:type="xsd:string">г. Тирасполь, ул. Ленина, 1/1</item>
            <item xsi:type="xsd:string">00-0000/11006-1/1(8)</item>
            <item xsi:type="xsd:string">г. Тирасполь, ул. Ленина, 1/1</item>
            <item xsi:type="xsd:string">01-2000/10003-1/00)</item>

Вот сама функция:

    Public Function getUslovNumber  (town As String, street As String,  house As String,  flat As String, Fault1 As WS_FAULT) 
        '  ПО АДРЕСУ ВОЗВРАЩАЕТ  НОМЕР
        On Error Goto processError        
        Dim formula As String
        Dim session  As NotesSession 
        Dim dc As NotesDocumentCollection
        Dim doc As notesdocument
        Dim db2 As notesdatabase 
        Dim dblog As notesdatabase
        Dim doclog As notesdocument
        Set session = New NotesSession 
        Set db2 = session.GetDatabase("","...\GRe.nsf")
        Set dblog = session.GetDatabase("","WebLog.nsf")
        Set doclog = New NotesDocument    (dblog)
        Dim dateTime As New NotesDateTime( "" )
        dateTime.LSLocalTime = Now
        doclog.Form ="Log Entry"
        doclog.text_log = region &" "& town &" "& street &" "& house &" "& flat
        doclog.base_name="Недвижимость"
        Dim doc2 As NotesDocument ' Не всё логирует!!
        Set doc2 = session.DocumentContext
        doclog.ip = doc2.Remote_Addr(0)
        
        formula = ""
        
        If town <> "" Then
            formula =  {([AdresF1_1] CONTAINS "} &  town & {")}            
        End If
        If street <> "" Then
            If formula = "" Then
                formula =  {([AdresF1_1] CONTAINS "} &  street &  {")}
            Else    
                formula = formula & { & ([AdresF1_1] CONTAINS "} &  street & {")}
            End If
        End If
        If house <> "" Then
            If formula = "" Then
                formula =  {([AdresF1_1] CONTAINS "} &  house & {")}        
            Else    
                formula =  formula & { &  ([AdresF1_1] CONTAINS "} &  house & {")}    
            End If
        End If
        If flat <> "" Then
            If formula = "" Then
                formula =   {([AdresF1_1] CONTAINS "} &  flat & {")}
            Else    
                formula =  formula & { & ([AdresF1_1] CONTAINS "} &  flat & {")}
            End If
        End If
        formula =  formula  &   { & ([Form] CONTAINS "forma1-3" OR "forma1-2"  OR "forma1-1")}
        Set dc=db2.FTSearch(formula,0) 
    '    Print "найдено: " & dc.count
        If dc.count=0 Then
            getUslovNumber ="ничего не найдено"    
        Else
            Dim returnArray As New VARIANTARRAY_HOLDER
        'Redim returnArray.Value(dc.count,2)
            Redim returnArray.Value(dc.count-1,1)
            For i=1 To dc.count
                Set doc = dc.GetNthDocument(i)    
                
                returnArray.Value(i-1,0) = doc.AdresF1_1(0)
                returnArray.Value(i-1,1) = doc.UslNF1_1(0) 
                If doc.UslNF1_1(0) ="" Then '  если forma1-1 то вернуть кадастровый вместо условного
                    returnArray.Value(i-1,1) = doc.KadNF1_1(0)    
                End If
            'returnArray.Value(i,2) = doc.PravoObladF1_1(0)
            Next
            Set getUslovNumber =returnArray
        End If
        doclog.log_time=dateTime.LSLocalTime
        Call doclog.Save(True, False)
        Exit Function
processError:
        doclog.ERRMSG = Error$  & Erl()
        doclog.log_time=dateTime.LSLocalTime
        Call doclog.Save(True, False)
        Call Fault1.setFault(True)   ' необходимо для ошибочной активации 
        Call Fault1.setFaultString(Error$  & Erl())  
    End Function
    

Поделиться

12

Re: Lotus/Domino и вебсервер. Вебсервисы (web-services) в лотусе.

Шаблон для создания вебсервиса.

Class GTKclass
    Public Function getIndP  (RegNum As String, SerPassp As String, NumPassp As String, Fam As String, FirstName As String, MiddleName As String,  Fault1 As WS_FAULT)  As IndPArray
        On Error Goto processError
Dim doc As notesdocument    
        Print "СТАРТ вебсервиса -  Function getIndP"
        Dim dc As NotesDocumentCollection
        Set getIndP = New IndPArray
        Call getIndP.SetMyArr(dc,Fault1)
        Exit Function    
        
processError:
        Print Err, Error & { в строке } & Erl
        Call Fault1.setFault(True)   ' необходимо для ошибочной активации 
        Call Fault1.setFaultString(Error$  & Erl())  
        Exit Function
        
    End Function
End Class

Class IndPArray
    Public MainMassiv() As PolyaIndP
    Public Function    SetMyArr  (dc As NotesDocumentCollection, Fault1 As WS_FAULT) As String
        j%=0
        For i=1 To dc.count
Set doc = dc.GetNthDocument(i)    
            Dim obyekt As New PolyaIndP
        ' obyekt.имя поля = значение с дока
            Redim Preserve MainMassiv (j%)
            Set MainMassiv(j%) = obyekt
            j%=j%+1
        Next
        Print "КОНЕЦ Вебсервиса -  Function getIndP"
    End Function
End Class

Class PolyaIndP
    'Возвращаемые данные - имена полей
Public фамилия As String
End Class

На входе вебсервис ждет:

<wsdl:part name="REGNUM" type="xsd:string"/>
<wsdl:part name="SERPASSP" type="xsd:string"/>
<wsdl:part name="NUMPASSP" type="xsd:string"/>
<wsdl:part name="FAM" type="xsd:string"/>
<wsdl:part name="FIRSTNAME" type="xsd:string"/>
<wsdl:part name="MIDDLENAME" type="xsd:string"/>

На выходе:

Поделиться

13

Re: Lotus/Domino и вебсервер. Вебсервисы (web-services) в лотусе.

Делаем еще чуть более сложную структуру

<item>....</item>
 <item>
<POLE0 xsi:type="xsd:string">что-то</POLE0>
    <POLE1 xsi:type="xsd:string">что-то еще</POLE1>
                 
 <EMBED xsi:type="ns1:CLASSATACH">
                     <DESCRIPTIONATACH xsi:type="soapenc:Array" soapenc:arrayType="xsd:string[2]">
                        <item xsi:type="xsd:string">descriptionAtach 0</item>
                        <item xsi:type="xsd:string">descriptionAtach 1</item>
                     </DESCRIPTIONATACH>
                     <FILE64ATACH xsi:type="soapenc:Array" soapenc:arrayType="xsd:string[2]">
                        <item xsi:type="xsd:string">File64Atach 0</item>
                        <item xsi:type="xsd:string">File64Atach 1</item>
                     </FILE64ATACH>
                
  </EMBED>
<POLE2 xsi:type="xsd:string">что-то</POLE2>
</item>

Код скрипта для такого SOAP ответа вебсервиса.

Class Yurclass
Public Function getFK
Set getFK = New ULNameArray
Call getFK.SetMyArr(dc,Fault1)
End Function
End Class

Class ULNameArray
Public MainMassiv() As PoliaYurL
Public Function    SetMyArr (dc As NotesDocumentCollection, Fault1 As WS_FAULT) As String
Dim doc As NotesDocument
....
For i=1 To dc.count
Set doc = dc.GetNthDocument(i)    
Dim obyekt As New PoliaYurL
obyekt.POLE0 = "что-то еще"    
obyekt.POLE1 = "что-то"

Set Myfunk = New ClassArray      
Set    obyekt.Embed =    Myfunk.FunctionArray(doc,Fault1)    

Set MainMassiv(j%) = obyekt
    End Function    
End Class

Class ClassAtach
    Public descriptionAtach() As String    
    Public File64Atach() As String    
End Class

Class ClassArray  (простой вариант)
    Public Function    FunctionArray  (Fault1 As WS_FAULT) As ClassAtach
        Print "FunctionArray"
        Dim Atachob As New ClassAtach 
        Redim Atachob.descriptionAtach(1)
        Redim Atachob.File64Atach(1)
        For i=0 To 1
            Atachob.descriptionAtach(i) = "descriptionAtach " &  i
            Atachob.File64Atach(i) = "File64Atach " &  i
        Next
        Set FunctionArray = Atachob
        Exit Function
    End Function
End Class    

Class ClassArray  (более сложный вариант с циклом)
Public Function    FunctionArray  (doc As NotesDocument, Fault1 As WS_FAULT) As ClassAtach
Dim file As String
        Dim session As New NotesSession
        Dim inStream As NotesStream
                Dim Atachob As New ClassAtach 
                If doc.HasEmbedded Then        'есть вложения
                        datapatch$ = {C:\Tmp-mejved\} 
            attachments = Evaluate("@AttachmentNames", doc) 
            
            i=0
            Forall a In attachments
                                Set o=doc.GetAttachment(a)
                Set inStream=session.Createstream
                Call o.ExtractFile ( datapatch$ & o.Name )
                file = datapatch$ & o.Name 
                                Call inStream.Open(file)
                plainText$ =    inStream.ReadText()
                Dim b64 As New CBase64()
                plainText$ =  b64.encode (inStream) 
                Call inStream.Close
                Kill     datapatch$ & o.Name
                                Print i
                Print file
                Redim Preserve Atachob.descriptionAtach(i)
                Redim Preserve Atachob.File64Atach(i)
                Atachob.descriptionAtach(i) = o.Name 
                Atachob.File64Atach(i) = plainText$ 
                i=i+1
                End Forall
        Else
                        ' "нет вложений"    
        End If
                    Set FunctionArray = Atachob
        Exit Function
    End Function
End Class    

Class PoliaYurL
POLE0 As String
POLE1 As String
Public Embed As ClassAtach
End Class    

Поделиться

14

Re: Lotus/Domino и вебсервер. Вебсервисы (web-services) в лотусе.

Пример вебсервиса, возвращающего вложенную структуру данных - внутри  C  есть два поля D и E.

Class indpredklass
    Public A() As String
    Public B() As String 
    Public C() As toklass '  тут!
End Class

Class toklass
    Public D(0) As String
    Public E(0) As String    
End Class

Class test
    Public Function BaseName  (xName As String,yName As String  ) As indpredklass
        Dim xxx As New indpredklass
        Dim yyy As New toklass
        Redim xxx.A(1)
        Redim xxx.B(1)
        Redim xxx.C(3)
        For x=0 To 1
            xxx.A(x) =  "Имя " &  xName-x
            xxx.B(x)=  "Фамилия" &  yName-x
        Next
        
        For x=0 To 3
            yyy.D(0) =  "ИмячленаКФХ " &  x
            yyy.E(0) =  "ФамилиячленаКФХ " &  x
            Set    xxx.C(x)=  yyy
        Next
        
        Set        BaseName = xxx
    End Function
End Class

Ответ такой:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://_.w3.org/2001/XMLSchema" xmlns:xsi="http://_.w3.org/2001/XMLSchema-instance" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
   <soapenv:Body>
      <ns1:BASENAMEResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1="urn:DefaultNamespace">
         <BASENAMEReturn xsi:type="ns1:INDPREDKLASS">
            <A xsi:type="soapenc:Array" soapenc:arrayType="xsd:string[2]">
               <item xsi:type="xsd:string">Имя 3</item>
               <item xsi:type="xsd:string">Имя 2</item>
            </A>
            <B xsi:type="soapenc:Array" soapenc:arrayType="xsd:string[2]">
               <item xsi:type="xsd:string">Фамилия1</item>
               <item xsi:type="xsd:string">Фамилия0</item>
            </B>
            <C xsi:type="soapenc:Array" soapenc:arrayType="ns1:TOKLASS[4]">
               <item xsi:type="ns1:TOKLASS">
                  <D xsi:type="soapenc:Array" soapenc:arrayType="xsd:string[1]">
                     <item xsi:type="xsd:string">ИмячленаКФХ 3</item>
                  </D>
                  <E xsi:type="soapenc:Array" soapenc:arrayType="xsd:string[1]">
                     <item xsi:type="xsd:string">ФамилиячленаКФХ 3</item>
                  </E>
               </item>
               <item xsi:type="ns1:TOKLASS">
                  <D xsi:type="soapenc:Array" soapenc:arrayType="xsd:string[1]">
                     <item xsi:type="xsd:string">ИмячленаКФХ 3</item>
                  </D>
                  <E xsi:type="soapenc:Array" soapenc:arrayType="xsd:string[1]">
                     <item xsi:type="xsd:string">ФамилиячленаКФХ 3</item>
                  </E>
               </item>
               <item xsi:type="ns1:TOKLASS">
                  <D xsi:type="soapenc:Array" soapenc:arrayType="xsd:string[1]">
                     <item xsi:type="xsd:string">ИмячленаКФХ 3</item>
                  </D>
                  <E xsi:type="soapenc:Array" soapenc:arrayType="xsd:string[1]">
                     <item xsi:type="xsd:string">ФамилиячленаКФХ 3</item>
                  </E>
               </item>
               <item xsi:type="ns1:TOKLASS">
                  <D xsi:type="soapenc:Array" soapenc:arrayType="xsd:string[1]">
                     <item xsi:type="xsd:string">ИмячленаКФХ 3</item>
                  </D>
                  <E xsi:type="soapenc:Array" soapenc:arrayType="xsd:string[1]">
                     <item xsi:type="xsd:string">ФамилиячленаКФХ 3</item>
                  </E>
               </item>
            </C>
         </BASENAMEReturn>
      </ns1:BASENAMEResponse>
   </soapenv:Body>
</soapenv:Envelope>

Поделиться

15

Re: Lotus/Domino и вебсервер. Вебсервисы (web-services) в лотусе.

Не получается запустить ни один вебсервис от базы на другом серваке.
Unexpected element: TAG_END

Я так понял, что WSDL файл не виден проге SOAPUI...

Поделиться