*&---------------------------------------------------------------------*
*& Report SAPRDEMOWORD97INTEGRATION *
*&---------------------------------------------------------------------*
INCLUDE rdemoword97integrationtop. DATA: factory TYPE REF TO i_oi_document_factory.
DATA: document TYPE REF TO i_oi_document_proxy.
DATA: link_server TYPE REF TO i_oi_link_server.
DATA: bds_instance TYPE REF TO cl_bds_document_set. DATA: retcode TYPE t_oi_ret_string,
document_type(80) VALUE soi_doctype_word97_document,
document_format(80) TYPE c.
DATA: documents TYPE document_list.
DATA: descr TYPE document_descr. DATA: data_table TYPE sbdst_content,
data_size TYPE i, doc_url TYPE t_url,
has_changed TYPE i,
delimiter(1) TYPE c VALUE'/',
data_type(64) TYPE c,
data_subtype(64) TYPE c,
document_mimetype TYPE bapicompon-mimetype. DATA: first_open VALUE '1'. DATA: BEGIN OF point_data,
proposal(40), lastname(30), comment(128),
END OF point_data.
DATA: points LIKE point_data OCCURS 0 WITH HEADER LINE. CLASS c_event_handler DEFINITION. PUBLIC SECTION.
CLASS-METHODS: close_event_handler
FOR EVENT on_close_document OF i_oi_document_proxy
IMPORTING document_proxy has_changed. CLASS-METHODS: custom_event_handler
FOR EVENT on_custom_event OF i_oi_document_proxy
IMPORTING document_proxy event_name param_count
param1 param2 param3. ENDCLASS. CLASS c_event_handler IMPLEMENTATION.
METHOD close_event_handler.
* FOR EVENT on_close_document OF c_oi_container_control
* IMPORTING document_proxy has_changed.
DATA: answer.
* if has_changed eq 1.
PERFORM save_document TABLES data_table
USING 'X' 'X'
CHANGING data_size document_proxy retcode.
open_document = false.
* endif.
ENDMETHOD. METHOD custom_event_handler.
* FOR EVENT on_custom_event OF i_oi_document_proxy
* IMPORTING document_proxy event_name param_count
* param1 param2 param3.
DATA: text(80).
CONCATENATE 'Word:' event_name 'fired with parameter:' param1
INTO text SEPARATED BY space. "#EC NOTEXT
CALL FUNCTION 'POPUP_TO_INFORM'
EXPORTING
titel = 'Word 97 Integration Demo'(002)
txt1 = text
txt2 = space.
ENDMETHOD.
ENDCLASS. *&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
DATA: o1 TYPE REF TO c_event_handler.
CREATE OBJECT o1. SET PF-STATUS 'MAIN0100'.
SET TITLEBAR '001'. retcode = c_oi_errors=>ret_ok. IF bds_instance is initial.
CREATE OBJECT bds_instance.
ENDIF. IF factory is initial.
CALL METHOD c_oi_factory_creator=>get_document_factory
IMPORTING factory = factory
retcode = retcode.
IF retcode ne c_oi_errors=>ret_ok. EXIT. ENDIF. CALL METHOD factory->start_factory
EXPORTING r3_application_name =
'SAP Basis' "#EC NOTEXT
register_on_close_event = 'X'
register_on_custom_event = 'X'
IMPORTING retcode = retcode.
CALL METHOD c_oi_errors=>show_message EXPORTING type = 'E'. CALL METHOD factory->get_link_server
IMPORTING link_server = link_server
retcode = retcode.
CALL METHOD c_oi_errors=>show_message EXPORTING type = 'E'. CALL METHOD link_server->start_link_server
IMPORTING retcode = retcode.
CALL METHOD c_oi_errors=>show_message EXPORTING type = 'E'. CALL METHOD factory->get_document_proxy
EXPORTING document_type = document_type
IMPORTING document_proxy = document
retcode = retcode.
CALL METHOD c_oi_errors=>show_message EXPORTING type = 'E'. SET HANDLER c_event_handler=>close_event_handler FOR document.
SET HANDLER c_event_handler=>custom_event_handler FOR document.
* dynpro fields default
template = 'DEMOWORD97TEMPLATE'.
user = 'Ehre'. "#EC NOTEXT
company = 'SAP'. "#EC NOTEXT
macro = 'swap_color'. "#EC NOTEXT
event = 'event2'. "#EC NOTEXT
menubar = 'SAP Menu Bar'. "#EC NOTEXT
menu = 'SAP Menu'. "#EC NOTEXT
menuitem = 'Fire R/3 event'. "#EC NOTEXT
proposal = 'First Proposal'. "#EC NOTEXT
author = 'Ehre'. "#EC NOTEXT
comment = 'This is a comment'. "#EC NOTEXT PERFORM refresh_links. ENDIF. ENDMODULE. " STATUS_0100 OUTPUT *&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
CALL METHOD cl_gui_cfw=>dispatch. CASE fcode.
WHEN 'EXIT'. "Zurück
IF not document is initial.
PERFORM save_document TABLES data_table
USING 'X' 'X'
CHANGING data_size document retcode.
FREE document.
ENDIF.
IF not link_server is initial.
CALL METHOD link_server->stop_link_server
IMPORTING retcode = retcode.
FREE link_server.
ENDIF.
IF not factory is initial.
CALL METHOD factory->stop_factory IMPORTING retcode = retcode.
FREE factory.
ENDIF.
IF not bds_instance is initial.
FREE bds_instance.
ENDIF. LEAVE TO SCREEN 0. WHEN 'SELECT'.
IF not document is initial.
PERFORM save_document TABLES data_table
USING 'X' 'X'
CHANGING data_size document retcode.
ENDIF.
IF not factory is initial.
REFRESH documents.
descr-document_name =
'Office Integration Description'(do1).
descr-document_id = 'DEMOWORD97DOC'.
APPEND descr TO documents.
descr-document_name =
'Demo Document'(do2).
descr-document_id = 'DEMOWORD97DOC2'.
APPEND descr TO documents.
descr-document_name =
'Demo Document XP'(do3).
descr-document_id = 'DEMOWORDXPDOC2'.
APPEND descr TO documents. CLEAR doc_url.
PERFORM select_and_load_document
TABLES documents
USING 'Select Document'(sdo)
CHANGING document_type document_format doc_url. IF not doc_url is initial.
CALL METHOD document->open_document
EXPORTING document_url = doc_url
IMPORTING retcode = retcode.
CALL METHOD c_oi_errors=>show_message EXPORTING type = 'E'.
* Document shall also be available in ITAB for respective operations:
CALL METHOD document->save_document_to_table
IMPORTING retcode = retcode
CHANGING document_table = data_table
document_size = data_size.
CALL METHOD c_oi_errors=>show_message EXPORTING type = 'E'. first_open = false.
open_document = true. CALL METHOD document->execute_macro
EXPORTING macro_string = 'R3UpdateTables' "#EC NOTEXT
IMPORTING retcode = retcode.
ELSE.
MESSAGE e010.
ENDIF.
ENDIF. WHEN 'OPEN'.
IF first_open = true.
first_open = false. REFRESH documents.
descr-document_name =
'Office Integration Description'(do1).
descr-document_id = 'DEMOWORD97DOC'.
APPEND descr TO documents. PERFORM select_and_load_document
TABLES documents
USING 'Select Document'(sdo)
CHANGING document_type document_format doc_url.
CALL METHOD document->open_document
EXPORTING document_url = doc_url
IMPORTING retcode = retcode.
CALL METHOD c_oi_errors=>show_message EXPORTING type = 'E'.
* Document shall also be available in ITAB for respective operations:
CALL METHOD document->save_document_to_table
IMPORTING retcode = retcode
CHANGING document_table = data_table
document_size = data_size.
CALL METHOD c_oi_errors=>show_message EXPORTING type = 'E'. ELSE.
* open document stored in internal table data_table
DATA: is_closed TYPE i. CALL METHOD document->is_destroyed
IMPORTING ret_value = is_closed. IF is_closed is initial.
CALL METHOD document->close_document
EXPORTING do_save = 'X'
IMPORTING retcode = retcode.
CALL METHOD c_oi_errors=>show_message EXPORTING type = 'E'. CALL METHOD document->save_document_to_table
IMPORTING retcode = retcode
CHANGING document_table = data_table[]
document_size = data_size.
CALL METHOD c_oi_errors=>show_message EXPORTING type = 'E'.
ENDIF. CALL METHOD document->release_document
IMPORTING retcode = retcode. CALL METHOD document->open_document_from_table
EXPORTING document_table = data_table[]
document_size = data_size
IMPORTING retcode = retcode.
CALL METHOD c_oi_errors=>show_message EXPORTING type = 'E'.
ENDIF.
open_document = true.
CALL METHOD document->execute_macro
EXPORTING macro_string = 'R3UpdateTables' "#EC NOTEXT
IMPORTING retcode = retcode. WHEN 'REFRESH'.
IF not link_server is initial.
PERFORM refresh_links.
CALL METHOD document->execute_macro
EXPORTING macro_string = 'R3UpdateTables' "#EC NOTEXT
IMPORTING retcode = retcode.
ELSE.
MESSAGE e004.
ENDIF. WHEN 'SAVEAS'.
CALL METHOD document->save_as
EXPORTING file_name = ''
prompt_user = 'X'
IMPORTING retcode = retcode.
CALL METHOD c_oi_errors=>show_message EXPORTING type = 'E'. WHEN 'CLOSE'.
PERFORM save_document TABLES data_table
USING ' ' 'X'
CHANGING data_size document retcode.
open_document = false. WHEN 'COPYLINK'.
IF not link_server is initial.
PERFORM refresh_links. CALL METHOD link_server->execute_copy_link_dialog
IMPORTING retcode = retcode.
CALL METHOD c_oi_errors=>show_message EXPORTING type = 'E'.
ELSE.
MESSAGE e004.
ENDIF. WHEN 'INSTALL'.
DATA: wp_ref TYPE REF TO i_oi_word_processor_document. CHECK not document is initial and open_document = true.
CALL METHOD document->get_wordprocessor_interface
IMPORTING wp_interface = wp_ref
retcode = retcode.
IF retcode eq c_oi_errors=>ret_ok. CLEAR item_url.
CLEAR descr.
descr-document_id = template. PERFORM select_document
CHANGING descr-document_id
document_format
doc_url
document_mimetype.
item_url = doc_url.
CALL METHOD wp_ref->install_template
EXPORTING template_name = template
url = item_url
IMPORTING retcode = retcode.
FREE wp_ref.
CALL METHOD c_oi_errors=>show_message EXPORTING type = 'E'.
ELSE.
CALL METHOD c_oi_errors=>show_message EXPORTING type = 'E'.
ENDIF. WHEN 'EXECT'.
CHECK not document is initial and open_document = true.
CALL METHOD document->get_wordprocessor_interface
IMPORTING wp_interface = wp_ref
retcode = retcode.
IF retcode eq c_oi_errors=>ret_ok.
CALL METHOD wp_ref->set_template
EXPORTING template_name = template
IMPORTING retcode = retcode.
FREE wp_ref.
CALL METHOD c_oi_errors=>show_message EXPORTING type = 'E'.
ELSE.
CALL METHOD c_oi_errors=>show_message EXPORTING type = 'E'.
ENDIF. WHEN 'EXECS'.
CHECK not document is initial and open_document = true.
* straight ole automation
DATA: document_cntl_handle TYPE cntl_handle.
INCLUDE ole2incl.
DATA: ocharacters TYPE ole2_object,
orange TYPE ole2_object,
oreplacement TYPE ole2_object,
ofind TYPE ole2_object,
ofont TYPE ole2_object. DATA: char_count TYPE i,
char_position TYPE i,
old_search_string LIKE search,
string_found TYPE i,
color_index TYPE i. CALL METHOD document->get_document_handle
IMPORTING handle = document_cntl_handle
retcode = retcode.
CALL METHOD c_oi_errors=>show_message EXPORTING type = 'E'.
IF old_search_string ne search.
* get number of document characters.
GET PROPERTY OF document_cntl_handle-obj
'characters' = ocharacters.
GET PROPERTY OF ocharacters 'count' = char_count.
char_position = 0.
old_search_string = search.
ENDIF.
* set range now
IF char_position >= char_count.
char_position = 0.
ENDIF.
CALL METHOD OF document_cntl_handle-obj 'Range' = orange
EXPORTING #1 = char_position #2 = char_count.
* search now
GET PROPERTY OF orange 'Find' = ofind.
* set property of ofind 'Text' = search.
* set property of ofind 'Forward' = true.
* call method of ofind 'ClearFormatting'.
* IF NOT REPLACE IS INITIAL.
* GET PROPERTY OF OFIND 'Replacement' = OREPLACEMENT.
* SET PROPERTY OF OREPLACEMENT 'Text' = REPLACE.
* CALL METHOD OF OREPLACEMENT 'ClearFormatting'.
* ENDIF.
IF not replace is initial.
* replace
* CALL METHOD OF ofind 'Execute'
* EXPORTING #1 = search "FindText
* #2 = false "MatchCase
* #3 = false "MatchWholeWord
* #4 = false "MatchWildCards
* #5 = false "MatchSoundsLike
* #6 = true "MatchAllWordForms
* #7 = true "Forward
* #8 = '1' "Wrap
* #9 = true
* #91 = replace
* #92 = '2'.
* char_position = 0.
*BEGIN - Japaneese characters get garbled refer note 878178.
DATA: is_available type i. CALL METHOD document->has_wordprocessor_interface
IMPORTING is_available = is_available
retcode = retcode. IF is_available = 1 . CALL METHOD document->get_wordprocessor_interface
IMPORTING wp_interface = wp_ref
retcode = retcode. IF RETCODE EQ C_OI_ERRORS=>RET_OK. CALL METHOD wp_ref->replace
EXPORTING replace_string = replace
search_string = search
pos = 'GLOBAL'
flag = 'ALL'. ENDIF. ENDIF.
*END - Japaneese characters get garbled refer note 878178. ELSE.
*search
CALL METHOD OF ofind 'Execute'
EXPORTING #1 = search "FindText
#2 = false "MatchCase
#3 = false "MatchWholeWord
#4 = false "MatchWildCards
#5 = false "MatchSoundsLike
#6 = true "MatchAllWordForms
#7 = true "Forward
#8 = '1' "Wrap
#9 = true.
GET PROPERTY OF ofind 'Found' = string_found.
IF string_found > 0.
GET PROPERTY OF orange 'Font' = ofont.
GET PROPERTY OF ofont 'ColorIndex' = color_index.
IF color_index ne 6.
color_index = 6.
ELSE.
color_index = 11.
ENDIF.
SET PROPERTY OF ofont 'ColorIndex' = color_index.
ENDIF.
GET PROPERTY OF orange 'End' = char_position.
ENDIF.
* CALL METHOD DOCUMENT->GET_WORDPROCESSOR_INTERFACE
* IMPORTING WP_INTERFACE = WP_REF
* RETCODE = RETCODE.
* IF RETCODE EQ C_OI_ERRORS=>RET_OK.
* IF REPLACE IS INITIAL.
* CALL METHOD WP_REF->SEARCH
* EXPORTING SEARCH_STRING = SEARCH
* POS = '1'
* FLAG = SPACE
* importing RETCODE = RETCODE.
* ELSE.
* CALL METHOD WP_REF->REPLACE
* EXPORTING SEARCH_STRING = SEARCH
* POS = '1'
* FLAG = SPACE
* REPLACE_STRING = REPLACE
* importing RETCODE = RETCODE.
* ENDIF.
* CALL METHOD C_OI_ERRORS=>SHOW_MESSAGE EXPORTING TYPE = 'E'.
* FREE WP_REF.
* ELSE.
* CALL METHOD C_OI_ERRORS=>SHOW_MESSAGE EXPORTING TYPE = 'E'.
* ENDIF. WHEN 'EXECM'.
CHECK not document is initial and open_document = true.
CALL METHOD document->execute_macro
EXPORTING macro_string = macro
IMPORTING retcode = retcode.
CALL METHOD c_oi_errors=>show_message EXPORTING type = 'E'. WHEN 'CHANGE'.
CALL METHOD link_server->add_string_item
EXPORTING item_name = 'user'
item_value = user
IMPORTING retcode = retcode. CALL METHOD link_server->add_string_item
EXPORTING item_name = 'company'
item_value = company
IMPORTING retcode = retcode. WHEN 'ADDMBAR'.
CHECK not document is initial and open_document = true.
CALL METHOD document->add_menu_bar EXPORTING name = menubar
IMPORTING retcode = retcode.
CALL METHOD c_oi_errors=>show_message EXPORTING type = 'E'. WHEN 'ADDMENU'.
CHECK not document is initial and open_document = true.
CALL METHOD document->add_menu_popup
EXPORTING name = menu
menu_bar_name = menubar
insert_before_popup = 1
IMPORTING retcode = retcode.
CALL METHOD c_oi_errors=>show_message EXPORTING type = 'E'. WHEN 'ADDITEM'.
DATA: position(256).
CHECK not document is initial.
CALL METHOD document->add_menu_item EXPORTING
item_name = menuitem
menu_bar_name = menubar
menu_popup_name = menu
insert_before_item = 0
item_macro = event
IMPORTING retcode = retcode.
CALL METHOD c_oi_errors=>show_message EXPORTING type = 'E'. * just for straight ole automation
* data: document_cntl_handle type cntl_handle.
* include ole2incl.
* CALL METHOD DOCUMENT->GET_DOCUMENT_HANDLE
* IMPORTING HANDLE = DOCUMENT_CNTL_HANDLE
* RETCODE = RETCODE.
* CALL METHOD C_OI_ERRORS=>SHOW_MESSAGE EXPORTING TYPE = 'E'.
* CALL METHOD OF DOCUMENT_CNTL_HANDLE-OBJ .... ENDCASE. ENDMODULE. " USER_COMMAND_0100 INPUT *---------------------------------------------------------------------*
* FORM REFRESH_LINKS *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
FORM refresh_links.
IF not link_server is initial. CALL METHOD link_server->add_string_item
EXPORTING item_name = 'Project Name' "#EC NOTEXT
item_value = project_name
no_flush = 'X'
IMPORTING retcode = retcode. CALL METHOD link_server->add_string_item
EXPORTING item_name = 'Topic' "#EC NOTEXT
item_value = project_topic
no_flush = 'X'
IMPORTING retcode = retcode. CALL METHOD link_server->add_string_item
EXPORTING item_name = 'Department' "#EC NOTEXT
item_value = department
no_flush = 'X'
IMPORTING retcode = retcode. CALL METHOD link_server->add_string_item
EXPORTING item_name = 'Author' "#EC NOTEXT
item_value = author
no_flush = 'X'
IMPORTING retcode = retcode. CALL METHOD link_server->add_string_item
EXPORTING item_name = 'Distribution List' "#EC NOTEXT
item_value = distr_list
no_flush = 'X'
IMPORTING retcode = retcode. CALL METHOD link_server->add_string_item
EXPORTING item_name = 'User' "#EC NOTEXT
item_value = user
no_flush = 'X'
IMPORTING retcode = retcode. CALL METHOD link_server->add_string_item
EXPORTING item_name = 'Company' "#EC NOTEXT
item_value = company
no_flush = 'X'
IMPORTING retcode = retcode. DATA: int TYPE i VALUE 100.
CALL METHOD link_server->add_string_item
EXPORTING item_name = 'Number' "#EC NOTEXT
item_value = int
no_flush = 'X'
IMPORTING retcode = retcode. DATA: date TYPE d VALUE '19961231'.
CALL METHOD link_server->add_string_item
EXPORTING item_name = 'Date' "#EC NOTEXT
item_value = date
no_flush = ' '
IMPORTING retcode = retcode. REFRESH points.
points-proposal = proposal.
points-lastname = author.
points-comment = comment.
APPEND points.
points-proposal = 'Second Proposal'.
points-lastname = 'Neuendorf'. "#EC NOTEXT
points-comment = '017299'.
APPEND points.
points-proposal = 'Third Proposal'.
points-lastname = 'Kolb'. "#EC NOTEXT
points-comment = '004711'.
APPEND points.
points-proposal = 'Conclusion'.
points-lastname = 'Kretschmer'. "#EC NOTEXT
points-comment = '000001'.
APPEND points. CALL METHOD link_server->add_table_item2
EXPORTING item_name = 'Agenda' "#EC NOTEXT
IMPORTING retcode = retcode
CHANGING data_table = points[]. CLEAR item_url.
CLEAR descr.
descr-document_name = 'RTF Logo'. "#EC NOTEXT
descr-document_id = 'DEMOWORD97RTF1'. "#EC NOTEXT PERFORM select_document
CHANGING descr-document_id
document_format
doc_url
document_mimetype.
item_url = doc_url.
SPLIT document_mimetype AT delimiter INTO data_type data_subtype.
CALL METHOD link_server->add_binary_item
EXPORTING item_name = 'RTF Item' "#EC NOTEXT
table_url = item_url
data_type = soi_type_application
data_subtype = soi_subtype_rtf
IMPORTING retcode = retcode. CLEAR: item_url.
CLEAR descr.
descr-document_name = 'SAP LOGO'.
descr-document_id = 'DEMOWORD97SAPLOGO'. PERFORM select_document
CHANGING descr-document_id
document_format
doc_url
document_mimetype.
item_url = doc_url.
SPLIT document_mimetype AT delimiter INTO data_type data_subtype.
CALL METHOD link_server->add_binary_item
EXPORTING item_name = 'SAPLogo'
item_title = 'SAP Logo' "#EC NOTEXT
table_url = item_url
data_type = soi_type_image
data_subtype = soi_subtype_gif
IMPORTING retcode = retcode. ENDIF.
ENDFORM. *---------------------------------------------------------------------*
* FORM SAVE_DOCUMENT *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
* --> DOC_TABLE *
* --> DO_ASK *
* --> DO_RELEASE *
* --> DOC_SIZE *
* --> DOCUMENT *
* --> TO *
* --> I_OI_DOCUMENT_PROXY *
* --> RETCODE *
*---------------------------------------------------------------------*
FORM save_document TABLES doc_table TYPE table
USING do_ask TYPE c do_release TYPE c
CHANGING doc_size TYPE i
document TYPE REF TO i_oi_document_proxy
retcode TYPE t_oi_ret_string. DATA: is_closed TYPE i, answer TYPE c, has_changed TYPE i. CALL METHOD document->is_destroyed IMPORTING ret_value = is_closed. IF is_closed is initial.
CALL METHOD document->close_document
EXPORTING do_save = 'X'
IMPORTING has_changed = has_changed
retcode = retcode.
CALL METHOD c_oi_errors=>show_message EXPORTING type = 'E'.
ENDIF. IF not has_changed is initial.
IF not do_ask is initial.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
titlebar = 'Office Integration Demo'(oid)
text_question = 'Save Document?'(sav)
display_cancel_button = ' '
IMPORTING
answer = answer.
ELSE.
answer = '1'.
ENDIF. IF answer eq '1'.
CALL METHOD document->save_document_to_table
IMPORTING retcode = retcode
CHANGING document_table = doc_table[]
document_size = doc_size.
CALL METHOD c_oi_errors=>show_message EXPORTING type = 'E'.
ENDIF.
ENDIF. IF not do_release is initial.
CALL METHOD document->release_document
IMPORTING retcode = retcode.
ENDIF.
ENDFORM.
*=======================================================================
*=======================================================================
FORM select_document
CHANGING document_id TYPE c
document_format TYPE c
doc_url TYPE t_url
document_mimetype TYPE bapicompon-mimetype. * Tables and WAs:
DATA: doc_signature TYPE sbdst_signature,
wa_doc_signature LIKE LINE OF doc_signature,
doc_components TYPE sbdst_components,
wa_doc_components LIKE LINE OF doc_components,
doc_uris TYPE sbdst_uri,
wa_doc_uris LIKE LINE OF doc_uris.
* IDs:
DATA: doc_classname TYPE sbdst_classname VALUE 'SOFFICEINTEGRATION',
doc_classtype TYPE sbdst_classtype VALUE 'OT',
doc_object_key TYPE sbdst_object_key VALUE 'SOFFICEINTEGRATION',
doc_mimetype LIKE bapicompon-mimetype.
*----------------------------------------------------------------------- CLEAR: wa_doc_signature, wa_doc_components, wa_doc_uris.
REFRESH: doc_signature, doc_components, doc_uris. wa_doc_signature-prop_name = 'DESCRIPTION'.
wa_doc_signature-prop_value = descr-document_id.
APPEND wa_doc_signature TO doc_signature. CALL METHOD bds_instance->get_info
EXPORTING classname = doc_classname
classtype = doc_classtype
object_key = doc_object_key
CHANGING components = doc_components
signature = doc_signature
EXCEPTIONS nothing_found = 1
error_kpro = 2
internal_error = 3
parameter_error = 4
not_authorized = 5
not_allowed = 6.
IF sy-subrc ne 0 and sy-subrc ne 1.
MESSAGE e016.
ENDIF.
IF sy-subrc = 1.
MESSAGE e017.
ENDIF. CALL METHOD bds_instance->get_with_url
EXPORTING classname = doc_classname
classtype = doc_classtype
object_key = doc_object_key
CHANGING uris = doc_uris
signature = doc_signature
EXCEPTIONS nothing_found = 1
error_kpro = 2
internal_error = 3
parameter_error = 4
not_authorized = 5
not_allowed = 6.
IF sy-subrc ne 0 and sy-subrc ne 1.
MESSAGE e016.
ENDIF.
IF sy-subrc = 1.
MESSAGE e017.
ENDIF. READ TABLE doc_components INTO wa_doc_components INDEX 1.
READ TABLE doc_uris INTO wa_doc_uris INDEX 1.
doc_mimetype = wa_doc_components-mimetype.
doc_url = wa_doc_uris-uri. CASE doc_mimetype.
WHEN 'application/x-rtf' OR 'text/rtf'.
document_format = soi_docformat_rtf.
WHEN 'application/x-oleobject'.
document_format = soi_docformat_compound.
WHEN 'text/plain'.
document_format = soi_docformat_text.
WHEN OTHERS.
document_format = soi_docformat_native.
ENDCASE. ENDFORM.
*=======================================================================
*=======================================================================
FORM select_and_load_document
TABLES documents
USING dialog_title TYPE c
CHANGING document_type TYPE c
document_format TYPE c
doc_url TYPE t_url.
* Tables and WAs:
DATA: doc_signature TYPE sbdst_signature,
wa_doc_signature LIKE LINE OF doc_signature,
doc_components TYPE sbdst_components,
wa_doc_components LIKE LINE OF doc_components,
doc_properties TYPE sbdst_properties,
wa_doc_properties LIKE LINE OF doc_properties,
doc_uris TYPE sbdst_uri,
wa_doc_uris LIKE LINE OF doc_uris.
* IDs:
DATA: doc_classname TYPE sbdst_classname VALUE 'SOFFICEINTEGRATION',
doc_classtype TYPE sbdst_classtype VALUE 'OT',
doc_object_key TYPE sbdst_object_key VALUE 'SOFFICEINTEGRATION',
doc_mimetype LIKE bapicompon-mimetype.
*----------------------------------------------------------------------- DATA: field_desc LIKE rsvbfidesc OCCURS 1 WITH HEADER LINE.
DATA: l_nr LIKE sy-tabix. REFRESH field_desc.
field_desc-fieldnum = 1.
field_desc-display = 'X'.
APPEND field_desc. l_nr = 0.
CALL FUNCTION 'RS_VALUES_BOX'
EXPORTING
left_upper_col = 5
left_upper_row = 5
pagesize = 10
title = dialog_title
IMPORTING
linenumber = l_nr
TABLES
field_desc = field_desc
value_tab = documents
EXCEPTIONS
OTHERS = 1. IF sy-subrc eq 0 and l_nr ne 0.
READ TABLE documents INDEX l_nr INTO descr.
IF sy-subrc eq 0.
CLEAR: wa_doc_signature, wa_doc_components, wa_doc_uris.
REFRESH: doc_signature, doc_components, doc_uris. wa_doc_signature-prop_name = 'DESCRIPTION'.
wa_doc_signature-prop_value = descr-document_id.
APPEND wa_doc_signature TO doc_signature. CALL METHOD bds_instance->get_info
EXPORTING classname = doc_classname
classtype = doc_classtype
object_key = doc_object_key
CHANGING components = doc_components
signature = doc_signature
EXCEPTIONS nothing_found = 1
error_kpro = 2
internal_error = 3
parameter_error = 4
not_authorized = 5
not_allowed = 6.
IF sy-subrc ne 0 and sy-subrc ne 1.
MESSAGE e016.
ENDIF.
IF sy-subrc = 1.
MESSAGE e017.
ENDIF. CALL METHOD bds_instance->get_with_url
EXPORTING classname = doc_classname
classtype = doc_classtype
object_key = doc_object_key
CHANGING uris = doc_uris
signature = doc_signature
EXCEPTIONS nothing_found = 1
error_kpro = 2
internal_error = 3
parameter_error = 4
not_authorized = 5
not_allowed = 6.
IF sy-subrc ne 0 and sy-subrc ne 1.
MESSAGE e016.
ENDIF.
IF sy-subrc = 1.
MESSAGE e017.
ENDIF. READ TABLE doc_components INTO wa_doc_components INDEX 1.
READ TABLE doc_uris INTO wa_doc_uris INDEX 1.
doc_mimetype = wa_doc_components-mimetype.
document_mimetype = doc_mimetype.
doc_url = wa_doc_uris-uri. CASE doc_mimetype.
WHEN 'application/x-rtf' OR 'text/rtf'.
document_format = soi_docformat_rtf.
WHEN 'application/x-oleobject'.
document_format = soi_docformat_compound.
WHEN 'text/plain'.
document_format = soi_docformat_text.
WHEN OTHERS.
document_format = soi_docformat_native.
ENDCASE. ENDIF.
ENDIF. ENDFORM.
*=======================================================================
*----------------------------------------------------------------------*
* INCLUDE RDEMOWORD97INTEGRATIONTOP *
*----------------------------------------------------------------------*
REPORT SAPRDEMOWORD97INTEGRATION MESSAGE-ID DEMOOFFICEINTEGRATIO. CONSTANTS: TRUE VALUE 1, FALSE VALUE 0. TYPES: BEGIN OF DOCUMENT_DESCR,
DOCUMENT_NAME(40), DOCUMENT_ID(64),
END OF DOCUMENT_DESCR. TYPES: DOCUMENT_LIST TYPE DOCUMENT_DESCR OCCURS 0. TYPES: T_URL LIKE BAPIURI-URI. * dynpro 100 fields:
DATA: TEMPLATE(30),SEARCH(19), USER(19), COMPANY(19),
MACRO(19), MENU(19), MENUITEM(19),MENUBAR(19), EVENT(19).
DATA: REPLACE LIKE SEARCH. DATA: CURRENTMENUBAR LIKE MENUBAR, CURRENTMENU LIKE MENU,
OPEN_DOCUMENT(1).
DATA: ITEM_URL TYPE T_URL. DATA: PROJECT_NAME(80) VALUE 'Office Integration', "#EC NOTEXT
PROJECT_TOPIC(80) VALUE 'Word97 Integration', "#EC NOTEXT
DEPARTMENT(40) VALUE 'SAP AG', "#EC NOTEXT
AUTHOR(30) VALUE 'Ehre', "#EC NOTEXT
DISTR_LIST(30) VALUE 'SAP01',
PROPOSAL(40), COMMENT(128). SET SCREEN 100. TYPE-POOLS: SBDST. INCLUDE OFFICEINTEGRATIONINCLUDE. DATA: FCODE LIKE SY-UCOMM.
*----------------------------------------------------------------------*
* INCLUDE OFFICEINTEGRATIONINCLUDE *
*----------------------------------------------------------------------* TYPE-POOLS: SOI.
TYPE-POOLS: CNDP. CLASS C_OI_ERRORS DEFINITION LOAD.
CLASS CL_GUI_CFW DEFINITION LOAD. INCLUDE OFFICEINTEGRATIONINTERFACES.
INCLUDE OFFICEINTEGRATIONOLECREATOR.
INCLUDE OFFICEINTEGRATIONOLECLASSESIMP.
*----------------------------------------------------------------------*
* INCLUDE OFFICEINTEGRATIONINTERFACES *
*----------------------------------------------------------------------* TYPES: T_OI_RET_STRING TYPE SOI_RET_STRING,
T_OI_CUSTOM_PARAM TYPE SOI_CUSTOM_PARAM.
TYPES: T_OI_MESSAGE_PARAM(50) TYPE C.
TYPES: T_OI_PROXY_ERROR_CODE TYPE I. TYPES: T_OI_FIELDS_TABLE TYPE STANDARD TABLE OF RFC_FIELDS.
TYPES: T_OI_PROPERTIES_TABLE TYPE STANDARD TABLE OF DPPROPS. CLASS CL_GUI_CFW DEFINITION LOAD. INTERFACE I_OI_DOCUMENT_FACTORY.
CONSTANTS:
DOCUMENT_FORMAT_COMPOUND(3) TYPE C VALUE 'OLE',
DOCUMENT_FORMAT_NATIVE(6) TYPE C VALUE 'NATIVE',
DOCUMENT_FORMAT_RTF(3) TYPE C VALUE 'RTF',
DOCUMENT_FORMAT_TEXT(4) TYPE C VALUE 'TEXT'. METHODS: START_FACTORY
IMPORTING R3_APPLICATION_NAME TYPE C
VALUE(REP_ID) TYPE SY-REPID DEFAULT SY-REPID
VALUE(DYNPRO_NR) TYPE SY-DYNNR
DEFAULT SY-DYNNR
REGISTER_ON_CLOSE_EVENT TYPE C DEFAULT ' '
REGISTER_ON_CUSTOM_EVENT TYPE C DEFAULT ' '
VALUE(NO_FLUSH) TYPE C DEFAULT ' '
EXPORTING RETCODE TYPE SOI_RET_STRING
ERROR TYPE REF TO I_OI_ERROR. METHODS: STOP_FACTORY
IMPORTING EXIT_CONTROL_MANAGER TYPE C DEFAULT ' '
VALUE(NO_FLUSH) TYPE C DEFAULT ' '
EXPORTING RETCODE TYPE SOI_RET_STRING
ERROR TYPE REF TO I_OI_ERROR. METHODS: LINK_FACTORY
IMPORTING VALUE(REP_ID) TYPE SY-REPID
VALUE(DYNPRO_NR) TYPE SY-DYNNR
VALUE(NO_FLUSH) TYPE C DEFAULT ' '
EXPORTING RETCODE TYPE SOI_RET_STRING
ERROR TYPE REF TO I_OI_ERROR. METHODS: GET_DOCUMENT_PROXY
IMPORTING DOCUMENT_TYPE TYPE C
DOCUMENT_FORMAT TYPE C DEFAULT 'NATIVE'
REGISTER_CONTAINER TYPE C DEFAULT ' '
VALUE(NO_FLUSH) TYPE C DEFAULT ' '
EXPORTING DOCUMENT_PROXY TYPE REF TO I_OI_DOCUMENT_PROXY
RETCODE TYPE SOI_RET_STRING
ERROR TYPE REF TO I_OI_ERROR. METHODS: GET_LINK_SERVER
IMPORTING SERVER_TYPE TYPE C DEFAULT ' '
VALUE(NO_FLUSH) TYPE C DEFAULT ' '
EXPORTING LINK_SERVER TYPE REF TO I_OI_LINK_SERVER
RETCODE TYPE SOI_RET_STRING
ERROR TYPE REF TO I_OI_ERROR. METHODS: GET_TABLE_COLLECTION
IMPORTING VALUE(NO_FLUSH) TYPE C DEFAULT ' '
EXPORTING TABLE_COLLECTION TYPE
REF TO I_OI_TABLE_COLLECTION
RETCODE TYPE SOI_RET_STRING
ERROR TYPE REF TO I_OI_ERROR. METHODS: GET_REGISTERED_DOC_TYPES
IMPORTING INTERFACE_TYPE TYPE C DEFAULT ' '
VALUE(NO_FLUSH) TYPE C DEFAULT ' '
EXPORTING DESCR_LIST TYPE SOI_DOCUMENT_TYPE_DESCR_LIST
RETCODE TYPE SOI_RET_STRING
ERROR TYPE REF TO I_OI_ERROR. METHODS: CHECK_REGISTERED_DOC_TYPES
IMPORTING VALUE(NO_FLUSH) TYPE C DEFAULT ' '
EXPORTING ERROR TYPE REF TO I_OI_ERROR
CHANGING DESCR_LIST TYPE SOI_DOCUMENT_TYPE_DESCR_LIST
RETCODE TYPE SOI_RET_STRING.
ENDINTERFACE.
*----------------------------------------------------------------------*

