Lotus note vba excel

I have little Lotus Script or Notes/Domino knowledge but I have a procedure, copied from somewhere a long time ago, that allows me to email through Notes from VBA. I normally only use this for internal notifications where the formatting hasn’t really mattered.

I now want to use this to send external emails to a client, and corporate types would rather the email complied with our style guide (a sans-serif typeface basically).

I was about to tell them that the code only works with plain text, but then I noticed that the routine does reference some sort of CREATERICHTEXTITEM object. Does this mean I could apply some sort of formatting to the body text string after it has been passed to the mail routine? As well as upholding our precious brand values, this would be quite handy to me for highlighting certain passages in the email.

I’ve had a dig about the ‘net to see if this code could be adapted, but being unfamiliar with Notes’ object model, and the fact that online Notes resources seem to mirror the application’s own obtuseness, meant I didn’t get very far.

The code:

Sub sendEmail(EmailSubject As String, EMailSendTo As String, EMailBody As String, MailServer as String)

    Dim objNotesSession As Object
    Dim objNotesMailFile As Object
    Dim objNotesDocument As Object
    Dim objNotesField As Object
    Dim sendmail As Boolean

    'added for integration into reporting tool
    Dim dbString As String

    dbString = "mail" & Application.UserName & ".nsf"

On Error GoTo SendMailError
    'Establish Connection to Notes
    Set objNotesSession = CreateObject("Notes.NotesSession")
On Error Resume Next
    'Establish Connection to Mail File
    Set objNotesMailFile = objNotesSession.GETDATABASE(MailServer, dbString)
    'Open Mail
    objNotesMailFile.OPENMAIL
On Error GoTo 0

    'Create New Memo
    Set objNotesDocument = objNotesMailFile.createdocument

    Dim oWorkSpace As Object, oUIdoc As Object
    Set oWorkSpace = CreateObject("Notes.NotesUIWorkspace")
    Set oUIdoc = oWorkSpace.CurrentDocument

    'Create 'Subject Field'
    Set objNotesField = objNotesDocument.APPENDITEMVALUE("Subject", EmailSubject)

    'Create 'Send To' Field
    Set objNotesField = objNotesDocument.APPENDITEMVALUE("SendTo", EMailSendTo)

    'Create 'Copy To' Field
    Set objNotesField = objNotesDocument.APPENDITEMVALUE("CopyTo", EMailCCTo)

    'Create 'Blind Copy To' Field
    Set objNotesField = objNotesDocument.APPENDITEMVALUE("BlindCopyTo", EMailBCCTo)

    'Create 'Body' of memo
    Set objNotesField = objNotesDocument.CREATERICHTEXTITEM("Body")

    With objNotesField
        .APPENDTEXT emailBody
        .ADDNEWLINE 1
    End With

    'Send the e-mail

    Call objNotesDocument.Save(True, False, False)
    objNotesDocument.SaveMessageOnSend = True
    'objNotesDocument.Save
    objNotesDocument.Send (0)

    'Release storage
    Set objNotesSession = Nothing
    Set objNotesMailFile = Nothing
    Set objNotesDocument = Nothing
    Set objNotesField = Nothing

    'Set return code
    sendmail = True

    Exit Sub

SendMailError:
    Dim Msg
    Msg = "Error # " & Str(Err.Number) & " was generated by " _
                & Err.Source & Chr(13) & Err.Description
    MsgBox Msg, , "Error", Err.HelpFile, Err.HelpContext
    sendmail = False
End Sub

First of all, a belated happy new year to everyone who regular visit my blog. I hope to continue to feed the blog with interesting material also under the year 2011. We are up to some challenges now that corporates tend to roll out Windows 7 and Office in a wider scale.

Anyway, last year I closed my English site and I plan to re-launch it during the year but without the code articles. As per agreement with Microsoft some of them have been published at MSDN. In addition, some people have been in touch with me and also with other developers in the online community about where to find my entries about controlling Lotus Notes via Excel and VBA. Until now they have only been available on my local backup.

I’m very happy to announce that Ron de Bruin has accepted to host these articles at his site. Ron has for the last couple of years built-up a great number of excellent articles on various topics like data acquisition (ADO/DAO), Ribbon UI and interacting with MS Outlook, Outlook Express and Windows Mail from MS Excel. In view of the content of his site it’s great that Lotus Notes has been added to the list of e-mail clients to be covered.

The head page for the Lotus Notes section can be found here. I have agreed to update the examples when necessary and also to add new tips when possible.

