Библиотеки @-кода

nvyush

Lotus team
22.04.2009
2 317
0
#1
Здравствуйте все!
Может баян, но мне нигде не попадалось.

Иногда возникает необходимость/желание написать свою @-функцию и повторно её использовать. Вспомнил про @Eval и шаредные поля. В скрытое шаредное cfd-поле пишем, например, такую "функцию":
Код:
"_res := {Hi mr/mrs } + _person + {!}; _res;"
В нужное видимое поле пишем:
Код:
@Eval("_person := " + @username + "; " + <имя_шаред_поля>);
Собако-функции могут быть довольно большими, копипастить и потом дорабатывать их довольно муторно, а добавить шаредное поле на форму дело нескольких секунд. Оформить вызов через @Eval также не трудно.
Можно объединять поля функций на подформах — получится целая собако-библиотека :welcome:.
Понятное дело, что это применимо только к формам, но уже что-то.
Прошу знатоков указать на грабли подобной реализации.

Причина редактирования — ошибка в коде
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 231
17
#2
nvy
1) не дай боже твоя собако-библиотека будет ниже находится чем вычисляемое поле :welcome:
2) если возникнет где-то ошибка в формулах ДО необходимого вычисляемого поля то все дальнейшие вычисления прерываются
 

VladSh

начинающий
Lotus team
11.12.2009
1 260
5
#3
nvy, классное решение! Только в Shared Field формула скомпилена уже, не знаю, будет ли @Eval со скомпиленым кодом работать... думаю, что нет. Да и если код не скомпилен, то как он будет работать в скрытом дизайне?..
И ещё во 2-м коде меня нечётное количество кавычек слегка напрягло :)

P.S. Давно хотел, но вот созрел - сейчас забросил на IdeaJam: New design element for code "Open segment". Больших надежд не питаю, больше для очистки совести, но... поглядим! :)
 

VladSh

начинающий
Lotus team
11.12.2009
1 260
5
#5
На том сайте люди забрасывают идеи, там есть спецы из IBM, которые просматривают и кое-что (что не противоречит стратегии развития продуктов) они делают. Но делают очень мало. Касательно нотусёвых UI вообще бесполезно просить - не обратят даже внимания, т.к., думаю, что они все силы переложили на XPages и формы скоро (когда будет полная поддержка XPages клиентом Notes) загнутся сами собой.

Если тыкнуть там на мой ник, то можно посмотреть перечень всех моих идей; голосуйте - а вдруг! :)

По этой идее, вкратце, - новый элемент дизайна, который бы содержал код в некомпилированном виде и этот код бы не скрывался при скрытии дизайна, т.е. чтобы можно было бы работать с ним как с текстом + новую @-формулу, которая по имени элемента дизайна возвращала бы текст @-формулы. Использовать это дело во всех местах, где можно пользоваться @-формулами, в т.ч. и из Evaluate.
C помощью этого можно было бы реализовать собственные @-формулы (раз IBM не хочет этого делать).

Инглиш у мну тоже хромает :) Гугл.транслэйт, кстати, очень хорошо переводит на английский, а вот с английского - ужас! Приходится, правда, корректировать, главное, использовать простые фразы и не использовать причастных и деепричастных оборотов, а то он выдаёт такой результат, что страшно становится))) Как раз таком образом язык и подучиваю ;)
 

TIA

:-)
Lotus team
15.05.2009
790
3
#6
Прошу знатоков указать на грабли подобной реализации.

1. Надо аккуратно с @Return в своей @-подфункции, т.к. она не даст шанса выполниться другим функциям и доработать вызывающей, что может быть важно.

2. Внутри @-подфункции нельзя использовать переменные, использованные в вызывающей @-функции
Код:
@MySub{
x:=1;
x:=x+param1;
}

x:=2;
param1:=1;
@MySub;
REM {здесь х=3 вместо ожидаемых x=2}

3. Свою @-подфункцию лучше бы в @Do завернуть.
Например, подстановка суммы двух @-подфункций
Код:
@if(MySub1+MySub2; op1; op2)
развернётся не в
Код:
@if(mysub1_body;mysub1_res+mysub2_body;mysub2_res; op1; op2)
, а в осмысленный
Код:
@if(@Do(mysub1_body;mysub1_res)+@Do(mysub2_body;mysub2_res); op1; op2)
 
K

K-Fire

#7
А подскажите пожалуйста, в чем смыслъ, так сказать, использования формулъ? :) Их дебагить нельзя, код длиной больше 4-5 строчек обычно нечитабельный и тому подобные траблы.
 

VladSh

начинающий
Lotus team
11.12.2009
1 260
5
#8
K-Fire,
с ходу 2 примера:
1. Функция нашего округления (для вьюх).
2. Функция подключения к БД (для аутлайнов: формулы для вставки фреймсетов, страниц, вьюх).
эти функции используются множество раз, мы просто их копипастим, т.к. нормальной возможности повторно использовать код у нас нет :)
Вносить изменения - запаришься искать все места, где этот код есть...
 

nvyush

Lotus team
22.04.2009
2 317
0
#9
А подскажите пожалуйста, в чем смыслъ, так сказать, использования формулъ? :) Их дебагить нельзя, код длиной больше 4-5 строчек обычно нечитабельный и тому подобные траблы.
Смысл в повторном использовании кода. Я пришёл к этому из-за необходимости использовать в разных местах преобразование числа в строку прописью (мелькал код здесь на форуме). Столкнулся сам ещё с одной граблей. Длинную строку в формулу поля можно запихнуть только конкатенацией, т.е. если код функции длинный, приходится писать не "код", а "кусок кода 1" + "кусок кода 2" ....
Насчёт дебага — есть @Prompt, @StatusBar.


Добавлено:
1. Надо аккуратно с @Return в своей @-подфункции, т.к. она не даст шанса выполниться другим функциям и доработать вызывающей, что может быть важно.
Ага, уже наступил на эти грабли.
2. Внутри @-подфункции нельзя использовать переменные, использованные в вызывающей @-функции
Это да, но делать вложенные вызовы таким образом — это уже перебор. Предполагалось, что функция будет вызываться для преобразования значений к-либо полей и будет фактически только @Eval.
3. Свою @-подфункцию лучше бы в @Do завернуть.
Можно в @Do, можно в @If или в цикл в зависимости от задачи