Форум программистов, компьютерный форум, киберфорум
HCL Notes: Программирование
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.99/447: Рейтинг темы: голосов - 447, средняя оценка - 4.99
kor
1

Lotus Script

07.08.2005, 12:25. Показов 82338. Ответов 35
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здавствуйте... Опять обращаюсь за помощью
предположим вот имеется код по присвоению по кнопке полю значения

Код
Sub Click(Source As Button)
Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim User As Variant
Call workspace.EditDocument( True )
Set uidoc = workspace.CurrentDocument

User = uidoc.FieldGetText( "status")
Print User
User = "under repair"
Call uidoc.FieldSetText("status" ,User)
Call uidoc.Refresh

End Sub
Хотелось бы узнать вот что...
Суть задачи такова...
имеется большой список техники. Чтобы отправить её в ремонт предположим надо наэать кнопку которая выполняет этот скрипт и она меняет значение поля на under repair. Но вот что не могу сообразить как сделать так чтобы по нажатию на эту кнопку заполнялось поле на under repair (это выполняется) и открывалась форма с полями которые надо заполнить для того чтобы определить кто отдал в ремонт технику когда какая поломка итд. В общем я ищу какое то подобие команды @Command....Compose....чтобы потом создать историю поломок. А вот как ещё это открытие привязать не знаю рылся в хелпе не нашёл...и как это всё привязать? какой класс нужен ещё?
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.08.2005, 12:25
Ответы с готовыми решениями:

Lotus Script
Подскажите плз хорошую литературку по Lotus Script.

Пауза В Lotus Script
Добрый день! Ну бывает нужно выждать паузу при каком-то условии, чтобы повторить действие. Кто...

Lotus Script+java Agent
Никогда не имел дела с агентами и с джавой в лотусе, но жизнь заставила... И время поджимает,...

Xml Parser + Lotus Script
Доброго времени суток!! Возникла такая задачка. Хml перегнать в txt, и просто работать с xml...

35
0 / 0 / 0
Регистрация: 04.12.2004
Сообщений: 3,329
07.08.2005, 13:04 2
Для: Gor
Тебе нужно создать документ-ответ:

Код
Sub Click(Source As Button)
Dim session As New NotesSession
Dim ws As New NotesUIWorkspace
Dim newdoc As New NotesDocument(session.CurrentDatabase)

newdoc.Form = "Имя формы"
Call newdoc.MakeResponse(ws.CurrentDocument.Document)
Call ws.EditDocument(True, newdoc)

End Sub
В документе-ответе в событии PostSave прописать код на изменения поля status на under repair, а не как у тебя сейчас. Т.к. документ-ответ можно не сохранить (например, по ошибке кнопку нажал), а статус у тебя уже изменен.
0
0 / 0 / 2
Регистрация: 07.05.2005
Сообщений: 743
07.08.2005, 13:42 3
или вызывай диалог там все заполняй а потом выставляй в нужных документах значения
0
07.08.2005, 17:14 4
Помогите!!!!!!Нужно написать script(для почт.сервера).Задание такое:отбирать письма,отправляемые по признаку наличия номера 8095ххххххх в теме и отсылать их на определённные адресс.Очень большое спасибо, если кто сможет!
0 / 0 / 2
Регистрация: 07.05.2005
Сообщений: 743
07.08.2005, 22:39 5
Поставь правила на сервере
0
kor
08.08.2005, 09:13 6
Но тут возникает ещё один тогда небольшой вопрос...

Каким образом потом провести снятие с ремонта?

Ведь надо будет потом опять изменить поле статус на пустое по кнопке (это ещё реализуемо) и удалить респонс документ именно к этой записи где записаны пометки о ремонте (кто отдал, когда итд.) Вот как удалить респонс?
Я предполагаю все записи об оборудовании находящемся в ремонте хранить в отдельной вьюхе.
Как лучше реализовать именно это удаление записей когда оборудование придёт с ремонта?
0 / 0 / 0
Регистрация: 04.12.2004
Сообщений: 3,329
08.08.2005, 09:22 7
Для: Gor
А зачем удалять ответ ? Он пойдет у тебя в историю для этой техники.
А реализовать, наверное, лучше так: документ-ответ у тебя создается когда техника в ремонт ушла. Т.е. там надо сделать кнопку, вроде "Пришел с ремонта". По нажатию которой меняется статус у главного документа (который описывает технику) и заносится дата возвращения из ремонта в Response-документ.
0
kor
08.08.2005, 13:02 8
Не пойму в чём ошибка всё вроде бы правильно делаю....
Создал по кнопке респонс документ как и советовали