Kind regards,
Dennis

Cпасибо, нашла вариант который сработал:  

  Sub envoi_anomalies_EDI()  

       Dim Session As Object  
   Dim Dir As Object  
   Dim Doc As Object  
   Dim Workspace As Object  
   Dim EditDoc As Object  
   Dim AttachME As Object  

  ‘Création de la session Notes  
   Set Workspace = CreateObject(«Notes.NotesUIWorkspace»)  
   Set Session = CreateObject(«notes.NOTESSESSION»)  
   Set Dir = Session.GETDATABASE(«», «»)  
   Call Dir.OPENMAIL  

         ‘Creation d’un document  
   Set Doc = Dir.CREATEDOCUMENT  

         ‘Doc.form = «Memo»  
   Doc.Subject = «test»  
   Doc.SendTo = test@mail.ru  
   Doc.body = «Bonjour,»        

                     Attachment = ActiveWorkbook.FullName ‘Mise en piece jointe du fichier concerné  
If Attachment <> «» Then  
Set AttachME = Doc.CREATERICHTEXTITEM(«Attachment» & i)  
Set EmbedObj = AttachME.EMBEDOBJECT(1454, «», Attachment, «Attachment»)  
Doc.CREATERICHTEXTITEM («Attachment» & i)  
End If  

               Doc.SAVEMESSAGEONSEND = True  

         ‘Affichage du mail dans Lotus Notes — открытие документа для редактирования  
   Set EditDoc = Workspace.EditDocument(True, Doc)  

         Set Session = Nothing  
   Set Dir = Nothing  
   Set Doc = Nothing  
   Set Workspace = Nothing  
   Set EditDoc = Nothing  

         End Sub

How to send Lotus Notes e-mail using Excel VBA ?

There are times when as VBA programmers/Analyst we require to send e-mails after our analysis or dashboard development. This is very trivial that when a dashboard is completed, it is required to send to our seniors or the required recipients. So, there are times, when we’ve set the VBA program to automate the dashboard development and then we need to send that dashboard by attaching it to mail manually. Did this ever happened that you developed the dashboard and forgot to send to the requested/desired persons? Oops !

Now this article will help us in learning the automation of e-mailing the dashboard (or any file) using Lotus Notes and VBA. This is a referential program and we might need to change the appropriate variables in the program to make it run at our end.

With the introduction of Lotus Notes and Domino Release 5.0.2b, we now have the ability to manipulate the Domino object model via COM. As a result, we can use VBA to take advantage of Lotus/Domino services and databases.

To do so, however, we’ll need Lotus Notes client version 5.02.b (or higher), Domino Designer client, or Domino Server. As with most Visual Basic object libraries, the programs need not be running to use them. Lotus has plans to make this runtime package distributable independent of its full software installation. Notice that before we can access any of the objects within the Notes Session, we must initialize a session first.

Anyway, let’s directly do the practical which involves two simple steps:


1. Set a reference to «Lotus Notes Automation Classes». In the code window, go to Tool —> References —> Select ‘Lotus Notes Automation Classes».

2. Use the following Visual Basic code to send a Notes e-mail message. The code includes examples of code to include an attachment and to save the sent message, which are both optional and can be removed if desired. Don’t forgot to replace the underlined phrases with your ones.

Sub Send_Email_via_Lotus_Notes()
    Dim Maildb As Object
    Dim MailDoc As Object
    Dim Body As Object

    Dim Session As Object
    ‘Start a session of Lotus Notes
        Set Session = CreateObject(«Lotus.NotesSession»)
    ‘This line prompts for password of current ID noted in Notes.INI
        Call Session.Initialize
    ‘or use below to provide password of the current ID (to avoid Password prompt)
        ‘Call Session.Initialize(«<password>«)
    ‘Open the Mail Database of your Lotus Notes
        Set Maildb = Session.GETDATABASE(«», «

D:NotesdataMaileXceLiTems.nsf

«)
        If Not Maildb.IsOpen = True Then Call Maildb.Open
    ‘Create the Mail Document
        Set MailDoc = Maildb.CREATEDOCUMENT
        Call MailDoc.REPLACEITEMVALUE(«Form», «Memo»)
    ‘Set the Recipient of the mail
        Call MailDoc.REPLACEITEMVALUE(«SendTo», «

Ashish Jain

«)
    ‘Set subject of the mail
        Call MailDoc.REPLACEITEMVALUE(«Subject», «

Subject Text

«)
    ‘Create and set the Body content of the mail
        Set Body = MailDoc.CREATERICHTEXTITEM(«Body»)
        Call Body.APPENDTEXT(«

Body text here

«)
    ‘Example to create an attachment (optional)
        Call Body.ADDNEWLINE(2)
        Call Body.EMBEDOBJECT(1454, «», «

C:dummy.txt

«, «Attachment»)
    ‘Example to save the message (optional) in Sent items
        MailDoc.SAVEMESSAGEONSEND = True
    ‘Send the document
    ‘Gets the mail to appear in the Sent items folder
        Call MailDoc.REPLACEITEMVALUE(«PostedDate», Now())
        Call MailDoc.SEND(False)
    ‘Clean Up the Object variables — Recover memory
        Set Maildb = Nothing
        Set MailDoc = Nothing
        Set Body = Nothing
        Set Session = Nothing
