Текущее время: Вт, июн 17 2025, 23:01

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения: Оповещение после выполнения отчета
СообщениеДобавлено: Чт, июн 27 2024, 08:37 
Специалист
Специалист

Зарегистрирован:
Пн, июл 12 2010, 11:43
Сообщения: 185
Добрый день, коллеги. Отнеситесь с пониманием к моему вопросу, потому что требования топов бывают крайне странными.
Есть отчет, который выполняется долго. Пользователь в это время работает над другими задачами. Он хочет, чтобы по окончанию формировании отчета:
1-Чтобы на экране, по верх всех окон, появилось оповещение о выполнении отчета ( TH_POPUP не предлагать. Очень маленькое окошко и такое же появляется о закрытии сессий ).
ИЛИ :shock:
2-Выполнение отчета сопровождалось звуком ( каким-то ).


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оповещение после выполнения отчета
СообщениеДобавлено: Чт, июн 27 2024, 08:56 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, сен 19 2011, 13:29
Сообщения: 492
Пол: Мужской
Добрый день!

Оказывается SAP умеет разговаривать :)
https://abap4.ru/text-to-speech.html
Code:
INCLUDE ole2incl.

DATA ole TYPE ole2_object.
DATA voice TYPE ole2_object.
WAIT UP TO 10 SECONDS.

CREATE OBJECT voice 'SAPI.SpVoice'.

CALL METHOD OF voice 'speak' = ole
  EXPORTING
    #1 = 'Отчет выполнен. Желаем хорошего дня!'.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оповещение после выполнения отчета
СообщениеДобавлено: Чт, июн 27 2024, 12:18 
Специалист
Специалист

Зарегистрирован:
Пн, июл 12 2010, 11:43
Сообщения: 185
Korvax написал:
Добрый день!

Оказывается SAP умеет разговаривать :)
https://abap4.ru/text-to-speech.html
Code:
INCLUDE ole2incl.

DATA ole TYPE ole2_object.
DATA voice TYPE ole2_object.
WAIT UP TO 10 SECONDS.

CREATE OBJECT voice 'SAPI.SpVoice'.

CALL METHOD OF voice 'speak' = ole
  EXPORTING
    #1 = 'Отчет выполнен. Желаем хорошего дня!'.


Здорово :wink:
Сожно ли как-то передать язык входа, чтобы вещание было на том языке, на котором вошел пользователь?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оповещение после выполнения отчета
СообщениеДобавлено: Чт, июн 27 2024, 13:00 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, сен 19 2011, 13:29
Сообщения: 492
Пол: Мужской
Например так:
Code:
include ole2incl.

data: ole    type ole2_object,
      voice  type ole2_object,
      lv_str type string.

case sy-langu.
  when 'R'.
    lv_str = 'Отчет выполнен. Желаем хорошего дня!'.
  when others.
    lv_str = 'Report complete. Have a nice day!'.
endcase.

create object voice 'SAPI.SpVoice'.

call method of voice 'speak' = ole
  exporting
    #1 = lv_str.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оповещение после выполнения отчета
СообщениеДобавлено: Чт, июн 27 2024, 15:15 
Специалист
Специалист

Зарегистрирован:
Пн, июл 12 2010, 11:43
Сообщения: 185
Korvax написал:
Например так:
Code:
include ole2incl.

data: ole    type ole2_object,
      voice  type ole2_object,
      lv_str type string.

case sy-langu.
  when 'R'.
    lv_str = 'Отчет выполнен. Желаем хорошего дня!'.
  when others.
    lv_str = 'Report complete. Have a nice day!'.
endcase.

create object voice 'SAPI.SpVoice'.

call method of voice 'speak' = ole
  exporting
    #1 = lv_str.


Это не верно.
У нас на винде в "панель управления" > настройка распознавания речи -> преобразования текста в речь
прописаны все возможные языки преобразования. Там уже зашито правильное звучание языка.
Проблема в том что есть язык по умолчанию, а как указать абапом нашему параметру, что выбрать язык именно тот который мне нужно?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оповещение после выполнения отчета
СообщениеДобавлено: Пт, июн 28 2024, 08:33 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, сен 19 2011, 13:29
Сообщения: 492
Пол: Мужской
dev403k написал(а):
Это не верно.
Какой вопрос, такой и ответ :)
Что касается выбора голоса, то в теории это возможно. Есть свойство Voice.
https://learn.microsoft.com/en-us/previ ... 14(v=vs.85)
Но, у меня не получается его установить. Может кто-то подскажет в чем причина?
Code:
include ole2incl.

data: ole     type ole2_object,
      spvoice type ole2_object,
      voices  type ole2_object,
      voice   type ole2_object,
      lv_str  type string.

create object spvoice 'SAPI.SpVoice'.

get property of spvoice 'Voice' = voice.
get property of voice 'ID' = lv_str.
write: / `default: `, lv_str.
call method of voice 'GetDescription' = lv_str.
write: / `descr: `, lv_str.