Код
Sub Postsave(Source As Notesuidocument)
Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim User As Variant
Call workspace.EditDocument( True )
Set uidoc = workspace.CurrentDocument

User = uidoc.FieldGetText( "status")
Print User
User = "under repair"
Call uidoc.FieldSetText(    "status" ,User)

Call uidoc.Refresh
End Sub
этот код засунул в постсэйв в событие уже в респонсе новом.
Но сейчас в основной вьюхе где лежит весь список оборудования не отображается поле статус в колонке когда сохраняешь респонс.
Формула отбора там во вьюхе где всё оборудование лежит такая:

SELECT Form = "Printer_S" & !@IsResponseDoc
(Printer_S это форма по которой создавался весь список об-ия)

И насчёт кнопки пришёл с ремонта. Всё не так видимо просто.... Ведь надо будет по приходу с ремонта опять заполнять уже новую форму кто принял с ремонта во сколько когда цена ремонта итд. Т.е. как я понимаю видимо опять придётся сделать ещё одну кнопку которая бы делала опять же новый респонс с другими полями и на событии опять же постсэйв вешать код для очистки этого поля? к примеру такой какой нить?????

Код
Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim User As Variant
Call workspace.EditDocument( True )
Set uidoc = workspace.CurrentDocument

User = uidoc.FieldGetText( "status")
Print User
User = ""
Call uidoc.FieldSetText("status" ,User)

Call uidoc.Refresh
А потом во вьюхе где история поломок будет т.е. когда ушёл на ремонт когда пришёл с ремонта там какая выборка то будет вообще?? из 2х респонсов??
0 / 0 / 0
Регистрация: 04.12.2004
Сообщений: 3,329
08.08.2005, 13:18 9
<!--QuoteBegin-Gor+9:08:2005, 11:49 -->
<span class="vbquote">(Gor @ 9:08:2005, 11:49 )</span><!--QuoteEBegin-->Но сейчас в основной вьюхе где лежит весь список оборудования не отображается поле статус в колонке когда сохраняешь респонс.
[snapback]23183" rel="nofollow" target="_blank[/snapback]?[/quote]
А почему он должен отображаться ?
Поле статуса ты меняешь у response-документа, которые не отображаешь в представлении.
Меняй поле статуса не у response, а у главного документа.

<!--QuoteBegin-Gor+9:08:2005, 11:49 -->
<span class="vbquote">(Gor @ 9:08:2005, 11:49 )</span><!--QuoteEBegin-->И насчёт кнопки пришёл с ремонта. Всё не так видимо просто.... Ведь надо будет по приходу с ремонта опять заполнять уже новую форму кто принял с ремонта во сколько когда цена ремонта итд. Т.е. как я понимаю видимо опять придётся сделать ещё одну кнопку которая бы делала опять же новый респонс с другими полями и на событии опять же постсэйв вешать код для очистки этого поля? к примеру такой какой нить?????
[snapback]23183" rel="nofollow" target="_blank[/snapback]?[/quote]
Я бы сделал все это в одном документе. Одна поломка (с отчетом о ремонте) - один документ. Просто вначале не заполняешь некоторые поля, которые заполняешь когда техника вернется с ремонта (можно их скрывать в зависимости от статуса).
Но если ты хочешь отдельным документом, то делай форму Response-To-Response.
И будет у тебя вьюха с иерархией - документ с техникой, к нему дочерние с поломкой, к ним дочерние с отчетом о ремонте.
0
kor
08.08.2005, 13:35 10
тоже верно)
У меня были мысли сделать это всё в одном документе просто скрытие я не знаю как написать)
его же надо прямо в поля записать...в hide paragraph.........is true
Просто тут условие какое то хитрое - одна группа полей должна скрываться когда нажимаешь кнопку с одним названием например "в ремонт" а другая группа полей должна быть открытой и наоборот...
kor
08.08.2005, 14:00 11
Код
Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim User As Variant
Call workspace.EditDocument( True )
Set uidoc = workspace.CurrentDocument

