СОЗДАНИЕ ОТЧЕТНЫХ ФОРМ НА DOI

СОЗДАНИЕ ОТЧЕТНЫХ ФОРМ НА DOI

Приведем пример, того как можно позволять пользователям заполнять отчетные формы и, например, затем отправлять заполненные формы своим коллегам для печати и подписи.

Для этого будем использовать технологию DOI(Document office integration).

Для начала нужно подготовить отчетную форму. В файле должны быть обозначены ссылки на текст, так как показано на рисунках ниже:

Рис.1

Рис.2 .

Рис.3

Рис.4

Рис.5

В свойствах также должен быть создан параметр.

Загрузим формуляр в SMW0 под именем ZDOI_TEST.

Теперь создаем в системе тестовую программу.

*&---------------------------------------------------------------------*
*& Report ZDOI_TEST
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT zdoi_test.

TYPE-POOLS: cndp.

DATA: gv_tmpid TYPE char40 VALUE 'ZDOI_TEST',
gv_url TYPE cndp_url,
gt_field TYPE soi_form_list,
gs_field LIKE LINE OF gt_field,
go_container TYPE REF TO cl_gui_custom_container,
go_control TYPE REF TO i_oi_container_control,
go_document TYPE REF TO i_oi_document_proxy,
go_form TYPE REF TO i_oi_form,
gv_code TYPE syucomm.

INCLUDE zdoi_test_status_9001o01.

START-OF-SELECTION.

CALL FUNCTION 'DP_PUBLISH_WWW_URL'
EXPORTING
objid = gv_tmpid
lifetime = cndp_lifetime_transaction
IMPORTING
url = gv_url
EXCEPTIONS
OTHERS = 4.

gs_field-type = 'T'.
gs_field-name = 'p1'.
gs_field-number = '1'.
gs_field-value = 'Value from ABAP'.
APPEND gs_field TO gt_field.

CALL SCREEN 9001.

READ TABLE gt_field INTO gs_field INDEX 1.
WRITE: 'This is new value: ', gs_field-value.

На 9001 экране расположим контейнер для отображения DOI.

В PBO/PAI напишем следующий код:

PROCESS BEFORE OUTPUT.
MODULE status_9001.
*
PROCESS AFTER INPUT.
MODULE user_command_9001.

*&---------------------------------------------------------------------*
*& Module STATUS_9001 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_9001 OUTPUT.
DATA: lv_str TYPE string,
ls_field LIKE LINE OF gt_field.

SET PF-STATUS '9001'.

CHECK go_control IS NOT BOUND.

CALL METHOD c_oi_container_control_creator=>get_container_control
IMPORTING
control = go_control.

CREATE OBJECT go_container
EXPORTING
container_name = 'DOI_CONTAINER'.

CALL METHOD go_control->init_control
EXPORTING
inplace_enabled = 'X'
inplace_scroll_documents = 'X'
inplace_show_toolbars = space
register_on_close_event = 'X'
register_on_custom_event = 'X'
r3_application_name = 'DOI'
parent = go_container
no_flush = 'X'
EXCEPTIONS
OTHERS = 2.

CALL METHOD go_control->get_document_proxy
EXPORTING
document_type = space
register_container = 'X'
no_flush = 'X'
IMPORTING
document_proxy = go_document.

CALL METHOD go_document->open_document
EXPORTING
open_inplace = 'X'
document_url = gv_url
no_flush = 'X'.

CALL METHOD go_document->get_form_interface
EXPORTING
no_flush = 'X'
IMPORTING
f_interface = go_form.

IF gt_field IS NOT INITIAL.
CALL METHOD go_form->set_data
EXPORTING
fields = gt_field
clear = space
no_flush = 'X'.
ENDIF.

CALL METHOD go_form->protect
EXPORTING
protect = 'X'
no_flush = 'X'.

cl_gui_cfw=>flush( ).
ENDMODULE. " STATUS_9001 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_9001 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_9001 INPUT.
CALL METHOD go_form->get_data
EXPORTING
all = 'X'
IMPORTING
fields = gt_field.

CASE gv_code.
WHEN 'BACK'.
LEAVE TO SCREEN 0.
ENDCASE.

" close document
CALL METHOD go_document->close_document( ).
CALL METHOD go_control->destroy_control( ).
CALL METHOD go_container->free( ).
CLEAR: go_form, go_document, go_control, go_container.

ENDMODULE. " USER_COMMAND_9001 INPUT

В двух словах логика заключается в создании контейнера DOI и отображения формуляра. По умолчанию на экран в переменную P1 выводится слово 'Value from ABAP'. Затем вводя любое слово в отчетной форме и выходе из неё функционал считывает эту переменную и выводит её значение на экран.

Таким образом, можно создать функционал для сохранения значений формуляра и выводить заполненные формы в дальнейшем.

Рис.6

Рис.7

Полезные ссылки по теме:

ПРОДВИНУТЫЕ ТЕХНОЛОГИИ ВЫВОДА В WORD И EXCEL

blogs.sap.com

archive.sap.com

Теги:

0 Комментариев

Оставить комментарий


Отмена Ваш комментарий будет опубликован после утверждения этого поста.

Подпишитесь на рассылку статей.

Не волнуйтесь, мы не spam

Мы на Facebook
Мы на linkedin