Было бы полезно узнать, почему вы перевели его с onChange на агента, но я думаю, что есть способы сделать то, что вы хотите.
Вы упомянули вызов агента из языка формул - мне удалось отобразить окно сообщений, вызывающее агента следующим образом:
@Command([RunAgent];"CheckSupplierSpec")
Другой вариант - использовать агента в качестве агента Java. Это дает вам доступ к классам пользовательского интерфейса Java, которые будут отображаться даже при вызове NotesAgent.Run. Пример здесь .
Если вы не хотите переделывать весь агент в Java, вы можете использовать LS2J для доступа к классам пользовательского интерфейса Java. Например, вы можете создать библиотеку сценариев Java под названием «Java Messagebox»:
import javax.swing.JOptionPane;
public class JavaMessagebox {
public void Messagebox (String message) {
JOptionPane.showMessageDialog(null, message);
}
}
, а затем вызвать его из агента LotusScript следующим образом:
Use "Java Messagebox"
Uselsx "*javacon"
Sub Initialize
Dim mySession As JavaSession
Dim myClass As JavaClass
Dim myObject As JavaObject
Set mySession = New JavaSession()
Set myClass = mySession.GetClass("JavaMessagebox")
Set myObject = myClass.CreateObject()
myObject.Messagebox(|This is my Java messagebox!|)
End Sub
Для более изощренного примера использования компонента Java AWT, который использует собственный внешний вид вашей операционной системы, я рекомендую изучить База данных примеров LS2J Джулиана Робичо . Его пример StatusBox не является модальным, но вы можете найти параметр, чтобы сделать его модальным здесь , если необходимо.