User = uidoc.FieldGetText( "status")
Print User
User = "under repair"
Call uidoc.FieldSetText(    "status" ,User)

Call uidoc.Refresh
Так вот этот код на изменения поля status в респонсе.
Я так понимаю поле значит должно status быть в основном документе?
А событие всё равно на постсэйв в респонсе?
А как тогда обратиться к основному документу к полю status из респонса в постсэйв?? Всё тоже самое только Set uidoc = workspace.???????? и вот на этом месте должно быть имя формы? А он распознает то что ему надо именно к текущему документу статус применить (поменять в смысле) тогда же он вроде ко всем сразу применит документам статус :blink: ??
0 / 0 / 0
Регистрация: 04.12.2004
Сообщений: 3,329
08.08.2005, 14:23 12
<!--QuoteBegin-Gor+9:08:2005, 12:22 -->
<span class="vbquote">(Gor @ 9:08:2005, 12:22 )</span><!--QuoteEBegin-->Просто тут условие какое то хитрое - одна группа полей должна скрываться когда нажимаешь кнопку с одним названием например "в ремонт" а другая группа полей должна быть открытой и наоборот...
[snapback]23186" rel="nofollow" target="_blank[/snapback]?[/quote]
Первая должна быть открыта всегда. Вторая - только после ремонта. Имхо, так правильнее.

Статус надо сделать и в главном, и в респонсе. Пока у респонса статус "в ремонте", вторую группу полей не показываем. Статус можно даже не по кнопке сделать, а из списка выбирать.

Тебе надо получить back-end документ родителя. Например в PostSave респонса пишем:

Код
Sub Postsave(Source As Notesuidocument)
Dim ws As New NotesUIWorkspace
Dim session As New NotesSession
Dim doc As NotesDocument

Set doc = session.CurrentDatabase.GetDocumentByUNID(Source.Document.ParentDocumentUNID)
doc.Status = Source.Document.Status
Call doc.Save(True, True)
End Sub
Этот код изменит статус родителя в зависимости от статуса потомка.

И сразу настрой права (поля Authors/Readers).
0
kor
08.08.2005, 14:40 13
Код
Sub Click(Source As Button)
Dim session As New NotesSession
Dim ws As New NotesUIWorkspace
Dim newdoc As New NotesDocument(session.CurrentDatabase)

newdoc.Form = "Имя формы"
Call newdoc.MakeResponse(ws.CurrentDocument.Document)
Call ws.EditDocument(True, newdoc)

End Sub
Додавлю уж этот вопрос)
Этот код как было описано создаёт респонс документ, а почему тогда поля типа computed в нём не отображаются взятые из родительского. Причём они не отображаются только тогда когда его создаёшь через Lotus script а если на @ формулах перейти @Command([compose];"название респонса") то все поля которые в ресонсе computed отображаются нормально
0 / 0 / 0
Регистрация: 04.12.2004
Сообщений: 3,329
08.08.2005, 15:30 14
Т.е. как не отображаются ?
Какая формула у computed полей ?
0
kor
08.08.2005, 15:50 15
ТТТАААККК))))
ок) попробую описать сначала всю ситуацию которая сейчас возникла.
Может так понятней будет. Просто вопросов много накопилось... за всё это обсуждение и что то не сходится помоему...
Что мы имеем:
имеем список оборудования записаный во вьюху заполняется он по родительской форме к примеру MAT.
Задача: Чтобы во вьюхе с оборудованием при постановке на ремонт техники отображался статус в отдельном столбце. (к примеру on repair) и при снятии он убирался. Также должна быть ещё одна вьюха фиксирующая все отправки на ремонт и приём с ремонта.
Выполнение:
Создаём поле Status в родительском документе пускай оно будет всегда скрытое. В родительском документе должны быть 2 кнопки отправка техники на ремонт и снятие с ремонта. Причём кнопка снятие с ремонта должна быть скрыта всегда если у родительского документа нету документа ответа????(писал я тут про это хитрое условие скрытия)Не соображу как это скрытие написать.... Отправка техники на ремонт осуществляется нажатием одной из кнопок в данном случае onrepair. По нажатию кнопки создаётся по скрипту документ ответ:

Код
Sub Click(Source As Button)
Dim session As New NotesSession
Dim ws As New NotesUIWorkspace
Dim newdoc As New NotesDocument(session.CurrentDatabase)

newdoc.Form = "Имя формы"
Call newdoc.MakeResponse(ws.CurrentDocument.Document)
Call ws.EditDocument(True, newdoc)

End Sub
в котором содержатся поля и для принятия на ремонт и для снятия с ремонта
Но при нажатии кнопки onrepair поля для снятия с ремонта должны скрываться(здесь тоже как написать скрытие не очень понятно) . В документе ответе на событии постсэйв должен висеть скрипт который бы изменял поле статус в родительском документе на onrepair?


Код
Sub Postsave(Source As Notesuidocument)
Dim ws As New NotesUIWorkspace
Dim session As New NotesSession
Dim doc As NotesDocument

Set doc = session.CurrentDatabase.GetDocumentByUNID(Source.Document.ParentDocumentUNID)
doc.Status = Source.Document.Status
Call doc.Save(True, True)
End Sub
Просто перед этим же надо сменить статус в респонсе.........чтобы этот код выполнялся....где ж его в какой момент поменять?
А во вьюхе со всеми поломками отображать надо именно этот респонс?
как раз со всеми полями? просто в Select будет имя этого респонса и всё?
kor
08.08.2005, 15:58 16
так они же и так должны отображаться если одно поле допустим Editable в родительском а другое computed в респонсе и свойство у формы респонса
Formulas inherit values from selected documents...а в value у полей написаны только их названия без формул. Вроде бы так всегда computed отображались...Даже пробовал в этой базе документ с помощью Compose открыть и все поля computed отображаются.. а если этот скрипт на создание пишешь то нет....
0 / 0 / 0
Регистрация: 04.12.2004
Сообщений: 3,329
09.08.2005, 11:25 17
Для: Gor
Как бы я сделал:
В родительском документе две кнопки. Одна создает документ с описанием поломки, другая его открывает (при возврате из ремонта).
По первой все понятно.
По второй. Пишешь код, который перебирает все документы-ответы и проверяет статус. Если находим ответ со статусом "В ремонте" (по идее таких должно быть не больше одного), то открываем его на редактирование. Иначе выводим сообщение, что оборудование рабочее :blink:.

В документе с поломкой есть поле "Status". И кнопка (вроде, "Ремонт завершен"), которая это поле обнуляет.
При создании документа с поломкой (по первой кнопке из родителя) автоматически ставится статус "В ремонте". Дополнительные поля (которые заполняются, когда ремонт закончен) скрываем формулой Status="В ремонте".
Также делаем ссылку на главный документ для удобства.

В Post Save документа с поломкой пишем код, который изменяет статус родителя в зависимости от статуса документа.
В главном документе делаем встроенное представление, которое показывает все документы-ответы. Это и будет историей.

<!--QuoteBegin-Gor+9:08:2005, 14:45 -->
<span class="vbquote">(Gor @ 9:08:2005, 14:45 )</span><!--QuoteEBegin-->Даже пробовал в этой базе документ с помощью Compose открыть и все поля computed отображаются.. а если этот скрипт на создание пишешь то нет....
[snapback]23196" rel="nofollow" target="_blank[/snapback]?[/quote]
Т.к. когда делаешь через скрипт, то ты заранее создаешь back-end документ и открываешь его во front-end (т.е. фактически документ получается не вновь созданный и значения не наследуются). Когда делаешь через формулу, то там back-end документ создается только после сохранения front-end документа(документ вновь созданный и значения наследуются). Вроде так.
Через скрипты надо использовать формулу для наследования значений полей.

