Автоматически создавать гиперссылки в Outlook с различными параметрами

278
johnnyRose

В Outlook есть ли способ автоматически создавать гиперссылки с различными параметрами? В частности, я бы хотел ссылаться на рабочие элементы в Team Foundation Server, но общее решение тоже подойдет.

Например, если я наберу «Рабочий элемент 12345», я бы хотел, чтобы он автоматически создал гиперссылку на «mytfs / workitems? Id = 12345». В идеале текст ссылки должен быть «Рабочий элемент 12345».

Я попытался создать запись автозамены, но она не соответствует шаблонам *или %- кажется, она будет работать только с литералами.

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

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

0
Рассматриваете ли вы использовать autohotkey? Вы можете сделать автоматические горячие строки очень просто. var firstName 7 лет назад 0
@varfirstName: Я бы предпочел более чистое решение, но если оно выполнит свою работу, это, безусловно, стоит рассмотреть. johnnyRose 7 лет назад 0

3 ответа на вопрос

0
var firstName

Действительно простой скрипт для этой цели, который я только что сделал:

:*:Work Item :: SendInput, http://mytfs/workitems?id= Return 

Поместите это в файл .ahk, щелкните по нему правой кнопкой мыши и выберите «Запустить скрипт». Я уже проверил это на моей системе.

Outlook может сделать автозамену на этом, но я нашел это в лучшем случае пятнистым.

Вот еще одна версия этого скрипта, которая превращает его в пользовательскую текстовую ссылку:

:*:Work Item :: SendInput, http://mytfs/workitems?id= SendInput, ^+ SendInput, ^k SendInput,  Sleep, 2000 SendInput, !t SendInput, +^ SendInput, Work Item SendInput,  Return 

У вас будет две секунды для ввода идентификатора, прежде чем он автоматически изменит текст и закроется.


Если вы все еще хотите использовать решение только для Outlook, выберите «Файл»> «Параметры»> «Настройка ленты». В правой панели есть флажок для разработчика. Нажмите на нее, чтобы сделать доступными такие функции разработчика, как макросы. Я мог бы помочь вам с макросами в определенной степени.

