XI Mapping Standard Function MUL

I am seeing a weird problem in the XI mapping: Iam using the standard function MUL from the Arithmatic group to multiply 2 values. It works fine except when one of the values is 9, 18, 36 72, 144 and so on!
For example, if the values are 0.1 and 18 then the result is 1.8000001 where as the result for 0.1 and 19 is 1.9
Anyone has seen this before? I also tried to write a UDF to mutliply, but that has the same results!
The XI version is PI 7.0 Level 10.
I know I can fix this by formatting the number after the function, but this is really bizare!!

Check SAP Note [958486|https://service.sap.com/sap/support/notes/958486].
Regards,
Henrique.

Similar Messages

  • Problem using SUM standard function  during Field Mapping

    Hi Experts ,
    I am trying to sum all LIFMG 's in in the lineitems of a particular
    header and map this result to Lifmg of the header.(Idoc with multiple headers and line item).I am using SUM standard function.
    Rough Source structure.
    Header1
          vbeln
    ....Lineitem1
          vbeln
          posnr
    ......LIFMG
    ....Lineitem2
            vbeln
            posnr
    ......LIFMG
    Header2
         vbeln
    ....Lineitem1
            vbeln
           posnr
    ......LIFMG
    ....Lineitem2
            vbeln
           posnr
    ......LIFMG
    I am able to find the SUM ...but in the target structure's Header field  I am getting
    repeated value of the corresponding sum in each header ...i.e.
    Header1
    LFIMG-- 100
    LFIMG    100
    Header2
    LFIMG-- 102
    LFIMG    102
    How to get a single value for each .
    Regards,
    Deepak

    Solved Myself ...
    Placed  sum after  if without else ...
    placing it before was causing ...those values to be replicated.

  • Projects, is the Standard Functionality the one with COGS created?

    Korean Air manufactures AIRCRAFT components and delivers them to customers such as Boeing. It wants to implement ERP (R12) applying Oracle Projects Solution.
    Issue
    1. When Shipping Type Deliverable is created in Project Module and it is interface to Shipping Execution for Ship Confirm, COGS(Cost of Goods Sold ) for Shipping Item is created and it overlaps with cost of sales per Project/Task.
    Question
    *1. **When Shipping was done using deliverable of Shipping Type in Project Module, is the Standard Functionality the one with COGS created?*
    A. If the number 1 case is Standard Functionality, is there any option to prevent COGS creation?
    B. If the answer is no, by what kind of setup is it possible?
    C. Does Shipping of Project Module based on “non-asset based warehouse”?
    *2. What is the Integration mapping of Project Management, Shipping Execution, Inventory, AR, COGS etc?*
    The following are basic process.
    1. Quotation-> Contract -> Plan -> Production -> Delivery -> Revenue
    A. Using Deliverable in Projects
    2. Project: Agreement
    3. Task: Unit
    4. Purchasing Plan, Production Plan etc. executed based on Project/Task
    5. Cost calculation is calculated in Project/Task unit
    6. When Task (Tail Number) is completed, deliver to Boeing according to contract
    B. Interface through Shipping Execution
    C. Ship Confirm
    7. Based on cost revenue is recognized according to progression rate.
    A. Cost Collect
    B. Generate Draft Revenue
    8. Based on delivery or contract, account receivable is created and send to customer.
    A. Create Event per Task
    B. Generate Draft Revenue
    C. Interface Draft Revenue to Receivables.

    Hello Daniel,
    The PCI serial cards are not supported with LabVIEW RT for ETS targets and are not expected to work. We are looking into finding a way to add support for PCI serial devices in RT, but currently that support does not exist.
    One possible workaround would be to use a NI ENET-485-X device. The visa resource name will not be COMx in this case. Instead, you will need to enter the long name of ASRL::::::INSTR as documented in the NI-VISA help.
    I hope this helps. If you need to speak with your sales representative to resolve this issue, please follow this link. Have a great day.
    Regards,
    Kristi H
    National InstrumentsMessage Edited by Support on 01-18-2005 08:24 AM

  • Help for on mapping - Std function or UDF?

    Hi All,
    I am working on DELVRY03 Idoc (outbound) n doing mapping betweeb Idoc and legacy structure. In delivery line item we have lineitem quantity field E1EDL24-LFIMG. Let say if we have 3 line items with LFIMG values 5,10,15...we need add up all these and send to target total quantity field. Is there any std function or sample code for writign UDF???
    Thx
    Navin

    Hi,
    use sum function (from standard functions)
    but before using it use removecontext function (from node functions)
    as it sums all values from one context only
    so if you remove it will work as you need
    Regards,
    michal
    <a href="/people/michal.krawczyk2/blog/2005/06/28/xipi-faq-frequently-asked-questions"><b>XI / PI FAQ - Frequently Asked Questions</b></a>

  • Fix Values Standard Function

    Hi
    My question is regarding the standard function Fix Values :
    There is a Table where a field from the Legacy File ,if has a value X then 123 has to be passed to ERP and so on .....
    I want to use Fix Value (key-Value Pair) in the same , but the limitation is that there are 200 such combinations
    Is it advisable to manually fill these or is there a way that it can be accomplished in SAP XI  deriving it from an excel sheet or somewhere?
    The same are not stored in SAP and thus can't be looked up  !
    Kindly advise if there is an alternate if the Key value pairs are of large number of the order say 500 etc
    Thanks
    Dev

    >
    sd wrote:
    > Hi
    >
    > My question is regarding the standard function Fix Values :
    > There is a Table where a field from the Legacy File ,if has a value X then 123 has to be passed to ERP and so on .....
    >
    > I want to use Fix Value (key-Value Pair) in the same , but the limitation is that there are 200 such combinations
    > Is it advisable to manually fill these or is there a way that it can be accomplished in SAP XI  deriving it from an excel sheet or somewhere?
    >
    the best is to go for a value mapping instead of fixed values when the count is high
    > The same are not stored in SAP and thus can't be looked up  !
    >
    > Kindly advise if there is an alternate if the Key value pairs are of large number of the order say 500 etc
    >
    > Thanks
    > Dev
    For mass loading of values, value mapping replication can be used - /people/udo.martens/blog/2009/04/03/value-mapping-replication-scenario

  • Standard function MapwithDefault in NWDS?

    Hi Folks,
    Do we have any standard function available in NWDS for achieving the MapwithDefault mapping. FYI, I am trying to propagate the tag of the field for no input value in the source.

    Hi Pavan,
    I saw that the "Use Expression Editor for Mapping" was already unchecked. But to make sure I checked it and applied the settings and again went back and removed the check. I observed that in the workspace log I see java null pointer error when I did anything on the check box. Did you encounter anything of this sort?
    java.lang.NullPointerException
      at com.sap.ide.esr.foundation.login.preferences.BrowserPreferences.performOk(BrowserPreferences.java:247)
      at org.eclipse.jface.preference.PreferenceDialog$13.run(PreferenceDialog.java:964)
      at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
      at org.eclipse.core.runtime.Platform.run(Platform.java:888)
      at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:48)
      at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:175)
      at org.eclipse.jface.preference.PreferenceDialog.okPressed(PreferenceDialog.java:944)
      at org.eclipse.ui.internal.dialogs.FilteredPreferenceDialog.okPressed(FilteredPreferenceDialog.java:453)
      at org.eclipse.ui.internal.dialogs.WorkbenchPreferenceDialog.okPressed(WorkbenchPreferenceDialog.java:169)
      at org.eclipse.jface.preference.PreferenceDialog.buttonPressed(PreferenceDialog.java:233)
      at org.eclipse.jface.dialogs.Dialog$2.widgetSelected(Dialog.java:624)
      at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:228)
      at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
      at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1003)
      at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3910)
      at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3503)
      at org.eclipse.jface.window.Window.runEventLoop(Window.java:825)
      at org.eclipse.jface.window.Window.open(Window.java:801)
      at org.eclipse.ui.internal.dialogs.WorkbenchPreferenceDialog.open(WorkbenchPreferenceDialog.java:211)
      at org.eclipse.ui.internal.OpenPreferencesAction.run(OpenPreferencesAction.java:65)
      at org.eclipse.jface.action.Action.runWithEvent(Action.java:498)
      at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584)
      at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:501)
      at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:411)
      at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
      at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1003)
      at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3910)
      at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3503)
      at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405)
      at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369)
      at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221)
      at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500)
      at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
      at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493)
      at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
      at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:113)
      at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194)
      at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
      at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
      at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368)
      at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      at java.lang.reflect.Method.invoke(Method.java:597)

  • What are the standard functions in XI ?

    What are the standard functions in XI ?

    Hi,
    The target field mapping is possible by using below typs of functions
    1. Standard functions
    2. Runtime procedure
    3. User Defined functions
    Standard functions are the APIs provided in Graphical mapping to process the values of the fields used for target field mapping.
    Technically all these values are trated as string thus all standard functions expect strings as input argument and string as an export aurgument
    Please find here with you more details about it at below link
    http://help.sap.com/saphelp_nw04/helpdata/en/43/c4cdfc334824478090739c04c4a249/frameset.htm
    2. Runtime procedure
    http://help.sap.com/saphelp_nw04/helpdata/en/3d/24e15bf9d79243b45d49b13b03de8f/content.htm
    3. User Defined functions
    http://help.sap.com/saphelp_nw04/helpdata/en/22/e127f28b572243b4324879c6bf05a0/content.htm
    Thanks
    Swarup

  • How to find standard function modules for IDOCs

    Hi,
    Can anyone tell me is there any way to find the standard function module for IDOC. I have checked BD60 but it's not available. For example  Idoc type WPUBON01 and I need to know the function module. Can anyone tell me the way out.
    Secondly, if anyone can provide me the code to map the file fields and idoc segements.
    Regards

    Use WE82 to find message type associated with Idoc type.
    Then use this message type as a search string to find the FM.
    The associated FMs are.
    POSED_FILL_OVERVIEW_ENT_WPUBON
    POSED_INIT_DATA_WPUBON       
    POSED_LOCK_DATA_WPUBON       
    POSED_OVERVIEW_ASSIGN_WPUBON 
    POSED_READ_DATA_FROM_DB_WPUBON
    POSED_READ_TR_DATA_WPUBON    
    POSED_SAVE_DATA_WPUBON       
    POSED_SEARCH_STRING_WPUBON   
    POSED_STORE_DATA_WPUBON      
    POSED_UNLOCK_DATA_WPUBON     
    POSED_UPDATE_DATA_WPUBON     
    POSED_UPDATE_TR_DATA_WPUBON  
    Thanks,
    Utsah Garg.

  • Value mapping, interface mapping, standard funtions and user defined functi

    I like have more information abt live scenario's use of value mapping, interface mapping, standard funtions and user defined functions.
    How to create user defined funtions and how to use it in XI?
    thanks in advance
    shiva

    Hi,
    Interface mappings register your mapping program for an interface pair in the Integration Repository. If you require a mapping at runtime, it is sufficient to select the interface mapping for the interface pair at configuration time .The Integration Server uses the interface mapping to identify associated mapping programs for request messages, response messages, fault messages, or all three.
    Features
    Executing Multiple Mapping Programs for One DirectionBy using an interface mapping you can execute multiple mapping programs consecutively for the transformation of a request or response message. In such cases, an interface mapping comprises multiple steps for which the following applies:
    &#9679;     The steps are executed in the sequence specified (from top to bottom). The result of the mapping program from the previous step is forwarded to the mapping program of the subsequent step.
    &#9679;     Each step can reference a mapping program that executes a 1:1, 1:n, n:1, or an m:n transformation. In the case of multi-mappings (1:n, n:1, or m:n), the previous step must create the same number of messages that the subsequent step expects.
    &#9679;     Multi-mappings use one envelope to put all messages in one structure. If one of the steps references a multi-mapping program, all subsequent steps must use the same envelope.
    The mapping for a request message comprises two message mapping programs: one 1:1 transformation and one 1:n transformation. Since the latter message mapping uses the multi-mapping envelope for both the target message and the source message, the message mapping for the 1:1 transformation must also create a transformation result with a multi-mapping envelope.
    You do not strictly need to divide up one direction of the whole mapping into different steps. However, this enables all the message formats in one system landscape to be mapped to a central message format, for example. This results in less mapping programs being required because you no longer need to be able to map all the different message formats to each other
    Activities
           1.      Create a message mapping on the design maintenance screen of the Integration Builder (see also: Creating an Object).
    You can also create multiple interface mappings for the same interface pair.
           2.      Enter the source and target interfaces that require a mapping of the request message, the response message, the fault message, or all three, in the table of the same name. The following restrictions apply:
    &#9675;     If you want to use the interface mapping in a transformation step in an integration process, you must only specify abstract message interfaces. Furthermore, all objects (integration process, interface mapping, and all objects that reference the interface mapping) must be in the same software component version. If you want to reference objects from underlying software component versions, you must access the objects from the Basis Objects branch (in the navigation tree or using an input help).
    &#9675;     If you want to map multiple messages to each other by using a multi-mapping, you can only specify asynchronous interfaces (for further restrictions, see: Multi-Mappings). If any message interfaces are missing, you can also create them by using the function Create New Object ().
    If the interface cannot be imported or cannot be created in the Integration Repository (in the case of an external adapter, for example), you must enter the interface names manually. However, it is not possible to check the technical name in this case.
           3.      To import the properties of the interfaces, choose Read Interfaces. The table in the lower area displays tab pages for the request message, response message, and if available, for the fault message, for each mode of the interfaces (either synchronous or asynchronous).
           4.      To develop an external mapping program, export the XSD schema of the respective request or response message as a zip file after you have imported the interfaces. The zip file can contain multiple schema files that reference each other, for example in a multi-mapping. In this case, the schema with the global message element has the name MainSchema.
           5.      To reference a mapping program for the respective message, you have the following options:
    &#9675;     Select an existing mapping program from the Integration Repository by using the input help (). If this is a message mapping, the default setting of the input help only displays those message mappings that are found using the source and target message in the Integration Repository (in multi-mappings, the first source and target messages are used as the search criteria). However, you can also display any number of message mappings, for example, because you are constructing a mapping from several mapping programs with intermediate instances which have no message types.
    &#9675;     You can create message mappings directly from the interface mapping. To do this, select the mapping type Message Mapping in the Type column. Position the cursor in the Name column and choose the function Create New Message Mapping () in the Mapping Program frame. The Integration Builder copies the specifications of the messages and their occurrence directly from the interface mapping.
    An interface mapping can only reference mapping programs that belong to the same or an underlying software component version of the interface mapping. This ensures that the mapping program can be shipped together with the interface mapping (see: Software Logistics).
           6.      If it is not a mapping for a fault message, you can execute multiple mapping programs in succession for request and response messages:
    &#9675;     To insert an additional line for a mapping program, choose .
    &#9675;     To delete the registration for a mapping program, choose .
    At runtime, the mapping programs are executed from top to bottom.
           7.      Save the interface mapping.
    Regards
    Aashish Sinha
    PS : reward points if helpful

  • Standard function keys in specific applications

    Just wondering whether there is any way to use the standard functions of F1, F2 etc in specific applications without having to have this function enabled in Leopard as a whole. For example, in general, I want to be able to adjust the volume and brightness on my Macbook Pro without having to push the fn-key. However, when, and only when, I use Pages, I want to use these keys as standard-function keys in order to be able to switch between styled. Is there any way I can make this happen??

    I would settle for knowing how to do that again, but what I would really like is the ability to either quickly turn on and off the Mac default uses for the function keys or, better yet, have it turn off in certain apps.
    I've tried the "Use all F1, F2, etc. keys as standard function keys," button in the Keyboard & Mouse System Settings, but I don't see where that has any sort of effect.
    yes, it does have an effect. it lets you use F-keys as regular keys and map them to what you want.
    The reference there to the 'fn' key makes me think it's only for laptops.
    no, this is for any keyboard that has a fn key. if you have it on your keyboard then you get that checkbox in keyboard system preferences. if you don't have it the checkbox won't even show up. when the box is checked you have to hold fn to get the functionality of the F-keys written on them. otherwise they act as regular keys that can be mapped to whatever you want. you can do this in system preferences->keyboard&mouse->keyboard shortcuts.

  • Standard Functions

    Hi All ,
    I am in Urgent need of a  Comperehensive Article describing Standard functions in XI .
    The requirement  is an article/weblog/practice sesion /seminar  with examples explaining the standard functions provided in XI mapping.
    Kindly help (anything except help.sap.com) would be a great help
    thanks
    SD

    Hi,
    If the link I posted above is not helpful, try the below one:-
    https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/docs/library/uuid/8a57d190-0201-0010-9e87-d8f327e1dba7
    Hope this suffice your requirements.
    Regards.
    Praveen

  • Doubts with certain standard functions!

    Hi Experts,
          1. What is the differece  in standard functions  - Boolean function : if and ifS.
          2.Sender: what and how value is populated in it!
    I believe Text equals can take text values like Jonny = Jony and not numeric,
        but is boolean equals only to 0 and 1. and what will be the difference majorly?
    Regards,
    Arnab.

    >
    Arnab Mondal wrote:
    > Hi Experts,
    >       1. What is the differece  in standard functions  - Boolean function : if and ifS.
    >       2.Sender: what and how value is populated in it!
    > I believe Text equals can take text values like Jonny = Jony and not numeric,
    >     but is boolean equals only to 0 and 1. and what will be the difference majorly?
    >
    >
    >  Regards,
    > Arnab.
    1. there is if without else and if with else in boolean
    2. Sender populates the value of sender system in runtime (only). The logic is as same as mapping runtime constants - http://help.sap.com/saphelp_nw04/helpdata/en/b3/9a2aeb24dc4ab6b1855c99157529e4/frameset.htm
    3. Dateafter is used to check if one date comes after another in a calendar. Eg you wanna check if 22011982 comes after 22011975, this function will return true. But what is your doubt here?
    4. Text equals expects string as input similarly other boolean and numeric.

  • IF statement in Standard function module PRICING

    Hi,
    In standard function module PRICING
    I found one if statement like this.
    if  xkomv-kntyp na '1$' .
    Plz tell me the meaning of thai '1$' value.
    Regards,
    Upender Verma.

    Hi,
         NA means Contains Not Any ..
         if xkomv-kntyp na '1$'  means .. xkomv-kntyp does not contain '1' or '$'.
         Read help on comparision operator 'NA'
    Regards,
    Srini.

  • Implicit enhancement to a standard function module.

    Hi everybody.
    I used an Implicit Enhancement to a Standard function module Customized_Message, at the starting of function module.
    Code:
    ENHANCEMENT 1  ZFK01_ENHANCEMENT4.    "active version
    If sy-tcode = 'FK01' and sy-CPROG = 'SAPMF02K' AND I_MSGNR = '230' AND i_arbgb = 'F2' AND I_DTYPE = 'I'.
      EXIT.
    ENDIF.
    ENDENHANCEMENT.
    The above is working fine, to the condition what i had given above code.
    But my question is, can i use a implicit enchancement to a Standard function module(Customized_message).

    Yes, but you should also be aware that 'F2' is a configurable message class in the IMG.  You should attempt to solve your issue in that manner first.

  • Not able to get distict values even after defining  MAP MEMBER FUNCTION

    Hi,
    I am trying to get distinct values from a query to a table type. Please see the code below
    CREATE OR REPLACE TYPE T_COPY_EVNT_DTL
    IS
      OBJECT
        eventId               VARCHAR2(100),
        eventDescription      VARCHAR2(100),
        promoMonthDescription VARCHAR2(100),
        promoStartDate        VARCHAR2(100),
        promoEndDate          VARCHAR2(100),
        PROMOCOSTSTARTDATE    VARCHAR2(100) ,
        MAP MEMBER FUNCTION sort_key
        RETURN VARCHAR2 );
    CREATE OR REPLACE TYPE BODY T_COPY_EVNT_DTL
    AS
      MAP MEMBER FUNCTION sort_key
      RETURN VARCHAR2
    IS
    BEGIN
      RETURN eventId ;
    END;
    END;
    CREATE OR REPLACE TYPE T_EVENT_TABLE
    IS
      TABLE OF T_COPY_EVNT_DTL;
              with event_data as (
    select '1' event,'event1' event_desc,'monthdesc1' promo_month_desc ,'01/01/2001' promo_start_date     ,'01/01/2002' promo_end_date,'01/02/2001' promo_cost_start_date from dual union all     
    select '1' event,'event1' event_desc ,'monthdesc1'promo_month_desc ,'01/01/2001' promo_start_date     ,'01/01/2002' promo_end_date,'01/02/2001' promo_cost_start_date from dual union all
    select '3' event,'desc3' event_desc ,'monthdesc3' promo_month_desc,'01/01/2001' promo_start_date     ,'01/01/2002' promo_end_date,'01/02/2001' promo_cost_start_date from dual union all
    select '2' event ,'desc2' event_desc ,'monthdesc2' promo_month_desc ,'01/01/2001' promo_start_date     ,'01/01/2002' promo_end_date ,'01/02/2001' promo_cost_start_date from dual )
    SELECT  cast(collect(distinct t_copy_evnt_dtl(event,
                                                                                                                        event_desc,
                                                                                                                        promo_month_desc,
                                                                                                                        promo_start_date,
                                                                                                                       promo_end_date,
                                                                                                                  promo_cost_start_date) ORDER BY
                                                                event_desc,
                                                                promo_month_desc,
                                                                promo_start_date,                                                   
                                                                promo_end_date,                                           
                                                                promo_cost_start_date) as t_event_table)  from event_data;
    result :
    T_EVENT_TABLE('T_COPY_EVNT_DTL('2','desc2','monthdesc2','01/01/2001','01/01/2002','01/02/2001')',
              'T_COPY_EVNT_DTL('3','desc3','monthdesc3','01/01/2001','01/01/2002','01/02/2001')',
              'T_COPY_EVNT_DTL('1','event1','monthdesc1','01/01/2001','01/01/2002','01/02/2001')',
              'T_COPY_EVNT_DTL('1','event1','monthdesc1','01/01/2001','01/01/2002','01/02/2001')')Please help me to find out the reason why it is not working...

    Remove the comma from T_COPY_EVNT_DTL TYPE.
    ORA-22800 indicates invalid user-defined type.
        PROMOCOSTSTARTDATE    VARCHAR2(100) ,
        MAP MEMBER FUNCTION sort_keyAnd it will be fine.
    SQL> CREATE OR REPLACE TYPE  T_COPY_EVNT_DTL
      2  IS
      3    OBJECT
      4    (
      5      eventId               VARCHAR2(100),
      6      eventDescription      VARCHAR2(100),
      7      promoMonthDescription VARCHAR2(100),
      8      promoStartDate        VARCHAR2(100),
      9      promoEndDate          VARCHAR2(100),
    10      PROMOCOSTSTARTDATE    VARCHAR2(100),
    11      --,
    12      MAP MEMBER FUNCTION sort_key
    13      RETURN VARCHAR2 );
    14  /
    Type created
    SQL>
    SQL> CREATE OR REPLACE TYPE BODY T_COPY_EVNT_DTL
      2  AS
      3    MAP MEMBER FUNCTION sort_key
      4    RETURN VARCHAR2
      5  IS
      6  BEGIN
      7    RETURN eventId ;
      8  END;
      9  END;
    10  /
    Type body created
    SQL>
    SQL> CREATE OR REPLACE TYPE T_EVENT_TABLE
      2  IS
      3    TABLE OF T_COPY_EVNT_DTL;
      4  /
    Type created
    SQL>
    SQL>     with event_data as (
      2  select '1' event,'event1' event_desc,'monthdesc1' promo_month_desc ,'01/01/2001' promo_start_date  ,'01/01/2002' promo_end_date,'01/02/2001' promo_cost_start_date from dual union all
      3  select '1' event,'event1' event_desc ,'monthdesc1'promo_month_desc ,'01/01/2001' promo_start_date  ,'01/01/2002' promo_end_date,'01/02/2001' promo_cost_start_date from dual union all
      4  select '3' event,'desc3' event_desc ,'monthdesc3' promo_month_desc,'01/01/2001' promo_start_date  ,'01/01/2002' promo_end_date,'01/02/2001' promo_cost_start_date from dual union all
      5  select '2' event ,'desc2' event_desc ,'monthdesc2' promo_month_desc ,'01/01/2001' promo_start_date  ,'01/01/2002' promo_end_date ,'01/02/2001' promo_cost_start_date from dual )
      6  SELECT  cast(collect(distinct t_copy_evnt_dtl(event,
      7                                                 event_desc,
      8                                                 promo_month_desc,
      9                                                 promo_start_date,
    10                                                promo_end_date,
    11                                              promo_cost_start_date) ORDER BY
    12                          event_desc,
    13                          promo_month_desc,
    14                          promo_start_date,
    15                          promo_end_date,
    16                          promo_cost_start_date) as t_event_table)  from event_data;
    CAST(COLLECT(DISTINCTT_COPY_EV
    <Object>

Maybe you are looking for