• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Мелкие Вопросы Rtfm

  • Автор темы serko
  • Дата начала
S

serko

увы, нет. Энтеры не убирает. Эффект как Trim выдает. Пробелы удаляет, а энтеры остаются

Добавлено: Не составит труда свою написать на поимку энтеров, только как ловить энтер? InStr же не найдет ((
 
S

serko

Не понимаю. Уже как только не изощрялся. Не работает. Т_Т
Код:
Public Function delText (Field As String) As String 'не трогать
Field = Trim(Field)
Dim status (1 To 4) As Boolean
status(1) = False
status(2) = False
status(3) = False
status(4) = False
Do While status(1) = False Or status(2) = False Or Status(3) = False Or Status(4) = False
status(1) = False
status(2) = False
status(3) = False
status(4) = False
If Mid(Field, 1, 1) = Chr(10) Then
Field = Mid(Field, 2, (Len(Field) - 1))
Else
status(1)= True 
End If
If Mid(Field, Len(field), 1) = Chr(10) Then
Field = Mid(Field, 1, (Len(Field) - 1))
Else
status(2)= True 
End If
If Mid(Field, 1, 1) = Chr(13) Then
Field = Mid(Field, 2, (Len(Field) - 1))
Else
status(3)= True 
End If
If Mid(Field, Len(Field), 1) = Chr(13) Then
Field = Mid(Field, 1, (Len(Field) - 1))
Else
status(4)= True 
End If
Loop

deltext = field
End Function
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 948
609
BIT
252
какие энтеры, в каком типе поля?
в многозначном поле нет энтеров, например
 
S

serko

Хм. Поле - Text, Editable
---
Вернусь к вопросу "Как запретить юзать Ctrl+X". Один знакомый сказал смотреть в сторону Database Script. Кто может по этому поводу подсказать полезную информацию?
---
Как сделать так:
Одна БД с Документами. В зависимости от пользователя(у каждого юзера есть своя роль) ему выдается конкретный набор вьюх, которые ему доступны. Как такое можно сделать?
 

alexas1

Green Team
10.04.2014
1 202
225
BIT
37
Не понимаю. Уже как только не изощрялся. Не работает. Т_Т
JS:
var f = document.forms[0];
f.enterField.value.replace(/\n/g,"");

@Formulas:
FIELD MyField := @ReplaceSubstring( MyField ; @NewLine ; "" );

LS:
Dim workspace As New NotesUIWorkspace
Dim doc As NotesDocument
Set doc = workspace.CurrentDocument.Document
doc.MyField = Evaluate(|@ReplaceSubstring( MyField ; @NewLine ; "" )|,doc)
===============================
Это для НЕмногозначного поля (как отметил lmike)

Для multiple values - Join
 

alexas1

Green Team
10.04.2014
1 202
225
BIT
37
"Как запретить юзать Ctrl+X". Один знакомый сказал смотреть в сторону Database Script
Sub Querydocumentdelete(Source As Notesuidatabase, Continue As Variant)
Continue = False
End Sub
(после изменения - дизайнер закрыть, базу переоткрыть)

Эт запретишь интерфейсное удаление ващще (кодом - можно) (Задавай вопросы точно :) )
 

Domino-Designer

Людям надо поморгать!
Lotus Team
06.12.2011
616
223
BIT
9
Эт запретишь интерфейсное удаление ващще (кодом - можно) (Задавай вопросы точно )

Ну даже так, скромно говоря, из интерфейса не запретишь. Включаем дебагер и и нажимаем отмену. Ну эт конечно просто к слову пришлось.
 

alexas1

Green Team
10.04.2014
1 202
225
BIT
37
В зависимости от пользователя(у каждого юзера есть своя роль) ему выдается конкретный набор вьюх, которые ему доступны. Как такое можно сделать?
- т.е. для каждой роли - своя, жёсткая, логика работы в базе.
Это АРМ.
Одна база - несколько АРМ (по ролям).
Ну, так и делай - юзер открывает базу\определяешь (в зависимости от роли) стартовый фрейм (каждой роли - свой)\кладёшь в него положенные юзеру вьюшки (хоть все сразу), менюшки и т.п.\он и будет вести юзера дальше по цепочке интерфейсов только для этого АРМ.
В принципе, весь АРМ можно (и нужно, ИМХО) сделать в одном, стартовом фрейме.
 

Leoric

Lotus Team
15.10.2003
68
9
BIT
28
В зависимости от пользователя(у каждого юзера есть своя роль) ему выдается конкретный набор вьюх, которые ему доступны. Как такое можно сделать?
Насколько я помню в аутлайнах работают HideWhen для позиций, у нас по такому принципу на роль [Admin] скрыты вьюхи с конфигами. Для не сильно конфиденциальной инфы (почти ко всем конфигам readers = *) как решение ок.
 

savl

Lotus Team
28.10.2011
2 607
313
BIT
259
Leoric
Работают.
В зависимости от пользователя(у каждого юзера есть своя роль) ему выдается конкретный набор вьюх, которые ему доступны. Как такое можно сделать?
Пара вариантов:
1. На каждый АРМ сделать свой аутлайн + аутлайн с общими функциями.
Натыкать эти аутлайны в фреймсет и прописать формулы скрытия.
2. Первый способо + отдельный фреймсет на каждый АРМ.
3. Общий аутлай с кучей позиций, у каждой позиции формулы скрытия, при необходимости.
4. НИКОГДА НЕ ИСПОЛЬЗОВАТЬ: в дизайнере закладка доступа в свойствах представления.
Отметить только нужные роли/пользователей.
Первые 3 способа обходятся через Ctrl + Shift + переход во вьюху из меню.
Четвертый способ обойти практически невозможно, но не имея доступа к этим вьюхам разработчик имеет шанс их потерять.
В прямом смысле.
 
  • Нравится
Реакции: serko

alexas1

Green Team
10.04.2014
1 202
225
BIT
37
... Пара вариантов: ...
У serko диплом - тут не до оптимизации :)
Поэтому лучше прогить АРМы раздельно.
А все ухищрения, таки, обходятся всегда - вопрос только компетенции и времени.
Имеет смысл рассматривать только защиту от дурака и разрушения им логики построения интерфейса. ИМХО.
 
  • Нравится
Реакции: serko

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 948
609
BIT
252
Четвертый способ обойти практически невозможно, но не имея доступа к этим вьюхам разработчик имеет шанс их потерять.
В прямом смысле.
частая и порочная практика - менять дизайн БД, а не шаблона вполне дает подобный эффект :)
я сторонюсь таких вариантов разработки, хотя знаю где только так и делали :)
 
S

serko

Попытался создать функцию для универсальной проверки уникальности полей. Базу выложу ниже.
Проблема с функцией isUnique. Библиотека в базе одна.
Функция работает так.. Есть поля в документе, в которых указывается информация о полях, которые будут участвовать в функции уникальности. Пример заполнения поля UniqueValue(это название поля в дизайнере): "field1,field2,field3". Пробелы и иные разделители, кроме запятых, в формулу вставлять нельзя. UniqueName(имена полей): "Поле1,Поле2,Поле3". UniqueFormula(формулы): "{Form = "test" & field1 = "} & doc.getitemvalue("field1")(0) & {"},{Form = "test" & field2 = "} & doc.getitemvalue("field2")(0) & {"},{Form = "test" & field3 = "} & doc.getitemvalue("field3")(0) & {"}"
Таким образом функция сработает в QuerySave и преобразует значения полей в элементы массивов, после чего функция будет проверять. Проблема встает с формулами.
1) Не знаю как формулы прописать в Default Value на поле. Формулы прилагаются.
2) Вылезает ошибка, что с формулой что-то не так.
База с примером и формулы, которые не могу вставить дефолтом в поле UniqueFormula, в блокноте будут выложены ниже.
 

Вложения

  • формулы.txt
    133 байт · Просмотры: 493
  • codeby.rar
    23,3 КБ · Просмотры: 136
S

serko

Я вчера загнул с описанием. Извините. Опишу проблему проще.
Хочу проверить на уникальность поле документа(через notesdatabase.Search)
НО формулу надо писать не в программе, а в поле.
Т.е. будет форма с полем field1 и поле UniqueFormula, где будет прописана сама формула + кнопка для всей этой обработки.
Код кнопки:

Код:
Dim ws As New notesuiworkspace
    Dim doc As notesdocument
    Dim col As notesdocumentcollection
    Dim formula As String
    Dim db As notesdatabase
    Set db = ws.CurrentDatabase.Database
    Set doc = ws.CurrentDocument.Document
    formula = doc.GetItemValue("UniqueFormula")(0)
    'formula = Mid(formula, 2, (Len(formula) - 2))
    'formula = {Form = "test" & field1 = "} & doc.getitemvalue("field1")(0) & {"}
    Set col = db.Search(formula, Nothing, 0)
    Msgbox col.Count

Формула для вставки в поле:
{Form = "test" & field1 = "} & doc.getitemvalue("field1")(0) & {"}
 
M

maffl

Формула для вставки в поле:

Что-нибудь такое, наверное
"Form = \"test\" & field1 =\"" + field1 + "\""

Всё, что в кавычках - просто текст. Кавычки у test экранировать. Всё, что без кавычек - напрямую значение документа.
 
  • Нравится
Реакции: serko

savl

Lotus Team
28.10.2011
2 607
313
BIT
259
Search убираем, это жесть.
Делаем вьюху, первая колонка сортированная, значение колонки поле, которое проверяется.
Далее на QuerySave проверяем уникальность:
Получаем вьюху (можно её кешировать, но тогда придется обновлять).
Получаем по вьюхе коллекцию документов.
Если в коллекции более одного документа - "Хьюстон, у нас проблемы"(с)
Если документ один - сравниваем UNID документа из коллекции с UNID документа, который сохраняем.
Если совпадают - даем сохранить, если не совпадают - не даем.
Основной минус - Readers поля, если они есть, то вероятность не увидеть дубликат есть.
Но и этот момент обходится:
1. Если сделать вьюху категоризированной, то можно получить массив значений первой колонки: view.GetColumnValues(0)
Далее сделать ArrayGetIndex(<массив>, <ключ>)
Если результат будут Not IsNull, то значение уже есть.
2. Сделать отдельную базу с "индексом".
При удачно сохранении основного документа в этой базе создать документ, в котором будет значение нашего поля.
readers полей данный документ иметь не должен.
Так же создаем вьюху с сортиорованной колонкой, как я описал выше.
Ну соотвественно проверка меняется немного, теперь надо вьюху получать не в текущей базе, а в этой индексной.

Надеюсь, что моё еще сонное сознание не запутало никого)
[DOUBLEPOST=1424241463,1424241349][/DOUBLEPOST]Проверить новый ли документ или уже созданный можно простым условием:
Код:
if implode(Evaluate({@NoteID},param)) = {NT00000000} then msgbox "Новый документ"
' param - наш документ
 
  • Нравится
Реакции: serko

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 948
609
BIT
252
1. Если сделать вьюху категоризированной, то можно получить массив значений первой колонки: view.GetColumnValues(0)
можем воткнуться в обновление индексов (категории их усложняют)
 
  • Нравится
Реакции: serko
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!