on 02-12-2008 5:49 PM
Hi All,
I have sucessfully created a VC application (7.0 sp13) to create a General Notification in R/3
using the BAPI - IQS4_CREATE_NOTIFICATION
Our users in R/3 4.7 use the button in the Top Left Hand corner of the Screen "Services for Object"
to attach MS Word documents to Notifcations. Using the Create Attachment option from the Services for Object toolbar that pops up when the button is clicked.
Has anyone else tried this or have any advice on how this can be done in VC - if you can recommend a BAPI that I can try or will this be a custom ABAP BAPI.
Thanks in advance for any advice you can offer.
- Robert
FUNCTION z_pm_attachment_and_url.
*"----------------------------------------------------------------------
*"*"Interface local:
*" IMPORTING
*" VALUE(I_QMNUM) TYPE QMNUM OPTIONAL
*" VALUE(I_AUFNR) TYPE AUFNR OPTIONAL
*" VALUE(I_URL) TYPE SO_URL OPTIONAL
*" VALUE(I_FILE) TYPE ZPMCT002 OPTIONAL
*" VALUE(I_FILENAME) TYPE STRING OPTIONAL
*" TABLES
*" T_RETURN STRUCTURE BAPIRET2
*"----------------------------------------------------------------------
* Objetos locais
DATA:
vl_url TYPE so_url,
vl_path TYPE string, "#EC NEEDED
vl_loopc TYPE sy-loopc,
vl_lines TYPE sy-loopc,
vl_filename TYPE string,
vl_filelength TYPE i,
it_url TYPE STANDARD TABLE OF sood-objdes,
it_obj_cont TYPE STANDARD TABLE OF solix,
wa_obj TYPE borident,
wa_obj_cont TYPE soli,
wa_obj_data TYPE sood1,
wa_folder_id TYPE soodk,
wa_document_id TYPE sofmk.
DEFINE valida_retorno.
loop at t_return into t_return.
if t_return-type eq zgtpm_e.
exit.
endif.
endloop.
if t_return-type eq zgtpm_e.
exit.
endif.
END-OF-DEFINITION.
* === Valida parâmetros de entrada
IF i_qmnum IS INITIAL AND i_aufnr IS INITIAL.
* Nenhum objeto informado: Informe Nota ou Ordem de Manutenção
PERFORM mensagem_retorno_tab
USING
'ZPM_PORTAL' zgtpm_e '055' '' '' '' ''
CHANGING
t_return[].
EXIT.
ELSEIF NOT i_qmnum IS INITIAL AND NOT i_aufnr IS INITIAL.
* Informe apenas um objeto: Nota ou Ordem de Manutenção
PERFORM mensagem_retorno_tab
USING
'ZPM_PORTAL' zgtpm_e '054' '' '' '' ''
CHANGING
t_return[].
EXIT.
ENDIF.
IF i_url IS INITIAL
AND i_filename IS INITIAL.
* Informe Anexo e/ou URL
PERFORM mensagem_retorno_tab
USING
'ZPM_PORTAL' zgtpm_e '060' '' '' '' ''
CHANGING
t_return[].
EXIT.
ENDIF.
* === Define Categoria de objeto
IF NOT i_qmnum IS INITIAL.
wa_obj-objkey = i_qmnum.
wa_obj-objtype = 'BUS2038'. " Nota PM
ENDIF.
IF NOT i_aufnr IS INITIAL.
wa_obj-objkey = i_aufnr.
wa_obj-objtype = 'BUS2007'. " Ordem de manutenção
ENDIF.
* === Anexo
IF NOT i_filename IS INITIAL.
* Conteúdo do arquivo
IF NOT i_file[] IS INITIAL.
it_obj_cont[] = i_file[].
DESCRIBE TABLE it_obj_cont LINES vl_lines.
READ TABLE it_obj_cont INTO wa_obj_cont INDEX vl_lines.
vl_filelength =
( 255 * ( vl_lines - 1 ) ) + STRLEN( wa_obj_cont ).
ELSE.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = i_filename
filetype = 'BIN'
IMPORTING
filelength = vl_filelength
TABLES
data_tab = it_obj_cont
EXCEPTIONS
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16
OTHERS = 17.
IF sy-subrc <> 0.
PERFORM mensagem_retorno_tab
USING
sy-msgid sy-msgty sy-msgno sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
CHANGING
t_return[].
EXIT.
ENDIF.
ENDIF.
* Pasta de Destino
PERFORM get_folder CHANGING wa_folder_id t_return[].
valida_retorno.
* SAPoffice: definição do objeto, modificar atributos
wa_obj_data-objla = sy-langu. " Idioma
wa_obj_data-objsns = 'O'. " Objeto confidencial
wa_obj_data-objlen = vl_filelength. " Tamanho conteúdo documento
wa_obj_data-ownnam = sy-uname. " Nome proprietário
CALL METHOD cl_report_viewer=>split_path_filename
EXPORTING
i_filename = i_filename
IMPORTING
e_path = vl_path
e_filename = vl_filename.
SPLIT vl_filename AT '.' INTO
wa_obj_data-objdes " Descrição breve do conteúdo
wa_obj_data-file_ext. " Extensão de file de uma aplicação PC
CONDENSE wa_obj_data-file_ext NO-GAPS.
* Insere Objeto (Anexo)
PERFORM object_insert
USING
'EXT' " Anexo
wa_obj_data
wa_folder_id
it_obj_cont
CHANGING
wa_document_id
t_return[].
valida_retorno.
* Relacionamento Objeto PM x Anexo
PERFORM relation_create
USING
'ATTA'
wa_obj
wa_document_id
CHANGING
t_return[].
valida_retorno.
ENDIF.
* === URL
IF NOT i_url IS INITIAL.
* Inicializa estruturas comuns a Anexo e URL
CLEAR:
it_obj_cont,
wa_obj_cont,
wa_obj_data,
wa_folder_id,
wa_document_id.
* Conteúdo da URL
MOVE i_url TO vl_url.
WHILE NOT vl_url IS INITIAL.
CONCATENATE '&KEY&' vl_url(250) INTO wa_obj_cont.
APPEND wa_obj_cont TO it_obj_cont.
SHIFT vl_url LEFT BY 250 PLACES.
ENDWHILE.
* Pasta de Destino
PERFORM get_folder CHANGING wa_folder_id t_return[].
valida_retorno.
* SAPoffice: definição do objeto, modificar atributos
wa_obj_data-objla = sy-langu. " Idioma
wa_obj_data-objsns = 'O'. " Objeto confidencial
wa_obj_data-ownnam = sy-uname. " Nome proprietário
SPLIT i_url AT '/' INTO TABLE it_url.
DESCRIBE TABLE it_url LINES vl_loopc.
READ TABLE it_url INDEX vl_loopc
INTO wa_obj_data-objdes. " Descrição breve do conteúdo
* Insere Objeto (URL)
PERFORM object_insert
USING
'URL' " Link Inter/Intranet
wa_obj_data
wa_folder_id
it_obj_cont
CHANGING
wa_document_id
t_return[].
valida_retorno.
* Relacionamento Objeto PM x URL
PERFORM relation_create
USING
'URL'
wa_obj
wa_document_id
CHANGING
t_return[].
valida_retorno.
ENDIF.
* === Libera objetos locais
FREE:
vl_url,
vl_path,
vl_loopc,
vl_lines,
vl_filename,
vl_filelength,
it_url,
it_obj_cont,
wa_obj,
wa_obj_cont,
wa_obj_data,
wa_folder_id,
wa_document_id.
ENDFUNCTION.
*----------------------------------------------------------------------*
***INCLUDE LZGPM0010F01 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form mensagem_retorno_tab
*&---------------------------------------------------------------------*
FORM mensagem_retorno_tab
USING
p_msgid TYPE symsgid
p_msgty TYPE symsgty
p_msgno TYPE symsgno
p_msgv1 TYPE any
p_msgv2 TYPE any
p_msgv3 TYPE any
p_msgv4 TYPE any
CHANGING
t_return TYPE ty_return.
DATA:
vl_msgty TYPE symsgty,
wa_return LIKE LINE OF t_return.
IF p_msgty IS INITIAL.
MOVE zgtpm_e TO vl_msgty.
ELSE.
MOVE p_msgty TO vl_msgty.
ENDIF.
IF p_msgno IS INITIAL.
EXIT.
ENDIF.
MOVE p_msgid TO wa_return-id.
MOVE vl_msgty TO wa_return-type.
MOVE p_msgno TO wa_return-number.
MOVE p_msgv1 TO wa_return-message_v1.
MOVE p_msgv2 TO wa_return-message_v2.
MOVE p_msgv3 TO wa_return-message_v3.
MOVE p_msgv4 TO wa_return-message_v4.
MESSAGE ID p_msgid TYPE vl_msgty NUMBER p_msgno
WITH p_msgv1 p_msgv2 p_msgv3 p_msgv4
INTO wa_return-message.
APPEND wa_return TO t_return.
FREE: vl_msgty, wa_return.
ENDFORM. " mensagem_retorno_tab
*&---------------------------------------------------------------------*
*& Form get_folder
*&---------------------------------------------------------------------*
FORM get_folder
CHANGING
w_folder_id TYPE soodk
t_return TYPE ty_return.
CALL FUNCTION 'SO_FOLDER_ROOT_ID_GET'
EXPORTING
region = 'B' " ?
IMPORTING
folder_id = w_folder_id
EXCEPTIONS
OTHERS = 1.
IF sy-subrc <> 0.
PERFORM mensagem_retorno_tab
USING
sy-msgid sy-msgty sy-msgno sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
CHANGING
t_return[].
ENDIF.
ENDFORM. " get_folder
*&---------------------------------------------------------------------*
*& Form object_insert
*&---------------------------------------------------------------------*
FORM object_insert USING
p_objtp TYPE so_obj_tp
w_obj_data TYPE sood1
w_folder_id TYPE soodk
t_obj_cont TYPE zpmct002
CHANGING
w_document_id TYPE sofmk
t_return TYPE ty_return.
* Objetos locais
DATA:
it_objcont TYPE STANDARD TABLE OF soli,
it_obj_head TYPE STANDARD TABLE OF soli,
wa_obj_id TYPE soodk,
wa_obj_cont LIKE LINE OF t_obj_cont.
* RAW to CHAR
LOOP AT t_obj_cont INTO wa_obj_cont.
APPEND wa_obj_cont TO it_objcont.
CLEAR wa_obj_cont.
ENDLOOP.
* Insere objeto
CALL FUNCTION 'SO_OBJECT_INSERT'
EXPORTING
folder_id = w_folder_id
object_type = p_objtp
object_hd_change = w_obj_data
owner = sy-uname
IMPORTING
object_id = wa_obj_id
TABLES
objhead = it_obj_head
objcont = it_objcont
EXCEPTIONS
active_user_not_exist = 1
communication_failure = 2
component_not_available = 3
dl_name_exist = 4
folder_not_exist = 5
folder_no_authorization = 6
object_type_not_exist = 7
operation_no_authorization = 8
owner_not_exist = 9
parameter_error = 10
substitute_not_active = 11
substitute_not_defined = 12
system_failure = 13
x_error = 14
OTHERS = 15.
IF sy-subrc = 0.
w_document_id-foltp = w_folder_id-objtp.
w_document_id-folyr = w_folder_id-objyr.
w_document_id-folno = w_folder_id-objno.
w_document_id-doctp = wa_obj_id-objtp.
w_document_id-docyr = wa_obj_id-objyr.
w_document_id-docno = wa_obj_id-objno.
ELSE.
PERFORM mensagem_retorno_tab
USING
sy-msgid sy-msgty sy-msgno sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
CHANGING
t_return[].
ENDIF.
* Libera objetos locais
FREE:it_objcont, it_obj_head, wa_obj_id, wa_obj_cont.
ENDFORM. " object_insert
*&---------------------------------------------------------------------*
*& Form relation_create
*&---------------------------------------------------------------------*
FORM relation_create
USING
p_relationtype TYPE binreltyp
w_obj TYPE borident
w_document_id TYPE sofmk
CHANGING
t_return TYPE ty_return.
DATA wa_doc TYPE borident.
wa_doc-objtype = 'MESSAGE'.
CASE p_relationtype.
WHEN 'ATTA'.
wa_doc-objkey = w_document_id(34).
WHEN 'URL'.
wa_doc-objkey = w_document_id.
WHEN OTHERS.
ENDCASE.
CALL FUNCTION 'BINARY_RELATION_CREATE'
EXPORTING
obj_rolea = w_obj
obj_roleb = wa_doc
relationtype = p_relationtype
EXCEPTIONS
no_model = 1
internal_error = 2
unknown = 3
OTHERS = 4.
IF sy-subrc = 0.
COMMIT WORK AND WAIT.
CASE p_relationtype.
WHEN 'ATTA'.
* O anexo foi criado com êxito
PERFORM mensagem_retorno_tab
USING
'SGOS_MSG' zgtpm_s '043' '' '' '' ''
CHANGING
t_return[].
WHEN 'URL'.
* A URL foi criada com êxito
PERFORM mensagem_retorno_tab
USING
'ZPM_PORTAL' zgtpm_s '059' '' '' '' ''
CHANGING
t_return[].
WHEN OTHERS.
ENDCASE.
ELSE.
PERFORM mensagem_retorno_tab
USING
sy-msgid sy-msgty sy-msgno sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
CHANGING
t_return[].
ENDIF.
FREE wa_doc.
ENDFORM. " relation_create
Edited by: Fabrício Alves Vieira on Apr 8, 2008 3:08 PM
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Anyone with any updates on using GOS in Visual composer?
Thanks,
Robert
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
87 | |
10 | |
10 | |
9 | |
7 | |
7 | |
6 | |
5 | |
4 | |
4 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.