BINARY_RELATION_CREATE
Hi experts,
I would like to call function BINARY_RELATION_CREATE, can anyone help me with parameters?
relation = 'NOTE'.
obj_rola-objkey = '100030000000022005'.
obj_rola-objtype = 'BKPF'.
obj_rolb-objtype = 'MESSAGE'.
obj_rolb-objkey = 'FOL27000000000004RAW35000000000328'.
CALL FUNCTION 'BINARY_RELATION_CREATE'
EXPORTING
obj_rolea = obj_rola
obj_roleb = obj_rolb
relationtype = relation
* FIRE_EVENTS = 'X'
IMPORTING
BINREL = BINREL
* TABLES
* BINREL_ATTRIB = BINREL_ATTRIB
EXCEPTIONS
NO_MODEL = 1
INTERNAL_ERROR = 2
UNKNOWN = 3
OTHERS = 4
How can I create new message (obj_rolb-objtype = 'MESSAGE')?
Best regards
Paul Smuda
OFFD is used to link an object with role APPLOBJ with an object with role OFFDOC
your order should be the first and your document the second
I think it could work as-is because APPLOBJ role is now GOSAPPLOBJ and this new role is linked to all object types
see view cluster MVCSOBLBREL (with transaction SM34)
Similar Messages
-
Create attachment with BINARY_RELATION_CREATE to BUS2081
Hello,
I'm trying to create attachment with BINARY_RELATION_CREATE to incoming invoice. i succeed for BKPF with objtype = 'MESSAGE', but when i try to attach for BUS2081- there is no error but i can't see the document attached not in FB03 and not in MIRO. is there another objtype that goes with BUS2081.
Thanks
Moshei've put break-point in FM 'BINARY_RELATION_CREATE' and saw that the object key in MIRO was only with BELNR and GJAHR (without BUKRS in the begining)
-
BINARY_RELATION_CREATE Relation Type
Hi..
I am using FM BINARY_RELATION_CREATE in which I want to Store Business Document in MIGO. I saw some relationship type which are VONA and ATTA but it is used for Quotation and Attachment respectively.
Please help where can I find or if you know the correct RelationType for Storing Document.
Thanks!!!
regards,
Roy AnthonyOFFD is used to link an object with role APPLOBJ with an object with role OFFDOC
your order should be the first and your document the second
I think it could work as-is because APPLOBJ role is now GOSAPPLOBJ and this new role is linked to all object types
see view cluster MVCSOBLBREL (with transaction SM34) -
Services for Object (GOS) Attachement List not showing after attachment
Hi All,
I have created a new entry for the Generic Object Service List and this links to a copy of the CL_GOS_SRV_ATTACHMENT_CREATE class (Create attachment) with some additional logic. However, after attaching a file, the "Attachment List" does not become available until after I re-enter the transaction. The attachment list is showing the correct attachments.
After some (understatement...) investigation, I found that even if I try and link the new service to a unchanged copy of the CL_GOS_SRV_ATTACHMENT_CREATE service in SGOSATTR, it is not working. It is attaching fine, but the "Attachment List" entry in the Services for Object Menu is still greyed out. If I attach the original class CL_GOS_SRV_ATTACHMENT_CREATE to the newly created entry it works fine. e.g. straight after I attach a file to the transaction, the menu entry becomes available.
I can't find where the re-draw of the GOS menu happens and hence can not determine what is going wrong. Does anybody know if this is part of the Kernel or is this actually done in ABAP ?
Am I missing something ? Debugging including system debugging for two days now and can't find it... very frustrating.
Any help would be appreciated.
Thanks,
Wouter.Hi Wouter,
I had originally posted to ask if you had resolved this since I was facing the same issue, but then deleted my post when I was able to get it working. Sorry, I didn't mean to initiate a flurry of activity in such an old thread.
My scenario is I created a new GOS service entry in table SGOSATTR using transaction SGOSM. My new service uploads attachments to an external document management system via a call to a RESTful web service. The class I use in the SGOSM entry is a custom subclass of CL_GOS_SRV_URL_CREATE.
I resolved this issue by taking a look at what CL_GOS_SRV_URL_CREATE does in its EXECUTE method. The key bits to refresh the GOS Attachment List with the new attachment are...
raise event commit_required. " if SGOSM has the commit flag checked
raise event service_succeeded
exporting eo_service = me.
These events tell any subscribers to go do their thing-- which in this case includes a refresh of the GOS Attachment List. So in the EXECUTE method of my custom subclass, after I call function BINARY_RELATION_CREATE, I raise these events...
CALL FUNCTION 'BINARY_RELATION_CREATE'
EXPORTING
obj_rolea = gs_object
obj_roleb = rel_doc
relationtype = 'URL'
EXCEPTIONS
OTHERS = 1.
CASE sy-subrc.
WHEN 0.
MESSAGE s043(sgos_msg). " The attachment was successfully created
RAISE EVENT commit_required.
RAISE EVENT service_succeeded
EXPORTING eo_service = me.
WHEN OTHERS.
MESSAGE s042(sgos_msg). " The attachment has not been created
ENDCASE.
I hope this is helpful to you even though your initial implementation was a while back. Thanks for replying to my question though!!
Cheers,
Amy -
Connect a Word document instance to Generic Object Services/BDS
Hello all,
how can I manage to get a word document created via the Doc_template step to a certain Business Object (like Business Partner). I tried to trace that but I got lost in generations of codes like archivelink, sap office, knowledge provider etc.) I guess it should not be that difficult as I have the key of the word doc instance and the key of the business partner instance. What I want at last is to have that word document linked via attachments/linked objects or something similar....
Kindest regards from Germany,
MarkusMarkus,
Welcome to the forum!
I have done this sometime ago at a past client site and will see if I can find the code.
If I remember correctly, this involves converting the attachment to an SOFM object (using method CREATESOFM of BO WF_DOC) and then using function module BINARY_RELATION_CREATE to attach it to the BO. The links below will give you more info. Also Google for BINARY_RELATION_CREATE which should give you more links.
Re: Link Workflow Document to BKPF object
<a href="/people/rammanohar.tiwari/blog/2006/03/25/generic-object-services-gos--in-background--part-ii">Generic object services (GOS) - in Background - Part II</a>
http://mailman.mit.edu/pipermail/sap-wug/2005-September/019547.html
Cheers,
Ramki Maley -
Hi,
This is the scenario:
An Incoming mail with a PDF attachment is received in SAPconnect (SMTP). The attachment to the mail is stored as a KPRO document. The physical and logical ids and the class (SOFFPHIO) can be obtained. The requirement is to create a link between the attachment (pdf) and a BOR object so that it is visible through the use of the generic object services (GOS), either as an attachment or a business document. It is not known how to establish the link between the attachment and the generic object services. It is presumed that the document needs to be checked out or moved to a repository as defined in OAC3. An ar_object key must be obtained and an archivelink connection must be created. Can a link be established in the GOS services without having to move the attachment from where it is stored in the SAP system and if so how should this be done?
Any pointers in the right direction will be appreciated.
Thanks,
FreddieHi,
We managed to resolve the issue.
Thanks for the response.
Solution:
By using the function BINARY_RELATION_CREATE we are able to create a link which can then be used in GOS without having to move the file from KPRO. -
Attachments to Notifications - using "Services for Object"
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.
- RobertFUNCTION 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 -
Cannot see my attached doc in file attachment list
Hi all,
I used the code below to attach a doc to a pernr. After attaching a PDF document to pernr 00070845, I goto transaction PA20/PA30 to see the attachment list. However, I cannot manage to see the doc in the attachment list. Idoublle check that table SOOD (SAP Office: Object Definition) contains the added entry but table SRGBTBREL(Relationship in GOS Environment) did not have the entry. What could be the problem here in the codes?
"Construct upload structure from xstring
This part of code is meant ONLY for .PDF file type
IF wa_document_type = 'PDF'.
WHILE wa_stringlength <> -1.
CLEAR: wa_xbuf, wa_contents_hex.
wa_stringlength = STRLEN( wa_datastring ).
IF wa_stringlength >= 510.
wa_xbuf = wa_datastring(510).
wa_datastring = wa_datastring+510.
ELSE.
wa_xbuf = wa_datastring.
wa_stringlength = -1. "end condition
ENDIF.
<contents_hex> = <xbuf>.
APPEND wa_contents_hex TO wt_contents_hex.
ENDWHILE.
ENDIF.
"Find proper folder for uploading
CALL FUNCTION 'SO_FOLDER_ROOT_ID_GET' DESTINATION 'NONE'
EXPORTING
OWNER = ' '
region = 'B'
IMPORTING
folder_id = wa_folder_id
EXCEPTIONS
communication_failure = 1
owner_not_exist = 2
system_failure = 3
x_error = 4
OTHERS = 5
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
wa_document_data-obj_name = 'MESSAGE'.
wa_document_data-obj_descr = wa_filename.
wa_document_data-obj_langu = 'E'.
"Upload the document
CALL FUNCTION 'SO_DOCUMENT_INSERT_API1' DESTINATION 'NONE'
EXPORTING
folder_id = wa_folder_id
document_data = wa_document_data
document_type = wa_document_type
IMPORTING
document_info = wa_document_info
TABLES
OBJECT_HEADER = wt_object_header
OBJECT_CONTENT = wt_object_content
contents_hex = wt_contents_hex
OBJECT_PARA = wt_object_para
OBJECT_PARB = wt_object_parb
EXCEPTIONS
folder_not_exist = 1
document_type_not_exist = 2
operation_no_authorization = 3
parameter_error = 4
x_error = 5
enqueue_error = 6
OTHERS = 7
IF sy-subrc = 0.
COMMIT WORK.
ENDIF.
wa_obj_rolea-objkey = lo_stru_input_param-pernr.
wa_obj_rolea-objtype = 'BUS1065'.
wa_obj_roleb-objkey = wa_document_info-doc_id(34).
wa_obj_roleb-objtype = 'MESSAGE'.
CALL FUNCTION 'BINARY_RELATION_CREATE' DESTINATION 'NONE'
EXPORTING
obj_rolea = wa_obj_rolea
obj_roleb = wa_obj_roleb
relationtype = 'ATTA'
FIRE_EVENTS = 'X'
IMPORTING
BINREL =
TABLES
BINREL_ATTRIB =
EXCEPTIONS
no_model = 1
internal_error = 2
unknown = 3
OTHERS = 4
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
COMMIT WORK.
Edited by: Siong Chao on Nov 15, 2010 11:03 AM
Edited by: Siong Chao on Nov 15, 2010 11:05 AMHi Siong,
as I remember I faced rough the same problem.
Solution for me was to use an explicit transaction management and only one COMMIT WORK.
Block before upload (logic from program SAPLSO33 PAI: USER_COMMAND_0100)
DATA:
lr_transaction_mgr TYPE REF TO if_os_transaction_manager,
lr_transaction TYPE REF TO if_os_transaction,
lr_os_ps TYPE REF TO if_os_persistency_manager
TRY.
CALL METHOD cl_os_system=>init_and_set_modes
EXPORTING
i_update_mode = oscon_dmode_direct
i_external_commit = oscon_false.
lr_transaction_mgr = cl_os_system=>get_transaction_manager( ).
lr_transaction = lr_transaction_mgr->create_transaction( ).
TRY.
CALL METHOD lr_transaction->start.
CATCH cx_os_transaction_mode.
lr_transaction->set_mode_update( oscon_dmode_update_task ).
lr_transaction->start( ).
ENDTRY.
CATCH cx_os_error cx_os_system_error INTO lr_except.
CALL METHOD lr_except->get_longtext
EXPORTING
preserve_newlines = abap_false
RECEIVING
result = lv_except_text.
CALL METHOD lr_except->get_source_position
IMPORTING
program_name = lv_except_prog
include_name = lv_except_incl
source_line = lv_except_line.
WRITE: / iv_file, lv_except_text, 'in', lv_except_prog, '/', lv_except_incl, lv_except_line.
cv_errlvl = 1.
RETURN.
ENDTRY.
Block after linking with BINARY_RELATION_CREATE:
TRY.
lr_os_ps = cl_os_system=>get_persistency_manager( ).
CALL METHOD lr_os_ps->set_update_mode
EXPORTING
i_mode = oscon_dmode_direct.
CALL METHOD lr_transaction->end.
CATCH cx_os_error cx_os_system_error INTO lr_except.
CALL METHOD lr_except->get_longtext
EXPORTING
preserve_newlines = abap_false
RECEIVING
result = lv_except_text.
CALL METHOD lr_except->get_source_position
IMPORTING
program_name = lv_except_prog
include_name = lv_except_incl
source_line = lv_except_line.
WRITE: / iv_file, lv_except_text, 'in', lv_except_prog, '/', lv_except_incl, lv_except_line.
CALL METHOD lr_transaction->undo.
IF cv_errlvl EQ 0.
cv_errlvl = 1.
ENDIF.
RETURN.
ENDTRY.
COMMIT WORK.
On undesirably sy-subrc use lr_transaction->undo.
Regards, Hubert
Edited by: Hubert Heitzer on Nov 15, 2010 12:40 PM -
PM Notification Attachments via "Create Attachment" vs "Creat Ext Doc (URL)
Uwe -
Did you create the PM notification attachment using
Create Attachment
or Create External Document (URL) ???
Mine were created as attachments, not as external documents - that may be why your code isn't working ...
I'm going to try to do an external document create and see if that works ...
DaveFUNCTION 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 -
Tnx. IW22 Change PM Notification - Create external document (URL) posting
Hi:
I am in transaction IW22 i.e. Change PM Notification. There is a 'Services for object' drop down which appears below the enter tick. This appears in online but not in BDC. I have tried it through the transaction SHDB i.e. Transaction Recorder also herein the 'Services for object' does not appear. I need to post entries through 'Create external document (URL)' through the 'Services for object' drop down using BDC / BAPI / etc.
Please advice.
NB.Hi NB,
We have similar issue for QM notification and I have used function "SO_OBJECT_INSERT".
I am enclosing my code may be useful for you:
FORM CREATE-URL-ATTACHMENT.
CALL FUNCTION 'SO_FOLDER_ROOT_ID_GET'
EXPORTING
REGION = 'B'
IMPORTING
FOLDER_ID = FOLDER_ID
EXCEPTIONS
OTHERS = 1.
CLEAR: LS_OBJCONT, LT_OBJCONT, LT_OBJHEAD.
REFRESH: LT_OBJCONT, LT_OBJHEAD.
CONCATENATE '&KEY&' H-URL INTO LS_OBJCONT.
APPEND LS_OBJCONT TO LT_OBJCONT.
CLEAR: L_OBJ_DATA.
L_OBJ_DATA-OBJSNS = 'O'.
L_OBJ_DATA-OBJLA = SY-LANGU.
L_OBJ_DATA-OBJDES = 'NOTES URL'.
CALL FUNCTION 'SO_OBJECT_INSERT'
EXPORTING
FOLDER_ID = FOLDER_ID
OBJECT_TYPE = 'URL'
OBJECT_HD_CHANGE = L_OBJ_DATA
IMPORTING
OBJECT_ID = L_OBJ_ID
TABLES
OBJHEAD = LT_OBJHEAD
OBJCONT = LT_OBJCONT
EXCEPTIONS
ACTIVE_USER_NOT_EXIST = 35
FOLDER_NOT_EXIST = 6
OBJECT_TYPE_NOT_EXIST = 17
OWNER_NOT_EXIST = 22
PARAMETER_ERROR = 23
OTHERS = 1000.
CLEAR: IS_OBJECT.
IS_OBJECT-OBJKEY = WQMNUM.
IS_OBJECT-OBJTYPE = 'BUS2078'.
CLEAR: REL_DOC.
CONCATENATE FOLDER_ID L_OBJ_ID INTO REL_DOC-OBJKEY.
REL_DOC-OBJTYPE = 'MESSAGE'.
CALL FUNCTION 'BINARY_RELATION_CREATE'
EXPORTING
OBJ_ROLEA = IS_OBJECT
OBJ_ROLEB = REL_DOC
RELATIONTYPE = 'URL'
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC EQ 0.
COMMIT WORK.
ELSE.
T_MESSAGE = 'Notification Attachment Add Failed'.
APPEND T_MESSAGE.
CLEAR: T_MESSAGE.
T_MESSAGE = 'Reference:'.
T_MESSAGE+11(20) = H-REF.
APPEND T_MESSAGE.
CLEAR: T_MESSAGE.
T_MESSAGE = 'Notification:'.
T_MESSAGE+14(12) = WQMNUM.
APPEND T_MESSAGE.
CLEAR: T_MESSAGE.
T_MESSAGE = 'URL:'.
T_MESSAGE+5(72) = H-URL.
APPEND T_MESSAGE.
PERFORM SEND-EMAIL.
ENDIF.
ENDFORM. "create-url-attachment
Hope this may help you.
Please reward all the useful answers.
Regards,
Lanka -
FM to create external document(URL) in IE02
Hi,
I need to create external document(URL) for equipment master.
We can create manually it is done by clicking a button Services for Object and then selecting option (Create External Document URL).
I refered many links but failed to create the url in IE02.Please help me with the example.
Regards,Hi,
You will need to use function BINARY_RELATION_CREATE for this.
Check how is it handled in function SGOS_URL_CREATE_DIALOG. Also check code in PAI of screen 2400 (subroutine create_url_doc). You will need to use that code.
Sridhar -
hi all,
My requirement is i need to create a PDF file of one report and attech it to 'services for Object' of CJ20N,
in background.
Is there any direct function module or bapi to do this.
i tried to use FM 'SO_OBJECT_INSERT'
and BINARY_RELATION_CREATE
But i am not getting desired result. When i tried to attech PDF file and open atteched pdf form CJ20N it gave error that content of file cannot be read ,, i think some conversion error occured.
If anybody can help on this issue.....
<removed_by_moderator>
Thanks,
Edited by: Julius Bussche on Jun 24, 2008 9:33 PMHi,
I ran into the same issue and had to use FM SO_CONVERT_CONTENTS_BIN to convert the file data after reading it into memory. I have a feeling this affects the Unicode systems only.
Hope this helps. -
GOS - Cannot open .docx/.xlsx file programmatically attached to business object
I am supporting an existing web dynpro application that allows users to attach files to a purchase requsition in SAP. The current solution allows for a successful attachment and display of .doc and .xls files, but gives an error when displaying .docx and .xlsx files.
The current solution follows this logic: The code identifies the MIME type of the file to derive the file extension. Then, it converts the document contents from a xstring type to binary via function SCMS_EXTRING_TO_BINARY. After the conversion, it creates an initial instance of BO 'MESSAGE' and populates the message container with the required parameters. It creates the container, refreshes the message object, and gets the key of the new message object. Then, the code populates the BO object_a and object_b and calls the method cl_binary_relation=>create_link to attach the file. Lastly, a commit work statement is executed. Based on the code samples I have seen online, this solution is logically correct.
I am able to successfully attach .doc and .xls files from this web dynpro application, and then later open them from ME53N. I am also able to "successfully" attach .docx and .xlsx files from the application. If I view the attachment list in ME53N, these files are visible. However, when I attempt to open the attachments, Word/Excel gives me an error message "The file cannot be opened because there are problems with the contents. The file is corrupt and cannot be opened." If I click OK to bypass the error, it gives an additional prompt "Word found unreadable content in document. Do you want to recover the contents of this document? If you trust the source of this document, click yes." If I click yes, the document opens.
.docx / .xlsx files attached via ME52N will open without issue
.doc / .xls files attached programmatically via this web application open without issue
these are the MIME types associated with .docx / .xlsx both in the web application and in SAP configuration:
.docx: application/vnd.openxmlformats-officedocument.wordprocessingml.document
.xlsx: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
Does anyone have an idea why the newer document versions appear to be corrupt when opening? Does the error from Word imply there is a data conversion issue, even though the .doc and .xls documents are readable? Are the .docx/.xlsx file types unusable with the cl_binary_relation=>create_link method, and should instead be used with the function 'BINARY_RELATION_CREATE'?
Any help is greatly appreicated. Thanks in advance!I replied too quickly. This change in providing the file size DID help when I was attaching .docx files. They open succesfully now, as well as, .doc and .xls files.
However, I'm still having the same issue when I try attaching .xlsx files. Furthermore, now .txt files do not display correctly. Before passing the file size correctly, they were displaying in notepad. Now, they open in the SAP GUI and only show characters, rather then the actual text.
It seems like this file size typo was just a coincidence for .docx files. I'm still looking for help on this issue. Thanks in advance. -
Upload and Attach file to Service Notificacion through Web Dynpro
Hi,
I need to upload and attach a file (Word, PDF, TXT ...) to Service Notificacion (TX - IW53) through Web Dynpro.
I have used the integration component "File Upload" to obtain the "fileName" atribute. Also, I have used the functions SO_OBJECT_UPLOAD, SO_INSERT_OBJECT and BINARY_RELATION_CREATE_COMMIT.
But have a problem, because the function SO_OBJECT_UPLOAD use the class "cl _ gui _ frontend _ services" and that clash with Web Dynpro.
My question is: how could I resolve that problem?
I look forward to your response.
ThanksIV_NAME Importing Type STRING
IV_CONTENT Importing Type STRING
IV_CONTENT_HEX Importing Type XSTRING
IS_LPORB Importing Type SIBFLPORB
IV_OBJTP Importing Type SO_OBJ_TP
RT_MESSAGES Returning Type BAPIRETTAB
method save.
data ls_message type bapiret2.
data:
filename type string,
filefullname type string,
mime_type type string,
size type i,
offset type i,
offset_old type i,
temp_len type i,
objname type string,
l_obj_type type so_obj_tp,
hex_null type x length 1 value '20',
l_document_title type so_text255,
file_ext type string,
lt_objcont type standard table of solisti1 initial size 6,
objcont like line of lt_objcont,
lt_ls_doc_change type standard table of sodocchgi1,
ls_doc_change like line of lt_ls_doc_change,
lt_data type soli_tab,
ls_data type soli,
lt_xdata type solix_tab,
ls_xdata type solix,
l_folder_id type sofdk,
ls_object_id type soodk,
l_object_id_fol type so_obj_id,
l_object_id type so_obj_id,
l_doc_info TYPE sofolenti1,
l_object_hd_change type sood1,
l_tab_size type int4,
l_retype type breltyp-reltype,
lt_urltab type standard table of sood-objdes.
get foler
l_folder_id = 'FOL29000000000004'.
call function 'SO_FOLDER_ROOT_ID_GET'
exporting
owner = sy-uname
region = 'B'
importing
folder_id = l_folder_id
tables
path_table =
if iv_objtp = gc_type_file.
size = xstrlen( iv_content_hex ).
get file name and extension
call method split_path
exporting
iv_path = iv_name
importing
E_PATH =
ev_filename = filename
E_PSERVER =
call method split_file_extension
exporting
iv_filename_with_ext = filename
importing
ev_filename = objname
ev_extension = file_ext.
ls_doc_change-obj_name = objname.
ls_doc_change-obj_descr = objname.
ls_doc_change-obj_langu = sy-langu.
ls_doc_change-sensitivty = 'F'.
ls_doc_change-doc_size = size.
offset = 0.
while offset <= size.
offset_old = offset.
offset = offset + 255.
if offset > size.
temp_len = xstrlen( iv_content_hex+offset_old ).
clear ls_xdata-line with hex_null in byte mode.
ls_xdata-line = iv_content_hex+offset_old(temp_len).
else.
ls_xdata-line = iv_content_hex+offset_old(255).
endif.
append ls_xdata to lt_xdata.
endwhile.
set object type relation type and other header info
l_retype = 'ATTA'.
l_obj_type = 'EXT'.
l_object_hd_change-objnam = ls_doc_change-obj_name.
l_object_hd_change-objdes = ls_doc_change-obj_descr.
l_object_hd_change-objsns = ls_doc_change-sensitivty.
l_object_hd_change-objla = ls_doc_change-obj_langu.
l_object_hd_change-objlen = ls_doc_change-doc_size.
l_object_hd_change-file_ext = file_ext.
prepare header
data lt_obj_header type standard table of solisti1.
data ls_header type solisti1.
concatenate '&SO_FILENAME=' filename into ls_header.
append ls_header to lt_obj_header.
clear ls_header.
ls_header = '&SO_FORMAT=BIN'.
append ls_header to lt_obj_header.
change hex data to text data
call function 'SO_SOLIXTAB_TO_SOLITAB'
exporting
ip_solixtab = lt_xdata
importing
ep_solitab = lt_data.
else.
for note
size = strlen( iv_content ).
objname = iv_name.
ls_doc_change-obj_descr = objname.
ls_doc_change-sensitivty = 'O'.
ls_doc_change-obj_langu = sy-langu.
put content into table
offset = 0.
if iv_objtp = gc_type_note.
it's a note
l_retype = 'NOTE'.
l_obj_type = 'RAW'.
l_object_hd_change-file_ext = 'TXT'.
read note content into table
while offset <= size.
offset_old = offset.
offset = offset + 255.
if offset > size.
temp_len = strlen( iv_content+offset_old ).
clear ls_data-line.
ls_data-line = iv_content+offset_old(temp_len).
else.
ls_data-line = iv_content+offset_old(255).
endif.
append ls_data to lt_data.
endwhile.
get title from content , if it's initial
if objname is initial.
read table lt_data index 1 into l_document_title.
while l_document_title+49 <> ' '.
shift l_document_title right.
endwhile.
shift l_document_title left deleting leading ' '.
ls_doc_change-obj_descr = l_document_title.
endif.
else.
it's url (not note)
l_retype = 'URL'.
l_obj_type = 'URL'.
if objname is initial.
split iv_content at '/' into table lt_urltab.
describe table lt_urltab lines l_tab_size.
read table lt_urltab index l_tab_size into ls_doc_change-obj_descr.
endif.
while offset <= size.
offset_old = offset.
offset = offset + 250.
if offset > size.
temp_len = strlen( iv_content+offset_old ).
clear ls_data-line.
ls_data-line = iv_content+offset_old(temp_len).
else.
ls_data-line = iv_content+offset_old(250).
endif.
concatenate '&KEY&' ls_data-line into ls_data-line.
append ls_data to lt_data.
endwhile.
endif.
ls_doc_change-doc_size = size.
l_object_hd_change-objnam = ls_doc_change-obj_name.
l_object_hd_change-objdes = ls_doc_change-obj_descr.
l_object_hd_change-objsns = ls_doc_change-sensitivty.
l_object_hd_change-objla = ls_doc_change-obj_langu.
l_object_hd_change-objlen = ls_doc_change-doc_size.
endif.
save object
call function 'SO_OBJECT_INSERT'
exporting
folder_id = l_folder_id
OBJECT_FL_CHANGE = OBJECT_FL_CHANGE
object_hd_change = l_object_hd_change
object_type = l_obj_type
ORIGINATOR_ID = OWNER_ID
OWNER = USER-USRNAM
importing
OBJECT_FL_DISPLAY = OBJECT_FL_DISPLAY
OBJECT_HD_DISPLAY = OBJECT_HD_DISPLAY
object_id = ls_object_id "l_doc_info-object_id
tables
objcont = lt_data
objhead = lt_obj_header
OBJPARA = OBJECT_PARA
OBJPARB = OBJECT_PARB
exceptions
component_not_available = 01
folder_not_exist = 06
folder_no_authorization = 05
object_type_not_exist = 17
operation_no_authorization = 21
parameter_error = 23
others = 1000.
if sy-subrc <> 0.
message id sy-msgid type sy-msgty number sy-msgno
with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 into ls_message-message.
ls_message-type = sy-msgty.
ls_message-id = sy-msgid.
ls_message-number = sy-msgno.
ls_message-message_v1 = sy-msgv1.
ls_message-message_v2 = sy-msgv2.
ls_message-message_v3 = sy-msgv3.
ls_message-message_v4 = sy-msgv4.
append ls_message to rt_messages.
return.
endif.
create relation
data l_obj_rolea type borident.
data l_obj_roleb type borident.
MOVE-CORRESPONDING wd_this->ms_lporb to l_obj_rolea.
l_obj_rolea-objkey = is_lporb-instid.
l_obj_rolea-objtype = is_lporb-typeid.
l_obj_rolea-logsys = is_lporb-catid.
l_object_id_fol = l_folder_id.
l_object_id = ls_object_id.
concatenate l_object_id_fol l_object_id into l_obj_roleb-objkey respecting blanks.
l_obj_roleb-objtype = 'MESSAGE'.
clear l_obj_roleb-logsys.
call function 'BINARY_RELATION_CREATE'
exporting
obj_rolea = l_obj_rolea
obj_roleb = l_obj_roleb
relationtype = l_retype
exceptions
others = 1.
if sy-subrc = 0.
commit work and wait.
wd_this->MV_UPDATE_FLAG = 'X'.
else.
message id sy-msgid type sy-msgty number sy-msgno
with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 into ls_message-message.
ls_message-type = sy-msgty.
ls_message-id = sy-msgid.
ls_message-number = sy-msgno.
ls_message-message_v1 = sy-msgv1.
ls_message-message_v2 = sy-msgv2.
ls_message-message_v3 = sy-msgv3.
ls_message-message_v4 = sy-msgv4.
append ls_message to rt_messages.
return.
endif.
endmethod.
Edited by: Reyleene Hunt on May 26, 2009 10:05 AM -
How to delete Services For Objects Attachments?
How can I delete records from SOFFCONT1 selectively, to recover Database space, without corruption of Database integrity in other tables?
Thousands of scanned images have been uploaded to SAP R3 as 'Attachments' to Financial documents, and produced massive amounts of binary data in table SOFFCONT1. It was thought that 'Links' were being created until Basis saw the size of table SOFFCONT1.
A new methodolgy creates 'Links' to files on a network filer instead.
The bleeding has stopped!
The original methodology for creating the relationship included the following:
SO_FOLDER_ROOT_ID_GET
SO_OBJECT_UPLOAD
SO_SPLIT_FILE_AND_PATH
SO_LOIO_PHIO_CREATE
SO_OBJECT_INSERT
BINARY_RELATION_CREATE
New records are thereby added to the following tables:
SOFFLOIO
SOFFPHIO
SOFFCONT1
SOFFPHF
SOOD
SOC3
SOFM
SRGBTBREL
A debug session of the transaction FB03, display attachments, and delete revealed the following function modules:
BINARY_RELATION_DELETE
SO_OBJECT_DELETE_IN_VB
This only deletes the relationship records in tables:
SOFM
SRGBTBREL
What I really want to do is delete all traces (records in tables) of these image/document relationships in R3 and recover the Database space.
Is anyone experienced with this recovery process, and has a solution to this requirement?
Any suggestions welcome.
Thanks, Marlon(for the OP)
Roger Wilmut1 wrote:
The User Library is hidden by default but in Mavericks you can make it visible - open your Home Folder the from the Finder's View menu, choose show View Options and check Show User Library.
or just hold Option then Finder menu Go > Library.
Maybe you are looking for
-
Ipod not recognized by itunes with vista!!
I (amid all of my other troubles with vista) have updated to itunes 7.2 but am not able to get itunes to recognize my 30 GB video ipod. I perused the other discussions and noticed others have had the same problem but never came across an answer. than
-
Hello, I have stock of 100 ea of material on 01.04.2008. Now i am taking receipt of 100 ea supposed on 30.04.08. Now i am issueing material of qty 200 on 15.04.08. System accepting whereas it should give an error message that deficiet stock of 100 ea
-
Grey out of component screen fields in sub contracting PO.
Hi!!!!!!!! Sapers When i am creating subcontracting Purchase order , In this i want restrict the users to add or modify the components screen fields. what i need exactly is i want to gray out the fields of these component screen . Is it Possiable? O
-
How durable is the ipad with retina display glass?
How durable is the ipad with retina display glass?
-
BPELConsole error: "FlowViewer is not defined"
Hi have you see this error, when opening the "Flow" tab? BPELConsole opens a error window displaying: Error: Internal/Bug (# 736) FlowViewer is not defined And the strange fact is it only occurs for one bpel process, the other ones I can see the flow