Автоматически Поменять Статус Во View

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

  1. Lokin

    Lokin New Member

    Регистрация:
    27 июн 2013
    Сообщения:
    3
    Симпатии:
    0
    Здравствуйте!
    Делаю проект на LotusScript. Есть две формы "Жилье" и "Клиент". В форме "Жилье" есть поле с номером телефона владельца. В форме "Клиент" есть поле "Интерес", в котором клиент выбирает номер телефона владельца жилья (выпадающий список). В форме "Жилье" есть поле "Статус", которое должно автоматически заполниться словом "Куплено", если в форме "Клиент" будет выбран номер телефона владельца этого конкретного жилья (при сохранении документа, разумеется). Также есть два представления "Клиенты" и "Жилища". Написал код на LotusScript в Querysave формы "Жилье".
    Код (LotusScript):
    Sub Querysave(Source As Notesuidocument, Continue As Variant)
    Dim sess As New NotesSession
    Dim db As NotesDatabase
    Dim view As NotesView
    Dim doc As NotesDocument
    Dim interes As String
    Dim state As String
    Set db=sess.CurrentDatabase
    Set view=db.GetView("Клиенты")
    Set doc=view.GetFirstDocument
    interes=Source.FieldGetText("Interes")
    state=Source.FieldGetText("State")
    While (Not doc Is Nothing)
    If interes <> "" Then
    state=Source.FieldGetText("State")+"Куплено"
    Call doc.Save (True,True)
    End If
    Set doc=view.GetNextDocument(doc)      
    Wend
    End Sub
    К сожалению ничего не работает ^_^ . Можете помочь с кодом? Думаю задача для опытных разработчиков не сложная. По идее interes=Source.FieldGetText("Interes") - должно браться значение поля "Interes" (то есть номер телефона владельца жилья) из представления "Клиенты". Ну а state=Source.FieldGetText("State") - должно браться из значения формы "Жилье" представления "Жилища". Если нужно - прилагаю сам проект.
     

    Вложения:

    • Rieltor11.rar
      Размер файла:
      24,5 КБ
      Просмотров:
      4
  2. alexas

    alexas Well-Known Member

    Регистрация:
    10 июн 2009
    Сообщения:
    215
    Симпатии:
    0
    Сначала надо с логикой разобраться. Поехали.
    1 При работе в форме "Клиент" возникает некоторое событие (выбрали телефон), которое должно инициировать действие - изменение поля "Статус" в доке, которому соответствует этот телефон. Значит это действие не может быть в доке "Жилье" (откуда конкретное Жилье узнает, что где-то что-то изменилось и надо поменять свой статус?) - код в Querysave Жилья убираем.
    2 Можно это действие сделать непосредственно в доке Клиент после его сохранения (Postsave). Для этого надо иметь соответствие выбранного телефона - доку (Жилье) откуда его достали. Получается, что недостаточно иметь список телефонов - надо еще иметь список соответствующих им UNID доков (при том подходе, который Вы выбрали).
    При выборе телефона - выбираем соответствующий ему UNID дока - по этому юниду, находим в базе (или спец. виде) этод док - изменяем поле "Статус", сохраняем.

    Способов реализации данной задачи может быть великое множество (я бы делал подругому).
    Можно посмотреть в сторону встроенного представления...
    Enjoy!
     
  3. Lokin

    Lokin New Member

    Регистрация:
    27 июн 2013
    Сообщения:
    3
    Симпатии:
    0
    Да, вы правы, лучше перенести код в док "Клиент") а вот о UNID не совсем понял) номер телефона уникален, при его выборе и сохранении находится соответствующая строка в представлении "Жилища" и в колонке "Статус" меняется значение. Просто хочется сделать все попроще) Попробовал изменить код в форме "Клиент"
    Код (LotusScript):
    Sub Postsave(Source As Notesuidocument)
    Dim sess As New NotesSession
    Dim db As NotesDatabase
    Dim view As NotesView
    Dim doc As NotesDocument
    Dim interes As String
    Dim state As String
    Dim phone As String
    Set db=sess.CurrentDatabase
    Set view=db.GetView("Жилища")
    Set doc=view.GetFirstDocument
    interes=Source.FieldGetText("Interes")
    phone=doc.GetItemValue("Phone")(0)
    state=doc.GetItemValue("State")(0)
    While (Not doc Is Nothing)
    If interes = phone Then
    state=doc.GetItemValue("State")(0)+"Куплено"
    Call doc.Save (True,True)
    End If
    Set doc=view.GetNextDocument(doc)      
    Wend
    End Sub
    Снова толку ноль)
     
  4. alexas

    alexas Well-Known Member

    Регистрация:
    10 июн 2009
    Сообщения:
    215
    Симпатии:
    0
    Как только найдется буржуй с двумя квартирами на продажу - сразу телефон перестанет быть уникальным.
    1 Делаем View с единственной сортированной колонкой с формулой Phone и формулой отбора SELECT Form = "Жилье"
    2 В Postsave находим нужный док в этом виде
    Phone = Source.Document.Phone(0)
    Set doc = view.GetDocumentByKey( Phone )
    3 Изменяем статус, сохраняем
    doc.State = "Куплено"
    Call doc.Save(True,False)
    конечно со всеми декларациями и проверками.
    Alles!
     
  5. Lokin

    Lokin New Member

    Регистрация:
    27 июн 2013
    Сообщения:
    3
    Симпатии:
    0
    Хорошо, спасибо за подсказку :) постараюсь реализовать )
     
Загрузка...

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