CLASS C_OI_OLE_CONTROL_CREATOR DEFINITION.
PUBLIC SECTION.
CLASS-METHODS: GET_OLE_CONTAINER_CONTROL
EXPORTING CONTROL TYPE REF TO I_OI_OLE_CONTAINER_CONTROL
RETCODE TYPE SOI_RET_STRING
ERROR TYPE REF TO I_OI_ERROR.
ENDCLASS. CLASS C_OI_FACTORY_CREATOR DEFINITION.
PUBLIC SECTION.
CONSTANTS:
FACTORY_TYPE_OLE(3) TYPE C VALUE 'OLE',
FACTORY_TYPE_PORTABLE(8) TYPE C VALUE 'PORTABLE'. CLASS-METHODS: GET_DOCUMENT_FACTORY
IMPORTING FACTORY_TYPE TYPE C DEFAULT 'PORTABLE'
EXPORTING FACTORY TYPE REF TO I_OI_DOCUMENT_FACTORY
RETCODE TYPE SOI_RET_STRING
ERROR TYPE REF TO I_OI_ERROR.
ENDCLASS. CLASS C_OI_OLE_DOCUMENT_FACTORY DEFINITION.
PUBLIC SECTION.
INTERFACES: I_OI_DOCUMENT_FACTORY. PRIVATE SECTION.
DATA: CONTAINER_CONTROL TYPE REF TO I_OI_OLE_CONTAINER_CONTROL.
ENDCLASS.
*----------------------------------------------------------------------*
* INCLUDE OFFICEINTEGRATIONIMPL *
*----------------------------------------------------------------------* CLASS c_oi_factory_creator IMPLEMENTATION.
METHOD get_document_factory.
* IMPORTING factory_type TYPE c
* EXPORTING factory TYPE REF TO i_oi_document_factory
* retcode TYPE c.
DATA: olefactoryobj TYPE REF TO c_oi_ole_document_factory.
DATA: has_activex,has_javabean. * DATA: WINSYS TYPE OLELOAD-WINSYS.
* determine window system
* CALL FUNCTION 'WS_QUERY'
* EXPORTING QUERY = 'WS'
* IMPORTING RETURN = WINSYS.
* CASE WINSYS.
* WHEN 'WN32'.
* CREATE OBJECT OLEFACTORYOBJ.
* FACTORY = OLEFACTORYOBJ.
* RETCODE = C_OI_ERRORS=>RET_OK.
* WHEN 'JAVA'.
* CREATE OBJECT OLEFACTORYOBJ.
* FACTORY = OLEFACTORYOBJ.
* RETCODE = C_OI_ERRORS=>RET_OK.
* WHEN 'PLAT'.
* CREATE OBJECT OLEFACTORYOBJ.
* FACTORY = OLEFACTORYOBJ.
* RETCODE = C_OI_ERRORS=>RET_OK.
* WHEN OTHERS.
* RETCODE = C_OI_ERRORS=>RET_ERROR.
* ENDCASE. CALL FUNCTION 'GUI_HAS_ACTIVEX'
IMPORTING
return = has_activex. CALL FUNCTION 'GUI_HAS_JAVABEANS'
IMPORTING
return = has_javabean. IF ( NOT has_activex IS INITIAL ) OR
( NOT has_javabean IS INITIAL ).
CREATE OBJECT olefactoryobj.
factory = olefactoryobj.
retcode = c_oi_errors=>ret_ok.
ELSE.
retcode = c_oi_errors=>ret_error.
ENDIF. CALL METHOD c_oi_errors=>create_error_for_retcode
EXPORTING retcode = retcode
no_flush = ' '
IMPORTING error = error.
ENDMETHOD.
ENDCLASS. CLASS c_oi_ole_control_creator IMPLEMENTATION.
METHOD get_ole_container_control.
* EXPORTING control TYPE REF TO i_oi_container_control
* retcode TYPE t_oi_ret_string.
DATA: l_control TYPE REF TO i_oi_container_control. CALL METHOD c_oi_container_control_creator=>get_container_control
IMPORTING control = l_control
retcode = retcode
error = error.
control ?= l_control. ENDMETHOD.
ENDCLASS. CLASS c_oi_ole_document_factory IMPLEMENTATION.
METHOD i_oi_document_factory~start_factory.
* IMPORTING r3_application_name TYPE c
* value(rep_id) type sy-repid default sy-repid
* value(dynpro_nr) type sy-dynnr
* default sy-dynnr
* register_on_close_event type c default ' '
* register_on_custom_event type c default ' '
* RETURNING value(retcode) TYPE c.
IF container_control IS INITIAL.
CALL METHOD c_oi_ole_control_creator=>get_ole_container_control
IMPORTING control = container_control
retcode = retcode.
IF retcode EQ c_oi_errors=>ret_ok.
CALL METHOD container_control->init_control
EXPORTING r3_application_name = r3_application_name
inplace_mode = 0
rep_id = rep_id
shell_style = cl_gui_control=>ws_child
dynpro_nr = dynpro_nr
parent = cl_gui_container=>default_screen
register_on_close_event = register_on_close_event
register_on_custom_event =
register_on_custom_event
no_flush = no_flush
IMPORTING retcode = retcode
error = error.
ELSE.
CALL METHOD c_oi_errors=>create_error_for_retcode
EXPORTING retcode = retcode
no_flush = no_flush
IMPORTING error = error.
ENDIF.
ELSE. " already created
retcode = c_oi_errors=>ret_ok.
CALL METHOD c_oi_errors=>create_error_for_retcode
EXPORTING retcode = retcode
no_flush = no_flush
IMPORTING error = error.
ENDIF.
ENDMETHOD. METHOD i_oi_document_factory~stop_factory.
* IMPORTING exit_control_manager TYPE c DEFAULT 'X'
* RETURNING value(retcode) TYPE c.
IF NOT container_control IS INITIAL.
CALL METHOD container_control->destroy_control
EXPORTING no_flush = no_flush
IMPORTING retcode = retcode
error = error.
ELSE. " already destroyed
retcode = c_oi_errors=>ret_ok.
CALL METHOD c_oi_errors=>create_error_for_retcode
EXPORTING retcode = retcode
no_flush = no_flush
IMPORTING error = error.
ENDIF.
ENDMETHOD. METHOD i_oi_document_factory~link_factory.
* IMPORTING value(rep_id) LIKE sy-repid
* value(dynpro_nr) LIKE sy-dynnr
* RETURNING value(retcode) TYPE t_oi_ret_string.
IF NOT container_control IS INITIAL.
CALL METHOD container_control->link_control
EXPORTING rep_id = rep_id
dynpro_nr = dynpro_nr
no_flush = no_flush
IMPORTING retcode = retcode
error = error.
ELSE.
retcode = c_oi_errors=>ret_object_not_initialized.
CALL METHOD c_oi_errors=>create_error_for_retcode
EXPORTING retcode = retcode
no_flush = no_flush
IMPORTING error = error.
ENDIF.
ENDMETHOD. METHOD i_oi_document_factory~get_document_proxy.
* IMPORTING document_type TYPE c
* EXPORTING document_proxy TYPE
* REF TO i_oi_document_proxy
* retcode TYPE c.
IF NOT container_control IS INITIAL.
CALL METHOD container_control->get_document_proxy
EXPORTING document_type = document_type
document_format = document_format
register_container = register_container
no_flush = no_flush
IMPORTING document_proxy = document_proxy
retcode = retcode
error = error.
ELSE.
retcode = c_oi_errors=>ret_object_not_initialized.
CALL METHOD c_oi_errors=>create_error_for_retcode
EXPORTING retcode = retcode
no_flush = no_flush
IMPORTING error = error.
ENDIF.
ENDMETHOD. METHOD i_oi_document_factory~get_link_server.
* IMPORTING server_type TYPE c DEFAULT ' '
* EXPORTING link_server TYPE REF TO i_oi_link_server
* retcode TYPE t_oi_ret_string.
IF NOT container_control IS INITIAL.
CALL METHOD container_control->get_link_server
EXPORTING server_type = server_type
no_flush = no_flush
IMPORTING link_server = link_server
retcode = retcode
error = error.
ELSE.
retcode = c_oi_errors=>ret_object_not_initialized.
CALL METHOD c_oi_errors=>create_error_for_retcode
EXPORTING retcode = retcode
no_flush = no_flush
IMPORTING error = error.
ENDIF.
ENDMETHOD. METHOD i_oi_document_factory~get_table_collection.
* EXPORTING table_collection TYPE
* REF TO i_oi_table_collection
* retcode TYPE t_oi_ret_string.
IF NOT container_control IS INITIAL.
CALL METHOD container_control->get_table_collection
EXPORTING no_flush = no_flush
IMPORTING table_collection = table_collection
retcode = retcode
error = error.
ELSE.
retcode = c_oi_errors=>ret_object_not_initialized.
CALL METHOD c_oi_errors=>create_error_for_retcode
EXPORTING retcode = retcode
no_flush = no_flush
IMPORTING error = error.
ENDIF.
ENDMETHOD. METHOD i_oi_document_factory~get_registered_doc_types.
* IMPORTING interface_type TYPE c DEFAULT ' '
* EXPORTING descr_list TYPE t_oi_interface_descr_list
* retcode TYPE t_oi_ret_string.
IF NOT container_control IS INITIAL.
CALL METHOD container_control->get_registered_doc_types
EXPORTING interface_type = interface_type
no_flush = no_flush
IMPORTING descr_list = descr_list
retcode = retcode
error = error.
ELSE.
retcode = c_oi_errors=>ret_object_not_initialized.
CALL METHOD c_oi_errors=>create_error_for_retcode
EXPORTING retcode = retcode
no_flush = no_flush
IMPORTING error = error.
ENDIF.
ENDMETHOD. METHOD i_oi_document_factory~check_registered_doc_types.
* CHANGING descr_list TYPE t_oi_interface_descr_list
* retcode TYPE t_oi_ret_string.
IF NOT container_control IS INITIAL.
CALL METHOD container_control->check_registered_doc_types
EXPORTING no_flush = no_flush
IMPORTING error = error
CHANGING descr_list = descr_list
retcode = retcode.
ELSE.
retcode = c_oi_errors=>ret_object_not_initialized.
CALL METHOD c_oi_errors=>create_error_for_retcode
EXPORTING retcode = retcode
no_flush = no_flush
IMPORTING error = error.
ENDIF.
ENDMETHOD.
ENDCLASS.
***INCLUDE OLE2INCL.
TYPE-POOLS OLE2 .