Код
@GetDocField($Ref; "Имя поля в родителе")
Так делать удобно для Computed For Display полей. Тогда значение такого поля в документе-ответе всегда будет соотвествовать значению поля в главном документе.
0
kor
09.08.2005, 12:36 18
Спасибо большое попробую твой вариант реализовать Medevic!
Ну уж если чего не допойму постить уж в эту тему буду не ругайте меня сильно матным языком :D
kor
09.08.2005, 15:17 19
Для: Medevic
Всё вроде бы нормально кнопки по скрытию работают, снятие с ремонта вроде бы тоже продвигается удачно...
не совсем корректно работает одна вещь...
Например создаём респонс по скрипту (из родительского на него выходим по кнопке), Потом на событие PostOpen респонса я меняю поле статус в респонсе.
Оно успешно меняется. Когда вношу изменения в респонс и сохраняю там на событии PostSave висит скрипт который присваивет полю из родительского документа значение статуса из респонса который уже сменен по событию PostOpen в респонсе, НО!!!! 2 маленькие проблемки при этом если закрываем респонс, во вьюхе значение колонки статус не меняется сразу же. Тоже самое и в родительском. Только если заново открываешь родительский и вьюху там уже статус меняется... и + почему то не работает PostSave в респонсе вообще если сохранение проводится по кнопке а не когда сам документ предлагает себя сохранить. В кнопке сохранения @Command([FileSave]); @Command([FileCloseWindow])
0 / 0 / 0
Регистрация: 04.12.2004
Сообщений: 3,329
09.08.2005, 15:54 20
<!--QuoteBegin-Gor+10:08:2005, 14:04 -->
<span class="vbquote">(Gor @ 10:08:2005, 14:04 )</span><!--QuoteEBegin-->Например создаём респонс по скрипту (из родительского на него выходим по кнопке), Потом на событие PostOpen респонса я меняю поле статус в респонсе.
[snapback]23257" rel="nofollow" target="_blank[/snapback]?[/quote]
Это зачем ты так делаешь ? Если ты хочешь инициализировать вычисляемое поле при создании документа, то использую в нем формулу типа:

Код
@If(@IsNewDoc;"Значение";@ThisValue)
<!--QuoteBegin-Gor+10:08:2005, 14:04 -->
<span class="vbquote">(Gor @ 10:08:2005, 14:04 )</span><!--QuoteEBegin-->Оно успешно меняется. Когда вношу изменения в респонс и сохраняю там на событии PostSave висит скрипт который присваивет полю из родительского документа значение статуса из респонса который уже сменен по событию PostOpen в респонсе, НО!!!! 2 маленькие проблемки при этом если закрываем респонс, во вьюхе значение колонки статус не меняется сразу же. Тоже самое и в родительском. Только если заново открываешь родительский и вьюху там уже статус меняется...
[snapback]23257" rel="nofollow" target="_blank[/snapback]?[/quote]
Если я правильно понял, то так и должно быть. :D Жми F9 для обновления.


<!--QuoteBegin-Gor+10:08:2005, 14:04 -->
<span class="vbquote">(Gor @ 10:08:2005, 14:04 )</span><!--QuoteEBegin-->почему то не работает PostSave в респонсе вообще если сохранение проводится по кнопке а не когда сам документ предлагает себя сохранить. В кнопке сохранения @Command([FileSave]); @Command([FileCloseWindow])
[snapback]23257" rel="nofollow" target="_blank[/snapback]?[/quote]
Должно работать всегда. Проверь дебаггером.
0
09.08.2005, 15:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.08.2005, 15:54
Помогаю со студенческими работами здесь

Свойства Представления Из Lotus Script
Здравствуйте! Программно создаю Представление. Возник затык с доступом к свойствам созданного...

Вычисление медианы на lotus script
Помогите с вычислением медианы на lotus script...перечитал кучу форумов и нигде не нашел хоть...

получение Guid на Lotus Script
Добрый день, товарищи! Может быть задам глупый вопрос, но всё равно. В лотусином документе есть...

Из формул запустить Lotus Script
Как на языке формул вызвать функцию из Script Library?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru