ЭЦП одного поля в документе

T

TIA

Ребят, все советы что были ранее не помогли. Что можно сделать??? Желательно конструктивные советы а не общие размышления.

После вашего поста
Поле $Signature не прпадает.

первоначальная проблема

Как правильно подписать без секции только одно поле в документе?
И так, чтобы если в поле ничегоне меняли, а в других полях были изменения, т подпись у этого поля осталась.

должна была быть решена.

Какую проблему решаем теперь, что уже сделано на данный момент, что сейчас не работает, ответы на какие вопросы не ясны?
 

seoman2

Green Team
17.02.2010
507
1
BIT
72
Сейчас в документе есть 1 поле СОДЕРЖАНИЕ_ со свойством sign.
При изменении любого поля в документе, это поле подписывается по новой, изменяется каждый раз $Signature.
А мне надо, чтобы подписывалось это поле СОДЕРЖАНИЕ_ только при его изменении.
 
T

TIA

1. Кнопка "подписать" такая же как в посте №5?
2. Установлена ли Sign documents that use this form?
3. Выполнен ли п.1 поста №13?
4. Поле СОДЕРЖАНИЕ_ внутри секции?

P.S. Телепаты в форумах не участвуют.
 
K

Klido

только при его изменении
ЧТО считаем изменением??? Если поле доступно для редактирования в режиме редактирования - оно и переподпишется. Ибо НЕТ возможности определить реально ли были изменения (катопейст содержимого - чем не "изменение"?)

Поле - в контроллед секшен, доступ на изменение - в необходимых случаях по ходу дела, в таком случае - и переподписание поля.
 
T

TIA

Ибо НЕТ возможности определить реально ли были изменения (катопейст содержимого - чем не "изменение"?)
Не правда ваша. Нотес чётко понимает была ли модификация документа в UI. Например стандартный запрос на сохранение документа при закрытии документа, показывается только после модификации документа в UI. Да и недокументированное св-во ModifiedSinceSaved тоже работает. Копипаст в этом случае следует понимать как модификацию, но в такое же значение.
 
K

Klido

угу, это я уже гоню ;) в конце недели...запутал он круговым кругом про подпись поля ;)

как модификацию, но в такое же значение
вот и пусть подписывается всегда поле, если оно всегда доступно на редактирование, а когда недоступно - не подписывается... в секции ;)
 

seoman2

Green Team
17.02.2010
507
1
BIT
72
форма Sign documents that use this form - да
поле sign if mailed or saved in section
Документ подписывается, но при изменении другим юзером, подпись меняется на нового юзера.
$Signature изменяется.
Поле СОДЕРЖАНИЕ_ вне секций.
Кнопка подписать как в посте 5. И в принципе, поле подписывается при любом изменении.

Если поле на чтение (корумптед) - то затирается при оле оббъектах, таблицы лотусовские теряют

форматированние.

Можно ли увидеть пример базы, где подписывается одно поле? Можно на обменник и ссылку в личку.
 
K

Klido

кстати, ув. Ник Норкин поделился своим способом подписи любого кол-ва любых полей - весьма рекомендую изучить
 

seoman2

Green Team
17.02.2010
507
1
BIT
72
Читал, я правильно понял идею? При подписи копируется поле $Signature в поле $Signature_1 к примеру. А при проверке делается обратное действие.
Пробовал реализовать и не получилось ;)
 

seoman2

Green Team
17.02.2010
507
1
BIT
72
При изменении любого поля в доке - меняется поле $Signature!
А только поле СОДЕРЖАНИЕ_ имеет свойство "sign if mailed or saved in section".
У формы стоит свойство "Sign documents that use this form".
 
T

TIA

При изменении любого поля в доке - меняется поле $Signature!
$Signature меняется при любом UI-сохранении, потому что при сохранении c установленной "Sign documents that use this form", всегда выполняется подписание. А UI-сохранение реально выполняется только после какой-нибудь модификации документа.
Значение $Signature меняется потому, что подпись содержит дату подписи. Чтоб $Signature не менялась когда не надо и переименовывают поле из системного $Signature в какое-нибудь другое. А при проверке переименовывают обратно в $Signature.
 

seoman2

Green Team
17.02.2010
507
1
BIT
72
К примеру, есть в доке подписываемое поле СОДЕРЖАНИЕ_
Я после подписания дока переименую $Signature в $Signature_1.
Потом поменяю любое поле в доке...
А при проверке подписи $Signature_1 переименую в $Signature.
Но я так понял, что в этом случае востановленное поле $Signature не будет соответствовать документу?

Вообще $Signature содержит хэш только подписаного поля?
 
T

TIA

Вообще $Signature содержит хэш только подписаного поля?
Да, если подписано только одно поле.
Но я так понял, что в этом случае востановленное поле $Signature не будет соответствовать документу?
Оно соответствует подписанным полям документа. Если подписанные поля не менялись с момента подписания -- подпись верна.
 

seoman2

Green Team
17.02.2010
507
1
BIT
72
Есть ли пример кода, как правильно подписывается одно поле в документе с множеством полей?
 
K

Klido

seoman2
а Ника Норкина чем Вам не пример подписания ЛЮБОГО кол-ва полей???
 
30.05.2006
1 345
12
BIT
0
И чему удивляться?

Сохраняет док-т ДРУГОЙ юзер (не меняя значения поля)? У формы свойство - "Sign documents that use this form"?
Значит другой юзер БЕЗУСЛОВНО переподписывает поле, даже не меняя его значения. А раз юзер другой - то и подпись другая..
 

seoman2

Green Team
17.02.2010
507
1
BIT
72
Constantin, так какой же выход? Без свойства формы "Sign documents that use this form", поле $Signature не появится.
Пошел по пути Ника Норкина.
Сделал так:
Sub Click(Source As Button)
Dim session As New NotesSession
Dim uiworkspace As New NotesUIWorkspace
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim item As NotesItem
Dim itemTMP As NotesItem
Set db = session.CurrentDatabase
Set doc = uiworkspace.CurrentDocument.Document
Set item = doc.GetFirstItem("СОДЕРЖАНИЕ_")
item.IsSigned ="true"
Call doc.Sign
Dim docTMP As NotesDocument
Set docTMP = db.CreateDocument
xxx$= item.text
Set itemTMP = docTMP.AppendItemValue("СОДЕРЖАНИЕ_TMP", xxx$)
itemTMP.IsSigned ="true"
Call docTMP.save(True, False)
Call docTMP.Sign
Call doc.ReplaceItemValue("$Signature_2",docTMP.GetItemValue("$Signature") )
Delete docTMP
End Sub
Но при этом поле $Signature у временного документа пустое!
 
Мы в соцсетях:

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