• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

@-формулы

  • Автор темы Автор темы KatyaVm22
  • Дата начала Дата начала
K

KatyaVm22

Добрый день!

Помогите, пожалуйста, разобраться с @-формулами.

Есть несколько Представлений (Электронная библиотека, Обучение, Материалы), данные забиваются с одной формы (ElectronicLibrary).

В Представление (Электронная библиотека) создаю действие (Добавить книгу).
Необходимо, чтобы при нажатии на Добавить книгу - открывалась форма (ElectronicLibrary) с вычисляемым при создании значением полем (Vid) - Электронная библиотека.

Делаю так:

@PostedCommand([Compose]; "ElectronicLibrary") & @SetField("Vid"; "Электронная библиотека")

Форма открывается, а в поле Vid значение Электронная библиотека не появляется.
 
открываешь форму в дизайнере
ищешь поле Vid, слева находишь пункт DefaultValue, пишешь туда "Электронная библиотека"
Кнопку меняешь на @Command([Compose]; "ElectronicLibrary")
З.ы. Книги, книги, книги...
 
Поле Vid должно принимать разные значения - Электронная библиотека, Обучение, Материалы и т.д. в зависимости от того из какого представления создается.

При создание из представления Электронная библиотека - в поле Vid должно быть Электронная библиотека.
При создание из представления Обучение - в поле Vid должно быть Обучение.
При создание из представления Материалы - в поле Vid должно быть Материалы.
 
А принимать значения не из этого списка может?
Скажем, принять значение "Заявки", если создается из представления "Документы" ?
 
Нет, нужна жесткая привязка к представлению из которого создается.
 
Хм... а форма везде разная? или только ElectronicLibrary?
Потому что если форма везде своя, то прописать это можно на форме и не мучаться:
Находим поле Vid, делаем его Computed When Compose, в разделе Value пишет текст который нам нужен для этой формы.

А вот если форма везде одинаковая, то там чуть подшаманить надо, через Notes.ini
 
Форма одна ElectronicLibrary.
А notes.ini на сервере править или у пользователя?
 
Пользователя, сервера не надо. Итак.
В каждом представлении делаем свою кнопку "Создать", это придется сделать.
На примере: Электронная библиотека.
Код:
@Environment("Vid";"Электронная библиотека");
@Command([Compose]; "ElectronicLibrary")

На форме:
Находим поле Vid, делаем его Computed When Compose, в разделе Value пишем:
Код:
res:=@Environment("Vid");
@Environment("Vid";"");
res

Попробуйте.
 
Если можно заменить @PostedCommand на @Command (т.е. если это не нарушит логику кода) , то можно реализовать проще:

@Command([Compose]; "ElectronicLibrary");
@Command([EditGoToField]; "Vid");
@Command([EditInsertText]; "Электронная библиотека");

Также не надо забывать что на @Environment требуется разрешения в ECL, т.к. выполняется запись в notes.ini пользователя.
 
Если можно заменить @PostedCommand на @Command (т.е. если это не нарушит логику кода) , то можно реализовать проще:

@Command([Compose]; "ElectronicLibrary");
@Command([EditGoToField]; "Vid");
@Command([EditInsertText]; "Электронная библиотека");

Также не надо забывать что на @Environment требуется разрешения в ECL, т.к. выполняется запись в notes.ini пользователя.

А на форме полю Vid что задать?
 
Поле надо будет сделать тогда Editable, и не задавать никакого значения.
Но после этого его можно будет отредактировать.
 
Есть хорошая формула - @UpdateFormulaContext
А в примерах практически ваш случай.

@Command([Compose]; "ElectronicLibrary");
@UpdateFormulaContext;
@SetField("Vid"; "Электронная библиотека");
 
Поле м.б. вычисляемым.
Проще 1 агент на LotusScript, и 1 SharedAction, встроенный во все необходимые виды с вызовом этого агента.
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab