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

K

Klido

я не издеваюсь!

Call docTMP.save(True, False)
Call docTMP.Sign

подпись надо ДО сохранения - мне так кажется :)
 

seoman2

Green Team
17.02.2010
507
1
BIT
72
Перечитал.

Вот тестовая кнопка для создания поля $Signature_2, которое копирует с временного документа поле $Signature в основной. $Signature_2 - пустое!

Немогу понять, что не так???

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
Call doc.save(True, False)

Dim docTMP As NotesDocument
Set docTMP = db.CreateDocument
xxx$= item.text
Set itemTMP = docTMP.AppendItemValue("СОДЕРЖАНИЕ_TMP", xxx$)
itemTMP.IsSigned ="true"
Call docTMP.Sign
Call docTMP.save(True, False)

Call doc.ReplaceItemValue("$Signature_2",docTMP.GetItemValue("$Signature") )
Delete docTMP
Call doc.save(True, False)
End Sub
 
N

nvyush

Перечитал.

Вот тестовая кнопка для создания поля $Signature_2, которое копирует с временного документа поле $Signature в основной. $Signature_2 - пустое!

Немогу понять, что не так???
Нужно как-то так:
Код:
Dim item As NotesItem
Set item = doc.GetFirstItem("$Signature")
Call doc.CopyItem(item, "$Signature_2")
doc.GetItemValue для полей подписи возвращает пустоту, не так давно обсуждалось.
 

seoman2

Green Team
17.02.2010
507
1
BIT
72
Дело в том, что в временном документе docTMP после его подписания создается поле $Signature пустое!
 
N

nvyush

Дело в том, что в временном документе docTMP после его подписания создается поле $Signature пустое!
А как, простите, Вы об этом узнали? Путём многочисленных экспериментов нескольких членов форума было установлено, что значение поля подписи можно увидеть только в окне свойств документа. Никакими средствами Лотуса, включая СиАПИ "выгрызть" значение подписи в строковую переменную и т.п. не представляется возможным, можно только скопировать поле подписи под другим именем. То, что Вы после выполнения doc.GetItemValue("$Signature") получаете пустую строку или видите пустоту в отладчике, не означает, что поле на самом деле пустое.
 
H

hosm

Вы слышите, что Вам говорят?
"пустое" - это item is Nothing? Есди нет, то смотрите, что Вам говорят:
То, что Вы после выполнения doc.GetItemValue("$Signature") получаете пустую строку или видите пустоту в отладчике, не означает, что поле на самом деле пустое.
а теперь запомните унид этого темпового документа, завершите выполнение кода, найдите этот темповый документ и посмотрите айтем $Signature из клиента.
 
T

TIA

Перечитал.

Вот тестовая кнопка для создания поля $Signature_2, которое копирует с временного документа поле $Signature в основной. $Signature_2 - пустое!
Немогу понять, что не так???
Перечитали и не исправили даже то, что я указал явно:
Опять item.IsSigned ="true"

seoman2
Вы либо не понимаете русский текст, либо совсем не включаете мозги. Если вы добиваетесь, чтобы за Вас сделали Вашу работу, то лучше прямо так и сказать -- вам назовут цену.
 

seoman2

Green Team
17.02.2010
507
1
BIT
72
Да, теперь с темпового документа все нормально копируется его поле $Signature.
Вот только при каждом запуске кнопки возвращается новое значение $Signature с темпового дока.

И не понимаю в упор про item.IsSigned ="true"... Да item.IsSigned это свойство, признак, будет ли подписываться поле или нет.
Но в дебагере команда item.IsSigned ="true" меняет признак подписываемости у поля!
 
N

nvyush

Да, теперь с темпового документа все нормально копируется его поле $Signature.
Вот только при каждом запуске кнопки возвращается новое значение $Signature с темпового дока.

И не понимаю в упор про item.IsSigned ="true"... Да item.IsSigned это свойство, признак, будет ли подписываться поле или нет.
Но в дебагере команда item.IsSigned ="true" меняет признак подписываемости у поля!
Должно быть item.IsSigned = True без кавычек. Это булево значение, а не строка.
P.S. Допускаю, что Лотус неявно преобразует "true" в True, но это лишняя операция/время. Оно Вам надо?
 

seoman2

Green Team
17.02.2010
507
1
BIT
72
Посмотрел в дебагере. У поля типа NOTESITEM свойство ISSIGNED - Variant.
И в любом случае item.IsSigned = True или item.IsSigned = "True" меняет его значение с False на True.
Хотя в хелпе Boolean и пример item.IsSigned = True

Что не так со временным документом? Достаточно лив него скопировать 1 поле, которое надо защитить цифр подписью?
 
T

TIA

seoman2
Кнопка где нажимается, в открытом документе или нет?

Что не так со временным документом?
Копировать лучше не значения поля, а само поле, как link removed. Потому что значение скрипт умышленно возвращает пустым.
 
N

nvyush

seoman2
Может быть при подписи осуществляется привязка к юниду документа? Сам я с этим не заморачивался, но в упомянутом примере Норкина все операции, насколько я помню, проводились в текущем документе. Может неиспользовать темповый док вообще? Или (я это не советовал :KillMe:), вспомнить, что doc.UniversalID допускает запись и перед docTMP.Sign, выполнить docTMP.UniversalID = doc.UniversalID и НЕ ВЫПОЛНЯТЬ docTMP.Save(...).
 
T

TIA

Вот две акции представления. Первая подписывает в документе поле "СОДЕРЖАНИЕ_". Вторая проверяет, корректна ли подпись. Обработку ошибок добавить по вкусу. На форме не должно быть подписываемых полей и признака "Sign documents that use this form"

Код:
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 = session.DocumentContext

Set item = doc.GetFirstItem("СОДЕРЖАНИЕ_")
item.IsSigned = True
Call doc.Sign

Set itemTMP = doc.GetFirstItem("$Signature")
Call doc.CopyItem(itemTMP, "$Sign_2")
doc.RemoveItem "$Signature"
item.IsSigned = False
doc.Save False, False
End Sub

Код:
Sub Click(Source As Button)
'Проверка подписи
Dim session As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim item As NotesItem

Set db = session.CurrentDatabase
Set doc = session.DocumentContext	

Set item = doc.GetFirstItem("$Sign_2")
Call doc.CopyItem(item, "$Signature")
Set item = doc.GetFirstItem("СОДЕРЖАНИЕ_")
item.IsSigned = True
If doc.Signer="" Then Msgbox "Not valid" Else Msgbox "Valid"
End Sub
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
TIA
и всё это через страшный УИ :KillMe:
 

seoman2

Green Team
17.02.2010
507
1
BIT
72
Почему-то, если другой юзер изменяет поле СОДЕРЖАНИЕ_, то подпись не нарушается.... :crash:
 
T

TIA

Куда-то сообщения с форума поудалялись :)
Почему-то, если другой юзер изменяет поле СОДЕРЖАНИЕ_, то подпись не нарушается....
А когда подписывающий выполняет проверку подписи и проверку, обнаружение изменений подписанных данных работает?

Выполнено ли условие:
На форме не должно быть подписываемых полей и признака "Sign documents that use this form"
 
Мы в соцсетях:

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