• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

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

  • Автор темы Lokin
  • Дата начала
L

Lokin

Здравствуйте!
Делаю проект на LotusScript. Есть две формы "Жилье" и "Клиент". В форме "Жилье" есть поле с номером телефона владельца. В форме "Клиент" есть поле "Интерес", в котором клиент выбирает номер телефона владельца жилья (выпадающий список). В форме "Жилье" есть поле "Статус", которое должно автоматически заполниться словом "Куплено", если в форме "Клиент" будет выбран номер телефона владельца этого конкретного жилья (при сохранении документа, разумеется). Также есть два представления "Клиенты" и "Жилища". Написал код на LotusScript в Querysave формы "Жилье".
Код:
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 КБ · Просмотры: 134
A

alexas

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

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

Lokin

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

Способов реализации данной задачи может быть великое множество (я бы делал подругому).
Можно посмотреть в сторону встроенного представления...
Enjoy!
Да, вы правы, лучше перенести код в док "Клиент") а вот о UNID не совсем понял) номер телефона уникален, при его выборе и сохранении находится соответствующая строка в представлении "Жилища" и в колонке "Статус" меняется значение. Просто хочется сделать все попроще) Попробовал изменить код в форме "Клиент"
Код:
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
Снова толку ноль)
 
A

alexas

Как только найдется буржуй с двумя квартирами на продажу - сразу телефон перестанет быть уникальным.
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!
 
L

Lokin

Хорошо, спасибо за подсказку :) постараюсь реализовать )
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!