call method of spvoice 'GetVoices' = voices.
call method of voices 'Item' = voice
  exporting
    #1 = 1. " номер в списке голосов 0, 1, ...

get property of voice 'ID' = lv_str.
write: / `new: `, lv_str.
call method of voice 'GetDescription' = lv_str.
write: / `descr: `, lv_str.

set property of spvoice 'Voice' = voice. " вот это не работает

call method of spvoice 'speak' = ole
  exporting
    #1 = 'Report complete. Have a nice day!'.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оповещение после выполнения отчета
СообщениеДобавлено: Пн, июл 01 2024, 10:53 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, сен 19 2011, 13:29
Сообщения: 492
Пол: Мужской
Ещё вариант (в т.ч. проигрывание музыкального файла):
Code:
include ole2incl.

data: scntrl    type ole2_object,
      lv_script type string,
      lv_file   type string value 'C:\sample-6s.wav',
      lv_phrase type string value 'Report complete. Have a nice day!'.

constants:
      crlf(2) type c value cl_abap_char_utilities=>cr_lf.

" play music
*lv_script = |Function Main() |
* && crlf && |Set oVoice = CreateObject("SAPI.SpVoice") |
* && crlf && |set oSpFileStream = CreateObject("SAPI.SpFileStream") |
* && crlf && |oSpFileStream.Open "{ lv_file }" |
* && crlf && |oVoice.SpeakStream oSpFileStream |
* && crlf && |End Function |.

" speak phrase
lv_script = |Function Main() |
&& crlf && |Set spvoice = CreateObject("SAPI.SpVoice") |
&& crlf && |Set spvoice.Voice = spvoice.GetVoices.Item(1) | " 1 - номер голоса
&& crlf && |spvoice.Speak ("{ lv_phrase }") |
&& crlf && |End Function |.

create object scntrl 'MSScriptControl.ScriptControl'.

set property of scntrl 'Language' = 'VBScript'.

call method of scntrl 'AddCode'
  exporting
    #1 = lv_script.

call method of scntrl 'Run'
  exporting
    #1 = 'Main'.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оповещение после выполнения отчета
СообщениеДобавлено: Вт, июл 02 2024, 13:00 
Специалист
Специалист

Зарегистрирован:
Пн, июл 12 2010, 11:43
Сообщения: 185
Спасибо, Korvax :wink: .
У меня к вам еще вопрос. Начали тестировать и выяснилось что у некоторых пользователей на машине английский стоит под номером 0, у некоторых под номерами 1 или 2.
Возникла идея найти нужный, путем цикла (icount + 1)

GET PROPERTY OF voices 'Item' = voice EXPORTING #1 = icount.
GET PROPERTY OF voice 'GetDescription' = lc_sdescription.
IF lc_sdescription CS 'English'.

ENDIF.
Но если такое случится, что не будет нужного языка или не сработает IF, если icount принимает значение которого у меня нет, то мой код вешает систему намертво.
Возникла идея вернуть количество языков, зарегистрированных в системе и прописать цикл, найти нужный язык и затем подставить номер в ваш код выше, который отлично работает.
Помогите добраться до метода GetCount, или натолкните на мысль как найти нужный номер языка.
Спасибо.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оповещение после выполнения отчета
СообщениеДобавлено: Вт, июл 02 2024, 13:32 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, сен 19 2011, 13:29
Сообщения: 492
Пол: Мужской
Если уж весь выполняемый код на VBScript, то и искать нужный язык лучше там же. Например так (если язык не найдется, то произношение будет на языке "по-умолчанию"):
Code:
include ole2incl.

data: scntrl    type ole2_object,
      lv_script type string,
      lv_phrase type string value 'Report complete. Have a nice day!'.

constants:
      crlf(2) type c value cl_abap_char_utilities=>cr_lf.

" speak phrase
lv_script = |Function Main()                                                      |
&& crlf && |Set spvoice = CreateObject("SAPI.SpVoice")                           |
&& crlf && |For Each T In spvoice.GetVoices                                      |
&& crlf && |    If InStr(1, T.GetDescription, "English", vbTextCompare) > 0 Then |
&& crlf && |      Set spvoice.Voice = T                                          |
&& crlf && |      Exit For                                                       |
&& crlf && |    End If                                                           |
&& crlf && |Next                                                                 |
&& crlf && |spvoice.Speak ("{ lv_phrase }")                                      |
&& crlf && |End Function                                                         |.

create object scntrl 'MSScriptControl.ScriptControl'.

set property of scntrl 'Language' = 'VBScript'.

call method of scntrl 'AddCode'
  exporting
    #1 = lv_script.

call method of scntrl 'Run'
  exporting
    #1 = 'Main'.

P.s: Если что, то пишите лучше в личные сообщения.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оповещение после выполнения отчета
СообщениеДобавлено: Пт, июл 05 2024, 09:01 
Специалист
Специалист

Зарегистрирован:
Пн, июл 12 2010, 11:43
Сообщения: 185
Спасибо, Korvax. :wink:
Этот код отлично работает.


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Elv1s


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB