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

Lokin

New Member
27.06.2013
3
0
#1
Здравствуйте!
Делаю проект на 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") - должно браться из значения формы "Жилье" представления "Жилища". Если нужно - прилагаю сам проект.
 

Вложения

alexas

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

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

Lokin

New Member
27.06.2013
3
0
#3
Сначала надо с логикой разобраться. Поехали.
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
Снова толку ноль)
 

alexas

Well-Known Member
10.06.2009
214
0
Москва
#4
Как только найдется буржуй с двумя квартирами на продажу - сразу телефон перестанет быть уникальным.
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!
 

Lokin

New Member
27.06.2013
3
0
#5
Хорошо, спасибо за подсказку :) постараюсь реализовать )