End Sub

How to send Lotus Notes mail messages with Microsoft Visual BasicThe following Visual Basic code will send a Notes e-mail message. The code includes examples of code to include an attachment and to save the sent message, which are both optional and can be removed if desired.

Dim Maildb As Object
Dim MailDoc As Object
Dim Body As Object
Dim Session As Object
‘Start a session to notes
Set Session = CreateObject(«Lotus.NotesSession»)
‘This line prompts for password of current ID noted in Notes.INI
Call Session.Initialize
‘or use below to supply password of the current ID
‘Call Session.Initialize(«»)
‘Open the mail database in notes
Set Maildb = Session.GETDATABASE(«», «c:notesdatamailmymail.nsf»)
If Not Maildb.IsOpen = True Then
Call Maildb.Open
End If
‘Create the mail document
Set MailDoc = Maildb.CREATEDOCUMENT
Call MailDoc.ReplaceItemValue(«Form», «Memo»)
‘Set the recipient
Call MailDoc.ReplaceItemValue(«SendTo», «John Doe»)
‘Set subject
Call MailDoc.ReplaceItemValue(«Subject», «Subject Text»)
‘Create and set the Body content
Set Body = MailDoc.CREATERICHTEXTITEM(«Body»)
Call Body.APPENDTEXT(«Body text here»)
‘Example to create an attachment (optional)
Call Body.ADDNEWLINE(2)
Call Body.EMBEDOBJECT(1454, «», «C:filename», «Attachment»)
‘Example to save the message (optional)
MailDoc.SAVEMESSAGEONSEND = True
‘Send the document
‘Gets the mail to appear in the Sent items folder
Call MailDoc.ReplaceItemValue(«PostedDate», Now())
Call MailDoc.SEND(False)
‘Clean Up
Set Maildb = Nothing
Set MailDoc = Nothing
Set Body = Nothing
Set Session = Nothing

Note: The Visual Basic programmer needs to set the Reference to use Lotus Domino objects prior to implementing this function. To enable the Lotus Notes classes to appear in the Visual Basic browser, you must execute the following within VB: Select Tools, References and select the checkbox for ‘Lotus Notes Automation Classes’.

The above code is from the IBM support.

GETDATABASE given here is pointing to the sample MailDB; you need to change that to your DB.

You can do that by

UserName = Session.UserName
MailDbName = Left$(UserName, 1) & Right$(UserName, (Len(UserName) — InStr(1, UserName, » «))) & «.nsf»
‘Open the mail database in notes
Set Maildb = Session.GETDATABASE(«», MailDbName)

To send it through Microsoft Outlook refer http://vbadud.blogspot.com/2007/04/vba-email-automation-vba-mail.html

Automate Email, VBA Email, Send Email from Excel, VBA Mail automation, Mail Automation, Lotus Notes VBA, Automate Lotus Notes, Send Mail from Lotus Notes, Link Excel with Lotus Notes,Microsoft Lotus Notes Mail Automation, Excel VBA Mail, MAPI, Send Multiple eMails

Hi Partha,

Hear is my code

Dim session As New NotesSession
Dim dir As NotesDbDirectory
Dim db As NotesDatabase
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument
Dim dac As NotesDocument
Dim gt As NotesEmbeddedObject
Dim veiw As NotesView
Dim dt As NotesDateTime
Dim item As NotesItem
Dim Pprogram As String
‘variables for operations

Dim LastRow As Long
Dim r As Integer, c As Integer, i As Integer

 
 Pprogram = Worksheets(2).Range(«B4»).Value

 
