Можно ли передавать аргументы в диалоговом окне Lotus Notes

У меня есть одна форма с двумя полями под названием «Поле 1» и «Поле 2» и одна кнопка действия под названием «Проверить». При нажатии этой кнопки действия я хочу открыть диалоговое окно с тремя полями, которые должны автоматически заполняться на основе значения поля 2. Как этого достичь?

Ценю, если кто-нибудь поможет мне.


person Sathish    schedule 18.04.2016    source источник


Ответы (1)


Да, это возможно. Есть параметр document для NotesUIWorkspace.DialogBox(). Используйте этот документ для передачи параметров в ваш диалог.


ОБНОВЛЕНИЕ

Предположим, что у вас есть форма с именем "MyDialogForm" для представления вашего диалога.

Он выглядит так и содержит 3 поля:

MyDialogForm

И у вас есть форма с двумя полями и кнопкой "Проверить":

Тестовая форма

Поместите следующий код в обработчик события «Click» вашей кнопки «Проверить»:

Sub Click(Source As Button)
    Const DIALOG_FORM_NAME = "MyDialogForm"

    Dim ws As New NotesUIWorkspace
    Dim dialogBoxAccepted As Boolean
    Dim dialogParamDoc As NotesDocument

    Dim currentDocument As NotesDocument    
    Dim field2Value As String

    Set currentDocument = ws.CurrentDocument.Document 
    field2Value = currentDocument.GetItemValue("Field2")(0)

    'document created in-memory, but should not be saved
    Set dialogParamDoc = New NotesDocument(currentDocument.ParentDatabase)

    'populating dialog box fields
    Call dialogParamDoc.ReplaceItemValue("DialogField1", "dialogField1 with: " + field2Value)
    Call dialogParamDoc.ReplaceItemValue("DialogField2", "dialogField2 with: " + field2Value)
    Call dialogParamDoc.ReplaceItemValue("DialogField3", "dialogField3 with: " + field2Value)

    dialogBoxAccepted = ws.DialogBox(DIALOG_FORM_NAME,True , True, False, False  , False , False, "My Dialog Title", dialogParamDoc, True)
    If dialogBoxAccepted Then
        'displaying values, entered/changed in dialog box
        Msgbox dialogParamDoc.getItemValue("DialogField1")(0),,"DialogField1"
        Msgbox dialogParamDoc.getItemValue("DialogField2")(0),,"DialogField2"
        Msgbox dialogParamDoc.getItemValue("DialogField3")(0),,"DialogField3"
    End If
End Sub

Этот код считывает «Field2» и заполняет поля диалога на основе его значения. Затем он показывает диалоговое окно, в котором вы можете изменить эти значения.

демонстрационный диалог

Если вы нажали OK в своем диалоговом окне (диалоговое окно принято), код покажет значения, которые вы изменили в диалоговом окне.

person Community    schedule 18.04.2016
comment
Можете ли вы сказать это подробно, пожалуйста? потому что я новичок в этой технологии - person Sathish; 18.04.2016
comment
@Sathish, проверьте мое обновление, пожалуйста. Я думаю, что это отвечает на ваш вопрос. - person ; 18.04.2016
comment
Очень хороший ответ. Но я не согласен с предложением Обратите внимание в конце: если вы просто установите для четвертого параметра DialogBox значение False вместо True, как в вашем примере, то он также вернет вновь созданные поля, как указано в документации: noNewFields: Boolean. Optional. Specify True to not add fields that are on the dialog box form but not already contained in the underlying document. Otherwise, all dialog box fields are passed to the underlying document. - person Torsten Link; 18.04.2016
comment
@TorstenLink да, ты прав. Исправил мой ответ. Спасибо. - person ; 18.04.2016
comment
@Sathish Добро пожаловать :) Пожалуйста, примите ответ (зеленая отметка под стрелками вверх/вниз ответа), чтобы помочь другим пользователям найти этот ответ позже. - person ; 18.04.2016
comment
Если вы не хотите создавать для этого новый документ, вы также можете передать параметры через notessession.setEnvironmentVar и notessession.getEnviromentString (или эквивалент формулы). Я сделал это с хорошим эффектом, установив переменную среды в значение, подобное строке веб-запроса, например, docpos=1&hasNext=true&hasPrev=false. Установите это для вызывающего элемента дизайна и получите переменную в диалоговом окне. - person user2808054; 02.09.2016
comment
@user2808054 user2808054, с моей точки зрения, использование переменных notes.ini является последним методом, и я не рекомендую использовать этот подход, если есть другой способ. Легко забыть об очистке после этого, и notes.ini заполняется/загрязняется ненужной и даже конфиденциальной информацией. - person ; 26.09.2016
comment
Я согласен с конфиденциальностью, но другие моменты - это вопрос личного мнения. Относительно загрязнения примечаний.ini: легко обойти, всегда начиная имена переменных с известного префикса, чтобы вы знали, какие из них нужно очистить, если вы почувствуете необходимость. Не то, чтобы одна переменная имела чертовски большое значение. - person user2808054; 06.10.2016