Как скопировать определенный текст из документа в режиме редактирования и добавить его в строку темы?

#lotus-notes #lotusscript #lotus-formula

#lotus-notes #lotusscript #lotus-формула

Вопрос:

Я далеко не эксперт, но недавно я немного узнал об использовании языка Lotus @Formula и создал для себя несколько очень полезных кнопок. К сожалению, у меня возникли проблемы при попытке внести последний штрих в недавно созданный документ, и сколько бы я ни искал, я не могу найти ничего, что указало бы мне правильное направление.

Чтобы быть более конкретным, я пытаюсь переслать заметку, которая берет фрагмент текста из тела электронного письма и использует его в строке темы. Отправляемая заметка может быть либо заметкой, либо документом из определенной базы данных. Когда я пересылаю документ из базы данных, я могу получить нужный мне текст, получив значение определенного поля перед его пересылкой с помощью @getField . Если я пересылаю только непосредственно из документа из базы данных, он отлично работает, сначала получая значение, что хорошо, потому что, как только я открываю эту новую заметку для пересылки, этого поля больше нет.

Проблема в том, что если я пересылаю чужую электронную почту (кто-то, кто уже переслал документ из базы данных), у меня нет возможности сначала получить нужное мне значение, потому что это поле уже исчезло. Хорошей новостью является то, что значение поля, которое я пытаюсь получить, указано в таблице пересылаемой заметки. К сожалению, я не могу понять, как выделить и скопировать этот текст, чтобы я мог вставить его в строку темы. По-моему, я думаю, что мне просто нужен способ «найти» статический текст, который предшествует тексту, который мне нужно скопировать, переместить на один пробел вправо, выделить и скопировать все, начиная с этой точки, до конца ячейки.

В принципе, мне нужен способ найти и скопировать что-то из тела, чтобы я мог использовать это в строке темы. Самое близкое, что я мог бы сделать, это переместить курсор в нужное место с помощью команд EditDown и EditRight . Проблема с этим методом заключается в том, что я не могу узнать правильное количество строк для перемещения вниз. Если бы я пересыл исходного документа, работает следующее:

 @Command( [EditGotoField]; "Body" ) ;
REM "The next line only works if the text is located exactly 33 lines down." ;
@Command( [EditDown]; "33" ) ;
@Command( [EditRight]; "29" ) ;
@Command( [EditDeselectAll] ) ;
REM "The next line only works if the text I need is three characters long." ;
@Command( [EditRight] ; "3" ) ;
@Command( [EditCopy] ) ;
@Command( [EditGotoField] ; "Subject" ) ;
@Command( [EditSelectAll]) ;
@Command( [EditInsertText] ; "The text I need is: " ) ;
@PostedCommand( [EditPaste] ) 
  

Я говорю «вроде», потому что часть, в которой он выбирает текст, работает только в том случае, если нужный мне текст состоит из того же количества символов, которое я указал в коде. Если нужный мне текст длиннее, он не получит всего. Если он короче, курсор выбирает следующую ячейку, а затем копирует кучу ненужного текста. Мне нужен способ сделать так, чтобы он выделялся только до конца ячейки (т. Е. Как Если Бы нажал «Shift» «End»).

Я подумал, может быть, я мог бы вызвать агента для выполнения этой части, но я не смог найти ничего полезного в своих поисках LotusScript.

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

Спасибо, что нашли время, чтобы прочитать это. Если кто-нибудь может помочь, я был бы очень признателен.

Ответ №1:

Предлагаю вам взглянуть на @Text или @Abstract, чтобы получить текст из основного поля заметки, это оставит вам строку для обработки, вы упомянули, что у вас есть некоторый статический текст перед нужным текстом, поэтому @middle может быть вашим другом здесь. HTH.

Привет, Майк, @Abstract будет обрабатывать максимум 64994 байта, чего должно быть достаточно для электронного письма. Нужное поле на самом деле называется Body, поэтому попробуйте

@Abstract([TextOnly]; 64000; «»; «Тело»)

Я попытался присвоить это переменной только для того, чтобы обнаружить, что строковые переменные формулы ограничены 1700 символами, поэтому вместо этого я использовал его непосредственно в @Middle,

@Middle(@Abstract([TextOnly]; 64000; «»; «Body»); «YourFixedText1»; «YourFixedText2»))

Затем я обернул вокруг него @Prompt для тестирования,

@Prompt([Ok];»Test Extract»; @Middle(@Abstract([TextOnly]; 64000; «»; «Body»); «YourFixedText1″»; «YourFixedText2»))

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

Комментарии:

1. Спасибо, ОТТА. Я не хочу показаться неблагодарным, но есть ли шанс, что вы могли бы привести пример, который помещает некоторый текст из тела в строку? Я провел множество поисков по всем трем формулам, но не могу найти ничего, что хотя бы заставило бы меня двигаться в правильном направлении. Для функции @Abstract мне трудно определить параметры. Я знаю синтаксис is:@Abstract ( [ ключевые слова ] ; размер ; Начальный текст ; Поля тела )

2. (Извините, я был прерван.) Я знаю, что синтаксис таков: @Abstract( [ ключевые слова] ; size ; beginText ; bodyFields ) … но даже после просмотра примеров я не уверен, какое число следует использовать для size, и я не уверен, что использовать для bodyFields .

3. Большое спасибо за добавление к вашему ответу, ОТТА. Это почти работает идеально. Сначала я боролся с этим, но в конце концов понял, что это не работает, если документ находится в режиме редактирования (я просто продолжал получать пустое приглашение). Однако это работает, если документ находится в режиме чтения. В качестве обходного пути я сначала запускаю формулу в режиме чтения и передаю ее в строку. После открытия ответа он идеально добавляет строку в строку темы. Единственная проблема в том, что независимо от того, какой текст я использую для «YourFixedText2», выделение выполняется до конца.