‘Session initialization

session.Initialize
Set dir = session.GetDbDirectory(«bolns03m/BO1/NMP/») ‘ To get the database directory
Set db = dir.OpenDatabase(«NMPpcpACCESSORYaccedoc.nsf») ‘ Database name

‘Better to use Search than FTSearch ->Avoids missing of documents which is not Indexed

st = Worksheets(2).Range(«B4»).Value

 

 Set dc = db.Search(«@contains( Project; » & Chr(34) & st & Chr(34) & » )», Nothing, 0)

 ‘Set dc = db.Search(«@Contains( Project;Pprogram )», Nothing, 0)
 Set doc = dc.GetFirstDocument

 
 ‘Used For Debugging
 ‘Set doc = db.GetDocumentByUNID(«E6D336A4B18BB61BC1256EEE002FE331»)

  Sheets(«MEBU»).Select

‘Selecting the range for working-> You can extend the range as you need ,keep the first ranfe A3 constant

Range(«A3:O1000»).Select
Selection.ClearContents

Worksheets(«MEBU»).Activate
Range(«A3»).Select

 
   
       Rows(«3:3»).Select
    ‘Selection.ClearContents
    Rows(«4:4»).Select
    Range(Selection, Selection.End(xlDown)).Select
    ‘Selection.Delete Shift:=xlUp

   
   
   
    ActiveCell.Offset(-1, 0).Range(«A1»).Select

     Application.Calculation = xlManual

 
   
  While Not (doc Is Nothing)

   
   
If (doc.GetItemValue(«Project»)(0) <> Empty) Then

   
    ‘ Used for Debugging**********************************

   
   
    If ((doc.UniversalID) = «E6D336A4B18BB61BC1256EEE002FE331») Then

   
    Set dac = doc

   
   
    End If

   
    ‘ *****************************************************

   

   
‘Printing the values in the Excel Sheet
 ActiveCell.Offset(0, 0).Range(«A1»).Select

 
ActiveCell.Value = doc.GetItemValue(«Project»)(0)
ActiveCell.Offset(0, 1).Range(«A1»).Select

ActiveCell.Value = doc.GetItemValue(«Status»)(0)
ActiveCell.Offset(0, 1).Range(«A1»).Select

ActiveCell.Value = doc.GetItemValue(«Draft»)(0)
ActiveCell.Offset(0, 1).Range(«A1»).Select

ActiveCell.Value = doc.GetItemValue(«Subject»)(0)
ActiveCell.Offset(0, 1).Range(«A1»).Select

ActiveCell.Value = doc.GetItemValue(«DocumentType»)(0)
ActiveCell.Offset(0, 1).Range(«A1»).Select

ActiveCell.Value = doc.GetItemValue(«DocumentScope»)(0)
ActiveCell.Offset(0, 1).Range(«A1»).Select

ActiveCell.Value = doc.GetItemValue(«DocumentScope2»)(0)
ActiveCell.Offset(0, 1).Range(«A1»).Select

ActiveCell.Value = doc.GetItemValue(«DocumentScope3»)(0)
ActiveCell.Offset(0, 1).Range(«A1»).Select

‘Can not be done in normal way if you want to access more than one value

Set item = doc.GetFirstItem(«CustomerPrograms»)

 
‘Gets any number of value in a single string

ActiveCell.Value = item.Text
ActiveCell.Offset(0, 1).Range(«A1»).Select

ActiveCell.Value = doc.GetItemValue(«DocId»)(0)
ActiveCell.Offset(0, 1).Range(«A1»).Select

ActiveCell.Value = doc.GetItemValue(«Originator»)(0)
ActiveCell.Offset(0, 1).Range(«A1»).Select

«hear i want to keep the link for the lotus notes document»

‘ Gets next Document in the document Collection

End If

Set doc = dc.GetNextDocument(doc)

   
   ‘Moving to the Last Row
   If WorksheetFunction.CountA(Cells) > 0 Then
        ‘Search for any entry, by searching backwards by Rows.
        LastRow = Cells.Find(What:=»*», After:=[A1], _
              SearchOrder:=xlByRows, _
              SearchDirection:=xlPrevious).Row

             
    End If

‘Moves to the Next Row

Cells(LastRow + 1, 1).Select

 

 Wend

Columns(«A:T»).EntireColumn.AutoFit

Application.Calculation = xlAutomatic

 
End Sub

I am trying your code .

Гринго


  • #1