«Outlook может сделать автозамену на этом, но я нашел, что это в лучшем случае пятнистый». Можете ли вы уточнить это и как заставить его работать, даже если он пятнистый? johnnyRose 7 лет назад 0
Итак, вместо того, чтобы использовать «Рабочий элемент» в качестве ключевого слова для активации, я просто использовал «Рабочий элемент». Затем я помещаю «http: // mytfs / workitems? Id =» в поле «Заменить на». Затем, после использования «макроса» один раз, это сработало. Но когда я попытался использовать его второй раз в том же письме (после удаления предыдущей ссылки), он ничего не сделал. Он не заменил текст, он не удалил его, он просто сидел и ничего не делал. var firstName 7 лет назад 0
Он ничего не сделал, потому что вы удалили исправленный текст, временно переопределив автозамену. Это будет работать нормально, но было бы здорово, если бы текст ссылки оставался «Рабочий элемент 12345». Я отредактировал свой вопрос, чтобы отразить это; Я прошу прощения за то, что неясно изначально. Все еще надеемся на чистое решение Outlook. johnnyRose 7 лет назад 0
О, хорошо, я понимаю. var firstName 7 лет назад 0
Я отредактировал свой ответ, @johnnyRose var firstName 7 лет назад 0
Ограничение в две секунды является ограничительным, и, поскольку вы используете , он также удалит любой текст в строке перед ним. Я добавил свое собственное решение, которое очень хорошо работает для меня. johnnyRose 7 лет назад 0
Вы можете использовать ^ определенное количество раз .. var firstName 7 лет назад 0
Это часть того, как [мой ответ] (https://superuser.com/a/1241846/728806) достигает этого. johnnyRose 7 лет назад 0
Ваша реализация этого довольно неэффективна. Используйте существующие ярлыки (например, ^ + Left) и понимайте, что во многих случаях вам не нужны переменные. Вам не нужно знать длину строки идентификатора, потому что, если в конце строки идентификатора вы можете сделать ^ + , чтобы выбрать этот сегмент, а затем + , чтобы выбрать только числовой идентификатор , var firstName 7 лет назад 0
Как моя реализация неэффективна? Он должен быть относительно общим: он должен соответствовать любому идентификатору длины или триггеру независимо от пробелов. Если бы я реализовал это так, как вы предлагаете, мне пришлось бы изменить свой сценарий, если я изменил свое триггерное слово. Мое решение делает именно то, что я хочу, и если я хочу изменить триггер (на ошибку, PBI, мой рабочий элемент и т. Д.), Мне не нужно менять остальную часть сценария. Кажется, довольно хорошо для меня. johnnyRose 7 лет назад 0
Я могу изменить его, чтобы подсчитать пробелы в слове триггера и использовать его. И поскольку я использую в качестве конечного ключа, вы правы, что мне не нужно беспокоиться о тех, кто находится в части идентификатора. Я мог бы изменить его, чтобы учесть пробелы, если мне скучно, но сейчас я не слишком беспокоюсь об этом. Кроме того, если часть идентификатора на самом деле довольно длинная, пользователю все равно потребуется более 2 секунд для ввода значения. :) johnnyRose 7 лет назад 0
(Но вы правы, что использование `^ + ` хорошая идея - я бы хотел включить это в еще более общее решение, если найду время) johnnyRose 7 лет назад 0
@johnnyRose вы можете быть рады услышать, что я нашел решение только для Outlook! Обсудите в чате, если хотите. var firstName 7 лет назад 0
Давайте [продолжим это обсуждение в чате] (http://chat.stackexchange.com/rooms/64067/discussion-between-var-firstname-and-johnnyrose). var firstName 7 лет назад 0
0
johnnyRose

Ну, я нашел решение, используя AutoHotKey, который работает только в Outlook. Я бы все же предпочел решение только для Outlook, но пока это работает.

Этот код можно использовать для автоматического создания ссылок, когда вы, естественно, что-то печатаете. Очевидное предостережение: вы должны были бы естественно ввести параметр URL, чтобы это чувствовало себя беспрепятственно. Тем не менее, это хорошо подходит для рабочих элементов TFS.

#SingleInstance force ; Force kill any currently running instances #IfWinActive,,Message ; Only do this in Outlook  :?*:Work Item :: targetWord = Work Item ; The hotstring to match StringLen,targetWordLength, targetWord ; The length of the hotstring to match tfsUrl = mytfs/workitems?id= ; Your URL Input, id, v, ; Assign input to the variable id; stop accepting input on Enter, Space, or Tab If (id = "") ; Undo and return { SendInput, %targetWord% ` Return }  StringLen,idLength, id ; Assign the length of id to idLength idLength++ ; Increment idLength  SendInput %targetWord% %id% ; Backspace and enter the full link text Send, ; Highlight the full text  Send, ^k ; Insert hyperlink SendInput, %tfsUrl%%id% ; Send text for hyperlink  Send, ; If you don't send a space, Outlook might suggest a longer URL which starts with the URL you provided. A space at the end prevents this. Send, ; Enter to exit dialog  Return 

Когда вы набираете «Рабочий элемент», он удаляет текст и ждет, пока вы введете значение, заканчивающееся на Enter, Пробел или Tab. Когда вы закончите вводить свое значение и нажмете одну из конечных клавиш, мы удаляем значение параметра, помещаем нужный текст обратно во ввод и добавляем гиперссылку.

0
var firstName

Я нашел ответ только для Outlook для вас. Outlook поддерживает язык программирования VBA (Visual Basic для приложений).

Используйте Alt+ F11для доступа к редактору VBA, затем щелкните правой кнопкой мыши в Project1 -> MicrosoftOutlookObjects в «ThisOutlookSession» и выберите «View Code».

Затем вставьте этот код в появившийся редактор:

Sub GetValueUsingRegEx() ' Set reference to VB Script library ' Microsoft VBScript Regular Expressions 5.5  Dim olMail As Outlook.MailItem Dim Reg1 As RegExp Dim M1 As MatchCollection Dim M As Match  Set olMail = Application.ActiveInspector.CurrentItem ' Debug.Print olMail.Body  Set Reg1 = New RegExp  With Reg1 .Pattern = "Work Item\s*\d*\s*" .Global = True End With If Reg1.Test(olMail.Body) Then  Set M1 = Reg1.Execute(olMail.Body)  Debug.Print Split(M1.Item(0), " ")(2) olMail.HTMLBody = Replace(olMail.HTMLBody, M1.Item(0), "<a href=" & Chr(34) & "http://mytfs/workitems?id=" & Split(M1.Item(0), " ")(2) & Chr(34) & ">Work Item " & Split(M1.Item(0), " ")(2) & "</a>") Debug.Print olMail.HTMLBody End If End Sub 

Он будет работать, когда вы отправите любое сообщение, содержащее «Рабочий элемент ####», и автоматически смените его на ссылку. Вы также можете сделать это горячей клавишей, чтобы вы могли сделать это во время ввода сообщения.

Похожие вопросы