SAP Word97 Intergration的更多相关文章

  1. SAP PI入门

    本教程的目的是让读者理解:SAP Process Intergration(以下简称SAP PI)是什么.我们不需要探究课题的本质,但是会讨论SAP PI的架构和不同特点.本文只会覆盖到PI的基本特点 ...

  2. SAP Office Excel Intergration

    *&---------------------------------------------------------------------* *& Report DEMOEXCEL ...

  3. SAP CRM 性能小技巧

    导言 本页面打算收集SAP CRM实施中可以用于避免性能问题的注意事项,重要的事项会由图标标识. 如果你有其他的技巧想要说出来,别犹豫! 性能注意事项 通用 缓存读取类访问,特别是在性能关键的地方,比 ...

  4. SAP CRM 树视图(TREE VIEW)

    树视图可以用于表示数据的层次. 例如:SAP CRM中的组织结构数据可以表示为树视图. 在SAP CRM Web UI的术语当中,没有像表视图(table view)或者表单视图(form view) ...

  5. SAP CRM 显示消息/在消息中进行导航

    向用户展示消息,在任何软件中都是十分重要的. 在SAP CRM WEB UI中展示消息,不是一项很难的任务,只需要创建消息并在之后调用方法来显示它 消息类和消息号: 我在SE91中创建了如下的消息类和 ...

  6. BPM与 SAP & Oracle EBS集成解决方案分享

    一.需求分析 SAP和Oracle EBS都是作为全球顶级的的ERP产 品,得到了众多客户的青睐.然而由于系统庞大.价格昂贵以及定位不同,客户在实施过程中经常会面临以下困惑: 1.SAP如何实现&qu ...

  7. 【SAP业务模式】之ICS(四):组织单元的配置

    SAP的ICS业务后台配置主要有以下几个配置点: 1.组织单元的配置(公司代码.销售组织.工厂.采购组织等): 2.主数据的部分: 3.订单和开票的定价过程: 4.开票输出类型: 5.公司间发票的配置 ...

  8. 【SAP业务模式】之ICS(三):前台操作

    本片博文开始讲解SAP前台是如何实现ICS业务模式的. 一.VA01开立销售订单 我这里为了方便,创建了一个订单类型ZMIV作为公司间销售的订单类型,其实公司间销售订单跟标准的销售订单是一致的.同时, ...

  9. 【SAP业务模式】之ICS(一):业务详述

    PS:本专题系列讲述如何在SAP系统中实现ICS的业务模式,本系列博文系原创,如要转载引用,请保持原文一致并注明出处! SAP系统自身功能非常强大,支持多种业务模式,通过前台后台的配置就可以实现多种效 ...