Добрый день

Помогите решить следующую задачу. Не являюсь программистом Lotus Notes, но хотел бы решить проблему получения реквизитов документов из БД Lotus

Есть файл excel в котором построчно сохраняются номера документов из БД Lotus Notes (заявок на сервис). Номера заявок:

232
346
1236

Список заявок весьма большой (сотни строк).

В Lotus Notes есть БД указанных заявок (содержит несколько сотен тысяч элементов). Требуется периодически проверять статус заявок из файла excel (в работе, выполнены, закрыты и т.п.). Сейчас эта проверка делается путем открытия Lotus Notes, базы данных заявок, ручного поиска документа по заданному номеру, открытию документа и просмотр статуса – длительная процедура, от которой хотелось бы уйти.

Как хотелось бы решить задачу – написать скрипт на VBA (Excel, доступа к среде программирования Lotus Notes нет), который последовательно перебирает номера заявок, используя объектную модель Lotus получает доступ к указанной базе Lotus Notes и по номеру заявки получает доступ к указанному документу и проверяет наличие заданного реквизита (Статус заявки). Собственно, вопросы:

1. Как получить ссылку на определенный документ из Lotus Notes по значению одного из его реквизитов (номер)

2. Определенная альтернатива – если в excel сохранена гиперссылка на конкретный документ из БД Lotus Notes, как по этой гиперссылке получить ссылку (в программе) на конкретный документ Lotus Notes?

garrick


  • #2

  1. А зачем вам вообще Excel? Почему нельзя всю необходимую работу с заявками сделать в Lotus Notes?
  2. Если не знаете как работает Lotus Notes, не знаете внутреннего устройства базы (имена полей, представлений, их структуру и т.п.), лучше даже не беритесь за эту работу.
  3. Domino Designer можно бесплатно скачать на сайте IBM, в его хелпе есть вся необходимая для вас информация.

lmike

lmike

нет, пердело совершенство


  • #3

Как хотелось бы решить задачу – написать скрипт на VBA (Excel, доступа к среде программирования Lotus Notes нет)

дык поставьте дизайнер — он бесплатный

1. Как получить ссылку на определенный документ из Lotus Notes по значению одного из его реквизитов (номер)

получение по ключу (читайте хэлп дизайнера нотус — в тырнетах полно ссылок на этот хэлп)

2. Определенная альтернатива – если в excel сохранена гиперссылка на конкретный документ из БД Lotus Notes, как по этой гиперссылке получить ссылку (в программе) на конкретный документ Lotus Notes?

в конце ссылки — UNID — он и есть ссылка на документ
формат URL для нотус — тот же хэлп

Гринго


  • #4

Спасибо за ответы
Список заявок в excel-файле — жесткое требование заказчика. Данный список рассылается многим пользователям внутри компании, для контроля статуса заявок (ответственных за их исполнение), при этом почтовая программа в компании другая (опять же жесткое требование заказчика). Установка ПО жестко регламентирована со стороны IT-службы, а макрос должен работать у любого конечного пользователя (не программиста) из группы контроля, у кого есть установленный Excel и Lotus в системе.

Спасибо за ссылку на хелп дизайнера — прочитаю

Имена БД, имя представления известно. Доступ и работу с Lotus Notes из Excel планируется организовать через создание экземпляров приложения Lotus Notes (CreateObject, GetObject) — лишь бы объектная модель Lotus позволяла так работать
Опыт автоматизации и минимизации ручной работы и связи данных из разных источников, агрегации у меня есть, поэтому, уверен, что данная задача имеет решение

Буду признателен, если есть что добавить

savl


  • #5

@Гринго может пригодится :

link removed

+ хелп по лотусовым классам.

lmike

lmike

нет, пердело совершенство


  • #6

Список заявок в excel-файле — жесткое требование заказчика.

никак не связано с программированием под LDN

Данный список рассылается многим пользователям внутри компании, для контроля статуса заявок (ответственных за их исполнение), при этом почтовая программа в компании другая (опять же жесткое требование заказчика).

абсолютно никак не мешает программировать в LDN, есть домино — есть возможность рассылок в др. почтовую систему

Установка ПО жестко регламентирована со стороны IT-службы, а макрос должен работать у любого конечного пользователя (не программиста) из группы контроля, у кого есть установленный Excel и Lotus в системе.

а вот работоспобность макроса, при такой постановке, маловероятный вариант (вернее- сделать можно, грабли собирать будете регулярно)

