Age: 40 Joined: 01 Feb 2008 Posts: 387 Location: Воронеж
Posted: Tue May 03, 2011 7:42 pm Post subject: архивлинки
Даже не знаю как сказать. Есть кнопочка в тр. pp01 ppome в левом верхнем углу для объектов О. На нее прилично навешено. Одна из функций это загружать файлы в SAP, и по ней же можно их достать посмотреть. Некоторая информация о хранимых файлах лежит в таблице SOFFPHF SOFFLOIO. Возможно кто то работал с этим функционалом и подскажет куда можно смотреть, чтобы сделать загрузку файлов аналогично действиям по этой кнопке. Это нужно для того, чтобы потом через эту кнопку можно было просматривать сохраненные документы. Мутно все получилось, но понимания у меня мало.
Отобразить эту кнопку можно через ФМ RH_OBJECT_PUBLISH
Вряд ли конечно на такое кто нибудь ответит.
Не только для объектов О, в PA30 для табельных тоже присутствует. _________________ Hормальные люди делают вещи намного более безумные чем всё, что делают сумасшедшие (c) С.Лем
Last edited by XXX_:) on Thu May 05, 2011 3:38 pm; edited 2 times in total
Основной класс для работы с GOS - CL_GOS_DOCUMENT_SERVICE.
Примеры использования можете посмотреть в классе CL_ATTACHMENT_LIST (методы MESSAGE_DELETE, MESSAGE_EXPORT, MESSAGE_EDIT и MESSAGE_DISPLAY).
Age: 40 Joined: 01 Feb 2008 Posts: 387 Location: Воронеж
Posted: Wed May 04, 2011 8:19 pm Post subject:
Частично то что нужно. файлы грузятся (вроде бы) либо через CL_GOS_DOCUMENT_SERVICE либо еще пробовал через ФМ GOS_EXECUTE_SERVICE. но дело в том, что по вышеобозначенной кнопке невозможно их просмотреть. Мне нужно как раз, чтобы документы потом были доступны по этой кнопке, так что вопрос еще открыт.
Наврал, через ФМ все в порядке. Только я скопировал ФМ в Z. Убрал галуку дистанционный, поставил стандартный. Только вот такое странное поведение, если запустить ФМ через SE37, то сохранение происходит и читается потом через нужную кнопку, а вот при запуске из программы (экран ИТ), читать через кнопку отказывается Sad. Пока не победил. _________________ Hормальные люди делают вещи намного более безумные чем всё, что делают сумасшедшие (c) С.Лем
Только вот такое странное поведение, если запустить ФМ через SE37, то сохранение происходит и читается потом через нужную кнопку, а вот при запуске из программы (экран ИТ), читать через кнопку отказывается Sad. Пока не победил.
Age: 40 Joined: 01 Feb 2008 Posts: 387 Location: Воронеж
Posted: Wed May 04, 2011 10:11 pm Post subject:
Нет. commit work пробовал не помогает. Помогла установка галочки на ФМ-е дистанционный модуль. и при вызове destination 'none'.
Если создать програмку и в нем вызвать ФМ, то все работает и без галочки дистанционного модуля.
Сейчас работает, завтра буду делать чтение и удаление.
Этот ФМ делает 2 вещи, насколько я понимаю. Кладет файл на сервер(не знаю точно где храниться) и создает запись в таблице с ключом. Так вот, вне зависимости видит ли потом стандартный функционал эти файлы, записи в таблице всегда создаются. Это меня натолкнуло на мысль, что с сохранинием в БД все в порядке, а вот с переносом файла на сервер что то происходит. Это конечно только мое предположение. Сейчас, тьфу-тьфу работает, но хочется понять механизм: как файлы передаются на сервер, что может в программе помешать этому. Если есть такая информация поделитесь ссылкой.
ЗЫ: хотел потом переписать с ФМ-а на классы, но раз работает только с галочной Дистанционный модуль, то классы по-видимому отменяются. _________________ Hормальные люди делают вещи намного более безумные чем всё, что делают сумасшедшие (c) С.Лем
Age: 40 Joined: 01 Feb 2008 Posts: 387 Location: Воронеж
Posted: Thu May 05, 2011 11:05 am Post subject:
Есть ли функционал, позволяющий отображать только один документ из GOS, и так чтобы его можно было удалить и просмотреть, как минимум?
Есть ли функционал позволяющий выбирать только один документ объекта? _________________ Hормальные люди делают вещи намного более безумные чем всё, что делают сумасшедшие (c) С.Лем
*general constants
CONSTANTS: c_cli_default TYPE mandt VALUE '010',
c_rfc_default TYPE rfcdest VALUE 'D32_010',
c_reltype TYPE oblreltype VALUE 'ATTA',
c_typeid_appr TYPE sibftypeid VALUE 'APPR_DOC',
c_typeid_atch TYPE sibftypeid VALUE 'MESSAGE',
c_cataid_appr TYPE sibfcatid VALUE 'BO',
c_cataid_atch TYPE sibfcatid VALUE 'BO',
c_curpln_mask TYPE char3 VALUE '01%',
c_folder_reg TYPE so_fol_rg VALUE 'B',
*steps
c_step_start TYPE numc3 VALUE '000',
c_step_get_all TYPE numc3 VALUE '010',
c_step_filter TYPE numc3 VALUE '020',
c_step_xcheck TYPE numc3 VALUE '021',
c_step_hasatta TYPE numc3 VALUE '022',
c_step_process TYPE numc3 VALUE '030',
c_step_read TYPE numc3 VALUE '031',
c_step_get_fol TYPE numc3 VALUE '032',
c_step_insert TYPE numc3 VALUE '033',
c_step_link TYPE numc3 VALUE '034',
c_step_finish TYPE numc3 VALUE '040',
c_step_end TYPE numc3 VALUE '999',
*icons
c_icon_ok TYPE rmsae_icon_st VALUE '@5B@',
c_icon_warning TYPE rmsae_icon_st VALUE '@5D@',
c_icon_error TYPE rmsae_icon_st VALUE '@5C@',
c_icon_info TYPE rmsae_icon_st VALUE '@0S@',
c_icon_unknown TYPE rmsae_icon_st VALUE '@35@',
*statuses
c_ok TYPE char1 VALUE 'S',
c_warning TYPE char1 VALUE 'W',
c_error TYPE char1 VALUE 'E',
c_info TYPE char1 VALUE 'I'.
*types
TYPES: BEGIN OF ty_s_att_links,
document TYPE sibfboriid,
attachment TYPE sibfboriid,
END OF ty_s_att_links,
BEGIN OF ty_s_log,
status TYPE rmsae_icon_st,
step TYPE char30,
appr_doc TYPE hap_appraisal_id,
text TYPE pc_b2a_ptxt,
END OF ty_s_log,
BEGIN OF ty_s_crosscheck,
appraisal_id TYPE hap_appraisal_id,
END OF ty_s_crosscheck,
BEGIN OF ty_s_existatta,
document TYPE sibfboriid,
attachment TYPE sibfboriid,
END OF ty_s_existatta,
ty_t_att_links TYPE STANDARD TABLE OF ty_s_att_links,
ty_t_log TYPE STANDARD TABLE OF ty_s_log,
ty_t_crosscheck TYPE HASHED TABLE OF ty_s_crosscheck WITH UNIQUE KEY appraisal_id,
ty_t_existatta TYPE SORTED TABLE OF ty_s_existatta WITH UNIQUE KEY document attachment.
*global data
DATA: gv_folder_id_flat TYPE so_obj_id,
gv_relationtype TYPE binreltyp,
gv_proc_records TYPE i,
gv_proc_records_text TYPE char10,
gv_log_entry TYPE char1024,
gv_progress TYPE string,
gv_uname_backup TYPE syuname,
gv_datum_backup TYPE sydatum,
gv_uzeit_backup TYPE syuzeit,
gs_document_data_read TYPE sofolenti1,
gs_document_data_insert TYPE sodocchgi1,
gs_document_data_create TYPE sofolenti1,
gs_folder_id TYPE soodk,
gs_obj_rolea TYPE borident,
gs_obj_roleb TYPE borident,
gt_att_links TYPE ty_t_att_links,
gt_crosscheck TYPE ty_t_crosscheck,
gt_existatta TYPE ty_t_existatta,
gt_log TYPE ty_t_log,
gt_object_header TYPE TABLE OF solisti1,
gt_object_content TYPE TABLE OF solisti1,
gt_object_para TYPE TABLE OF soparai1,
gt_object_parb TYPE TABLE OF soparbi1,
gt_contents_hex TYPE TABLE OF solix.
FIELD-SYMBOLS: <gf_att_links> TYPE ty_s_att_links,
<gf_existatta> TYPE ty_s_existatta.
*connection setting
SELECTION-SCREEN BEGIN OF BLOCK one WITH FRAME TITLE text-001.
PARAMETERS: p_client TYPE t000-mandt DEFAULT c_cli_default OBLIGATORY,
p_rfcdes TYPE rfcdest DEFAULT c_rfc_default OBLIGATORY MATCHCODE OBJECT f4_rfcdes3.
SELECTION-SCREEN END OF BLOCK one.
*restricting by doc. ID
SELECTION-SCREEN BEGIN OF BLOCK two WITH FRAME TITLE text-002.
SELECT-OPTIONS: so_aprid FOR hrhap-appraisal_id NO INTERVALS.
PARAMETERS: cb_igncr TYPE c AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN END OF BLOCK two.
****************************************************************************************************************
* Following steps take place during the copying: *
****************************************************************************************************************
*000 Start report
*10. Select appraisal document attachment data from defined client
*20. Filter processed appraisal document by specified ID
*21. Crosscheck same IDs between target and current clients
*22. Filter out documents that already have attachments in current client. Can be skipped by screen parameter
*30. Start processing. Next seps are repeated in a loop for all processed documents
*31. Read attachment content from using defined RFC connection
*32. Get root folder ID
*33. Recreate attachment in current client
*34. Link created attachment with appraisal document in current client. Uses same document ID as in source client
*40. Finish processing
*999 End report
START-OF-SELECTION.
PERFORM show_progress USING text-pre.
*Step 000 Start report
DO 1 TIMES.
MESSAGE i000 INTO gv_log_entry.
PERFORM write_log USING c_info c_step_start gv_log_entry.
*Step 10. Select appraisal document attachment data from defined client
SELECT instid_a instid_b
FROM srgbtbrel
CLIENT SPECIFIED
INTO TABLE gt_att_links
WHERE client = p_client AND
reltype = c_reltype AND
instid_a LIKE c_curpln_mask AND
typeid_a = c_typeid_appr AND
catid_a = c_cataid_appr AND
catid_a = c_cataid_atch.
MESSAGE w021 INTO gv_log_entry.
PERFORM write_log USING c_warning c_step_xcheck gv_log_entry.
EXIT.
ELSE.
MESSAGE s121 WITH gv_proc_records INTO gv_log_entry.
PERFORM write_log USING c_ok c_step_xcheck gv_log_entry.
*Step 22. Filter out documents that already have attachments in current client. Can be skipped by screen parameter
IF cb_igncr = 'X'.
SELECT instid_a instid_b
FROM srgbtbrel
INTO TABLE gt_existatta
WHERE reltype = c_reltype AND
instid_a LIKE c_curpln_mask AND
typeid_a = c_typeid_appr AND
catid_a = c_cataid_appr AND
catid_a = c_cataid_atch.
LOOP AT gt_att_links ASSIGNING <gf_att_links>.
CLEAR gs_document_data_read.
LOOP AT gt_existatta ASSIGNING <gf_existatta> WHERE document = <gf_att_links>-document.
MESSAGE w022 INTO gv_log_entry.
PERFORM write_log USING c_warning c_step_hasatta gv_log_entry.
EXIT.
ELSE.
MESSAGE s122 WITH gv_proc_records INTO gv_log_entry.
PERFORM write_log USING c_ok c_step_hasatta gv_log_entry.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
*Step 30. Start processing. Next seps are repeated in a loop for all processed documents
MESSAGE i030 WITH gv_proc_records INTO gv_log_entry.
PERFORM write_log USING c_info c_step_process gv_log_entry.
LOOP AT gt_att_links ASSIGNING <gf_att_links>.
gv_progress = sy-tabix.
CONCATENATE gv_progress '/' gv_proc_records_text INTO gv_progress SEPARATED BY space.
PERFORM show_progress USING gv_progress.
IF sy-subrc <> 0 OR ( LINES( gt_contents_hex ) = 0 AND LINES( gt_object_content ) = 0 ).
MESSAGE e031 WITH <gf_att_links>-attachment p_rfcdes INTO gv_log_entry.
PERFORM write_log USING c_error c_step_read gv_log_entry.
CONTINUE.
ELSE.
MESSAGE s131 WITH <gf_att_links>-attachment p_rfcdes INTO gv_log_entry.
PERFORM write_log USING c_ok c_step_read gv_log_entry.
ENDIF.
*Step 32. Get root folder ID
CALL FUNCTION 'SO_FOLDER_ROOT_ID_GET'
EXPORTING
region = c_folder_reg
IMPORTING
folder_id = gs_folder_id
EXCEPTIONS
communication_failure = 1
owner_not_exist = 2
system_failure = 3
x_error = 4
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE e032 INTO gv_log_entry.
PERFORM write_log USING c_error c_step_get_fol gv_log_entry.
CONTINUE.
ELSE.
CONCATENATE: gs_folder_id-objtp gs_folder_id-objyr gs_folder_id-objno INTO gv_folder_id_flat.
MESSAGE s132 WITH gv_folder_id_flat INTO gv_log_entry.
PERFORM write_log USING c_ok c_step_get_fol gv_log_entry.
*Step 34. Link created attachment with appraisal document in current client. Uses same document ID as in source client
CALL FUNCTION 'BINARY_RELATION_CREATE_COMMIT'
EXPORTING
obj_rolea = gs_obj_rolea
obj_roleb = gs_obj_roleb
relationtype = gv_relationtype
* IMPORTING
* binrel = gs_binrel
EXCEPTIONS
no_model = 1
internal_error = 2
unknown = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE e034 WITH gs_obj_roleb-objkey gs_obj_rolea-objkey INTO gv_log_entry.
PERFORM write_log USING c_error c_step_link gv_log_entry.
CONTINUE.
ELSE.
MESSAGE s134 WITH gs_obj_roleb-objkey gs_obj_rolea-objkey INTO gv_log_entry.
PERFORM write_log USING c_ok c_step_link gv_log_entry.
ENDIF.
ENDLOOP.
UNASSIGN <gf_att_links>.
*Step 40. Finalize processing and show log
COMMIT WORK.
IF sy-subrc <> 0.
MESSAGE s040 INTO gv_log_entry.
PERFORM write_log USING c_error c_step_finish gv_log_entry.
EXIT.
ELSE.
MESSAGE s140 INTO gv_log_entry.
PERFORM write_log USING c_ok c_step_finish gv_log_entry.
ENDIF.
ENDDO.
*Step 999 End report
MESSAGE i999 INTO gv_log_entry.
PERFORM write_log USING c_info c_step_end gv_log_entry.
PERFORM show_log.
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form write_log
*&---------------------------------------------------------------------*
* Write log entry
*----------------------------------------------------------------------*
* -->PU_STATUS Status of log message (S, E, W, I)
* -->PU_LOG_ENTRY Log message
*----------------------------------------------------------------------*
FORM write_log USING pu_status TYPE c
pu_step TYPE numc3
pu_log_entry TYPE char1024.
DATA: lw_log TYPE ty_s_log.
IF <gf_att_links> IS ASSIGNED.
lw_log-appr_doc = <gf_att_links>-document+2(32).
ENDIF.
CASE pu_status.
WHEN 'S'.
lw_log-status = c_icon_ok.
WHEN 'W'.
lw_log-status = c_icon_warning.
WHEN 'E'.
lw_log-status = c_icon_error.
WHEN 'I'.
lw_log-status = c_icon_info.
WHEN OTHERS.
lw_log-status = c_icon_unknown.
ENDCASE.
CASE pu_step.
WHEN c_step_start.
lw_log-step = text-000.
WHEN c_step_get_all.
lw_log-step = text-010.
WHEN c_step_filter.
lw_log-step = text-020.
WHEN c_step_xcheck.
lw_log-step = text-021.
WHEN c_step_hasatta.
lw_log-step = text-022.
WHEN c_step_process .
lw_log-step = text-030.
WHEN c_step_read .
lw_log-step = text-031.
WHEN c_step_get_fol .
lw_log-step = text-032.
WHEN c_step_insert.
lw_log-step = text-033.
WHEN c_step_link.
lw_log-step = text-034.
WHEN c_step_finish.
lw_log-step = text-040.
WHEN c_step_end.
lw_log-step = text-999.
WHEN OTHERS.
lw_log-step = text-unk.
ENDCASE.
lw_log-text = pu_log_entry.
APPEND lw_log TO gt_log.
CLEAR gv_log_entry. "#EC *
ENDFORM. "write_log
*&---------------------------------------------------------------------*
*& Form clear_variables
*&---------------------------------------------------------------------*
* Clear relevant variables
*----------------------------------------------------------------------*
FORM clear_variables.
*&---------------------------------------------------------------------*
*& Form show_progress
*&---------------------------------------------------------------------*
* Progress indicator
*----------------------------------------------------------------------*
* -->PC_TEXT Progress text n/m
*----------------------------------------------------------------------*
FORM show_progress USING pc_text TYPE string.
CHECK sy-batch IS INITIAL.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
text = pc_text.
ENDFORM. "show_progress
*&---------------------------------------------------------------------*
*& Form count_remaining_attachments
*&---------------------------------------------------------------------*
* Count how many attachment left for processing after filtering
*----------------------------------------------------------------------*
* -->PC_REC integer count
* -->PC_RECT text count
*----------------------------------------------------------------------*
FORM count_remaining_attachments CHANGING pc_rec TYPE i
pc_rect TYPE char10.
Age: 40 Joined: 01 Feb 2008 Posts: 387 Location: Воронеж
Posted: Thu May 05, 2011 3:22 pm Post subject:
Спасибо за таблицу srgbtbrel, в ней храниться связь между "архивлинком", который для аналогичных задач использовался исторически, и ключом для поиска файлов на сервере. Было интересно ее для себя открыть. К сожалению, видимо механизмы архивлинков и GOS разные и поэтому по стандартным архивлинкам нет ключей для того, чтобы использовать единый механизм GOS для чтения архивлинков. Хотя возможно тут что то можно настроить, механизм насколько я видел можно изменять, но знаний и времени на более подробное знакомство, к сожалению, нет.
Для того чтобы достать файлы использовал ФМ SO_DOCUMENT_MANAGER. тут просто выгрузка, просмотра списка и возможности удаления нет, но в данной задаче, более одного документа на одну запись ИТ и не было предусмотрено, поэтому подошло. А удаление, либо через стандартную кнопку либо при удалении ИТ. Позже дополню как сделал удаление.
Кстати, если у кого есть мысли по поводу записи, чтения, удаления, делитесь, т.к. то что сделал я, работает (пока кроме удаления, пока проблемы), но до совершенства далеко, или просто есть какие то комментарии к тому что я написал, буду рад полезной критике или если будет дан ответ хоть на один вопрос. _________________ Hормальные люди делают вещи намного более безумные чем всё, что делают сумасшедшие (c) С.Лем
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You cannot attach files in this forum You can download files in this forum
All product names are trademarks of their respective companies. SAPNET.RU websites are in no way affiliated with SAP AG. SAP, SAP R/3, R/3 software, mySAP, ABAP, BAPI, xApps, SAP NetWeaver and any other are registered trademarks of SAP AG. Every effort is made to ensure content integrity. Use information on this site at your own risk.