随机推荐

  1. 函数 装饰器 python

    今日内容概要 1.闭包函数 2.闭包函数的实际应用 3.装饰器简介(重点加难点) 4.简易版本装饰器 5.进阶版本装饰器 6.完整版本装饰器 7.装饰器模板(拷贝使用即可) 8.装饰器语法糖 9.装饰 ...

  2. OpenHarmony标准设备应用开发(二)——布局、动画与音乐

    (以下内容来自开发者分享,不代表 OpenHarmony 项目群工作委员会观点) 邢碌 上一章我们讲解了应用编译环境准备,设备编译环境准备,开发板烧录,将一个最简单的 OpenAtom OpenHar ...

  3. Promise了解

    Promise是一个构造函数,excutor是他的执行函数,同时也是构造函数的参数. new Promise(excutor) excutor有两个参数(resolve,reject) Promise ...

  4. Java语言学习day17--7月23日

    1.面向对象思想2.类与对象的关系3.局部变量和成员变量的关系4.封装思想5.private,this关键字6.随机点名器 ###01面向对象和面向过程的思想 * A: 面向过程与面向对象都是我们编程 ...

  5. go 中 select 源码阅读

    深入了解下 go 中的 select 前言 1.栗子一 2.栗子二 3.栗子三 看下源码实现 1.不存在 case 2.select 中仅存在一个 case 3.select 中存在两个 case,其 ...

  6. 原生js 复选框全选案例

    注 : 本文章主要写功能 代码示例 : <body> <input type="checkbox" id="che" /><br& ...

  7. JavaWeb和WebGIS学习笔记(四)——使用uDig美化地图,并叠加显示多个图层

    系列链接: Java web与web gis学习笔记(一)--Tomcat环境搭建 Java web与web gis学习笔记(二)--百度地图API调用 JavaWeb和WebGIS学习笔记(三)-- ...

  8. Java 8的18个常用日期处理

    Java 8的18个常用日期处理 一.简介 伴随 lambda表达式.streams 以及一系列小优化,Java 8 推出了全新的日期时间API. Java处理日期.日历和时间的不足之处:将 java ...

  9. Oracle 错误表

    ORA-00001: 违反唯一约束条件 (.) ORA-00017: 请求会话以设置跟踪事件 ORA-00018: 超出最大会话数 ORA-00019: 超出最大会话许可数 ORA-00020: 超出 ...

  10. Python 迭代器、生成器、可迭代对象

    迭代器 1 #迭代器定义: 2 #类中得有__iter__和__next__两个方法 3 #__iter__方法放回对象本身,即:self(是迭代器对象) 4 #__next__方法,返回下一个数据, ...