поэтому, уверен, что данная задача имеет решение

да — имеет — писать java с библиотекой POI, запускать на сервере (т.е. библиотека копируется на сервер LDN. Даже в случае огромных выборок — тормоза будут меньшими, чем при использовании COM объекта из MSO (кот. может вовсе забить доступную память)
какой бы не была массовая инсталяция LDN — отличия будут, т.к. могут отличаться групповые политики и настройки безопасности, добавим сюда изменения в безопасности, во всяких МС патчах (как пример — недавняя история,

Ссылка скрыта от гостей

)
и как правильно отметил @garrick — написать без ошибок и кастылей выгрузку из LDN, для большого кол-ва документов, может спец. В вашем варианте, для еще через COM — это будет мучительный и долгий процесс (да и ломаться, потом, будет регулярно)

Логика из ТЗ извращена до наоборот (подгоняли под низкий уровень писателей, на VBA, видать) и следовать ей, буквально — это потеря времени и сил
Вариант, описанный мной — не требует, вовсе, Excel, и будет работать на серверах, стало-быть — будет меньше «особенностей»

Последнее редактирование: 15.08.2016

Гринго


lmike

lmike

нет, пердело совершенство


  • #8

вспомнил, тут…
у домины вполне себе есть способ общения без KOM и называется он

Ссылка скрыта от гостей

для того кто «привык» в VBA — «берет в руки» COM для работы с хттп и…

garrick


  • #9

Предлагаю построить в Notes вьюху, отображающую всю необходимую информацию по заявкам, открыть к ней доступ по HTTP, а в Excel воткнуть URL этой вьюхи. … а можно даже и не «втыкать» и чтобы посмотреть информацию по заявкам, ни Notes, ни даже Excel не будет нужен.

Гринго


  • #10

Всем спасибо за критику и предложения, 2@savl — особенно. Реализовал, работает, достаточно шустро.
Да, не идеальное решение, его невозможно масштабировать, но такой задачи и не стоит. Даже в текущей версии это сэкономит десятки человеко-часов в месяц — за счет того, что не придется вручную открывать каждую заявку в Lotus для просмотра значений для определенных полей. Есть отдельные моменты, которые реализованы «криво», но пока не нашел, как обойти это ограничение, может подскажете

Код:

Sub DemandParser()

  Dim oSession As Object
  Dim oDB As Object
  Dim oNotesView As Variant
  Dim oColumn As Variant
  Dim doc As Object
  Dim oItems As Variant
  Dim oItem As Variant

  Dim lngCounter As Long, lngFResult As Long, lngRow As Long
  Set oSheet = ThisWorkbook.Worksheets("Data")
  lngRow = oSheet.Cells(1, 3).End(xlDown).Row
  If lngRow > 1000000 Then
     MsgBox "Нет данных для анализа!"
     Exit Sub
  End If
  Set oSession = CreateObject("Notes.NotesSession")
  Set oDB = oSession.GetDatabase("<servername>", "<DBName>")
  Set oNotesView = oDB.GetView("All")
  ' при выполнении следующей строки выдается ошибка, приходится перебирать элементы коллекции
  'Set oColumn = oNotesView.Columns(5)
  For Each oColumn In oNotesView.Columns
     If oColumn.ItemName = "DemandNumber" Then
          oColumn.IsSorted = True
          Exit For
     End If
  Next oColumn
  For lngCounter = 2 To lngRow
    Application.StatusBar = "Обработка строки " & CStr(lngCounter) & " из " & CStr(lngRow)
 
    sTTNumber = Left(oSheet.Cells(lngCounter, 21).Value, 6)
 
    If IsNumeric(sTTNumber) Then
       sSearchString = Replace("[DemandNumber] = {DemandNumber}", "{DemandNumber}", sTTNumber)
       lngFResult = oNotesView.FTSearch(sSearchString)
       If lngFResult = 0 Then
          oSheet.Cells(lngCounter, 24).Value = "!!! Заявка не найдена"
       Else
          Set doc = oNotesView.GetFirstDocument
       
          '
          ' здесь реализуется соответствующая обработка
          '
          ' как получить первое значение? - аналогично ситуации выше, работает через перебор элементов коллекции
          oItems = doc.GetItemValue("DemandNumber")
          For Each oItem In oItems
           
              Exit For
          Next oItem
     
     
       End If
    End If
  Next
  Application.StatusBar = ""
  MsgBox "Готово!"
  Set doc = Nothing
  Set oNotesView = Nothing
  Set oDB = Nothing
  Set oSession = Nothing
End Sub

Последнее редактирование модератором: 16.08.2016

lmike

lmike

нет, пердело совершенство


  • #11

‘ при выполнении следующей строки выдается ошибка, приходится перебирать элементы коллекции
‘Set oColumn = oNotesView.Columns(5)

зачем это? (сортировать колонку из кода)

lngFResult = oNotesView.FTSearch(sSearchString)

вам предложили почитать дизайнер хэлп, но не для поиска схожего с SQL
LDN — NoSQL БД
в нотусе, для поиска ключей, используют ключевую колонку, для чего — создают вьюшку с сортированной колонкой, по ключу (первую, можно больше одной колонки — но это др. история)
получать документ — это очень накладно для памяти и времени
во вьюшке (вернее в выборке по ключу — NotesViewEntryCollection) есть NotesViewEntry , а у него ColumnValues (типа Variant — массив значений, по колонкам)
т.е. создается спец. вьюшка, с нужной ключевой колонкой (сортированной) и колонками для нужных значенией

Последнее редактирование: 16.08.2016

lmike

lmike

нет, пердело совершенство


  • #12

oItems = doc.GetItemValue(«DemandNumber»)

всегда выдает массив (даже если там одно значение), нулевым элементом будет первое значение doc.GetItemValue(«DemandNumber»)(0)
НО не делайте так (причина — выше)

garrick


  • #13

а у него ColumnValues (типа Variant — массив значений, по колонкам)

…но тут тоже есть тонкости, которые могут вынести мозг человеку, который не в теме и при том не читающий хелп. Я же говорил «уметь надо».

lmike

lmike

нет, пердело совершенство


  • #14

…но тут тоже есть тонкости, которые могут вынести мозг человеку, который не в теме и при том не читающий хелп. Я же говорил «уметь надо».

оно понятно, получается ТС сочиняет велосипед, с кривыми колесами, при том что есть легальные методы взаимодействия с платформой — через хттп
безо всяких «кривых» COM
но как я уже не раз отмечал — мышление похаченное использованием windows трудно направить в «нужное» русло

Гринго


  • #15

Ситуацию нужно рассматривать с разных сторон и понимать задачу, которую просят помочь решить. Лучшее решение не всегда выигрывает у просто хорошего. Я не писал всю ситуацию, чтобы не засорять топик, но возможно, это была моя ошибка. Мне нужно простое прикладное решение, работающее — для себя и моих сотрудников. Также им поделюсь с коллегами. Не требуется промышленное «железное» решение — Lotus Notes живет в компании до конца этого года, потом будет совсем другое ПО для работы с заявками и совсем другая процедура работы с ними и текущее решение мы спокойно выкинем на свалку. На его создание я суммарно потратил 4 часа своего чистого времени.

За счет текущей, пусть «кривой», не оптимальной реализации экономия времени получилась за одну итерацию — в 180 раз (с 30 минут ручным способом до 10 секунд данным решением — обработка 170 позиций). Таких итераций — около 10 в месяц по моему направлению. Оптимизировать работу одной итерации из текущих 10 секунд до 1 секунды (условно) — это дополнительно к уже полученной экономии в 29 мин. 50 секунд добавить еще 9 секунд — с моей точки зрения, овчинка выделки не стоит.
Для этого (справедливо отмечено) действительно пришлось бы серьезно изучить документацию к Lotus, классы, проштудировать форумы. Если бы я был программистом (это уже в прошлом) — безусловно, это то, с чего бы я начал. Но на это бы у меня ушло совсем другое время, которого сейчас у меня не сказать, что много и кто бы тогда делал остальную мою работу:)?.

