Processing complex flat file

I have a requirement to load complex (hierarchical) flat file to Oracle database. The flat file has multiple (different) records. Each record is fixed positional.Here is an example
1 123455 6777888
2566773 4444 test
466666 7844 tyeww
477777 7844 tyeww
5213
Records are identified by the first character in the line. (In this example we have record type 1, record type 2, record type 4 and record type 5). Also the records are hierarchical.
Record Type 1
---Record Type 2 *
------Record Type 4 *
---Record Type 5
When the data is loaded to database it should be normalized. That means I have to take some value from Record Type 1, Record Type 2 and Record Type 4.
Can ODI handle this? do I have to write some script? If so How?

OK,
The following technique will help you:
1) Create a database sequence
2) create a interface to load a temp table (I named MY_TEMP_TABLE) with 1 "varchar' column so long as the biggest record (I named col_record), 1 column to store the sequence (I named col_seq) and 1 column to storage the parent line (that one should accept null values) (I named col_parent)
3) Map the record to col_record at source
4) Map the sequence to the col_seq at staging area
5) at col_parent column, put the following code and map it to staging area:
case when substr(src.col_record, 1,1) 1
then (select max(col_sequence)
from MY_TEMP_TABLE mtt
where substr(mtt.col_record, 1,1) < substr(src.col_record, 1,1)
else
null
end
PS: src.col_record is the column from your text file
This code will create the right hierarchy to the file.
after that, you can you the first technique that I told you, dragging and drooping this MY_TEMP_TABLE so many time as records types at a new interface, each one with the right filter, and create the joins.
You could even, add one more column to load the record type and work with it instead the "substr" command in the above select and at filter in the new interface.
Did I miss something? Does it solve the problem?

Similar Messages

  • Oracle best product to process the flat file

    Hi,
    Please help me by suggesting the best available oracle tool / product to read / write / process the flat file in oracle server.
    Thanks
    Kannan

    SQL Loader, external table, utl file, ...
    And as usual - DEFINE BEST.
    Gints Plivna
    http://www.gplivna.eu

  • How To handle complex Flat File in BDC( V.V. Urgent)

    Hi All,
    Anybody help in these case.
    I have to write the BDC for a complex File.
    Here is the Scenario
    I An recording for Tcode CN21.
    1network -> many activities
    1 Activity ->many components
    Any body Help ifor this case,
    Points will be awarded.
    Regards,
    Jayasimha

    Hi Jayasimha
    Can u explain what is the problem that u are facing? we will be able to help u if u let u know what is the problem.
    as far as what u have mentioned, first do a recording in SHDB for the transaction CN21 and then in the program get all the data from the flat file into an internal table. then build a BDC.
    Cheers

  • Process for Flat file delta load from Application server to transactional??

    I want to do a flat file extraction in delta loads from application server and that should be loaded into a transactional cubes scheduling a process chain.
    Can any one help with ABAP code and step by step process for this?
    Thank you
    Devi

    Hi Devi,
    As per your explaination, you want to load a list of files from application server using process chain.
    You can do this with below steps.
    1) Create a Event and call event to run Process chain multiple times.
    2) Put all filenames in a file say, source-File
    3) Write a rooting to read filename from Source-File and trigger InfoPackage
    4) At the end of the process chain create new customized program which will delete first line from Source-File so that it will take next file in next run as well as delete currently loaded file. Once this is done trigger event again to start process chain again.
    Regards,
    Ganesh

  • Problem with Active Sync Process in Flat File

    I have a flat file (Employee.csv) as a resource. I populated that data into IDM using Active Sync.
    Ive created another flat file that is empty (CopyEmployee.csv) and added that as resource to IDM.
    By using the Active Sync process I want to populate the data from Employee.csv to CopyEmployee.csv.
    I tried but unable to get the output. Is this really possible ?
    Im using IDM 6.0 on SunApp 8.1

    Nope, flatfile is a read only adapter, to the best of my knowledge. You can use it to feed IM, that's it. No recon, nothing else. That's coz IM doesn't maintain a state for it (just does a diff with an index file during ActiveSync).
    You can think of maintaining a simulated resource on a file though.
    Ankush

  • Receiver CC File - Complex Flat File Conversion

    Dear forum users,
    I want your opinion about the feasibility of the content conversion described below using Receiver CC.
    The structure of my file is the following
    - A File header segment (FH)
    - 1...N Business Object that is described by many segments
    - A file footer segment (FF)
    Exemple of business Object : Purchase Order :
    1 Header Segment (POH)
    N Item Segments (POI)
    Exemple of file :
    FH
    POH (PO 1)
    POI (PO 1)
    POI (PO 1)
    POH (PO 2)
    POI (PO 2)
    POI (PO 2)
    FF
    Is content conversion standard tool can deal with such a structure ?
    Note that in the file created, the order of each segment has a big importance :
    PO Items of PO 1 must be after PO Header of PO 1 but before PO Header of PO 2 !
    I thnik the structure requested by converter described in documentation do not fit with my case :
    <root>...
      <nameA>
            <value1>value</value1>
            <value2>value</value2>
            <value3>value</value3>
      </nameA>
      <nameB>
            <value4>value</value4>
      </nameB>
    </root>
    I should have :
    <root>
    <FH>
      <PO>
        <POH>...</POH>
        <POI>...</POI>
        <POI>...</POI>
      </PO>
      <PO>
        <POH>...</POH>
        <POI>...</POI>
        <POI>...</POI>
      </PO>
    </FH>
    </root>
    Thanks very much for your help and opinions
    Jean-Charles.
    Edited by: Jean-Charles CARRET on Jan 3, 2011 6:12 PM

    Thank you Stephan for your answer.
    Firstly, could you confirm whether the "row" elements under the root tag are on the same level than other elements (POH, POI, FF and FH) or not ?
    I just check the both following parts of the help documentation called :
    - [Inserting MessageTransformBean in the Module Processor|http://help.sap.com/saphelp_nwpi711/helpdata/en/57/0b2c4142aef623e10000000a155106/frameset.htm]
    - Using the dispatcher : Example
    For me, it is not clear.
    1. Do I need to create an external class (XSLT Library for example) to manipulate my XML data before passing it to the standard Flat File Conversion tool ? (Here the manipulation would be to remove the row XML elements)
    2. Where is located the famous "Data" directory in which I must put my xsl file ?
    Thanks for clarifications.
    Jean-Charles

  • Processing of Flat File of 2.5GB size in OWB

    Can any one throw some light on performance of OWB in processing an input file of size 2.5GB.
    Thanks in advance

    This will take some time due to IO. Use an external table to process the file and be patient.
    Regards
    Jörg

  • How to Process flat File in Oracle Apps through Concurrent Program

    Hello Everyone,
    My client has a request, to process a bank file (Lockbox) which is a flat file that will be copied on UNIX box and I will have to create a new concurrent request that will process this flat file and will update receipt information in Oracle Apps database tables.
    Could you please suggest, if there are any other standard Oracle Apps functions (Example FND) available which can be used through Concurrent program that can be used to open a file from a particular directory and can be read from the flat file and after processing this file can be closed.
    Please let me know, if you have a small example, that would help me a lot.
    Thanks

    There are base concurrent programs in Accts Receivable that do consume lockbox flat files. Pl see the AR Setup/User Guides at
    http://download.oracle.com/docs/cd/B40089_10/current/html/docset.html
    Srini

  • Unable to process flat-files without delimiters in ODI 11.1.1.7

    Hi,
    We have a requirement to process a flat file using ODI 11.1.1.7 (installed on Windows and mounted on Oracle 11g Database).  The flat-file is a normal ASCII file coming from mainframes machine and has no delimiters (column as well as rows).  The first 48 characters is ROW 1, from character 49 to 96 is ROW 2 and so on.  I am unable to create a DataStore for this file in ODI.  If I reverse engineer using the file RKM, it is creating a datastore with over 2000 columns which is not the case (actual file layout given below).  The absence of a row delimiter is making ODI think that the entire file has only one single row. 
    I am also unable to create a DataStore manually. If I am not providing any value for the "row delimiter" it is throwing me an error.  However, I am able to process this file using SQL*Loader (there is a FIX option available where we can specify the length of a row). 
    Is there a way to do it from within ODI?  I tried to modify a KM to create a control file for SQL*Loader and execute it but the control file is not getting generated as expected.
    File Layout:
    Column 1 - Warrant Number (Position 1 - 9) - Number
    Column 2 - Type (Position 10-10) - Number
    Column 3 - Warrant Amount (Position 11-18) - Packed Decimal Signed
    Column 4 - Issue Fund (Position 19-22) - String
    Column 5 - Issue Sub Fund (Position 23-24) - String
    Column 6 - Filler (Position 25-48) - String
    Thanks
    Srivatsan P

    Hi LuizFilipe,
    I tried also with your method but i am getting below error when i am trying to view data.
    See com.borland.dx.dataset.DataSetException error code:  BASE+62
    com.borland.dx.dataset.DataSetException: Execution of query failed.
    Chained exception:
    java.sql.SQLException: ODI-40439: Could not read heading rows from file
      at com.sunopsis.jdbc.driver.file.FileResultSet.<init>(FileResultSet.java:164)
      at com.sunopsis.jdbc.driver.file.impl.commands.CommandSelect.execute(CommandSelect.java:57)
      at com.sunopsis.jdbc.driver.file.CommandExecutor.executeCommand(CommandExecutor.java:33)
      at com.sunopsis.jdbc.driver.file.FilePreparedStatement.executeQuery(FilePreparedStatement.java:135)
      at com.borland.dx.sql.dataset.o.f(Unknown Source)
      at com.borland.dx.sql.dataset.QueryProvider.e(Unknown Source)
      at com.borland.dx.sql.dataset.JdbcProvider.provideData(Unknown Source)
      at com.borland.dx.dataset.StorageDataSet.refresh(Unknown Source)
      at com.borland.dx.sql.dataset.QueryDataSet.refresh(Unknown Source)
      at com.sunopsis.graphical.frame.edit.AbstractEditFrameGridBorland.initialize(AbstractEditFrameGridBorland.java:628)
      at com.sunopsis.graphical.frame.edit.AbstractEditFrameGridBorland.<init>(AbstractEditFrameGridBorland.java:869)
      at com.sunopsis.graphical.frame.edit.EditFrameTableData.<init>(EditFrameTableData.java:50)
      at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
      at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
      at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
      at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
      at oracle.odi.ui.editor.AbstractOdiEditor$1.run(AbstractOdiEditor.java:176)
      at oracle.ide.dialogs.ProgressBar.run(ProgressBar.java:656)
      at java.lang.Thread.run(Thread.java:662)
    Well i created file datastore with selected below things
    File format : fixed
    Heading(number of lines) : 0
    field separator : null
    record separator : by default --> MS-DOS
    text delimiter: (blank)
    decimal separator : (blank)
    then when i did reverse engineering, able to see the row of data and then i separate the data with c1,c2,c3,c4
    please let me know did i miss something.
    Thanks
    Himanshu

  • Not able to display flat file's error line in output

    The below Source Code is BDC for XD01 (update Customer Master Record) in CALL TRANSACTION method. This program is written in call transaction method cause as per user’s requirement, user wants error log to be printed as soon as the BDC process finished in the background mode.
    When you execute this below program it will show a selection screen from where you can select your flat file from system.
    After executing this code show output like below as soon as it finished processing the FLAT file.
    1. Customer Update Summary
    2. Successful record with customer number and name.
    3. Error Records with 'record number' and 'reason for error'
    (For testing you just have to copy-paste-save-active  the source code)
    And I have encountered an issue over here in 3rd section-“Record Number” of “Error Records”.
    The “Record Number” is for display the line number of that flat file line which in which error has occurred.
    The “Record Number”  Entries showing only ‘0’ instead of showing line number of error entry .
    I have used Function Module FORMAT_MESSAGE to capture the errors. But not able to display line number of that flat file which is containing error.
    So please suggest me what changes I should make in below source code to get proper output.
    Flat file for your R&D
    1000     1000     10     10     0001     Company     Chobey & Group1N     Choubey     Amit Choubey     New Alipore Road     Habijabi Apartment     Rastar Dhra      777777     kolkata     777777     kolikata     howrah     777777     IN     WB     1111111111     2222222222     3333333333     4444444444     5555555555     6666666666     0700     EAST     02     01     1060003     A1     Z1     ZZ13     CALS     1     A     10     1
    1000     1000     10     10     0001     Company     Chobey & Group2N     Choubey     Amit Choubey     New Alipore Road     Habijabi Apartment     Rastar Dhra      777777     kolkata     777777     kolikata     howrah     777777     IN     WB     1111111111     2222222222     3333333333     4444444444     5555555555     6666666666     0700     EAST     02     01     1060003     A1     Z1     ZZ13     CALS     1     A     10     1
    1000     1000     10     10     0001     Company     Chobey & Group3N     Choubey     Amit Choubey     New Alipore Road     Habijabi Apartment     Rastar Dhra      777777     kolkata     777777     kolikata     howrah     777777     IN     WB     1111111111     2222222222     3333333333     4444444444     5555555555     6666666666     0700     EAST     02     01     1060003     A1     Z1     ZZ13     CALS     .     A     10     1
    1000     1000     10     10     0001     Company     Chobey & Group4N     Choubey     Amit Choubey     New Alipore Road     Habijabi Apartment     Rastar Dhra      777777     kolkata     777777     kolikata     howrah     777777     IN     WB     1111111111     2222222222     3333333333     4444444444     5555555555     6666666666     0700     EAST     02     01     1060003     A1     Z1     ZZ13     CALS     1     A     ..     1
    1000     1000     10     10     0001     Company     Chobey & Group5N     Choubey     Amit Choubey     New Alipore Road     Habijabi Apartment     Rastar Dhra      777777     kolkata     777777     kolikata     howrah     777777     IN     WB     1111111111     2222222222     3333333333     4444444444     5555555555     6666666666     0700     EAST     02     01     1060003     A1     Z1     ZZ13     CALS     1     A     10     1
    And Source Code
    *& Report  Z_TEST_SAI                                                  *
    REPORT  Z_TEST_SAI no standard page heading line-size 255.
    TYPES: BEGIN OF t_cust,
            bukrs like rf02d-bukrs,
            vkorg like rf02d-vkorg,
            vtweg like rf02d-vtweg,
            spart like rf02d-spart,
            ktokd like rf02d-ktokd,
            anred like kna1-anred,
            name1 like kna1-name1,
            sortl like kna1-sortl,
            name2 like kna1-name2,
            name3 like kna1-name3,
            name4 like kna1-name4,
            stras like kna1-stras,
            pfach like kna1-pfach,
            ort01 like kna1-ort01,
            pstlz like kna1-pstlz,
            ort02 like kna1-ort02,
            pfort like kna1-pfort,
            pstl2 like kna1-pstl2,
            land1 like kna1-land1,
            regio like kna1-regio,
            telx1 like kna1-telx1,
            telf1 like kna1-telf1,
            telfx like kna1-telfx,
            telf2 like kna1-telf2,
            teltx like kna1-teltx,
            stceg like kna1-stceg,
            cityc like kna1-cityc,
            lzone like kna1-lzone,
            niels like kna1-niels,
            kukla like kna1-kukla,
            akont like knb1-akont,
            fdgrv like knb1-fdgrv,
            vzskz like knb1-vzskz,
            zterm like knb1-zterm,
            vkbur like knvv-vkbur,
            versg like knvv-versg,
            vsbed like knvv-vsbed,
            ktgrd like knvv-ktgrd,
            taxkd like knvi-taxkd,
    END OF t_cust.
    TYPES: BEGIN OF t_sucrec,
              cnum TYPE kna1-kunnr,                          "Customer Number
              cnam TYPE kna1-name1,                          "Customer Name
    END OF t_sucrec.
    TYPES: BEGIN OF t_errrec,
    *        lineno TYPE i,                                  "Line Number
             lineno TYPE string,
           message TYPE string,                              "Error Message
    END OF t_errrec.
    DATA: v_file TYPE string,                                "Variable for storing flat file
    it_cust TYPE STANDARD TABLE OF t_cust,                   "Internal table of Customer
    wa_cust LIKE LINE OF it_cust,                            "Workarea of Internal table it_cust
    it_sucrec TYPE STANDARD TABLE OF t_sucrec,               "Internal table of Success records
    wa_sucrec LIKE LINE OF it_sucrec,                        "Workarea of Internal table it_sucrec
    it_errrec TYPE STANDARD TABLE OF t_errrec,
    wa_errrec LIKE LINE OF it_errrec,
    it_bdctab LIKE bdcdata OCCURS 0 WITH HEADER LINE,        "Internal table structure of BDCDATA
    it_messagetab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE, "Tracing Error Messages
    v_date LIKE sy-datum,                                    "Controlling of session date
    v_index LIKE sy-index,                                   "Index Number
    v_totrec TYPE i,                                         "Total Records
    v_errrec TYPE i,                                         "Error Records
    v_sucrec TYPE i,                                         "Success Records
    v_sesschk TYPE c.                                        "Session maintenance
    *& SELECTION-SCREEN
    SELECTION-SCREEN: BEGIN OF BLOCK blk1 WITH FRAME TITLE text-001 NO INTERVALS.
    PARAMETERS: p_file    TYPE rlgrap-filename.              "rlgrap-filename is a predefined structure
    SELECTION-SCREEN: END OF BLOCK blk1.
    SELECTION-SCREEN: BEGIN OF BLOCK blk2 WITH FRAME TITLE text-002 NO INTERVALS.
    PARAMETERS: p_mode    LIKE ctu_params-dismode DEFAULT 'N',
                p_update  LIKE ctu_params-updmode DEFAULT 'A'.
    SELECTION-SCREEN END OF BLOCK blk2.
    *& INITIALIZATION
    INITIALIZATION.
    v_date = sy-datum - 1.
    *& AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
    CALL FUNCTION 'F4_FILENAME'
    EXPORTING
    program_name = syst-cprog
    dynpro_number = syst-dynnr
    FIELD_NAME = ' '
    IMPORTING
    file_name = p_file.
    *& START-OF-SELECTION
    START-OF-SELECTION.
    v_file = p_file.
    CALL FUNCTION 'GUI_UPLOAD'
    EXPORTING
    filename = v_file
    filetype = 'ASC'
    has_field_separator = 'X'
    TABLES
    data_tab = it_cust
    EXCEPTIONS
    file_open_error = 1
    file_read_error = 2
    no_batch = 3
    gui_refuse_filetransfer = 4
    invalid_type = 5
    no_authority = 6
    unknown_error = 7
    bad_data_format = 8
    header_not_allowed = 9
    separator_not_allowed = 10
    header_too_long = 11
    unknown_dp_error = 12
    access_denied = 13
    dp_out_of_memory = 14
    disk_full = 15
    dp_timeout = 16
    OTHERS = 17.
    IF sy-subrc = 0.
    *MESSAGE ID sy-msgid
    *TYPE sy-msgty
    *NUMBER sy-msgno
    *WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.
    *& END-OF-SELECTION
    END-OF-SELECTION.
    v_index = sy-index.
    LOOP AT it_cust INTO wa_cust.
      perform bdc_dynpro      using 'SAPMF02D' '0100'.
        perform bdc_field       using 'BDC_CURSOR'
                                      'RF02D-KTOKD'.
        perform bdc_field       using 'BDC_OKCODE'
                                      '/00'.
        perform bdc_field       using 'RF02D-BUKRS'
                                      wa_cust-bukrs.
        perform bdc_field       using 'RF02D-VKORG'
                                      wa_cust-vkorg.
        perform bdc_field       using 'RF02D-VTWEG'
                                      wa_cust-vtweg.
        perform bdc_field       using 'RF02D-SPART'
                                      wa_cust-spart.
        perform bdc_field       using 'RF02D-KTOKD'
                                      wa_cust-ktokd.
        perform bdc_dynpro      using 'SAPMF02D' '0110'.
        perform bdc_field       using 'BDC_CURSOR'
                                      'KNA1-TELTX'.
        perform bdc_field       using 'BDC_OKCODE'
                                      '=VW'.
        perform bdc_field       using 'KNA1-ANRED'
                                      wa_cust-anred.
        perform bdc_field       using 'KNA1-NAME1'
                                      wa_cust-name1.
        perform bdc_field       using 'KNA1-SORTL'
                                      wa_cust-sortl.
        perform bdc_field       using 'KNA1-NAME2'
                                      wa_cust-name2.
        perform bdc_field       using 'KNA1-NAME3'
                                      wa_cust-name3.
        perform bdc_field       using 'KNA1-NAME4'
                                      wa_cust-name4.
        perform bdc_field       using 'KNA1-STRAS'
                                      wa_cust-stras.
        perform bdc_field       using 'KNA1-PFACH'
                                      wa_cust-pfach.
        perform bdc_field       using 'KNA1-ORT01'
                                      wa_cust-ort01.
        perform bdc_field       using 'KNA1-PSTLZ'
                                      wa_cust-pstlz.
        perform bdc_field       using 'KNA1-ORT02'
                                      wa_cust-ort02.
        perform bdc_field       using 'KNA1-PFORT'
                                      wa_cust-pfort.
        perform bdc_field       using 'KNA1-PSTL2'
                                      wa_cust-pstl2.
        perform bdc_field       using 'KNA1-LAND1'
                                      wa_cust-land1.
        perform bdc_field       using 'KNA1-REGIO'
                                      wa_cust-regio.
        perform bdc_field       using 'KNA1-SPRAS'
                                      'EN'.
        perform bdc_field       using 'KNA1-TELX1'
                                      wa_cust-telx1.
        perform bdc_field       using 'KNA1-TELF1'
                                      wa_cust-telf1.
        perform bdc_field       using 'KNA1-TELFX'
                                      wa_cust-telfx.
        perform bdc_field       using 'KNA1-TELF2'
                                      wa_cust-telf2.
        perform bdc_field       using 'KNA1-TELTX'
                                      wa_cust-teltx.
        perform bdc_dynpro      using 'SAPMF02D' '0120'.
        perform bdc_field       using 'BDC_CURSOR'
                                      'KNA1-CITYC'.
        perform bdc_field       using 'BDC_OKCODE'
                                      '=VW'.
        perform bdc_field       using 'KNA1-STCEG'
                                      wa_cust-stceg.
        perform bdc_field       using 'KNA1-CITYC'
                                      wa_cust-cityc.
        perform bdc_field       using 'KNA1-LZONE'
                                      wa_cust-lzone.
        perform bdc_dynpro      using 'SAPMF02D' '0125'.
        perform bdc_field       using 'BDC_CURSOR'
                                      'KNA1-KUKLA'.
        perform bdc_field       using 'BDC_OKCODE'
                                      '=VW'.
        perform bdc_field       using 'KNA1-NIELS'
                                      wa_cust-niels.
        perform bdc_field       using 'KNA1-KUKLA'
                                      wa_cust-kukla.
        perform bdc_dynpro      using 'SAPMF02D' '0130'.
        perform bdc_field       using 'BDC_CURSOR'
                                      'KNBK-BANKS(01)'.
        perform bdc_field       using 'BDC_OKCODE'
                                      '=VW'.
        perform bdc_dynpro      using 'SAPMF02D' '0340'.
        perform bdc_field       using 'BDC_CURSOR'
                                      'RF02D-KUNNR'.
        perform bdc_field       using 'BDC_OKCODE'
                                      '=VW'.
        perform bdc_dynpro      using 'SAPMF02D' '0360'.
        perform bdc_field       using 'BDC_CURSOR'
                                      'KNVK-NAMEV(01)'.
        perform bdc_field       using 'BDC_OKCODE'
                                      '=VW'.
        perform bdc_dynpro      using 'SAPMF02D' '0210'.
        perform bdc_field       using 'BDC_CURSOR'
                                      'KNB1-VZSKZ'.
        perform bdc_field       using 'BDC_OKCODE'
                                      '=VW'.
        perform bdc_field       using 'KNB1-AKONT'
                                      wa_cust-akont.
        perform bdc_field       using 'KNB1-FDGRV'
                                      wa_cust-fdgrv.
        perform bdc_field       using 'KNB1-VZSKZ'
                                      wa_cust-vzskz.
        perform bdc_dynpro      using 'SAPMF02D' '0215'.
        perform bdc_field       using 'BDC_CURSOR'
                                      'KNB1-ZTERM'.
        perform bdc_field       using 'BDC_OKCODE'
                                      '=VW'.
        perform bdc_field       using 'KNB1-ZTERM'
                                      wa_cust-zterm.
        perform bdc_dynpro      using 'SAPMF02D' '0220'.
        perform bdc_field       using 'BDC_CURSOR'
                                      'KNB5-MAHNA'.
        perform bdc_field       using 'BDC_OKCODE'
                                      '=VW'.
        perform bdc_dynpro      using 'SAPMF02D' '0230'.
        perform bdc_field       using 'BDC_CURSOR'
                                      'KNB1-VRSNR'.
        perform bdc_field       using 'BDC_OKCODE'
                                      '=VW'.
        perform bdc_dynpro      using 'SAPMF02D' '0610'.
        perform bdc_field       using 'BDC_OKCODE'
                                      '=VW'.
        perform bdc_field       using 'BDC_CURSOR'
                                      'RF02D-KUNNR'.
        perform bdc_dynpro      using 'SAPMF02D' '0310'.
        perform bdc_field       using 'BDC_CURSOR'
                                      'KNVV-VERSG'.
        perform bdc_field       using 'BDC_OKCODE'
                                      '=VW'.
        perform bdc_field       using 'KNVV-AWAHR'
                                      '100'.
        perform bdc_field       using 'KNVV-VKBUR'
                                      wa_cust-vkbur.
        perform bdc_field       using 'KNVV-WAERS'
                                      'INR'.
        perform bdc_field       using 'KNVV-KALKS'
                                      '1'.
        perform bdc_field       using 'KNVV-VERSG'
                                      wa_cust-versg.
        perform bdc_dynpro      using 'SAPMF02D' '0315'.
        perform bdc_field       using 'BDC_CURSOR'
                                      'KNVV-VSBED'.
        perform bdc_field       using 'BDC_OKCODE'
                                      '=VW'.
        perform bdc_field       using 'KNVV-LPRIO'
        perform bdc_field       using 'KNVV-KZAZU'
                                      'X'.
        perform bdc_field       using 'KNVV-VSBED'
                                      wa_cust-vsbed.
        perform bdc_field       using 'KNVV-ANTLF'
                                      '9'.
        perform bdc_dynpro      using 'SAPMF02D' '0320'.
        perform bdc_field       using 'BDC_CURSOR'
                                      'KNVV-KTGRD'.
        perform bdc_field       using 'BDC_OKCODE'
                                      '=VW'.
        perform bdc_field       using 'KNVV-BOKRE'
                                      'X'.
        perform bdc_field       using 'KNVV-KTGRD'
                                      wa_cust-ktgrd.
        perform bdc_dynpro      using 'SAPMF02D' '1350'.
        perform bdc_field       using 'BDC_CURSOR'
                                      'KNVI-TAXKD(01)'.
        perform bdc_field       using 'BDC_OKCODE'
                                      '=VW'.
        perform bdc_field       using 'KNVI-TAXKD(01)'
                                      wa_cust-taxkd.
        perform bdc_dynpro      using 'SAPMF02D' '0324'.
        perform bdc_field       using 'BDC_CURSOR'
                                      'KNVP-PARVW(01)'.
        perform bdc_field       using 'BDC_OKCODE'
                                      '=UPDA'.
    CALL TRANSACTION 'XD01' USING it_bdctab
    MODE p_mode
    UPDATE p_update
    MESSAGES INTO it_messagetab.
    IF sy-subrc = 0.
    *& reading success records to corresponding internal table
    READ TABLE it_messagetab WITH KEY msgtyp = 'S'.
    IF sy-subrc = 0.
    wa_sucrec-cnum = it_messagetab-msgv1.
    wa_sucrec-cnam = wa_cust-name1.
    APPEND wa_sucrec TO it_sucrec.
    CLEAR wa_sucrec.
    ENDIF.
    ELSE.
    *& reading error records to corresponding internal table
    READ TABLE it_messagetab WITH KEY msgtyp = 'E'.
    IF sy-subrc = 0.
    CALL FUNCTION 'FORMAT_MESSAGE'
    EXPORTING
    id = sy-msgid
    no = it_messagetab-msgnr
    v1 = it_messagetab-msgv1
    v2 = it_messagetab-msgv2
    v3 = it_messagetab-msgv3
    v4 = it_messagetab-msgv4
    IMPORTING
    msg = wa_errrec-message.
    wa_errrec-lineno = v_index.
    *******wa_errrec-lineno  = v_index.
    *******wa_errrec-message = it_messagetab-msgv1.
    APPEND wa_errrec TO it_errrec.
    CLEAR wa_errrec.
    ENDIF.
    ENDIF.
    CLEAR : it_bdctab, it_messagetab.
    REFRESH: it_bdctab, it_messagetab.
    ENDLOOP.
    DESCRIBE TABLE it_cust LINES v_totrec.
    DESCRIBE TABLE it_errrec LINES v_errrec.
    DESCRIBE TABLE it_sucrec LINES v_sucrec.
    PERFORM disp_data.
    SKIP 2.
    IF v_sucrec > 0.
    PERFORM disp_success_data.
    ENDIF.
    SKIP 2.
    IF v_errrec > 0.
    PERFORM disp_error_data.
    ENDIF.
    *& Form bdc_dynpro
    *#  text
    *#  -->P_0104 text
    *#  -->P_0105 text
    FORM bdc_dynpro USING program
    dynpro.
    CLEAR it_bdctab.
    it_bdctab-program = program.
    it_bdctab-dynpro = dynpro.
    it_bdctab-dynbegin = 'X'.
    APPEND it_bdctab.
    ENDFORM. " bdc_dynpro
    *& Form bdc_field
    *#  text
    *#  -->P_0109 text
    *#  -->P_IT_cust_LIFNR text
    FORM bdc_field USING fnam
    fval.
    CLEAR it_bdctab.
    it_bdctab-fnam = fnam.
    it_bdctab-fval = fval.
    APPEND it_bdctab.
    ENDFORM. " bdc_field
    *& Form disp_data
    *#  text
    *#  --> p1 text
    *#  <-- p2 text
    FORM disp_data .
    ULINE (45).
    WRITE : / sy-vline,
    12 'FAMD CUSTOMER UPDATE SUMMARY'(004) COLOR 1,
    45 sy-vline.
    ULINE /(45).
    WRITE : / sy-vline,
    'Total Records Processed'(007),
    28 '=',
    30 v_totrec,
    45 sy-vline,
    / sy-vline,
    'Error Records'(005),
    28 '=',
    30 v_errrec,
    45 sy-vline,
    / sy-vline,
    'Successful Records'(006),
    28 '=',
    30 v_sucrec,
    45 sy-vline.
    ULINE /(45).
    ENDFORM. " disp_data
    *& Form disp_success_data
    *#  text
    *#  --> p1 text
    *#  <-- p2 text
    FORM disp_success_data .
    ULINE (45).
    WRITE : / sy-vline,
    14 'Successful Records'(012) COLOR 1,
    45 sy-vline.
    ULINE /(45).
    WRITE : / sy-vline ,
    'Customer Number'(010) COLOR 2,
    17 sy-vline,
    25 'Customer Name'(011) COLOR 2,
    45 sy-vline.
    ULINE /(45).
    LOOP AT it_sucrec INTO wa_sucrec.
    WRITE: / sy-vline ,
    wa_sucrec-cnum,
    17 sy-vline,
    19 wa_sucrec-cnam,
    45 sy-vline.
    ENDLOOP.
    ULINE /(45).
    ENDFORM. " disp_success_data
    *& Form disp_error_data
    *#  text
    *#  --> p1 text
    *#  <-- p2 text
    FORM disp_error_data .
    ULINE (85).
    WRITE : / sy-vline,
    35 'Error Records'(013) COLOR 1,
    85 sy-vline.
    ULINE /(85).
    WRITE : / sy-vline,
    'Record Number'(008) COLOR 2,
    sy-vline,
    37 'Reason for error'(009) COLOR 2,
    85 sy-vline.
    ULINE /(85).
    LOOP AT it_errrec INTO wa_errrec.
    WRITE : / sy-vline,
    wa_errrec-lineno,
    17 sy-vline,
    wa_errrec-message,
    85 sy-vline.
    ENDLOOP.
    ULINE /(85).
    ENDFORM. " disp_error_data

    Worked out n found the solution

  • Golden Gate for flat file

    hi,
    I have tried with GoldenGate for Oracle/ non-Oracle databases. Now, I am trying for flat file.
    What i have done so far:
    1. I have downloaded Oracle "GoldenGate Application Adapters 11.1.1.0.0 for JMS and Flat File Media Pack"
    2. Kept it on the same machine where Database and GG manager process exists. Port for GG mgr process 7809, flat file 7816
    3. Following doc GG flat file administrators guide Page 9 --> configuration
    4. Extract process on GG manager process_
    edit params FFE711*
    extract ffe711
    userid ggs@bidb, password ggs12345
    discardfile E:\GoldenGate11gMediaPack\V26071-01\dirrpt\EXTFF.dsc, purge
    rmthost 10.180.182.77, mgrport 7816
    rmtfile E:\GoldenGate11gMediaPack\V26071-01\dirdat\ffremote, purge, megabytes 5
    add extract FFE711, EXTTRAILSOURCE ./dirdat/oo*
    add rmttrail ./dirdat/pp, extract FFE711, megabytes 20*
    start extract  FFE711*
    view report ffe711*
    Oracle GoldenGate Capture for Oracle
    Version 11.1.1.1 OGGCORE_11.1.1_PLATFORMS_110421.2040
    Windows (optimized), Oracle 11g on Apr 22 2011 03:28:23
    Copyright (C) 1995, 2011, Oracle and/or its affiliates. All rights reserved.
    Starting at 2011-11-07 18:24:19
    Operating System Version:
    Microsoft Windows XP Professional, on x86
    Version 5.1 (Build 2600: Service Pack 2)
    Process id: 4628
    Description:
    ** Running with the following parameters **
    extract ffe711
    userid ggs@bidb, password ********
    discardfile E:\GoldenGate11gMediaPack\V26071-01\dirrpt\EXTFF.dsc, purge
    rmthost 10.180.182.77, mgrport 7816
    rmtfile E:\GoldenGate11gMediaPack\V26071-01\dirdat\ffremote, purge, megabytes 5
    CACHEMGR virtual memory values (may have been adjusted)
    CACHEBUFFERSIZE: 64K
    CACHESIZE: 1G
    CACHEBUFFERSIZE (soft max): 4M
    CACHEPAGEOUTSIZE (normal): 4M
    PROCESS VM AVAIL FROM OS (min): 1.77G
    CACHESIZEMAX (strict force to disk): 1.57G
    Database Version:
    Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - Production
    PL/SQL Release 11.1.0.7.0 - Production
    CORE 11.1.0.7.0 Production
    TNS for 32-bit Windows: Version 11.1.0.7.0 - Production
    NLSRTL Version 11.1.0.7.0 - Production
    Database Language and Character Set:
    NLS_LANG environment variable specified has invalid format, default value will b
    e used.
    NLS_LANG environment variable not set, using default value AMERICAN_AMERICA.US7A
    SCII.
    NLS_LANGUAGE = "AMERICAN"
    NLS_TERRITORY = "AMERICA"
    NLS_CHARACTERSET = "AL32UTF8"
    Warning: your NLS_LANG setting does not match database server language setting.
    Please refer to user manual for more information.
    2011-11-07 18:24:25 INFO OGG-01226 Socket buffer size set to 27985 (flush s
    ize 27985).
    2011-11-07 18:24:25 INFO OGG-01052 No recovery is required for target file
    E:\GoldenGate11gMediaPack\V26071-01\dirdat\ffremote, at RBA 0 (file not opened).
    2011-11-07 18:24:25 INFO OGG-01478 Output file E:\GoldenGate11gMediaPack\V2
    6071-01\dirdat\ffremote is using format RELEASE 10.4/11.1.
    ** Run Time Messages **
    5. on Flat file GGSCI prompt-->_*
    edit params FFR711*
    extract ffr711
    CUSEREXIT E:\GoldenGate11gMediaPack\GGFlatFile\V22262-01\flatfilewriter.dll CUSEREXIT passthru includeupdatebefores, params "E:\GoldenGate11gMediaPack\GGFlatFile\V22262-01\sample-dirprm\ffwriter.properties"
    SOURCEDEFS E:\GoldenGate11gMediaPack\V26071-01\dirdef\vikstkFF.def
    table ggs.vikstk;
    add extract ffr711, exttrailsource ./dirdat/pp*
    start extract ffr711*
    view report ffr711*
    Oracle GoldenGate Capture
    Version 11.1.1.0.0 Build 078
    Windows (optimized), Generic on Jul 28 2010 19:05:07
    Copyright (C) 1995, 2010, Oracle and/or its affiliates. All rights reserved.
    Starting at 2011-11-07 18:21:31
    Operating System Version:
    Microsoft Windows XP Professional, on x86
    Version 5.1 (Build 2600: Service Pack 2)
    Process id: 5008
    Description:
    ** Running with the following parameters **
    extract ffr711
    CUSEREXIT E:\GoldenGate11gMediaPack\GGFlatFile\V22262-01\flatfilewriter.dll CUSE
    REXIT passthru includeupdatebefores, params "E:\GoldenGate11gMediaPack\GGFlatFil
    e\V22262-01\sample-dirprm\ffwriter.properties"
    E:\GoldenGate11gMediaPack\GGFlatFile\V22262-01\ggs_Windows_x86_Generic_32bit_v11
    _1_1_0_0_078\extract.exe running with user exit library E:\GoldenGate11gMediaPac
    k\GGFlatFile\V22262-01\flatfilewriter.dll, compatiblity level (2) is current.
    SOURCEDEFS E:\GoldenGate11gMediaPack\V26071-01\dirdef\vikstkFF.def
    table ggs.vikstk;
    CACHEMGR virtual memory values (may have been adjusted)
    CACHEBUFFERSIZE: 64K
    CACHESIZE: 1G
    CACHEBUFFERSIZE (soft max): 4M
    CACHEPAGEOUTSIZE (normal): 4M
    PROCESS VM AVAIL FROM OS (min): 1.87G
    CACHESIZEMAX (strict force to disk): 1.64G
    Started Oracle GoldenGate for Flat File
    Version 11.1.1.0.0
    ** Run Time Messages **
    Problem I am facing_
    I am not sure where to find the generated flat file,
    even the reports are showing there is no data at manager process
    I am expecting replicat instead of extract at Flatfile FFR711.prm
    I have done this much what to do give me some pointers.....
    Thanks,
    Vikas

    Ok, I haven't run your example, but here are some suggestions.
    Vikas Panwar wrote:
    extract ffe711
    userid ggs@bidb, password ggs12345
    discardfile E:\GoldenGate11gMediaPack\V26071-01\dirrpt\EXTFF.dsc, purge
    rmthost 10.180.182.77, mgrport 7816
    rmtfile E:\GoldenGate11gMediaPack\V26071-01\dirdat\ffremote, purge, megabytes 5
    ggsci> add extract FFE711, EXTTRAILSOURCE ./dirdat/oo
    ggsci> add rmttrail ./dirdat/pp, extract FFE711, megabytes 20
    ggsci> start extract  FFE711
    You of course need data captured from somewhere to test with. You could capture changes directly from a database and write those to a trail, and use that as a source for the flat-file writer; or, if you have existing trail data, you can just use that (I often test with old trails, with known data).
    In your example, you are using a data pump that is doing nothing more than pumping trails to a remote host. That's fine, if that's what you want to do. (It's actually quite common in real implementations.) But if you want to actually capture changes from the database, then change "add extract ... extTrailSource" to be "add extract ... tranlog". I'll assume you want to use the simple data pump to send trail data to the remote host. And I will assume that some other database capture process is creating the trail dirdat/oo
    Also... with your pump "FFE711", you can create either a local or remote trial, that's fine. But don't use a rmtfile (or extfile). You should create a trail, either a "rmttrail" or "exttrail". The flat-file adapter will read that (binary) trail, and generate text files. Trails automatically roll-over, the "extfile/rmtfile" do not (but they do have the same internal GG binary log format). (You can use a 'maxfiles' to force them to rollover, but that's beside the point.)
    Also, <ul>
    <li> don't forget your "table" statements... or else no data will be processed!! You can wildcard tables, but not schemata.
    <li> there is no reason that anything would be discarded in a pump.
    <li> although a matter of choice, I don't see why people use absolute paths for reports and discard files. Full paths to data and def files make sense if they are on the SAN/NAS, but then I'd use symlinks from dirdat to the storage directory (on Unix/Linux)
    <li> both windows and unix can use forward "/" slashes. Makes examples platform-independent (another reason for relative paths)
    <li> your trails really should be much larger than 5MB for better performance (e.g,. 100MB)
    <li> you probably should use a source-defs file, intead of a dblogin for metadata. Trail data is by its very nature historical, and using "userid...password" in the prm file inherently gets metadata from "right now". The file-writer doesn't handle DDL changes automatically.
    </ul>
    So you should have something more like:
    Vikas Panwar wrote:
    extract ffe711
    sourcedefs dirdef/vikstkFF.def
    rmthost 10.180.182.77, mgrport 7816
    rmttrail dirdat/ff, purge, megabytes 100
    table myschema.*;
    table myschema2.*;
    table ggs.*;For the file-writer pump:
    +5. on Flat file GGSCI prompt+
    extract ffr711
    CUSEREXIT flatfilewriter.dll CUSEREXIT passthru includeupdatebefores, params dirprm\ffwriter.properties
    SOURCEDEFS dirdef/vikstkFF.def
    table myschema.*;
    table ggs.*;
    ggsci> add extract ffr711, exttrailsource ./dirdat/pp
    ggsci> start extract ffr711
    Again, use relative paths when possible (the flatfilewriter.dll is expected to be found in the GG install directory). Put the ffwriter.properties file into dirprm, just as a best-practice. In this file, ffwriter.properties, is where you define your output directory and output files. Again, make sure you have a "table" statement in there for each schema in your trails.
    Problem I am facing_
    I am not sure where to find the generated flat file,
    even the reports are showing there is no data at manager process
    I am expecting replicat instead of extract at Flatfile FFR711.prm
    I have done this much what to do give me some pointers.....The generated files are defined in the ffwriter.properties file. Search for "rootdir" property, e.g.,
    goldengate.flatfilewriter.writers=csvwriter
    csvwriter.files.formatstring=output_%d_%010n
    csvwriter.files.data.rootdir=dirout
    csvwriter.files.control.ext=_data.control
    csvwriter.files.control.rootdir=dirout
    ...The main problem you have is: (1) use rmttrail, not rmtfile, and (2) don't forget the "table" statement, even in a pump.
    Also, for the flat-file adapter, it does run in just a "extract" data pump; no "replicat" is ever used. The replicats inherently are tied to a target database; the file-writer doesn't have any database functionality.
    Hope it helps,
    -m

  • Flat file to XML Document

    Hi,
    I have a requirement where i have to process a flat file and create an XML document out of it. This XML is turn has to conform to schema. Can this be done in ODI? If yes, what is the knowledge module I should be using to achieve this? Further, how do I create the data model for the XML, and how do i specify the directory where the file needs to be written to? I hear that there is an IKM by the name "SQL to XML IKM" desinged to genereate XML from database. Can anyone please forward it to me? My mail address is [email protected] Any help is greatly appreciated.
    Edited by: Sankash on 01-Apr-2009 07:19

    Refer to this thread.
    Re: ODI with XML
    It will guide you thru the process at a high level.
    Thanks
    CJ
    Please do remember to assign points (Helpful / Correct) accordingly to the thread before closing, that encourage people to help you more quickly and effectively.

  • FTP Adapter: Inbound and Outbound flat files

    Having lots of trouble trying to Send messages (via Subscribe event) with my FTP adapter, with this specific error:
    Thu May 12 11:39:10 MDT 2005: Bridge { agent=oracle.oai.agent.client.AgentImpl@2f48d2 application=PAGOFTPAPP partition=null active=true #d3ls=1 } cannot handle OAI message of type newFacility.
    I am successfully processing my flat file messages into OAI (via Publish event) and they are being properly written to the OAI_HUB_QUEUE. The message gets all the way to the Bridge, which posts the above error. Can anyone tell me how the Bridge attempts to determine what to do with the messages?
    In creating the subscribe event I specified my desired D3L file as the application view, before doing the mapping. I then tried creating mappings at both the top (struct via ObjectCopy) and granular (fields via CopyFields) levels, and always get the same error.
    Under "Modify Fields" for the subscribe event I confirmed that ota.isDL3=true and ota.d3lPath points to the D3L XML file that I used to specify the application view (and incidentally is the same one used to process the files that I am processing with the Publish event). I'm trying to get up to speed with OAI and my first test is simply to read in a tab-delimited file and turn around and write it back out to the same structure (but of course to a different target directory).
    Much thanks for any assistance anyone can offer! Due to some kind of administrative hiccup we seem to have lost our iTAR capability and it's taking forever to get it back (of course at the worst possible time...)
    Richard

    Richard,
    Not sure if you have found a way around this problem yet, but it sounds like you may have a mismatch bewteen iStudio and your D3L XML that's used to define and transform the message.
    In the XML, name should be set to your iStudio defined 'event name', object should be set to the 'business object' and the type should be set to related 'App Data Type'.
    As an example of a subscribed event
    Subscribe(GLCosts.maintain_costs)
    using an ADT called CostRecord...it's a good idea to name your message the same as the type when defining the Application view using the Subscribe Wizard, i.e. don't manually change anything.
    So your message header in the D3L XML would look like this:
    <message name="maintain_costs" type="CostRecord" object="GLCosts">
    HTH
    Nick

  • Need help ASAP with Data Flow Task Flat File Connection

    Hey there,
    I have a Data Flow Task within a ForEach loop container.  The source of the flow is ADO.NET connection and the destination is a Flat File Connection.  I loop through a collection of strings in the ForEach loop.  Based on the string content,
    I write some data to the same destination file in each iteration overwriting the previous version. 
    I am running into following Errors:
    [Flat File Destination [38]] Warning: The process cannot access the file because it is being used by another process.
    [Flat File Destination [38]] Error: Cannot open the datafile "Example.csv".
    [SSIS.Pipeline] Error: Flat File Destination failed the pre-execute phase and returned error code 0xC020200E.
    I know what's happening but I don't know how to fix it.  The first time through the ForEach loop, the destination file is updated.  The second time is when this error pops up.  I think it's because the first iteration is not closing the destination
    file. How do I force a close of the file within Data Flow task or through a subsequent Script Task.
    This works within a SQL 2008 package on one server but not within SQL 2012 package on a different server.
    Any help is greatly appreciated.
    Thanks! 

    Thanks for the response Narsimha.  What do you mean by FELC? 
    First time poster - what is the best way to show the package here?

  • MBGMCR02 inbound posting from Flat file

    hello Friends ,
    i am posting MBMCR02 Inbound idoc for oil materils .
    it is giving an error status 51 "Material does not exists or not active "
    i am trying to post in WE 19 and through my program also .
    it is an inbound idoc program processed from flat file .
    i am trying to post the goods receipts against PO.
    can any one suggest any solution.
    thanks
    Anant

    1. Read the file using OPEN DATASET and read and fill up the segment info and fill the EDIDC header data
    and then call function
    CALL FUNCTION 'INBOUND_IDOC_PROCESS'
        TABLES
          IDOC_CONTROL       =  i_edidc
          IDOC_DATA          =  i_edid4.

Maybe you are looking for

  • Unable to sysnc converted video

    Hi All, i am writing my own converter in .Net. I can able to convert the files to mp4 successfully, but unable to sync them with IPhone. it is giving the error as *"was not copied to the iPhone because it cannot be played on this Iphone"* these are t

  • Error in using named LOV

    Hi ! I'm using a named LOV in a tabular form and it works fine. Trying to use it in a "normal" form gives the error: Error in initializing List of Values: ORA-06561: given statement is not supported by package DBMS_SQL Unable to initialize query. Why

  • IPhone 3g dead after iOS 4.1 update

    Hi All, like many I waited to update my iPhone 3g to update from 3.1.3 to 4.0.x. So yesterday I did perform the update. Everything went well, iOS 4.1 was in my iPhone, but when iTunes started to sync my personal data back, the connection got lost and

  • Firefox 2.0.0.20 on my Mac OSX10.2.8 seems to need an upgrade as I see Firefox is up to 5 so how do I do it ?

    When I look at 'about Mozilla Firefox' on my eMac OSX10.2.8 I get the information that the version is 2.0.0.20 which is presumeably why I have just got a message on a web page 'browser out of date, upgrade needed' I see from your website that you are

  • Ios 6.0.1 battery drain iphone 4s

    ios 6.0.1 iphone 4s battery drain on call,wifi,standby i ithink ios 5 was batter thn ios 6 in this battery issue i jast want to know there is any solution???