String concatenate
i am trying to concatenate the string with a ; if it is not present.
But i am getting error...PLS-00363
Can somebody help me. Is there any other way of doing this.
Procedure Servstr(String1 IN varchar2 ......)
Begin
select nvl( nvl(length (String1),0) - nvl(length (replace (String1,';')),0),0) into v_cnt from dual;
If v_cnt<1 Then
String1:=String1||';';
End If;
End;
......
Hi,
If String1 is na IN parameter, then you can't change it.
Depending on what you want to do, you can make a local variable that starts out as a copy of String1, but can be changed. Declare it like this:
local_String1 VARCHAR2 (32767) := String1;
sunil_dba wrote:i am trying to concatenate the string with a ; if it is not present.
But i am getting error...PLS-00363
Can somebody help me. Is there any other way of doing this.
Procedure Servstr(String1 IN varchar2 ......)
Begin
select nvl( nvl(length (String1),0) - nvl(length (replace (String1,';')),0),0) into v_cnt from dual;In PL/SQL, you don't have to use the dual table very much.
The statement above can be done like this:
v_cnt := LENGTH ('X' || String1)
- LENGTH (REPLACE ( 'X' || String1
);Concatenating the 'X' guartantees that LENGTH will never return NULL.
Starting in Oracle 11, you can use REGEXP_COUNT to make it even simpler:
v_cnt := REGEXP_COUNT (String1, ';');However, if the only reason you are calculating v_cnt is to see if String1 contains a ';' or not, you can simply say
IF String1 LIKE '%;%' THEN
...
Similar Messages
-
Hex string and normal string concatenat​e issue
Hello,
what i have is a hex string and a normal string which i want to concatenate into one string. the problem is that in the output concatenated string you need to select either "normal display" or "hex display" in the properties. the problem is if you select hex display then the normal string is converted into hex and if you select normal display then the hex value is not correct. is there a way to display the hex value in normal display mode?
attached is a vi showing the problem
Attachments:
hex to string.vi 7 KBlfoitek wrote: ... i am creating a state machine and then translating it into string representation ... i just can't figure out how to do the conversions to display the correct output.
If by "correct output", you mean you want something like 4bytes (0xBADDF00D) converted to 8bytes ("BADDF00D" in normal display), then there are several ways ...
Message Edited by Donald on 08-31-2006 04:17 PM
=====================================================
Fading out. " ... J. Arthur Rank on gong."
Attachments:
HexHeadaches.jpg 24 KB -
Converting multiline text string to single line
How do I convert a multiline text string into a single line text string
Hi Bart,
what's a multiline text string?
1) You have an array of string: simply use "string concatenate" to convert from array to scalar string.
2) Your string contains CR and/or NL characters: use "Search/Replace..." for this string, replace all EndOfLine chars by space (or which char you may prefer)...
Best regards,
GerdW
CLAD, using 2009SP1 + LV2011SP1 + LV2014SP1 on WinXP+Win7+cRIO
Kudos are welcome -
Hello All,
I have a small coding challenge that has been whipping me all day. I have a 19 element boolean array that I would like to convert to a string without delimiters("0000000000000000000"). Within a for loop I use a "Select" followed by a "Number To Decimal String." Once outside the loop then use the "Array To Spreadsheet String" function on the indexed output. I tried using a blank delimiter input on the "Array To Spreadsheet String" function but that reverts back to tabs. Bummer. I'll keep plugging away trying different functions and constructs, but this feels harder than it really should be. Any fresh prespectives would be greatly appreciated!
Sincerely,
Zach
Solved!
Go to Solution.
Attachments:
array_of_clusters_to_XLS (SubVI).vi 31 KBsuper-neuron wrote:
I have a 19 element boolean array that I would like to convert to a string without delimiters("0000000000000000000").
"Boolean to 0,1" - > "Number to decimal string" -> "concatenate array". No loop needed.
EDIT: looks like smercurio beat me to it.
Message Edited by altenbach on 08-05-2008 02:09 PM
LabVIEW Champion . Do more with less code and in less time .
Attachments:
BooleanArrayToText.vi 8 KB
BooleanArrayToText.png 9 KB -
String with Trailing Space in a 4.7 / Basis 620 system
Hi
My customer is using SAP 4.7(Enterprise Management Version) / SAP BASIS Release 6.20 (Kernel 640).
We have a requirement to print a product label using a 2D Datamatrix barcode following HIBC standards. We are using a custom development object (Z function module) that builds the barcode string (variable length string) using a Mod43 calculated check digit as the last character of the string. One of the valid check digits is a "space" character as the last character of this barcode string.
Everything in our solution is working fine, except for the situation of the "space" check digit character at the end. We are running into an ABAP syntax limitation when we are trying to concatenate the calculated check digit onto the barcode string.
For example, we have a barcode value "+M53210250 " (within the quotes). This string ends with a SPACE character at the end. We are calculating the barcode value (some fixed elements + SAP material number, batch, etc.), then calculating the check digit, and concatenating the check digit onto the end of the initial barcode string value.
I have tried this in a higher version system and am able to make it work by using the statement CONCATENATE RESPECTING BLANKS. This syntax is not available with WebAS 620 however.
Here are the attempts we have made:
*Get HIBC 2D Barcode String
CONCATENATE E_HIBC_2D_BC L_CHECK_DIGIT INTO E_HIBC_2D_BC.
IF L_CHECK_DIGIT = SPACE.
The following attempts does not work
CONCATENATE with SPACE at end
Concatenate HIBC SPACE and a dummy variable like 'TEST' into HIBC builds a space in between the dummy and HIBC
and then when i split it the space is lost again.
Insert SPACE in the beginning bulding a new variable with 0(1) space followed by HIBC and then SHIFT CIRCULAR BY 1 place
It will work only if moved to a variable of length which is exactly HIBC + 1 char in length then by default the last char is SPACE.
Use a replacement variable which is not a HIBC Check Digit like # & ! ? ^ or other for SPACE
ECC 5.0 and HIGHER
*CONCATENATE {dobj1 dobj2 ...}|{LINES OF itab}
INTO result
[IN {BYTE|CHARACTER} MODE]
[SEPARATED BY sep]
[RESPECTING BLANKS].
*4.7 Version *
*CONCATENATE f1 ... fn INTO g.
*1. ... SEPARATED BY h
*2. ... IN BYTE MODE
*3. ... IN CHARACTER MODE
Having the customer upgrade to ECC 5.0 is not feasible to solve this.
If anyone has any alternative ideas on how to manage this variable length string and respect the trailing space, I would appreciate it.
I have searched the forums but the only solutions that are close deal with outputting to a file during a download or FTP, or else mention the newer syntax of CONCATENTATE with the option RESPECTING BLANKS, but that is not available in this release.If you could predict how long the string is (assuming you might determine whether the last element length is shorter than the db length), you could try to insert your check digit based upon fieldname+your_calculated_length(1) = checkdigit.
for example if batch is 3 cahr and you have '50' in the data, you could calculate as lv_len = strlen( the value ) .
lv_len = lv_len + 1.
move checkdigit to barcodefield+lv_len(1).
Perhaps something like this would allow you to work around. At any rate, if you can figure out if there's supposed to be one or ?? blanks on the end, specifying the position by +offset(columns) should do the trick, instead of the concatenate. -
Concatenate main vi and sub vi data
Is it possible to concatenate the output string of main vi and sub vi data?
Yes, both are string data types and i used the string concatenate function in our previous projects.
I have not yet implemented the logic. My main objective is, in my main vi i have two sub vi's corresponding to two controls. If i click on control-1 sub vi-1 will popup and i will make some changes. And some changes in second sub vi also. Finally i have to concatenate the both sub vi's outputs and main vi output and send to FPGA board.
Kindly provide the example vi for my requirements.
-
Disappearing Service Interfaces and Broken Concatenate Functions, Oh My!
Hello everyone,
So in a customer's test system I have a solution with an XML service interface. That was working fine on Friday, e.g. you could select it as the interface used when uploading a new file, could schedule the run and it'd do what it was meant to. I come back to it today and it's disappeared from the list of possible service interfaces when uploading a file. So I delete the existing service interface, recreate it, all is well. Then just now I create a service interface for a different business object in a different solution, and suddenly neither are appearing in the list of possible service interfaces! What gives?
And on an unrelated note, the string Concatenate() function seems to be broken, or at least it was yesterday. Initialising a string with a bit of text then typing, for example, "variableName.Concatenate("more text");" meant the string was empty, but typing "variableName = variableName + "more text";" worked fine. Good work, SAP, good work.
EDIT: sticking both bits of work (2x custom BO, 2x scripts, 2x service interfaces) in the same solution makes both service interfaces appear in the file input screen. So my guess is that 1502 managed to bork how service interfaces deal with multiple solutions...Welcome to this forum. This is a BT domestic customer to customer help forum, any messages posted here do not go to BT.
Its possible one of the forum members may be able to help you get your problem fixed.
If you would like help, then please post a help request on the Broadband Speed and Connections board. Thanks
There are some useful help pages here, for BT Broadband customers only, on my personal website.
BT Broadband customers - help with broadband, WiFi, networking, e-mail and phones. -
Formatting a String into Readable Text
Folks,
I have searched for an FM or code snippet that will help me do this but no luck so far so hopefully you can help.
I am using the READ_TEXT FM to bring back in a table of 175 entries with a max of 132 length.
I want to output this table onto a form which has a max length of 255 characters.
An example is probably best.
I receive:
STANDARD CONDITIONS FOR THE PURCHASE OF GOODS AND/OR SERVICES
1 Definitions
u201CThe Companyu201D the company trading as XXXXX XXXXX XXX or any of its
subsidiary companies described as the purchaser in the Contract;
u201CContractu201D means any contract agreed by the parties for the supply of
And want to output:
STANDARD CONDITIONS FOR THE PURCHASE OF GOODS AND/OR SERVICES
1 Definitions
u201CThe Companyu201D the company trading as XXXXX XXXXX XXX or any of its subsidiary companies described as the purchaser in the Contract;
u201CContractu201D means any contract agreed by the parties for the supply of
I hope this makes sense? I want to use the maximum amount 255 characters possible to me without splitting words in half. Any advice greatly appreciated.Thanks Guys,
Please find below sample code which hopefully somone may find useful, but please note, I had to implement note 1407684 for this to work even though we are on version 701. Many Thanks.
CONSTANTS: lc_readid TYPE thead-tdid VALUE 'ST',
lc_readobj TYPE thead-tdobject VALUE 'TEXT'.
TYPES: BEGIN OF ty_formatted_text,
line(255),
END OF ty_formatted_text.
DATA: lv_readname TYPE thead-tdname,
lv_langutxt TYPE sy-langu,
lt_line TYPE TABLE OF tline,
ls_line TYPE tline,
lt_line_ahead TYPE TABLE OF tline,
ls_line_ahead TYPE tline,
lv_tabix TYPE sy-tabix,
ls_termsandcond_text TYPE soli,
lt_termsandcond_text TYPE soli_tab,
lv_textline(1024),
lt_formatted_text TYPE TABLE OF ty_formatted_text,
ls_formatted_text TYPE ty_formatted_text.
lv_langutxt = sy-langu.
CONCATENATE 'ZPOTERMSCONDITIONS_' 'P002' INTO lv_readname.
CLEAR: lt_line[], ls_line.
CALL FUNCTION 'READ_TEXT'
EXPORTING
id = lc_readid
language = lv_langutxt
name = lv_readname
object = lc_readobj
TABLES
lines = lt_line
EXCEPTIONS
id = 1
language = 2
name = 3
not_found = 4
object = 5
reference_check = 6
wrong_access_to_archive = 7
OTHERS = 8.
lt_line_ahead[] = lt_line[].
LOOP AT lt_line INTO ls_line.
"Read Next Line to Check if its a new paragraph
lv_tabix = sy-tabix + 1.
CLEAR ls_line_ahead.
READ TABLE lt_line_ahead INTO ls_line_ahead INDEX lv_tabix.
"New Paragraph or end of text
IF ls_line_ahead-tdformat = '*' OR sy-subrc = 4.
IF lv_textline IS INITIAL. "Current line is the start of a paragraph
ls_termsandcond_text-line = ls_line-tdline.
APPEND ls_termsandcond_text TO lt_termsandcond_text.
ELSE. "Some text had been built up
CONCATENATE lv_textline ls_line-tdline INTO lv_textline SEPARATED BY space.
REFRESH lt_formatted_text. CLEAR ls_formatted_text.
CALL FUNCTION 'RKD_WORD_WRAP'
EXPORTING
textline = lv_textline
outputlen = 255
TABLES
out_lines = lt_formatted_text
EXCEPTIONS
outputlen_too_large = 1
OTHERS = 2.
CLEAR lv_textline.
IF sy-subrc <> 0.
"I don't want to trigger an error
ELSE.
"Loop on the formatted table and populate my output table
LOOP AT lt_formatted_text INTO ls_formatted_text.
CLEAR ls_termsandcond_text.
ls_termsandcond_text-line = ls_formatted_text-line.
APPEND ls_termsandcond_text TO lt_termsandcond_text.
ENDLOOP.
ENDIF.
ENDIF.
ELSE. "The next line is not a new paragraph so build text string
CONCATENATE lv_textline ls_line-tdline INTO lv_textline SEPARATED BY space.
ENDIF.
ENDLOOP. -
Replace special characters in String
Dear Guru ,
Does SAP provide the standard function that can replace the special characters in String ?
For example :
I have one template string : " & & & & & output(s) have not been processed yet ! " and five parameters : "P1" , "P2" , "P3" , "P4" , "P5" .
And i would like to apply all parameters into the string to replace the "&" character . Is it possibile ?
My idea is sourcing from the Message String that in tcode : SE91 .
Thanks .
Best Regards,
Carlos ZhangHi Carlos,
I think instead of a standard FM you can write a one line command to do this job.
E.g.
constant: str1 type string value 'output(s) have not been processed yet ! '.
data: var1 type c,
var2 type c,
var3 type c,
var4 type c,
str type string.
concatenate var1 var2 var3 var4 str1 into str separated by space.
So str will have the final value.
Thanks,
Mainak -
How to show multiple dynamic tables on a single screen?
right now im displaying alv for singlr attribute of dimension.
eg for dimension PRODUCT attribute PROFITCENTER im displaying in alv when user executes it.
but the requirement is that multiple attributes can be there so multiple tables is to be displayed on a single screen.
User basically wants to see data of all attributes. if there are 10 attributes hee wants to see 10 tables as every attribute has a different table.
what i have achieved is below in snapshots. only one attribute table PRODUCT im able to display. since i believe multiple headers cant be displyed in alv so even if i display multiple dynamically populated tables on a single screen then it will be fine.
i have also ADDED my code below: ZMDREPORT
this report is for SAP BPC.
*& Report ZMDREPORT
REPORT zmdreport.
TABLES /1cpmb/bfrdp3rp.
DATA: gw_datatbl TYPE tabname,
gw_datatbl1 TYPE tabname,
gw_descrptbl TYPE tabname,
gw_attribute TYPE tabname.
DATA:
BEGIN OF gw_attr,
appset_id TYPE uja_dim_attr-appset_id,
dimension TYPE uja_dim_attr-dimension,
tech_name TYPE uja_dim_attr-tech_name,
attribute_name TYPE uja_dim_attr-attribute_name,
caption TYPE uja_dim_attr-caption,
END OF gw_attr,
gt_attr LIKE TABLE OF gw_attr.
DATA: gt_slis_fcat1 TYPE slis_t_fieldcat_alv,
gw_slis_fcat1 LIKE LINE OF gt_slis_fcat1.
DATA : gt_except TYPE TABLE OF zbpcbt007,
gw_except LIKE LINE OF gt_except,
gt_except_t TYPE TABLE OF zbpcbt007,
gt_attrib TYPE TABLE OF tabname,
gw_attrib LIKE LINE OF gt_attrib.
DATA: gr_r_ref TYPE REF TO data.
DATA:BEGIN OF gw_mdr,
appset_id TYPE uj_appset_id,
dimension TYPE uj_dim_name,
reasoncd TYPE zmdreason,
refdimension TYPE uj_dim_name,
attrib TYPE uj_attr_name,
END OF gw_mdr,
gt_mdr1 LIKE TABLE OF gw_mdr,
gt_mdr2 LIKE TABLE OF gw_mdr,
gt_mdtable1 TYPE zbpctt_attr,
gt_mdtable2 TYPE zbpctt_attr,
gw_mdtable2 LIKE LINE OF gt_mdtable2,
gt_mdtable3 TYPE zbpctt_attr,
gt_mdtable4 TYPE zbpctt_attr,
gw_mdtable4 LIKE LINE OF gt_mdtable4,
BEGIN OF gw_finalattr,
dim(32) TYPE c,
END OF gw_finalattr,
gt_finalattr LIKE TABLE OF gw_finalattr,
gt_tab1 LIKE TABLE OF gw_finalattr,
gw_tab1 LIKE LINE OF gt_tab1,
gt_tab2 LIKE TABLE OF gw_finalattr,
gw_tab2 LIKE LINE OF gt_tab2.
FIELD-SYMBOLS: <gfs_tab1> TYPE STANDARD TABLE.
FIELD-SYMBOLS: <gfs_tab2> TYPE STANDARD TABLE,
<gfs_tab3> TYPE STANDARD TABLE,
<gfs_tab4> TYPE STANDARD TABLE.
FIELD-SYMBOLS:<gfs_attr> TYPE any,
<gfs_field3> TYPE any,
<gfs_field4> TYPE any.
DATA: gw_sortcond TYPE string.
FIELD-SYMBOLS: <gfs_t_final> TYPE STANDARD TABLE.
FIELD-SYMBOLS: <gfs_final> TYPE any.
FIELD-SYMBOLS: <gfs_data> TYPE any .
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETERS: p_env TYPE uja_dimension-appset_id OBLIGATORY.
PARAMETERS: p_dim TYPE uja_dimension-dimension OBLIGATORY.
SELECT-OPTIONS: s_member FOR /1cpmb/bfrdp3rp-mbr_name .
PARAMETERS: p_hir TYPE /1cpmb/bfrdp3rp-/cpmb/hir.
PARAMETERS:p_attr TYPE uj_attr_name MODIF ID m1.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002.
PARAMETERS: p_radio1 RADIOBUTTON GROUP g1 USER-COMMAND abc DEFAULT 'X',
p_radio2 RADIOBUTTON GROUP g1.
SELECTION-SCREEN END OF BLOCK b2.
SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-003.
PARAMETERS: p_reason TYPE zbpcbt007-reasoncd MODIF ID m1.
SELECTION-SCREEN END OF BLOCK b3.
*********************************************************************alv
DATA :gt_fcat TYPE lvc_t_fcat.
DATA: gw_ok_code TYPE sy-ucomm,
gw_okcode TYPE sy-ucomm.
DATA: go_custom_container TYPE REF TO cl_gui_custom_container,
gw_g_container TYPE scrfname VALUE 'CC1',
go_grid1 TYPE REF TO cl_gui_alv_grid.
DATA:BEGIN OF gw_table,
dimension TYPE uja_dimension-dimension,
END OF gw_table,
gt_tab LIKE TABLE OF gw_table ,
BEGIN OF gw_member,
mbr_name TYPE uj_dim_member,
END OF gw_member ,
gt_member LIKE TABLE OF gw_member,
BEGIN OF gw_hir ,
hir TYPE /1cpmb/bfrdp3rp-/cpmb/hir,
END OF gw_hir,
gt_hir LIKE TABLE OF gw_hir.
DATA:gt_slis_fcat2 TYPE slis_t_fieldcat_alv,
gw_slis_fcat2 LIKE LINE OF gt_slis_fcat2 .
DATA: lr_data TYPE REF TO data.
DATA :gt_fcat1 TYPE lvc_t_fcat,
gt_fcat2 TYPE lvc_t_fcat,
gt_fcat3 TYPE lvc_t_fcat,
gt_fcat2_t TYPE lvc_t_fcat,
gw_fcat LIKE LINE OF gt_fcat2,
gw_fcat3 LIKE LINE OF gt_fcat3.
DATA: gt_fcat3_t LIKE gt_fcat3.
DATA: gw_desc TYPE uj_desc.
DATA : gw_string TYPE string,
gw_str TYPE string.
DATA: gw_len TYPE string,
BEGIN OF gw_refdim,
dimension TYPE uja_dimension-dimension,
END OF gw_refdim,
gt_refdim LIKE TABLE OF gw_refdim,
gt_refdim_t LIKE TABLE OF gw_refdim,
BEGIN OF gw_refdata,
data_table TYPE tabname,
desc_table TYPE tabname,
END OF gw_refdata,
gt_refdata LIKE TABLE OF gw_refdata,
BEGIN OF gw_techattr,
tech_name TYPE uja_dim_attr-tech_name,
END OF gw_techattr,
gt_techattr LIKE TABLE OF gw_techattr,
gw_cond TYPE string.
DATA:gw_hircond TYPE string.
DATA: gt_dynpread TYPE TABLE OF dynpread,
gw_dynpread LIKE LINE OF gt_dynpread,
gw_dynpread2 LIKE LINE OF gt_dynpread,
gw_dim TYPE string,
gw_env TYPE string.
FIELD-SYMBOLS: <gfs_w_tab1> TYPE any,
<gfs_w_tab2> TYPE any,
<gfs_w_tab3> TYPE any,
<gfs_field> TYPE any,
<gfs_field2> TYPE any,
<gfs_field_final> TYPE any,
<gfs_s_fcat> TYPE lvc_s_fcat,
<gfs_s_fcat2> TYPE lvc_s_fcat,
<gfs_s_fcat3> TYPE lvc_s_fcat
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_dim.
REFRESH gt_dynpread.
gw_dynpread-fieldname = 'P_ENV'.
APPEND gw_dynpread TO gt_dynpread.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
dyname = sy-repid
dynumb = sy-dynnr
* TRANSLATE_TO_UPPER = ' '
* REQUEST = ' '
* PERFORM_CONVERSION_EXITS = ' '
* PERFORM_INPUT_CONVERSION = ' '
* DETERMINE_LOOP_INDEX = ' '
* START_SEARCH_IN_CURRENT_SCREEN = 'X'
* start_search_in_main_screen = ' '
* START_SEARCH_IN_STACKED_SCREEN = ' '
* START_SEARCH_ON_SCR_STACKPOS = ' '
* SEARCH_OWN_SUBSCREENS_FIRST = ' '
* SEARCHPATH_OF_SUBSCREEN_AREAS = ' '
TABLES
dynpfields = gt_dynpread
EXCEPTIONS
invalid_abapworkarea = 1
invalid_dynprofield = 2
invalid_dynproname = 3
invalid_dynpronummer = 4
invalid_request = 5
no_fielddescription = 6
invalid_parameter = 7
undefind_error = 8
double_conversion = 9
stepl_not_found = 10
OTHERS = 11.
IF sy-subrc EQ 0.
READ TABLE gt_dynpread INTO gw_dynpread INDEX 1.
IF sy-subrc EQ 0.
TRY .
REFRESH gt_tab.
SELECT dimension
FROM uja_dimension CLIENT SPECIFIED
INTO TABLE gt_tab
WHERE mandt EQ sy-mandt
AND appset_id EQ gw_dynpread-fieldvalue.
IF sy-subrc EQ 0.
SORT gt_tab BY dimension.
DELETE ADJACENT DUPLICATES FROM gt_tab COMPARING dimension.
IF gt_tab IS NOT INITIAL.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' "#EC CI_SUBRC
EXPORTING
* DDIC_STRUCTURE = ''
retfield = 'DIMENSION'
* PVALKEY = ' '
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'P_DIM'(004)
* STEPL = 0
* WINDOW_TITLE =
* VALUE = ' '
value_org = 'S'
* MULTIPLE_CHOICE = ' '
* display = ''
* CALLBACK_PROGRAM = ' '
* CALLBACK_FORM = ' '
* CALLBACK_METHOD =
* MARK_TAB =
* IMPORTING
* USER_RESET =
TABLES
value_tab = gt_tab
* FIELD_TAB =
* RETURN_TAB =
* DYNPFLD_MAPPING =
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3
IF sy-subrc NE 0.
ENDIF.
ENDIF.
ENDIF.
CATCH cx_root.
ENDTRY.
ENDIF.
ENDIF.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_member-low.
REFRESH gt_dynpread.
gw_dynpread-fieldname = 'P_ENV'.
APPEND gw_dynpread TO gt_dynpread.
gw_dynpread-fieldname = 'P_DIM'.
APPEND gw_dynpread TO gt_dynpread.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
dyname = sy-repid
dynumb = sy-dynnr
* TRANSLATE_TO_UPPER = ' '
* REQUEST = ' '
* PERFORM_CONVERSION_EXITS = ' '
* PERFORM_INPUT_CONVERSION = ' '
* DETERMINE_LOOP_INDEX = ' '
* START_SEARCH_IN_CURRENT_SCREEN = 'X'
* start_search_in_main_screen = ' '
* START_SEARCH_IN_STACKED_SCREEN = ' '
* START_SEARCH_ON_SCR_STACKPOS = ' '
* SEARCH_OWN_SUBSCREENS_FIRST = ' '
* SEARCHPATH_OF_SUBSCREEN_AREAS = ' '
TABLES
dynpfields = gt_dynpread
EXCEPTIONS
invalid_abapworkarea = 1
invalid_dynprofield = 2
invalid_dynproname = 3
invalid_dynpronummer = 4
invalid_request = 5
no_fielddescription = 6
invalid_parameter = 7
undefind_error = 8
double_conversion = 9
stepl_not_found = 10
OTHERS = 11.
IF sy-subrc EQ 0.
SORT gt_dynpread BY fieldname.
DELETE ADJACENT DUPLICATES FROM gt_dynpread COMPARING fieldname.
IF gt_dynpread IS NOT INITIAL.
LOOP AT gt_dynpread INTO gw_dynpread.
IF gw_dynpread-fieldname EQ 'P_ENV'.
gw_env = gw_dynpread-fieldvalue.
ELSEIF gw_dynpread-fieldname EQ 'P_DIM'.
gw_dim = gw_dynpread-fieldvalue.
ENDIF.
ENDLOOP.
IF sy-subrc EQ 0.
CLEAR: gw_datatbl1, gt_member.
SELECT SINGLE data_table
INTO (gw_datatbl1)
FROM uja_dimension CLIENT SPECIFIED
WHERE mandt EQ sy-mandt
AND appset_id EQ gw_env
AND dimension EQ gw_dim.
IF sy-subrc EQ 0.
TRY .
REFRESH gt_member.
SELECT mbr_name
INTO TABLE gt_member
FROM (gw_datatbl1) CLIENT SPECIFIED
WHERE mandt EQ sy-mandt .
IF sy-subrc EQ 0.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
* DDIC_STRUCTURE = ' '
retfield = 'MBR_NAME'
* PVALKEY = ' '
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'S_MEMBER'
* STEPL = 0
* WINDOW_TITLE =
* VALUE = ' '
value_org = 'S'
* MULTIPLE_CHOICE = ' '
* DISPLAY = ' '
callback_program = sy-repid
callback_form = 'F4CALLBACK'
* CALLBACK_METHOD =
* MARK_TAB =
* IMPORTING
* USER_RESET =
TABLES
value_tab = gt_member
* FIELD_TAB =
* RETURN_TAB =
* DYNPFLD_MAPPING =
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDIF.
CATCH cx_root.
ENDTRY.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_member-high.
REFRESH gt_dynpread.
gw_dynpread-fieldname = 'P_ENV'.
APPEND gw_dynpread TO gt_dynpread.
gw_dynpread-fieldname = 'P_DIM'.
APPEND gw_dynpread TO gt_dynpread.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
dyname = sy-repid
dynumb = sy-dynnr
* TRANSLATE_TO_UPPER = ' '
* REQUEST = ' '
* PERFORM_CONVERSION_EXITS = ' '
* PERFORM_INPUT_CONVERSION = ' '
* DETERMINE_LOOP_INDEX = ' '
* START_SEARCH_IN_CURRENT_SCREEN = 'X'
* start_search_in_main_screen = ' '
* START_SEARCH_IN_STACKED_SCREEN = ' '
* START_SEARCH_ON_SCR_STACKPOS = ' '
* SEARCH_OWN_SUBSCREENS_FIRST = ' '
* SEARCHPATH_OF_SUBSCREEN_AREAS = ' '
TABLES
dynpfields = gt_dynpread
EXCEPTIONS
invalid_abapworkarea = 1
invalid_dynprofield = 2
invalid_dynproname = 3
invalid_dynpronummer = 4
invalid_request = 5
no_fielddescription = 6
invalid_parameter = 7
undefind_error = 8
double_conversion = 9
stepl_not_found = 10
OTHERS = 11.
IF sy-subrc EQ 0.
SORT gt_dynpread BY fieldname.
DELETE ADJACENT DUPLICATES FROM gt_dynpread COMPARING fieldname.
IF gt_dynpread IS NOT INITIAL.
LOOP AT gt_dynpread INTO gw_dynpread.
IF gw_dynpread-fieldname EQ 'P_ENV'.
gw_env = gw_dynpread-fieldvalue.
ELSEIF gw_dynpread-fieldname EQ 'P_DIM'.
gw_dim = gw_dynpread-fieldvalue.
ENDIF.
ENDLOOP.
IF sy-subrc EQ 0.
CLEAR: gw_datatbl1.
SELECT SINGLE data_table
INTO (gw_datatbl1)
FROM uja_dimension CLIENT SPECIFIED
WHERE mandt EQ sy-mandt
AND appset_id EQ gw_env
AND dimension EQ gw_dim.
IF sy-subrc EQ 0.
TRY .
REFRESH gt_member.
SELECT mbr_name
INTO TABLE gt_member
FROM (gw_datatbl1) CLIENT SPECIFIED
WHERE mandt EQ sy-mandt.
IF sy-subrc EQ 0.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
* DDIC_STRUCTURE = ' '
retfield = 'MBR_NAME'
* PVALKEY = ' '
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'S_MEMBER'
* STEPL = 0
* WINDOW_TITLE =
* VALUE = ' '
value_org = 'S'
* MULTIPLE_CHOICE = ' '
* DISPLAY = ' '
callback_program = sy-repid
callback_form = 'F4CALLBACK'
* CALLBACK_METHOD =
* MARK_TAB =
* IMPORTING
* USER_RESET =
TABLES
value_tab = gt_member
* FIELD_TAB =
* RETURN_TAB =
* DYNPFLD_MAPPING =
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDIF.
CATCH cx_root.
ENDTRY.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
*& Form F4CALLBACK
* text
* -->RECORD_TAB text
* -->SHLP text
* -->CALLCONTROL text
FORM f4callback TABLES record_tab STRUCTURE seahlpres
CHANGING shlp TYPE shlp_descr
callcontrol TYPE ddshf4ctrl.
callcontrol-no_maxdisp = ''.
ENDFORM. "F4CALLBACK
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_hir.
REFRESH gt_dynpread.
CLEAR gw_dynpread.
gw_dynpread-fieldname = 'P_ENV'.
APPEND gw_dynpread TO gt_dynpread.
gw_dynpread-fieldname = 'P_DIM'.
APPEND gw_dynpread TO gt_dynpread.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
dyname = sy-repid
dynumb = sy-dynnr
* TRANSLATE_TO_UPPER = ' '
* REQUEST = ' '
* PERFORM_CONVERSION_EXITS = ' '
* PERFORM_INPUT_CONVERSION = ' '
* DETERMINE_LOOP_INDEX = ' '
* START_SEARCH_IN_CURRENT_SCREEN = 'X'
* start_search_in_main_screen = ' '
* START_SEARCH_IN_STACKED_SCREEN = ' '
* START_SEARCH_ON_SCR_STACKPOS = ' '
* SEARCH_OWN_SUBSCREENS_FIRST = ' '
* SEARCHPATH_OF_SUBSCREEN_AREAS = ' '
TABLES
dynpfields = gt_dynpread
EXCEPTIONS
invalid_abapworkarea = 1
invalid_dynprofield = 2
invalid_dynproname = 3
invalid_dynpronummer = 4
invalid_request = 5
no_fielddescription = 6
invalid_parameter = 7
undefind_error = 8
double_conversion = 9
stepl_not_found = 10
OTHERS = 11.
IF sy-subrc EQ 0.
SORT gt_dynpread BY fieldname.
DELETE ADJACENT DUPLICATES FROM gt_dynpread COMPARING fieldname.
LOOP AT gt_dynpread INTO gw_dynpread.
IF gw_dynpread-fieldname EQ 'P_ENV'.
gw_env = gw_dynpread-fieldvalue.
ELSEIF gw_dynpread-fieldname EQ 'P_DIM'.
gw_dim = gw_dynpread-fieldvalue.
ENDIF.
ENDLOOP.
IF sy-subrc EQ 0.
CLEAR: gw_datatbl1.
SELECT SINGLE data_table
INTO (gw_datatbl1)
FROM uja_dimension CLIENT SPECIFIED
WHERE mandt EQ sy-mandt
AND appset_id EQ gw_env
AND dimension EQ gw_dim.
IF sy-subrc EQ 0.
REFRESH gt_member.
TRY .
SELECT /cpmb/hir
INTO TABLE gt_hir
FROM (gw_datatbl1) CLIENT SPECIFIED
WHERE mandt EQ sy-mandt.
IF sy-subrc EQ 0.
SORT gt_hir BY hir.
DELETE ADJACENT DUPLICATES FROM gt_hir COMPARING hir.
IF gt_hir IS NOT INITIAL.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
* DDIC_STRUCTURE = ' '
retfield = '/CPMB/HIR'
* PVALKEY = ' '
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'P_HIR'
* STEPL = 0
* WINDOW_TITLE =
* VALUE = ' '
value_org = 'S'
* MULTIPLE_CHOICE = ' '
* DISPLAY = ' '
* CALLBACK_PROGRAM = ' '
* CALLBACK_FORM = ' '
* CALLBACK_METHOD =
* MARK_TAB =
* IMPORTING
* USER_RESET =
TABLES
value_tab = gt_hir
* FIELD_TAB =
* RETURN_TAB =
* DYNPFLD_MAPPING =
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDIF.
ENDIF.
CATCH cx_root.
ENDTRY.
ENDIF.
ENDIF.
ENDIF.
* CLASS lcl_main DEFINITION
CLASS lcl_main DEFINITION.
PUBLIC SECTION.
CLASS-METHODS:
create_alv1,
create_alv2,
create_alv3,
create_fieldcatalog,
create_dynamicalv,
merge_tables,
show_alv1
ENDCLASS. "lcl_main DEFINITION
* CLASS lcl_main IMPLEMENTATION
CLASS lcl_main IMPLEMENTATION.
METHOD create_fieldcatalog.
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE' "#EC CI_SUBRC
EXPORTING
i_structure_name = gw_datatbl
CHANGING
ct_fieldcat = gt_fcat1
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE' "#EC CI_SUBRC
EXPORTING
i_structure_name = gw_descrptbl
CHANGING
ct_fieldcat = gt_fcat2
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDMETHOD. "create_fieldcatalog
METHOD create_dynamicalv.
* DATA: lr_data TYPE REF TO data.
CLEAR lr_data.
CALL METHOD cl_alv_table_create=>create_dynamic_table
"#EC CI_SUBRC
EXPORTING
* i_style_table =
it_fieldcatalog = gt_fcat2
* i_length_in_byte =
IMPORTING
ep_table = lr_data
* e_style_fname =
EXCEPTIONS
generate_subpool_dir_full = 1
OTHERS = 2.
IF sy-subrc <> 0.
*MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDMETHOD. "create_dynamicalv
METHOD merge_tables.
SORT gt_fcat2 BY col_pos.
ASSIGN lr_data->* TO <gfs_t_final>.
LOOP AT <gfs_tab1> ASSIGNING <gfs_w_tab1>.
APPEND INITIAL LINE TO <gfs_t_final> ASSIGNING <gfs_final>.
LOOP AT gt_fcat2 ASSIGNING <gfs_s_fcat>. "#EC CI_NESTED
ASSIGN COMPONENT <gfs_s_fcat>-fieldname OF STRUCTURE
<gfs_w_tab1> TO <gfs_field>.
IF sy-subrc EQ 0 AND <gfs_field> IS ASSIGNED.
ASSIGN COMPONENT <gfs_s_fcat>-fieldname OF STRUCTURE
<gfs_final> TO <gfs_field_final>.
IF sy-subrc EQ 0 AND <gfs_field_final> IS ASSIGNED.
<gfs_field_final> = <gfs_field>.
ENDIF.
*** Creating dynamic where clause for the key fields
IF <gfs_s_fcat>-key = 'X'.
READ TABLE gt_fcat2_t ASSIGNING <gfs_s_fcat2>
WITH KEY
key = abap_true
fieldname = <gfs_s_fcat>-fieldname.
IF sy-subrc EQ 0.
IF gw_string IS INITIAL.
*Putting value into quotes
CONCATENATE `'` <gfs_field> `'` INTO gw_str.
*Concatenating first field into string
CONCATENATE <gfs_s_fcat>-fieldname '=' gw_str
INTO gw_string SEPARATED BY space.
CLEAR gw_str.
ELSE.
*Concatenating rest all key fields
CONCATENATE `'` <gfs_field> `'` INTO gw_str.
CONCATENATE gw_string 'AND' <gfs_s_fcat>-fieldname
'=' gw_str INTO gw_string SEPARATED BY space.
CLEAR gw_str.
ENDIF.
ENDIF.
*** End of Creation
ENDIF.
ENDIF.
ENDLOOP.
IF NOT gw_string IS INITIAL.
*Concatenating sy-langu (-> always present)
CONCATENATE gw_string 'AND LANGU = SY-LANGU'
INTO gw_string SEPARATED BY space.
ENDIF.
*** Filling Description field based on dynamically created where clause
LOOP AT <gfs_tab2> ASSIGNING <gfs_w_tab2> WHERE (gw_string).
"#EC CI_NESTED
ASSIGN COMPONENT 'TXTLG' OF STRUCTURE <gfs_w_tab2>
TO <gfs_field>.
IF sy-subrc EQ 0 AND <gfs_field> IS ASSIGNED.
ASSIGN COMPONENT 'TXTLG' OF STRUCTURE <gfs_final>
TO <gfs_field_final>.
IF sy-subrc EQ 0 AND <gfs_field_final> IS ASSIGNED.
<gfs_field_final> = <gfs_field>.
ENDIF.
ENDIF.
ENDLOOP.
CLEAR gw_string.
ENDLOOP.
ENDMETHOD. "merge_tables
METHOD create_alv3.
CREATE DATA gr_r_ref TYPE TABLE OF (gw_datatbl).
ASSIGN gr_r_ref->* TO <gfs_tab1>.
SELECT *
INTO TABLE <gfs_tab1>
FROM (gw_datatbl) CLIENT SPECIFIED
WHERE mandt EQ sy-mandt
AND mbr_name IN s_member
AND /cpmb/calc EQ 'N'.
IF sy-subrc EQ 0.
IF p_hir IS NOT INITIAL.
CLEAR gw_hircond.
CONCATENATE '/CPMB/HIR' 'NE' 'P_HIR' INTO gw_hircond
SEPARATED BY space.
DELETE <gfs_tab1> WHERE (gw_hircond).
ENDIF.
CLEAR: gr_r_ref.
CREATE DATA gr_r_ref TYPE TABLE OF (gw_descrptbl).
ASSIGN gr_r_ref->* TO <gfs_tab2>.
SELECT *
FROM (gw_descrptbl) CLIENT SPECIFIED
INTO TABLE <gfs_tab2>
WHERE mandt EQ sy-mandt
AND langu EQ sy-langu.
IF sy-subrc EQ 0.
READ TABLE gt_refdata INTO gw_refdata INDEX 1.
IF sy-subrc EQ 0.
CLEAR gr_r_ref.
CREATE DATA gr_r_ref TYPE TABLE OF (gw_refdata-data_table).
ASSIGN gr_r_ref->* TO <gfs_tab3>.
SELECT *
INTO TABLE <gfs_tab3>
FROM (gw_refdata-data_table) CLIENT SPECIFIED
WHERE mandt EQ sy-mandt
AND /cpmb/calc EQ 'N'.
IF sy-subrc EQ 0.
CLEAR gr_r_ref.
CREATE DATA gr_r_ref TYPE TABLE OF (gw_refdata-desc_table).
ASSIGN gr_r_ref->* TO <gfs_tab4>.
SELECT *
INTO TABLE <gfs_tab4>
FROM (gw_refdata-desc_table) CLIENT SPECIFIED
WHERE mandt EQ sy-mandt
AND langu EQ sy-langu.
lcl_main=>create_fieldcatalog( ).
gt_fcat2_t[] = gt_fcat2[].
DELETE gt_fcat2 WHERE fieldname NE 'TXTLG'.
APPEND LINES OF gt_fcat1 TO gt_fcat2.
gw_len = lines( gt_fcat2 ).
gw_len = gw_len + 1.
gw_fcat-fieldname = 'TXTLG1'.
gw_fcat-reptext = 'Attribute Description'.
gw_fcat-col_pos = gw_len.
gw_fcat-outputlen = 60.
APPEND gw_fcat TO gt_fcat2.
SORT gt_fcat2 BY fieldname.
READ TABLE gt_techattr INTO gw_techattr INDEX 1.
LOOP AT gt_fcat2 INTO gw_fcat.
READ TABLE gt_attr INTO gw_attr
WITH KEY tech_name = gw_fcat-fieldname.
IF sy-subrc EQ 0.
gw_fcat-reptext = gw_attr-caption.
ENDIF.
IF gw_fcat-fieldname = 'TXTLG'.
gw_fcat-outputlen = 60.
ENDIF.
MODIFY gt_fcat2 FROM gw_fcat TRANSPORTING
outputlen reptext .
IF gw_fcat-fieldname NE 'MBR_NAME'
AND gw_fcat-fieldname NE 'TXTLG'
AND gw_fcat-fieldname NE 'TXTLG1'
AND gw_fcat-fieldname NE gw_techattr-tech_name."gw_attrib.
gw_fcat-no_out = 'X'.
MODIFY gt_fcat2 FROM gw_fcat TRANSPORTING no_out.
ENDIF.
ENDLOOP.
lcl_main=>create_dynamicalv( ).
lcl_main=>merge_tables( ).
CLEAR gw_cond.
READ TABLE gt_techattr INTO gw_techattr INDEX 1.
* CONCATENATE 'MBR_NAME =' '<Gfs_field>' INTO Gw_cond
* SEPARATED BY space.
TRANSLATE gw_techattr-tech_name TO UPPER CASE.
CONCATENATE `'` gw_techattr-tech_name `'`
'=' '<Gfs_field>' INTO gw_cond
SEPARATED BY space.
CHECK NOT <gfs_t_final> IS INITIAL.
SORT <gfs_t_final> BY (gw_techattr-tech_name).
LOOP AT <gfs_tab3> ASSIGNING <gfs_w_tab3>.
ASSIGN COMPONENT 'MBR_NAME' OF STRUCTURE <gfs_w_tab3>
TO <gfs_field>.
IF sy-subrc EQ 0 AND <gfs_field> IS ASSIGNED.
DELETE <gfs_t_final> WHERE (gw_cond).
ENDIF.
IF <gfs_t_final> IS INITIAL.
EXIT.
ENDIF.
ENDLOOP.
*adding attribute description
DATA gw_cond1 TYPE string.
DATA gw_cond2 TYPE string.
CLEAR gw_cond1.
CONCATENATE `'` gw_techattr-tech_name `'` 'eq' '<gfs_field>'
INTO gw_cond1 SEPARATED BY space.
CLEAR gw_cond2.
CONCATENATE 'TXTLG1' 'eq' 'SPACE'
INTO gw_cond2 SEPARATED BY space.
CLEAR gw_cond.
CONCATENATE 'TXTLG' 'NE' 'SPACE' INTO gw_cond SEPARATED BY
space.
gw_sortcond = 'TXTLG'.
SORT <gfs_tab4> BY (gw_sortcond).
LOOP AT <gfs_t_final> ASSIGNING <gfs_final> WHERE
(gw_cond2).
ASSIGN COMPONENT gw_techattr-tech_name OF STRUCTURE
<gfs_final> TO <gfs_field>.
IF sy-subrc EQ 0 AND <gfs_field> IS ASSIGNED.
ASSIGN COMPONENT 'TXTLG1' OF STRUCTURE
<gfs_final> TO <gfs_field4>.
IF sy-subrc EQ 0 AND <gfs_field4> IS ASSIGNED.
LOOP AT <gfs_tab4> ASSIGNING <gfs_attr>
WHERE (gw_cond).
ASSIGN COMPONENT 2 OF STRUCTURE <gfs_attr> TO
<gfs_field2>.
IF sy-subrc EQ 0 AND <gfs_field2> IS ASSIGNED.
ASSIGN COMPONENT 5 OF STRUCTURE <gfs_attr>
TO <gfs_field3>.
IF sy-subrc EQ 0 AND <gfs_field3> IS ASSIGNED.
IF <gfs_field> EQ <gfs_field2>.
<gfs_field4> = <gfs_field3>.
MODIFY <gfs_t_final> FROM <gfs_final>
TRANSPORTING ('TXTLG1') WHERE (gw_cond1).
EXIT.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.
ENDLOOP.
* LOOP AT <gfs_tab4> ASSIGNING <gfs_attr> WHERE (gw_cond) .
* ASSIGN COMPONENT 2 OF STRUCTURE <gfs_attr> TO
* <gfs_field2>.
* IF sy-subrc EQ 0 AND <gfs_field2> IS ASSIGNED.
* ASSIGN COMPONENT 5 OF STRUCTURE <gfs_attr> TO
* <gfs_field3>.
* IF sy-subrc EQ 0 AND <gfs_field3> IS ASSIGNED.
* LOOP AT <gfs_t_final> ASSIGNING <gfs_final>
* WHERE (gw_cond2).
* ASSIGN COMPONENT gw_techattr-tech_name OF STRUCTURE
* <gfs_final> TO <gfs_field>.
* IF sy-subrc EQ 0 AND <gfs_field> IS ASSIGNED.
* ASSIGN COMPONENT 'TXTLG1' OF STRUCTURE <gfs_final>
* TO <gfs_field4>.
* IF sy-subrc EQ 0 AND <gfs_field4> IS ASSIGNED.
* IF <gfs_field> EQ <gfs_field2>.
* <gfs_field4> = <gfs_field3>.
* MODIFY <gfs_t_final> FROM <gfs_final>
* TRANSPORTING ('TXTLG1') WHERE (gw_cond1).
* EXIT.
* ENDIF.
* ENDIF.
* ENDIF.
* ENDLOOP.
* ENDIF.
* ENDIF.
* ENDLOOP.
IF <gfs_t_final> IS NOT INITIAL.
CALL SCREEN 9000.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDMETHOD. "create_alv3
METHOD create_alv2.
READ TABLE gt_techattr INTO gw_techattr INDEX 1.
CONCATENATE gw_techattr-tech_name 'EQ' 'space' INTO gw_cond
SEPARATED
BY
space.
CREATE DATA gr_r_ref TYPE TABLE OF (gw_datatbl).
ASSIGN gr_r_ref->* TO <gfs_tab1>.
SELECT *
INTO TABLE <gfs_tab1>
FROM (gw_datatbl) CLIENT SPECIFIED
WHERE mandt EQ sy-mandt
AND mbr_name IN s_member
AND /cpmb/calc EQ 'N'
AND (gw_cond).
IF sy-subrc EQ 0.
IF p_hir IS NOT INITIAL.
CLEAR gw_hircond.
CONCATENATE '/CPMB/HIR' 'NE' 'P_HIR' INTO gw_hircond
SEPARATED BY space.
DELETE <gfs_tab1> WHERE (gw_hircond).
ENDIF.
CLEAR: gr_r_ref.
CREATE DATA gr_r_ref TYPE TABLE OF (gw_descrptbl).
ASSIGN gr_r_ref->* TO <gfs_tab2>.
SELECT *
FROM (gw_descrptbl) CLIENT SPECIFIED
INTO TABLE <gfs_tab2>
WHERE mandt EQ sy-mandt
AND langu EQ sy-langu.
IF sy-subrc EQ 0.
lcl_main=>create_fieldcatalog( ).
gt_fcat2_t[] = gt_fcat2[].
DELETE gt_fcat2 WHERE fieldname NE 'TXTLG'.
APPEND LINES OF gt_fcat1 TO gt_fcat2.
SORT gt_fcat2 BY fieldname.
LOOP AT gt_fcat2 INTO gw_fcat.
READ TABLE gt_attr INTO gw_attr WITH KEY
tech_name = gw_fcat-fieldname.
IF sy-subrc EQ 0.
gw_fcat-reptext = gw_attr-caption.
ENDIF.
IF gw_fcat-fieldname = 'TXTLG'.
gw_fcat-outputlen = 60.
ENDIF.
MODIFY gt_fcat2 FROM gw_fcat TRANSPORTING outputlen reptext.
* READ TABLE gt_attrib INTO gw_attrib INDEX 1.
* IF sy-subrc EQ 0.
IF gw_fcat-fieldname NE 'MBR_NAME'
AND gw_fcat-fieldname NE 'TXTLG'
AND gw_fcat-fieldname NE gw_techattr-tech_name."gw_attrib.
gw_fcat-no_out = 'X'.
MODIFY gt_fcat2 FROM gw_fcat TRANSPORTING no_out.
ENDIF.
* ENDIF.
ENDLOOP.
lcl_main=>create_dynamicalv( ).
lcl_main=>merge_tables( ).
CHECK NOT <gfs_t_final> IS INITIAL.
SORT <gfs_t_final> BY ('MBR_NAME').
CALL SCREEN 9000.
ENDIF.
ENDIF.
ENDMETHOD. "create_alv2
METHOD create_alv1.
CREATE DATA gr_r_ref TYPE TABLE OF (gw_datatbl).
ASSIGN gr_r_ref->* TO <gfs_tab1>.
SELECT *
FROM (gw_datatbl) CLIENT SPECIFIED
INTO TABLE <gfs_tab1>
WHERE mandt EQ sy-mandt
AND mbr_name IN s_member.
IF sy-subrc EQ 0.
IF p_hir IS NOT INITIAL.
CLEAR gw_hircond.
CONCATENATE '/CPMB/HIR' 'NE' 'P_HIR'
INTO gw_hircond SEPARATED BY
space.
DELETE <gfs_tab1> WHERE (gw_hircond).
ENDIF.
CLEAR: gr_r_ref.
CREATE DATA gr_r_ref TYPE TABLE OF (gw_descrptbl).
ASSIGN gr_r_ref->* TO <gfs_tab2>.
SELECT *
FROM (gw_descrptbl) CLIENT SPECIFIED
INTO TABLE <gfs_tab2>
WHERE mandt EQ sy-mandt
AND langu EQ sy-langu.
IF sy-subrc EQ 0.
lcl_main=>create_fieldcatalog( ).
SORT gt_fcat2 BY col_pos fieldname.
gt_fcat2_t[] = gt_fcat2[].
DELETE gt_fcat2 WHERE fieldname NE 'TXTLG'.
APPEND LINES OF gt_fcat1 TO gt_fcat2.
SORT gt_fcat2 BY fieldname.
SORT gt_attr BY tech_name.
LOOP AT gt_fcat2 INTO gw_fcat .
IF gw_fcat-reptext IS INITIAL.
READ TABLE gt_attr INTO gw_attr
WITH KEY tech_name = gw_fcat-fieldname BINARY SEARCH.
IF sy-subrc EQ 0.
gw_fcat-reptext = gw_attr-caption.
ELSE.
gw_fcat-reptext = gw_fcat-fieldname.
ENDIF.
ENDIF.
IF gw_fcat-fieldname EQ 'OBJVERS'.
gw_fcat-no_out = 'X'.
ELSEIF gw_fcat-fieldname EQ 'ROWFLAG'.
gw_fcat-no_out = 'X'.
ELSEIF gw_fcat-fieldname EQ 'MBR_NAME'.
gw_fcat-no_out = 'X'.
ELSEIF gw_fcat-fieldname EQ '/CPMB/CALC'.
gw_fcat-no_out = 'X'.
ELSEIF gw_fcat-fieldname EQ 'TXTLG'.
gw_fcat-outputlen = 70.
ELSEIF gw_fcat-fieldname EQ '/CPMB/HIR'.
gw_fcat-outputlen = 20.
ENDIF.
MODIFY gt_fcat2 FROM gw_fcat
TRANSPORTING reptext no_out outputlen.
ENDLOOP.
lcl_main=>create_dynamicalv( ).
lcl_main=>merge_tables( ).
CHECK NOT <gfs_t_final> IS INITIAL.
* SORT <gfs_t_final> BY ('TXTLG').
CALL SCREEN 9000.
ENDIF.
ENDIF.
ENDMETHOD. "show_alv1
METHOD show_alv1.
IF go_custom_container IS INITIAL.
CREATE OBJECT go_custom_container
EXPORTING
* parent =
container_name = gw_g_container
* style =
* lifetime = lifetime_default
* repid =
* dynnr =
* no_autodef_progid_dynnr =
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
lifetime_dynpro_dynpro_link = 5
OTHERS = 6
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CREATE OBJECT go_grid1
EXPORTING
* i_shellstyle = 0
* i_lifetime =
i_parent = go_custom_container
* i_appl_events = 'X'
* i_parentdbg =
* i_applogparent =
* i_graphicsparent =
* i_name =
* i_fcat_complete = SPACE
EXCEPTIONS
error_cntl_create = 1
error_cntl_init = 2
error_cntl_link = 3
error_dp_create = 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.
CALL METHOD go_grid1->set_table_for_first_display "#EC CI_SUBRC
* EXPORTING
* i_buffer_active =
* i_bypassing_buffer =
* i_consistency_check =
* i_structure_name =
* is_variant =
* i_save = 'X'
** i_default = 'X'
* is_layout =
** is_print =
** it_special_groups =
* it_toolbar_excluding =
* it_hyperlink =
* it_alv_graphics =
* it_except_qinfo =
* ir_salv_adapter =
CHANGING
it_outtab = <gfs_t_final>
it_fieldcatalog = gt_fcat2
* it_sort =
* it_filter =
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDIF.
ENDMETHOD. "SHOW_alv1
ENDCLASS. "lcl_main IMPLEMENTATION
AT SELECTION-SCREEN OUTPUT.
IF p_radio1 EQ 'X'.
LOOP AT SCREEN.
IF screen-group1 = 'M1'.
screen-active = 0.
MODIFY SCREEN.
ENDIF.
* IF screen-group1 = 'M'.
* screen-active = 0.
* MODIFY SCREEN.
* ENDIF.
ENDLOOP.
ENDIF.
* IF p_radio2 EQ 'X'.
* LOOP AT SCREEN.
* IF p_reason EQ 30.
* IF screen-group1 = 'M2'.
* screen-active = 0.
* MODIFY SCREEN.
* ENDIF.
* ENDIF.
* ENDLOOP.
* ENDIF.
START-OF-SELECTION.
IF p_radio1 EQ 'X'.
SELECT SINGLE data_table desc_table
INTO (gw_datatbl , gw_descrptbl)
FROM uja_dimension CLIENT SPECIFIED
WHERE mandt EQ sy-mandt
AND appset_id EQ p_env
AND dimension EQ p_dim.
IF sy-subrc EQ 0.
SELECT appset_id dimension tech_name attribute_name caption
INTO TABLE gt_attr
FROM uja_dim_attr CLIENT SPECIFIED
WHERE mandt EQ sy-mandt
AND appset_id EQ p_env
AND dimension EQ p_dim.
IF sy-subrc EQ 0.
lcl_main=>create_alv1( ).
ENDIF.
ENDIF.
ELSE.
IF p_reason NE 30.
SELECT *
INTO TABLE gt_except
FROM zbpcbt007 CLIENT SPECIFIED
WHERE mandt EQ sy-mandt
AND appset_id EQ p_env
AND dimension EQ p_dim
AND reasoncd EQ p_reason.
IF sy-subrc EQ 0.
SELECT SINGLE data_table desc_table
INTO (gw_datatbl,gw_descrptbl)
FROM uja_dimension CLIENT SPECIFIED
WHERE mandt EQ sy-mandt
AND appset_id EQ p_env
AND dimension EQ p_dim.
IF sy-subrc EQ 0.
SELECT appset_id dimension tech_name attribute_name caption
INTO TABLE gt_attr
FROM uja_dim_attr CLIENT SPECIFIED
WHERE mandt EQ sy-mandt
AND appset_id EQ p_env
AND dimension EQ p_dim.
IF sy-subrc EQ 0.
gt_except_t[] = gt_except[].
SORT gt_except_t.
DELETE ADJACENT DUPLICATES FROM gt_except_t.
IF gt_except_t IS NOT INITIAL.
SELECT tech_name
INTO TABLE gt_techattr
FROM uja_dim_attr CLIENT SPECIFIED
FOR ALL ENTRIES IN gt_except_t
WHERE mandt EQ sy-mandt
AND appset_id EQ p_env
AND dimension EQ p_dim
AND attribute_name EQ gt_except_t-attrib.
IF sy-subrc EQ 0.
lcl_main=>create_alv2( ).
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ELSEIF p_reason EQ 30.
SELECT SINGLE data_table desc_table
INTO (gw_datatbl,gw_descrptbl)
FROM uja_dimension CLIENT SPECIFIED
WHERE mandt EQ sy-mandt
AND appset_id EQ p_env
AND dimension EQ p_dim.
IF sy-subrc EQ 0.
* gt_except_t[] = gt_except[].
* SORT gt_except_t BY attrib.
* DELETE ADJACENT DUPLICATES FROM gt_except_t COMPARING attrib.
* IF gt_except_t IS NOT INITIAL.
SELECT refdimension
INTO TABLE gt_refdim
FROM zbpcbt009 CLIENT SPECIFIED
* FOR ALL ENTRIES IN gt_except_t
WHERE mandt EQ sy-mandt
AND appset_id EQ p_env
AND dimension EQ p_dim
AND attrib EQ p_attr."gt_except_t-attrib.
IF sy-subrc EQ 0.
gt_refdim_t[] = gt_refdim[].
SORT gt_refdim_t BY dimension.
DELETE ADJACENT DUPLICATES FROM gt_refdim_t COMPARING
dimension.
IF gt_refdim_t IS NOT INITIAL.
SELECT data_table desc_table
INTO TABLE gt_refdata
FROM uja_dimension CLIENT SPECIFIED
FOR ALL ENTRIES IN gt_refdim_t
WHERE mandt EQ sy-mandt
AND appset_id EQ p_env
AND dimension EQ gt_refdim_t-dimension.
IF sy-subrc EQ 0.
SELECT appset_id dimension tech_name attribute_name
caption
INTO TABLE gt_attr
FROM uja_dim_attr CLIENT SPECIFIED
WHERE mandt EQ sy-mandt
AND appset_id EQ p_env
AND dimension EQ p_dim.
IF sy-subrc EQ 0.
SELECT tech_name
INTO TABLE gt_techattr
FROM uja_dim_attr CLIENT SPECIFIED
* FOR ALL ENTRIES IN gt_except_t
WHERE mandt EQ sy-mandt
AND appset_id EQ p_env
AND dimension EQ p_dim
AND attribute_name EQ p_attr."gt_except_t-attrib.
IF sy-subrc EQ 0.
REFRESH: gt_refdim_t.",gt_except_t.
lcl_main=>create_alv3( ).
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
* ENDIF.
* ENDIF.
ENDIF.
ENDIF.
*& Module SHOW_ALV1 OUTPUT
*&-------Yes you can, although you need to do it slightly differently, depending on what your 'original' form is doing.
You end up having to do two things:
1. In your second tabular form, you need to explicitly identify the relevant form fields using calls to the relevant APEX_ITEM functions - as well as this, you need to 'manually' specify the array number in the arguments for the function call, ensuring it doesn't overlap with your original form. Normally, this aspect is done for you.
2. Create your own custom CRUD processes, referencing the above elements. There are a few threads floating around the forum relating to how to deal with this. Do a search for "APEX_APPLICATION.G_F" or "HTMLDB_APPLICATION.G_F" for pointers.
Happy hunting! -
Updated field in IC Agent Inbox
Hi Forum,
What is the "Updated" field in agent inbox? Am not able to see any values in that when I search for service requests. Please help me on how to show the updated date in that.
Regards,
ShridharHi Shridhar,
I am afraid the "Updated" field is not managed at all.
If you look at workbench component ICCMP_INBOX, view InboxItems, context > context nodes > tree structure > tree node proxy > double-clic on class CL_ICCMP_IN_INBOXITEMS_CN02, double-clic on method GET_LASTUPDATE. Statement "clear value." indicates no value is returned.
Now you could enhance view ICCMP_INBOX,/InboxItems with custom code, and set your own content into method CL_ICCMP_IN_INBOXITEMS_CN02->GET_LASTUPDATE.
Do not count on reporting framework to provide the value for that field. Although structure CRMT_REPORT_LOCATORLIST foresees it, it is not filled with value by search query: see method CL_CRM_QUERYAUI_RUN_BTIL->GET_RESULT_LIST to get exact list of fields returned. CREATED_AT_DATE field is part of it, but not CHANGED_AT_DATE.
But you may perform the re-read of last change date even in CL_ICCMP_IN_INBOXITEMS_CN02->GET_LASTUPDATE method, because SAP already takes advantage of user-buffering in function CRM_ORDER_READ.
So adding following code to CL_ICCMP_IN_INBOXITEMS_CN02->GET_LASTUPDATE should show you correct last update
data:
lv_header_guid type crmt_object_guid,
lt_guids type crmt_object_guid_tab,
ls_req_obj type crmt_object_name,
lt_req_obj type crmt_object_name_tab,
lt_orderadm_h type crmt_orderadm_h_wrkt,
lv_date type sydatum,
lv_time type syuzeit.
lv_header_guid ?= me->bo->get_property( 'GUID' ).
check lv_header_guid is not initial.
insert lv_header_guid into table lt_guids.
ls_req_obj = 'ORDERADM_H'.
insert ls_req_obj into table lt_req_obj.
call function 'CRM_ORDER_READ'
exporting
it_header_guid = lt_guids
it_requested_objects = lt_req_obj
importing
et_orderadm_h = lt_orderadm_h
exceptions
others = 4.
if sy-subrc is initial.
read table lt_orderadm_h into crmt_orderadm_h_wrk index 1.
if sy-subrc is initial.
CONVERT TIME STAMP crmt_orderadm_h_wrk-changed_at TIME ZONE sy-zonlo
INTO DATE lv_date TIME lv_time.
may need to convert first to strings
concatenate lv_date lv_time into value separated by space.
endif.
endif.
Hope you can use these ideas
Kind regards
Walter -
How to display a variable in the message
Hi all,
I am developing an application where I am parking a document, can anyone please tell me how can I display the document number on the web dynpro screen with the message once the document has been parked. So far I have written the following code but this is just for displaying a message only and not the number:
DATA lo_api_controller TYPE REF TO if_wd_controller.
DATA lo_message_manager TYPE REF TO if_wd_message_manager.
lo_api_controller ?= wd_this->wd_get_api( ).
CALL METHOD lo_api_controller->get_message_manager
RECEIVING
message_manager = lo_message_manager.
CALL METHOD lo_message_manager->report_success
EXPORTING
message_text = 'Document has been parked.'DATA lo_api_controller TYPE REF TO if_wd_controller.
DATA lo_message_manager TYPE REF TO if_wd_message_manager.
data lv_document_number type string.
data lv_message_string type string.
lo_api_controller ?= wd_this->wd_get_api( ).
CALL METHOD lo_api_controller->get_message_manager
RECEIVING
message_manager = lo_message_manager.
*** get document number in lv_document_number
lv_document_number = .....
*** form message string
concatenate 'Document has been parked : Document No :' lv_document_number into lv_message_string.
CALL METHOD lo_message_manager->report_success
EXPORTING
message_text = lv_message_string. -
Syntax Error with EXPORT statement in ECC 6
Hi All,
I have one issue with EXPORT statement syntax.
I have declared data like below:
DATA: BEGIN OF mem_id,
mandt LIKE sy-mandt,
uname LIKE sy-uname,
modno LIKE sy-modno,
END OF mem_id.
export the memory id
EXPORT E_VBKOK XANZPK TEXTTAB XBOLNR TO MEMORY ID MEM_ID.
When I am checking the syntax error i am getting like "MEM_ID" must be a character-type field (data type C, N, D or T). by "INTERFACE". by "INTERFACE". "INTERFACE". by "INTERFACE". by "INTERFACE".
I know this statement would be like IMPORT ITAB TO JTAB FROM MEMORY ID 'table'. So I have written like below
EXPORT E_VBKOK XANZPK TEXTTAB XBOLNR TO MEMORY ID 'MEM_ID'. But still it is throwing an error.
Can you please let me know how can I resolve this?
Regards,
Jyothi CH.Hi Jyothi,
data: l_var type string.
concatenate '6' '8' into l_var separated by space.
export l_var to memory id 'BB'.
Here we have to declare the type(structure) for l_var not for BB
and in another program
data:l_var type string.
import l_var from memory id 'BB'.
write : l_var. -
Adding a new field to search of Service Contracts
Hi Experts,
I have a requirement where in to add an existing field i.e your ref (sold_to) your_ref_sold field into the search criteria of Service Contrct .
How to add the field to the Search .
I have few questions here.
1 need I use EEW to add the field to Search but its already existing?
2 If not How to append the Structure crmst_query_src_btil and enhace it with field required?
3 how to implement the BADI crm_rf_search_eew?
Thanking You,
Sree.The search help exit allows you to modify functionality of search help. If you add a new field to the
parameter list that is not contained on the selection method you can manually populate it within the search
help exit.
This would be performed within the u2018STEP DISPu2019 section. Once within this section all search help
data has been retrieved and is stored in table RECORD_TAB (record_tab-string) as one long string value.
Therefore you need to read table SHLP in-order to locate position of value within string.
Example:
To find position of personnel number (PERNR) within elemenory search
help M_PREMN you would use the following code:
Loop at record_tab.
read table shlp-fielddescr into wa_shlp
with key tabname = 'M_PREMN'
fieldname = 'PERNR'.
You could then use this information in the following way, for
example, to find a persons organisation unit:
select orgeh endda
up to 1 rows
from pa0001
into (ld_orgeh,ld_endda)
where pernr eq record_tab-string+wa_shlp-offset(8)
u201Cpernr length is 8
order by endda descending.
endselect.
select single orgtx
from t527x
into ld_orgtxt
where orgeh eq ld_orgeh and
sprsl eq sy-langu and
( endda ge sy-datum and
begda le sy-datum ).
If you have added a new field to the end of the parameters list
the next step is to populate it by adding this data to the end of
the record_tab string:
concatenate record_tab-string ld_orgtxt into record_tab-string.
modify record_tab.
endloop. -
Adding a new field to the search help exit
Hi friends,
adding a new field to the search help exit. How does it work ?
Thanks in advace
IlhanThe search help exit allows you to modify functionality of search help. If you add a new field to the
parameter list that is not contained on the selection method you can manually populate it within the search
help exit.
This would be performed within the u2018STEP DISPu2019 section. Once within this section all search help
data has been retrieved and is stored in table RECORD_TAB (record_tab-string) as one long string value.
Therefore you need to read table SHLP in-order to locate position of value within string.
Example:
To find position of personnel number (PERNR) within elemenory search
help M_PREMN you would use the following code:
Loop at record_tab.
read table shlp-fielddescr into wa_shlp
with key tabname = 'M_PREMN'
fieldname = 'PERNR'.
You could then use this information in the following way, for
example, to find a persons organisation unit:
select orgeh endda
up to 1 rows
from pa0001
into (ld_orgeh,ld_endda)
where pernr eq record_tab-string+wa_shlp-offset(8)
u201Cpernr length is 8
order by endda descending.
endselect.
select single orgtx
from t527x
into ld_orgtxt
where orgeh eq ld_orgeh and
sprsl eq sy-langu and
( endda ge sy-datum and
begda le sy-datum ).
If you have added a new field to the end of the parameters list
the next step is to populate it by adding this data to the end of
the record_tab string:
concatenate record_tab-string ld_orgtxt into record_tab-string.
modify record_tab.
endloop.
Maybe you are looking for
-
Report - S_PLO_86000030 - G/L A/C Balance
Hi, In the above mentioned report we are not able to get Account Number. Only description is available. Is there any way get the Account Number in this report.? Bye, Ramesh
-
Creating setup file for java project
hi My project has java files, properties files,batch files as well as two jar files,mail.jar & activation.jar(for importing packages). I have to include these jar files while setting environment variables. Now i want to make setup file for myproject
-
Does anyone have a comprehensive list of all technology that requires security patching in the oracle EBS and supporting infrastructure? I'd prefer comments as opposed to endless links. And possibly if you could provide a split of what Oracle will pa
-
Usb0 Interface Isn't Showing As Available?
First of all, I've never used usbnet before, and I HAVE searched the forums & google for answers. For some reason, I can't seem to activate usb0 interface. I was trying to tether my android phone, instead of having to use the mobile AP over wifi. I
-
Hi, I am pretty new to BO and Crystal, hence may be asking basic queries. But I am starting a new thread after searching through the various forums and doing a few rounds of googling. 1. Drill/links on graphs. Clicking on the lines/bars inside a grap