Менять текущий процесс работы с заявками (который с изъянами — не спорю) — нет смысла, т.к. он и так изменится в январе. На изменение текущего, на согласования, доработки уйдет уже не 4 часа, и потребует большего количества вовлеченных…

Я свое время теперь смогу переключить на решение и других своих задач, в т.ч. на пересмотр и изменение других процессов, не связанных явно с программированием, но направленных на эффективность работы подразделениякомпании.

В любом случае, спасибо за конструктивную критику и советы.

lmike

lmike

нет, пердело совершенство


  • #16

Не требуется промышленное «железное» решение — Lotus Notes живет в компании до конца этого года, потом будет совсем другое ПО для работы с заявками и совсем другая процедура работы с ними и текущее решение мы спокойно выкинем на свалку.

оно и не требовалось, в варианте с http…
просто распарсить xml/json
слезать с LDN (вот даже интересно — на что?) достаточно непростой процесс, почему-то мне кажется — заявки там не единственная БД
у нас, в организации, уж клялись уйти от домино раз 100500, прошло овер 15лет (почта давно уже на чанге)
и ШП (Share Point) разные решения пихали (тоже пытались для документ-процесса пристроить)…, но юзеры! (именно) эти убожественые решения завернули
Нам рассказывали как придет велики SAP — и будет фсё… , ога — в тысячи раз выросло кол-во эхелей на файлопомойке (уже засрали 6Тб)
Есть гейроаейский спец. кот. «доказал» — 1С более затратна (это для нашего-то законодательство), чем SAP, на секунду — внедрение решения на SAP, в нашей стране, уже обошлось (приблизительно) десятки лярдов грина

не… — разумеется, «назло кондуктору — возьму билет, сойду с трамвая, пойду пешком», могут сделать «эффективные манагеры»
эффект от этого тоже известен — велосипедные файлы с макросами и хитровынебанными формулами заполняют файло-помойки
этот путь, у нас в компании, уже проходили не раз
но как говориться — время идет, а кол-во дураков только растет… ;)
а вам — успехов, только стоило ли с вопросами по VBA приходить сюда ? ;)

Гринго


  • #17

2@lmike:
SAP — тема отдельного разговора, в том виде, в котором его могут внедрить. Действительно, количество с excel-файлов с ним растет на порядок, через них пытаются закрывать дыры, которые не покрываются функционалом данной ERP. Самое интересно, что при внедрении SAP одним из аргументов приводилось то, что «мы откажемся от большого количества excel-файлов, которые у нас есть».

Куда стоило обращаться тогда? На какой форум? :)

А в целом с нестандартной обработкой относительно небольшого объема данных лучше excel никто не справится (имхо). И гибкость высокая, формулыинструменты, возможности автоматизации (макросы) — широкие. Если решение требуется стандартноемасштабированное — то тут excel проигрывает конкретным решениям.

P.S. Решение уже проверили у других пользователей, работает — для них шок, что оказывается, такое можно вообще возможно было реализовать. БД в LDN заявок реализовывала сторонняя компания еще в 2006 году, наши IT ее только поддерживают в рабочем состоянии, доработок никаких не делают, технической документации по полям не было. Так что я результатом доволен, с учетом того, что приступал к задаче ничего не зная об объектах LDN и о внутреннем устройстве данной БД в частности.

lmike

lmike

нет, пердело совершенство


  • #18

Куда стоило обращаться тогда? На какой форум?

гугл VBA lotus notes field

Последнее редактирование: 17.08.2016

lmike

lmike

нет, пердело совершенство


  • #19

не зная об объектах LDN и о внутреннем устройстве данной БД в частности.

знать пришлось — т.к. COM объекты именно к этому и привязывают, а вот распарсить ответ от http сервера LDN — вполне понятный вариант
ибо там текст

и вы только ради этого купили LDN (1 БД)?
я вам больше скажу — есть готовое решение на LDN —

Ссылка скрыта от гостей

называется, единственная «засада» — разработчики на украине, т.е. потенциально могут быть сложности с закупкой ПО (для России, на сайте сказано — для резидентов Украины)
про — на что менять — вы так и не сказали ;)

lmike

lmike

нет, пердело совершенство


  • #20

А в целом с нестандартной обработкой

а вот для этого и есть построение архитектуры, чтобы не было (минимизировать) нестандартного
а «здесь» получается как жить на стройке — оно конечно можно, но…
и вот в чем для меня загадка…
существуют репортинговые системы (и бесплатные), есть ИТ отдел — неужто сложно построить процесс, чтобы делать все через них?!
когда «каждая кухарка» будет…, т.е. — каждый должен заниматься своими обязанностями (прямыми), а не изучением VBA, Excel, Word и т.п.
и самое смешное — везде встречаются требования — уметь пользоваться Word и Excel
Именно эти инструменты насаждаются, в то время как «никто» (>80%) ими пользоваться не умеют (и в первую голову — руководители)

Последнее редактирование: 17.08.2016

Like this post? Please share to your friends:
  • Love is just a word текст
  • Lotus 1 2 3 excel supercalc это
  • Love is just a word перевод песни
  • Lots of words word search
  • Love is just a word song