Определите поля с текстом интернет-почты RFC822 с помощью формулы

У меня есть несколько документов, в которых есть поле с именем From, а в некоторых из них есть текст интернет-почты RFC822. Его содержимое отображается в свойствах документа примерно так:

Field Name: From
Data Type: RFC822 Text
Data Length: XX bytes
Seq Num: 2
Dup Item ID: 0

Field Flags: SUMMARY NAMES 

RFC822 Type: ADDRESS
RFC822 Flags: STRICT 
Native Value: 

"ABC XYZ <[email protected]>"

RFC822 Header Name: 

"From"

RFC822 Header Delimiter: 

": "

RFC822 Header Body: 

4E 79 6A 52 19 ABC 
6F 59 6F 60 32 XYZ
...
...

В LotusScript мне удалось написать следующий фрагмент кода, чтобы определить, содержит ли поле текст интернет-почты RFC822.

Set item = doc.Getfirstitem("From")
If item.Type = 1282 Then
    'Field has RFC822 Internet mail text
End If

Но как я могу проверить это на языке формул? Я не могу найти эквивалентный код формулы, который проверял бы текст электронной почты RFC822 в Интернете. Я пытаюсь идентифицировать поля типа RFC822 TEXT со свойствами поля, показанными выше. Мне нужно это, чтобы я мог поместить его в формулу выбора представления и просмотреть все документы в одном представлении.


person Naveen    schedule 27.06.2013    source источник
comment
Я немного смущен тем, что вы действительно хотите. Вы пытаетесь идентифицировать поля типа RFC822 TEXT (как показано в списке полей в окне свойств документа)? Или вы пытаетесь идентифицировать поля, содержащие действительный адрес, соответствующий спецификации адреса RFC822? Или вы пытаетесь идентифицировать поля типа RFC822 TEXT и, содержащие действительный адрес, соответствующий спецификации адреса RFC822? Или что-то еще, если я пропустил какие-либо возможности здесь ;-)   -  person Richard Schwartz    schedule 27.06.2013
comment
Я пытаюсь идентифицировать поля типа RFC822 TEXT с показанными свойствами поля, аналогичными моему вопросу. Мне нужно каким-то образом отобразить все документы с таким значением поля в представлении.   -  person Naveen    schedule 27.06.2013


Ответы (2)


Я не знаю, как проверить тип поля на языке формул. Можете ли вы написать агент LotusScript для проверки item.Type и добавления скрытого поля (например, $HasRFC822TextItems = 1) и использовать его в формуле выбора представления?

Если вы не можете или не хотите этого делать, другой альтернативой является создание папки и использование ее вместо представления. То есть ваш агент должен протестировать item.Type, как указано выше, а затем использовать NotesDocument.putInFolder("RFC 822 Text Documents").

person Richard Schwartz    schedule 27.06.2013

Я думаю, вы можете проверить, находится ли значение элемента в формате FRC822, с помощью этой формулы:

add := @ValidateInternetAddress([ADDRESS822];From) ;
x := @If( add = "" ; "RFC 822 ADDRESS" ; "OTHER ADDRESS FORMAT") ;
@Prompt([OK];"";x)

Если формула возвращает пустую строку, проверка прошла успешно или, другими словами, значение в поле From содержит допустимое значение RFC822.

Однако он не проверяет тип элемента.

person Michael Ruhnau    schedule 27.06.2013
comment
Спасибо за ваш ответ Михаил. Но формула возвращает true, если значение поля содержит только значение "ABC XYZ" <[email protected]>. Если он содержит значение, показанное в моем вопросе (которое видно в свойствах документа), то он возвращает сообщение об ошибке Invalid Phrase or character found. - person Naveen; 27.06.2013
comment
Хм, странно. Я пробовал это с электронным письмом с полем «От» в том же формате, что и в вашем вопросе. В этом случае он возвращает пустую строку. Когда я пробую это с полем From с адресом Notes, я получаю указанную вами ошибку. Таким образом, вы можете обернуть мою формулу в формулу @If, чтобы поймать это. Я немного обновил код выше. - person Michael Ruhnau; 27.06.2013
comment
Это все еще не работает для меня. Это работает для вас в формуле выбора представления? Вот я и собираюсь его использовать. - person Naveen; 27.06.2013
comment
Я также обновил свой вопрос, включив в него полный текст свойств поля. - person Naveen; 27.06.2013
comment
Думаю, проблема в том, что адрес должен быть в формате: Streitfeld, Sara (Miami) ‹[email protected]› (из примечаний help). В вашем примере это будет означать значение ABC XYZ ‹[email protected]› В противном случае проверка завершится неудачно (в моем случае тоже). - person Michael Ruhnau; 27.06.2013
comment
Ооо... Формат идентификатора электронной почты такой же, как я описал в своем вопросе. Я удалил только настоящие имена, вот и все. Вернуться к началу, я думаю! - person Naveen; 27.06.2013
comment
Это ошибка в @ValidateInternetAddress с аргументом [Address822]. Согласно спецификациям RFC822, кавычки вокруг ABC XYZ не требуются. В спецификации BNF эта часть адреса называется «фразой», а «фраза» определяется как «1*слово», что означает одно или несколько слов. Кавычки необходимы вокруг Streitfeld, Sara (Miami), потому что они содержат запятую, которая является разделителем. (Это также верно в RFC5322, который является более современным стандартом, хотя в этой версии эта часть адреса называется «отображаемым именем», а затем определяется как «фраза».) - person Richard Schwartz; 27.06.2013
comment
Кстати: я не пробовал это в Notes 9, чтобы увидеть, была ли исправлена ​​​​ошибка. - person Richard Schwartz; 27.06.2013
comment
Я должен добавить, что большинство людей поставили бы кавычки вокруг ABC XYZ, потому что это условность, которую они видят все время, и они думают, что это необходимо. И большинство программного обеспечения тоже, и, вероятно, существует довольно много плохого программного обеспечения, которое взрывается, если получает адрес без кавычек вокруг отображаемого имени. Таким образом, в соответствии со стандартом это действительно не требуется, но все же рекомендуется использовать кавычки, чтобы гарантировать, что адрес будет приемлем для всего плохого программного обеспечения, которое существует. - person Richard Schwartz; 27.06.2013
comment
Спасибо за уточнение и более подробную информацию по теме. В идеальном мире мое решение сработало бы, но, как мы все знаем, мир не идеален ;-) - person Michael Ruhnau; 28.06.2013
comment
@RichardSchwartz: Спасибо за подробное объяснение! :) - person Naveen; 28.06.2013