Текущее время: Пт, май 02 2025, 14:09

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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