Calling function in mxml mod

I have my main mxml file and then I have a module that I have developed... I want to be able to call a function in that module from my main application... This is what I have done, and it keeps giving an error saying this:
TypeError: Error #1009: Cannot access a property or method of a null object reference.
Here is my code in a nutshell:
Main.mxml
<mx:WindowedApplication xmlns:mods="mods.*">
     <mx:Script src="general.as" />
     <mods:MyObject id="MyObj" />
     <mx:Button click="LoadObjData();" />
</mx:WindowedApplication>
general.as
import mods.*;
private function LoadObjData():void {
     MyObj.CustomFunction("Test Data");
mods/MyObject.mxml
<mx:Script>
        <![CDATA[
            public function CustomFunction(CustData:String):void {
                MyLabel.text = CustData;
        ]]>
</mx:Script>
<mx:Label id="MyLabel" />
//// Can anyone explain to me what I am doing wrong?

Is Module the root tag of MyObject.mxml? if so, you are not using it as a module instead you are trying to use it as a custom component.
For more info on modules, take a look at http://blogs.adobe.com/aharui/2007/03/modules.html
if it is actually a custom component, post the full code for MyObject.mxml - so we can look.
Thanks,
Gaurav Jain
Flex SDK Team

Similar Messages

  • Call function in debug mode

    Hi,
    when I´m on the test function screen of se37, I can run the function in debugging mode and it´s starting with the debugger on the first code line.
    Is it also call a function from a report in this debugging mode?
    thank you!
    reward points guaranteed

    Thank you for your answers...
    Let me explain a little bit more in detail, what I want to do.
    I have an XML interface function which is going to be called by an
    external application about RFC, reading binary data,
    interpreting that as XML and doing something in the SAP system afterwards.
    As the system is a 4.6C I can´t debug externally, I want to provide
    a debugging function in a monitoring application for that.
    As people are using the monitoring, which are not familiar with all
    the code behind that, I want to start the debugging mode by myself,
    without setting a breakpoint.
    Let me describe it like this:
    When you type in /H in the transaction field in the SAP menu bar, the
    debugging mode is going to be started for further actions.
    All I want to do is starting that /h debug mode without typing anything
    in the transaction field, just inside of the report.
    How can I do that?
    Michael

  • Call Function From MXML Component

    I am using MXML to create components that I use within my
    application. I have one MXML file that contains a list with a
    custom itemRenderer that is in another MXML file. I have an
    actionscript file with a function that I want to call from the
    itemRenderer.
    If I call the function from my main application, everything
    works fine. If I try to call it from one of the other MXML files, I
    get a 1180 Call to a possibly undefined function error.
    Is there a special way that I need to use to call the
    function?
    The main MXML file is in the root directory, the actionscript
    file is in a folder called functions, and the MXML files are in a
    folder called components.
    Thank you for any help.

    I was able to figure out my problem. It was just a simple
    typo of including the wrong file in a Script tag. However, this
    caused more issues and I ended up having to rewrite a large section
    of code to get everything working.
    Thank you for your help.

  • Execute an ABAP ".txt" file with a call function

    Hello,
    I'd like to know if it exist a "call function" or another way to execute an Abap program which is written within a ".txt" file.
    1. I'd like to write an Abap program into a ".txt" file
    2. Create an Abap program which will read the ".txt" file (& upload it into an internal table for example) & execute this Abap code.
    Is it possible?
    Thanks in advance for your answer.
    Samuel

    Something like this -:)
    REPORT z_test_query.
    * TYPES                                                           *
    TYPES: BEGIN OF ty_lines,
           line TYPE string,
           END OF ty_lines.
    * TABLAS INTERNAS                                                 *
    DATA: t_lines TYPE STANDARD TABLE OF ty_lines,
          t_program TYPE STANDARD TABLE OF progtab WITH HEADER LINE,
          t_writes TYPE STANDARD TABLE OF listzeile.
    * VARIABLES                                                       *
    DATA: w_file_name TYPE string.
    * FIELD-SYMBOLS                                                   *
    FIELD-SYMBOLS: <fs_lines> LIKE LINE OF t_lines,
                   <fs_write> LIKE LINE OF t_writes.
    * SELECTION-SCREEN                                                *
    SELECTION-SCREEN BEGIN OF BLOCK file WITH FRAME.
    PARAMETERS:
                p_file TYPE rlgrap-filename.
    SELECTION-SCREEN END OF BLOCK file.
    * AT SELECTION-SCREEN ON VALUE-REQUEST                            *
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
      PERFORM get_filename CHANGING p_file.
    *&      Form  GET_FILENAME                                        *
    FORM get_filename CHANGING po_p_file.
      DATA: ls_field_name TYPE dynpread-fieldname.
      ls_field_name = 'P_FILE'.
      CALL FUNCTION 'F4_FILENAME'
           EXPORTING
                program_name  = syst-cprog
                dynpro_number = syst-dynnr
                field_name    = ls_field_name
           IMPORTING
                file_name     = po_p_file.
      w_file_name = po_p_file.
    ENDFORM.                    " GET_FILENAME
    *   START-OF-SELECTION                                            *
    START-OF-SELECTION.
      CALL FUNCTION 'GUI_UPLOAD'
           EXPORTING
                filename = w_file_name
           TABLES
                data_tab = t_lines.
      IF sy-subrc EQ 0.
        LOOP AT t_lines ASSIGNING <fs_lines>.
          MOVE <fs_lines>-line TO t_program-line.
          APPEND t_program.
        ENDLOOP.
      ENDIF.
      CALL FUNCTION 'RFC_ABAP_INSTALL_AND_RUN'
           EXPORTING
                mode        = 'F'
                programname = 'ZDUMMY_TEST'
           TABLES
                program     = t_program
                writes      = t_writes.
      IF sy-subrc EQ 0.
        LOOP AT t_writes ASSIGNING <fs_write>.
          WRITE:/ <fs_write>-zeile.
        ENDLOOP.
      ENDIF.
    Greetings,
    Blag.

  • Hey my iphone 4 has a problem regarding carrier. Its always showing searching mode and wifi-address N/A and Bluetooth address 00:00:00:00:00 and call function is disable

    hey my iphone 4 has a problem regarding carrier. Its always showing searching mode and wifi-address N/A and Bluetooth address 00:00:00:00:00 and call function is disable. Please help me. I have tried every thing ..like restore from DFU mode with out sucess.

    Refer to  Note 98458 - SAPMSSY1, CALL_FUNCTION_NOT_FOUND

  • How to call one Main MXML from another main MXML file and pass values between them?

    Hi,
    I am trying to populate a datagrid from a XML file ,which I have done successful
    I am able to get data out of the datagrid on clicking on any element
    Now when I click on any element in datagrid I want call a new mxml file which is also have Aplication tag and I want to pass that value of clicked element to it
    This is the code I am using for getting data from XML into data grid in 1st MXML file and the XML file used.
    <?xml version="1.0" encoding="utf-8"?>
    <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
                    xmlns:s="library://ns.adobe.com/flex/spark"
                     xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"  initialize="exp.send()">
         <fx:Declarations>
             <s:HTTPService id="exp" url="expLab1.xml" result="
    resultHandlerQuestionBar(event)"/>
         </fx:Declarations>
         <s:Panel x="74" y="218" width="485" height="333" title="Work On Configured Experiments" id="p1" fontSize="14" chromeColor="#9BFDAB" dropShadowVisible="false" contentBackgroundColor="#E4EEE6" contentBackgroundAlpha="1.0" backgroundColor="#67B6AC" textAlign="left">
              <mx:DataGrid  x="35" y="33" width="338" height="88" dataProvider="{experimentdetails}" chromeColor="#FCFCFC" contentBackgroundColor="#FFFFFF" selectionColor="#FAFBFD" rollOverColor="#FCFDFF" focusColor="#FCFDFD" itemClick="onItemClick( event );">
                  <mx:columns>
                     <mx:DataGridColumn id="j1" dataField="experimentName" headerText="" itemRenderer="jaya">
                     </mx:DataGridColumn>
                  </mx:columns>
             </mx:DataGrid>
         </s:Panel>
         <fx:Script>
             <![CDATA[
                 import mx.collections.ArrayCollection;
                 import mx.controls.Alert;
                  import mx.events.FlexEvent;
                 import mx.events.ListEvent;
                 import mx.rpc.events.ResultEvent;
                 [Bindable]
                 private var workbenchname:ArrayCollection;
                  //private var a:String;
                 private function resultHandlerQuestionBar(event:ResultEvent):void
                    experimentdetails=event.result.List.experimentList.experiment;  
                 [Bindable]
                 private var experimentdetails:ArrayCollection;
                  private var alert:Alert;
    private var data:String;
                 private function onItemClick( e:ListEvent ):void {
       data= experimentdetails.getItemAt(e.rowIndex).experimentName.toString();
                    alert=Alert.show(experimentdetails.getItemAt(e.rowIndex).experimentName.toString());
             ]]>
         </fx:Script>
    </s:Application>
    and the xml file is:
    <?xml version="1.0" encoding="UTF-8"?>
    <List>
       <workbench>Basic Movement</workbench>
         <experimentList>
           <experiment>
             <experimentName>Distance with varying time</experimentName>
             <Rating>2</Rating>
             <expNO>1</expNO>
           </experiment>
           <experiment>
             <experimentName>Distance with Constant time</experimentName>
             <Rating>1</Rating>
             <expNO>2</expNO>
           </experiment>
           <experiment>
             <experimentName>Time taken while decelerating</experimentName>
             <Rating>3</Rating>
             <expNO>3</expNO>
           </experiment>
          </experimentList> 
    </List>
    Now the code for 2nd MXML is as follows
    <?xml version="1.0" encoding="utf-8"?>
    <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
                         xmlns:s="library://ns.adobe.com/flex/spark"
                         xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
          <fx:Declarations>
                <!-- Place non-visual elements (e.g., services, value objects) here -->
          </fx:Declarations>
          <s:Label text="lable1" >
          </s:Label>
    </s:Application>

    Check out ExternalInterface class:
    http://livedocs.adobe.com/flex/3/html/help.html?content=passingarguments_2.html
    If this post answers your question or helps, please mark it as such.
    Greg Lafrance - Flex 2 and 3 ACE certified
    www.ChikaraDev.com
    Flex Training and Support Services

  • Call function RFC in a loop and kill old session

    Hi,
    we have a problem with a program.
    here's a part of the code:
    DO.
        CALL FUNCTION 'YC_REFRESH_GPT_START_CM25' STARTING NEW TASK 'TEST'
          EXPORTING
            i_profile       = p_prfl
            i_werks         = p_werks
            i_arbpl_low     = s_arbpl-low
            i_arbpl_high    = s_arbpl-high
          TABLES                                              
            t_arbpl =  it_arbpl.                                
        PERFORM wait_for_refresh.
        PERFORM terminate_session.
      ENDDO.
    So the program does a call function, waits a while, then terminates the session and recalls the function.
    Apparently, like this the data should be updated.
    But in the terminate session, the session is terminated using:
    CALL 'ThUsrInfo' ID 'OPCODE'  FIELD opcode_delete_mode
                       ID 'MODE'    FIELD l_mode.
    And it works the first time, but the second time there is a dump.
    So, is there another way to achieve what this program is trying to do?
    Or is there another way to kill the session?
    Thanks!!

    Hi,
    the DLL will stay in memory as long as there is a program running which has not closed (unloaded) the DLL.
    Doing repetitive calls to the DLL is irrelevant in this context. LV opens the DLL as soon as needed and will only unload it when there is no VI in memory which has a CLN to that DLL...
    Best regards,
    GerdW
    CLAD, using 2009SP1 + LV2011SP1 + LV2014SP1 on WinXP+Win7+cRIO
    Kudos are welcome

  • Call functions in parent(?) from popup window(?)

    I'm not sure the terms parent or window in flex 4.
    I want to call functions in parent from parent window.
    it seems to be hard.
    Help me please.
    Thanks in advance.
    ========================== index.mxml ==========================
    (root element : <mx:Application> - xmlns:mx="http://www.adobe.com/2006/mxml")
    has Main.mxml in it
    ========================== Main.mxml ==========================
    (root element : <s:NavigatorContent> - xmlns:s="library://ns.adobe.com/flex/spark" )
    public function functInMain():void
    //do something
    protected function dataGrid_itemDoubleClickHandler(event:ListEvent):void
    var arr:ArrayCollection = event.currentTarget.dataProvider;
    var titleWindowInstance:Popup =
      Popup(PopUpManager.createPopUp(this,
       Popup,
       true));    
    titleWindowInstance.rowData =  arr.getItemAt(event.rowIndex);
    PopUpManager.centerPopUp(titleWindowInstance); 
    ========================== Popup.mxml ==========================
    protected function buttonClickedInpopup():void
    Application.application.parentDocument.functInMain(null);//<<- here I want to correct

    Thanks.
    Your callback function works ok
    why calling public functin won't work?
    here are neet examples.
    index.mxml : front page
    SearchEvents.mxml : inside index.mxml
    UpdateEvent.mxml : poped up from SearchEvents.mxml
    ========index.mxml===========
    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application pageTitle="CA Management"
        xmlns:mx="http://www.adobe.com/2006/mxml"
        xmlns:s="library://ns.adobe.com/flex/spark"
        xmlns:i="test.*"
        width="100%" height="100%" creationComplete="application1_creationCompleteHandler(event)" >
    <mx:Script>
      <![CDATA[
       import mx.events.FlexEvent;
       protected function application1_creationCompleteHandler(event:FlexEvent):void
        myViewstack.selectedIndex = 0;
      ]]>
    </mx:Script>
    <mx:ViewStack width="100%" height="100%" id="myViewstack">
        <s:NavigatorContent id="EventManagement" label="Event Management"><i:SearchEvents x="0" y="0"/></s:NavigatorContent>
    </mx:ViewStack>
    </mx:Application>
    ========SearchEvents.mxml=========
    <?xml version="1.0" encoding="utf-8"?>
    <s:NavigatorContent xmlns:fx="http://ns.adobe.com/mxml/2009"
         xmlns:s="library://ns.adobe.com/flex/spark"
         xmlns:mx="library://ns.adobe.com/flex/mx" 
         x="113" y="163"  
         height="100%" width="750">
    <fx:Script>
      <![CDATA[
       import mx.collections.ArrayCollection;
       import mx.controls.Alert;
       import mx.events.FlexEvent;
       import mx.events.ListEvent;
       import mx.managers.PopUpManager;
       import mx.rpc.events.ResultEvent;
       public function parentFunction(param:String):void{
        Alert.show("parent function called with " + param);
       protected function btnSearch_clickHandler(event:MouseEvent):void
        var titleWindowInstance:UpdateEvent =
         UpdateEvent(PopUpManager.createPopUp(this,
          UpdateEvent,
          true));    
        PopUpManager.centerPopUp(titleWindowInstance);
      ]]>
    </fx:Script>
    <s:Button x="637" y="70" label="Popup" id="btnSearch" click="btnSearch_clickHandler(event)"/>
    </s:NavigatorContent>
    ========UpdateEvent.mxml=====
    <?xml version="1.0" encoding="utf-8"?>
    <mx:TitleWindow xmlns:fx="http://ns.adobe.com/mxml/2009"
        xmlns:s="library://ns.adobe.com/flex/spark"
        xmlns:mx="library://ns.adobe.com/flex/mx"
        xmlns:incl="incl.*"
        showCloseButton="false"
        title="Update Event" width="432" height="500"
        xmlns:subscription="services.subscription.*"
        xmlns:core="services.core.*"
        horizontalAlign="left" xmlns:vo="vo.*"
        >
    <fx:Script>
      <![CDATA[
       import mx.core.Application;
       protected function parentFunctionCall(event:MouseEvent):void
        Application.application.parentFunction("param from popup");
      ]]>
    </fx:Script>
    <fx:Script>
      <![CDATA[
       import mx.collections.ArrayCollection;
       import mx.controls.Alert;
       import mx.controls.dataGridClasses.DataGridColumn;
       import mx.core.Application;
       import mx.events.FlexEvent;
       import mx.formatters.*;
       import mx.managers.PopUpManager;
       import popup.*;
       [Bindable] public var rowData:Object ;//to get the parent row
      ]]>
    </fx:Script>
    <s:Button label="parentFunctionCall" id="btnPar" click="parentFunctionCall(event)"/>
    </mx:TitleWindow>

  • Call Transaction in background mode

    Hi everyone,
    What I am currently trying to do is to perform a 'call transaction' while forcing the 'background processing' mode even when the user is running the program in online mode; this allows me to retrieve a lot more messages that are useful to the user than the messages generated in online mode.
    As long as I have seen there is no field for that in the options table that can be passed to the 'call transaction' sentence. The only way to see that behavior while in online mode is by 'playing back' a recording thru the SHDB transaction and checking the 'Simulate background' option.
    My first attempt was to set the SY-BATCH flag before doing the call transaction but it doesn't work, the flag seems to reset itself with the correct value during the call.
    Any comments on this would be greatly appreciated.
    Regards,
    Sergio

    You would have to create a job on the fly to do this.  This example shows how to kick off a background job via an ABAP program.
    report zrich_0004 .
    data:   sdate type sy-datum,
            stime type sy-uzeit,
            l_valid,
            ls_params like pri_params,
            l_jobcount like tbtcjob-jobcount,
            l_jobname  like tbtcjob-jobname.
    start-of-selection.
    * Get Print Parameters
      call function 'GET_PRINT_PARAMETERS'
           exporting
                no_dialog      = 'X'
           importing
                valid          = l_valid
                out_parameters = ls_params.
    * Open Job
      l_jobname = 'ZRICH_0005'.
      call function 'JOB_OPEN'
           exporting
                jobname  = l_jobname
           importing
                jobcount = l_jobcount.
    * Submit report to job
      submit zrich_0005   
           via job     l_jobname
               number  l_jobcount
           to sap-spool without spool dynpro
               spool parameters ls_params
                  and return.
    * Schedule and close job.
      call function 'JOB_CLOSE'
           exporting
                jobcount  = l_jobcount
                jobname   = l_jobname
                strtimmed = 'X'

  • Call function IN BACKGROUND TASK don't work

    Hello,
    I've a interface RFC to JDBC asyncronous.
    When i call function in R3 (IN BACKGROUND TASK), sy-subrc = 0, however i don't see any message in SXMB_MONI and runtime workbench.
    The CC sender (for RFC) is OK,
    what happen?
    thanks very much

    Have this code after your call function:
    CALL FUNCTION 'START_OF_BACKGROUNDTASK'
         EXPORTING
              STARTDATE = SY-DATUM
              STARTTIME = TIME
         EXCEPTIONS
              OTHERS    = 1.
    IF SY-SUBRC = 1.
      EXIT.
    ENDIF.
    COMMIT WORK.
    Also, if you want to call your RFC function module in async mode, you can try
    Call function '<fm name>' in update task....
    Regards,
    Ravi Kanth Talagana

  • Error BT616 when calling function module SXPG_COMMAND_EXECUTE in background

    Hi All,
    We use function module SXPG_COMMAND_EXECUTE with a custom command we defined in SM69 to move files in unix (mv command).
    The function module call has worked fine for almost a year and recently we have been seeing an error (BT616) in our job lob (SM37) when the program is run in background. We have not been able to reproduce the error in foreground mode and it seems to be occuring only periodically in the background. (The appropriate SAP authorization objects where assigned to the batch job ID and the steps on the batch job.) We are in the process of setting up the trace flag and performing analysis on the trace log via ST11 to help identify the issue.
    After perform analysis on SXPG_COMMAND_EXECUTE, the error is occurring when calling function module SAPXPG_END_XPG for exception 2, system failure, yet function module SAPXPG_END_XPG does not exist. I assume this is a program at the operating system level and is just a signature of the parameters to be passed to the operating system program.
    Below is part of the SAP function module SXPG_COMMAND_EXECUTE that is failing.
    * Now we have to wait for the termination of the external
    * command if the caller wants us to.
        IF TERMINATIONWAIT = 'X'.
          CALL FUNCTION 'SAPXPG_END_XPG'
            DESTINATION DESTINATION
            IMPORTING   EXITSTAT = STATUS
                        EXITCODE = EXITCODE
            TABLES      LOG      = LOG
            EXCEPTIONS  COMMUNICATION_FAILURE = 1 MESSAGE MSG
                        SYSTEM_FAILURE        = 2 MESSAGE MSG.
    I performed a where used on function module SXPG_COMMAND_EXECUTE, and most of SAP programs call the function module with the parameter TERMINATIONWAIT = 'X', so I assume we should pass ‘X’ as well.
    Any ideas on what could be causing this issue?
    Mike Vondran

    I also remember I have this kind of issue, as I have some UNIX script at OS( UNIX) level . The problem was with the ID , as it don’t have proper authorization at OS level ( UNIX ) . Please check this ID authorization. This could be the one of reasons if you’re sure from SAP standpoint.
    Hope this’ll give you some guide line..
    Thanks
    Bye

  • Call function background is not working

    Hi All,
    I created an RFC function module with one import parameter and 2 tables.
    I am calling this function module in baground
    CALL FUNCTION "ABC" IN BACKGROUND TASK
       Exporting
        var = var
    tables
      tab1 = tab1
      tab2 = tab2
    i am passing var and tab1 and updating tab2 in FM
    tab2 is not updating if i call in BACKGROUND
    It is working fine in onlie mode.
    Can anyone please through some light on this
    Thanks,
    Naveen

    Hi Rob,
    Thanks for the reply. Here is the code     
    Here i am passking lv_flname, lt_binary_file and updating lt_objbin
    in the function module i am going to update lt_objbin.
    The reason i am doing this becuase if i use open dataset it failing authorization.
    Thats why i want execute these statements in background. These report will be executed by many users, so they can not give authorization for everyone.
    CALL FUNCTION 'ZFI_VIM_OPEN_DATASET' IN BACKGROUND TASK
            EXPORTING
              lt_flname      = lv_flname
            TABLES
              ls_binary_file = lt_binary_file
              ls_objbin      = lt_objbin
            EXCEPTIONS
              error_dataset  = 1
              OTHERS         = 2.
    Here is the function module code
    FUNCTION zfi_vim_open_dataset.
    *"*"Local Interface:
    *"  IMPORTING
    *"     VALUE(LT_FLNAME) TYPE  CHAR80
    *"  TABLES
    *"      LS_BINARY_FILE STRUCTURE  TBL1024
    *"      LS_OBJBIN STRUCTURE  SOLISTI1
    *"  EXCEPTIONS
    *"      ERROR_DATASET
      OPEN DATASET lt_flname FOR OUTPUT IN BINARY MODE.
      IF sy-subrc = 0.
        LOOP AT ls_binary_file.
          TRANSFER ls_binary_file TO lt_flname.
        ENDLOOP.
        CLOSE DATASET lt_flname.
      ENDIF.
      CLEAR: ls_objbin. REFRESH: ls_objbin.
      OPEN DATASET lt_flname FOR INPUT IN BINARY MODE.
      DO.
        READ DATASET lt_flname INTO ls_objbin.
        IF sy-subrc <> 0.
          CLOSE DATASET lt_flname.
          EXIT.
        ELSE.
          APPEND ls_objbin.
        ENDIF.
      ENDDO.
      DELETE DATASET lt_flname.
    ENDFUNCTION.
    Moderator message - Please use code tags to format your code
    Edited by: Rob Burbank on Apr 1, 2010 3:42 PM

  • Doubt in call function

    Hi,
    Call Function 'FM' starting new task task-name
    Exporting
    What does this statement does.

    Hi
    chk this out
    CALL FUNCTION STARTING NEW TASK
    Variant 2
    CALL FUNCTION func ...STARTING NEW TASK task name.
    Extras:
    1. ... DESTINATION dest
    2. ... DESTINATION IN GROUP group name
    3. ... DESTINATION IN GROUP DEFAULT
    4. ... PERFORMING form ON END OF TASK
    5. ... EXPORTING  p1 = f1    ... pn = fn
    6. ... TABLES     p1 = itab1 ... pn = itabn
    7. ... EXCEPTIONS syst_except = rc MESSAGE mess
    Effect
    Starts the function module func asynchronously in a new session. In contrast to normal function module calls, the calling program resumes processing as soon as the function module is started in the target system. It does not wait until the function module has finished. Using CALL SCREEN, the called function module can, for example, display a screen and thus interact with the user. Note that taskname must be a valid string of at least 2 characters, preferably fewer than 8 characters. You cannot use either ' ' or SPACE as tasknames.
    Notes
    Note that under certain circumstances, an RFC may cause a database commit. For this reason, do not insert an RFC between two OpenSQL statements that open and close a database cursor (such as SELECT...ENDSELECT).
    This variant applies only from R/3 Release 3.0, so both the client system and the server system must have Release 3.0 at least.
    With this variant, the called function module must also be flagged in the Function Builder as externally callable, even if it is executed locally (without the addition Destination).
    There can be no function call to the destination 'BACK' in the called function module (for more information about the destination 'BACK', see CALL FUNCTION func DESTINATION dest).
    This variant does not allow you to execute external programs that you access from a TCP/IP-type detination asynchronously. (See the Transaction Tools -> Administration, Administration -> Network -> RFC destinations for maintaining destinations).
    Neither does this variant allow you to display images such as lists or screens in a separate window during RFC communication using a SAProuter.
    From Release 4.0 onwards, you can carry out a new, stricter system load check on RFC destinations. (In RFC destination maintenance of an R/3 connection, choose Destination -> ARFC-Optionen). Before the function module is executed, the system checks that the destination has sufficient resources available. If not, the system delays execution of the function module for a given period of time. The algorithm used to determine the system load on the target machine is the same as that used for an asynchronous RFC with the DESTINATION IN GROUP addition. Note that this option is only available for target systems from Release 3.1H onwards. This procedure is active as default.
    In principle, parallel processing makes sense whenever application servers have the necessary resources. In this case, the application servers must be configured with at least 3 dialog work processes.
    A program that is run in the background and uses RFC parallel processing requires at least 1 dialog work process per application server (because parallel processing takes place in a dialog work process).
    If the instance profile parameter 'auth/rfc_authority_check' is set to 1, the system automatically performs an RFC authorization check. The authorization check refers to the relevant function group for the function module to be called. If no authorization is found, a runtime error occurs. You can check the authorization in advance with the function module AUTHORITY_CHECK_RFC. If the RFC communication takes places in one system and in the same user context (that is, the same client and User ID) the system does not perform an RFC authority check. For more information, see: RFC Authorization Concept.
    When you are using asynchronous RFC to implement parallel windows, all these windows are closed if the caller session is the only session and terminates.
    Note that asynchronous tasks that have been started are not necessarily closed when the calling program ends.
    See also RFC Logons to the Target System (Remote Logon).
    Addition 1
    ... DESTINATION dest
    Effect
    Executes the function module externally as a Remote Function Call (RFC); dest can be a literal or a variable. The R/3 System where the function module is executed depends on the specified destination. Externally callable function modules must be flagged as such in the Function Builder (of the target system).
    Note
    If the destination is not explicitly specified, the system uses the default destination 'NONE'.
    Note
    If, during a Remote Function Call, an error occurs in the target system, details of the error message are passed back to the calling system in the following system fields: SY-MSGNO, SY-MSGID, SY-MSGTY, SY-MSGV1, SY-MSGV2, SY-MSGV3, and SY-MSGV4. These fields are initialized before every RFC. If a short dump or a type X message occurs, the short text of the dump is transferred to the caller, and the contents of SY-MSGID, SY-MSGTY, SY-MSGNO, and SY-MSGV1 assigned by the system.
    In RFC-enabled function modules, no ABAP statements are allowed that would end the RFC connection (for example, either LEAVE or SUBMIT without the AND RETURN addition).
    Note
    Note that a database commit occurs at each Remote Function Call (RFC). Consequently, you cannot use Remote Function Calls between pairs of statements that open and close a database cursor (such as SELECT ... ENDSELECT).
    Addition 2
    ... DESTINATION IN GROUP group name
    Addition 3
    ... DESTINATION IN GROUP DEFAULT
    Effect
    You use this addition to perform parallel execution of function modules (asynchronous calls) on a predefined group of R/3 System application servers.
    You use addition 2 (DESTINATION IN GROUP group name) to perform parallel execution of function modules on a predefined group of application servers. To maintain the RFC groups, choose Tools -> Administration -> Administration ->Network -> RFC destinations -> RFC -> RFC groups. The application programmer is responsible for the availability of RFC groups in the production system. In this case the group name variable must be of the type RZLLITAB-CLASSNAME
    You use addition 3 (DESTINATION IN GROUP DEFAULT) to perform parallel execution of function modules (asynchronous calls) on all currently available R/3 System application servers. However, instead of this variant, you are recommended to use an RFC group with appropriate resources for parallel processing of asynchronous calls (at least for performance reasons). Please note that the addition DESTINATION IN GROUP ' ' has the same effect as the addition DESTINATION IN GROUP DEFAULT.
    When you first call a function module with these additions, the system initializes the specified RFC group (unless the group has already been explicitly identified).
    To obtain current information about resources (that is, the resources available to process function modules), you can also initialize the RFC group explicitly in the program using the function module SPBT_INITIALIZE. You must perform this action before the first function module call.
    In both cases, the system first ascertains the currently available resources (work processes) on the available application servers (either a group of servers or all servers). By checking the current system load of each application server, the system determines how many work processes are available to execute asynchronous calls.
    After ascertaining the available resources, the asynchronous call is executed to one of the
    destinations. If no resources are available at that particular time, the system executes the
    exception routine RESOURCE_FAILURE (see the addition EXCEPTIONS). In the case of
    an asynchronous function module call, this exception must be handled by the application
    program (see example).
    No resources are made available by the system if resource availability limits are exceeded:
    Notes
    To be taken into consideration for RFC parallel processing, an application server must have at least 3 free dialog processes.
    The system triggers the exception RESOURCE_FAILURE only for asynchronous RFCs with the additions DESTINATION IN GROUP group name and DESTINATION IN GROUP DEFAULT.
    At present, only one RFC group per program environment is supported for parallel execution of asynchronous calls. Using both the additions DESTINATION IN GROUP group name and DESTINATION IN GROUP DEFAULT in a program is thus not allowed.
    To find out which destination was automatically selected, call the function module SPBT_GET_PP_DESTINATION immediately after the function module call with the two additions. This returns the selected RFC destination.
    If you want to delete an application server from the list of the configured RFC group at runtime (for example, when the application server is not accessible for technical reasons), use the function module SPBT_DO_NOT_USE_SERVER.
    Addition 4
    ... PERFORMING form ON END OF TASK
    While the parameters for receiving results (that is IMPORTING and TABLES parameters) are specified directly as additions in the case of "conventional" function modules (see variant 2), these are logged in the FORM routine form when making an asynchronous call (see RECEIVE).
    Notes
    If a function module returns no result, and you are not interested in error messages that arise when executing the function module, this addition (... PERFORMING form ON END OF TASK) can be omitted.
    If you want to handle the error messages that arise when executing the asynchronous function module call, you must use this addition. Also, when receiving the results in the FORM routine (see RECEIVE), you must react accordingly to the system exceptions SYSTEM_FAILURE and COMMUNICATION_FAILURE.
    With asynchronous RFC, the task name uniquely identifies the asynchronous connection and thus the context called.
    If several asynchronous function modules are executed consecutively to the same destination, you must assign a different task name to each.
    A calling program that starts an asynchronous RFC with the PERFORMING form ON END OF TASK addition cannot switch roll areas or change to an internal mode. This is because the asynchronous function module call reply cannot be passed on to the relevant program. You can perform a roll area switch with SUBMIT or CALL TRANSACTION.
    If a calling program makes asynchronous calls, finishes, and then expects responses, it cannot receive these responses.
    To wait for the reply to a started asynchronous function module, use the WAIT command with the addition PERFORMING form ON END OF TASK. Here, WAIT must be in the same program context (mode).
    Note that executing asynchronous calls is subject to a roll area change.That is, subroutines performed to receive asynchronous calls can take place while other asynchronous calls are being made. Thus as a developer you must ensure that subroutines can be executed at any time. You must not make assumptions about the implicit processing sequence.
    Addition 5
    ... EXPORTING p1 = f1 ... pn = fn
    Effect
    Passes values of fields and field strings from the calling program to the function module. In the function module, the formal parameters are defined as import parameters.
    Addition 6
    ... TABLES p1 = itab1 ... pn = itabn
    Effect
    Passes references to internal tables.
    Addition 7
    ... EXCEPTIONS syst_except = rc MESSAGE mess
    Effect
    While any exceptions arising in the called function module are handled by the second
    addition (see the FORM subroutine RETURN_INFO), this addition can handle two special
    system exceptions, (as with function module calls with the DESTINATION addition):
    SYSTEM_FAILURE
    is triggered, if a system crash occurs on the receiving side.
    COMMUNICATION_FAILURE
    is triggered if there is a connection or communication problem.
    In both cases, you can get a description of the error with the optional ... MESSAGE messaddition
    Note
    In principle, you should always react to these two system exceptions, whether you are making an asynchronous function module call or receiving results.
    Examples
    Calling a transaction in a seperate session.
    DATA: MSG_TEXT(80) TYPE C. "Message text
    Asynchronous call to Transaction SM59 -->
    Create a new session
    CALL FUNCTION 'ABAP4_CALL_TRANSACTION' STARTING NEW TASK 'TEST'
      DESTINATION 'NONE'
      EXPORTING
          TCODE = 'SM59'
      EXCEPTIONS
        COMMUNICATION_FAILURE = 1 MESSAGE MSG_TEXT
        SYSTEM_FAILURE        = 2 MESSAGE MSG_TEXT.
      IF SY-SUBRC NE 0.
        WRITE: MSG_TEXT.
      ELSE.
        WRITE: 'O.K.'.
      ENDIF.
    Using RFC groups to parallelize function module calls(RFC parallel processing)
    TYPES: BEGIN OF TASKLIST_TYPE,
             TASKNAME(4) TYPE C, "Verwaltung der Tasks
             RFCDEST     LIKE RFCSI-RFCDEST,
          END OF TASKLIST_TYPE.
    DATA: INFO LIKE RFCSI, C,  "Message text
          JOBS TYPE I VALUE 10,  "Number of parallel jobs
          SND_JOBS TYPE I VALUE 1,  "Sent jobs
          RCV_JOBS TYPE I VALUE 1,  "Received replies
          EXCP_FLAG(1) TYPE C,  "Number of RESOURCE_FAILUREs
          TASKNAME(4) TYPE N VALUE '0001',  "Task name administration
          TASKLIST TYPE TABLE OF TASKLIST_TYPE,
          WA_TASKLIST TYPE TASKLIST_TYPE.
    DO.
      CALL FUNCTION 'RFC_SYSTEM_INFO'
           STARTING NEW TASK TASKNAME DESTINATION IN GROUP DEFAULT
           PERFORMING RETURN_INFO ON END OF TASK
           EXCEPTIONS
             COMMUNICATION_FAILURE = 1
             SYSTEM_FAILURE        = 2
             RESOURCE_FAILURE      = 3.
      CASE SY-SUBRC.
        WHEN 0.
    Administration of asynchronous tasks
            WA_TASKLIST-TASKNAME = TASKNAME.
            CLEAR WA_TASKLIST-RFCDEST.
            APPEND WA_TASKLIST TO TASKLIST.
            WRITE: /  'Started Task: ', WA_TASKLIST-TASKNAME COLOR 2.
          TASKNAME = TASKNAME + 1.
          SND_JOBS = SND_JOBS + 1.
          JOBS     = JOBS - 1.  "Number of existing jobs
          IF JOBS = 0.
            EXIT.  "Job processing finished
          ENDIF.
        WHEN 1 OR 2.
    Handling of communication and system failure
        WHEN 3.  "No resources available at present
    Receive reply to asynchronous RFC calls
          IF EXCP_FLAG = SPACE.
             EXCP_FLAG = 'X'.
    First attempt for RESOURCE_FAILURE handling
             WAIT UNTIL RCV_JOBS >= SND_JOBS UP TO '0.01' SECONDS.
          ELSE.
    Second attempt for RESOURCE_FAILURE handling
             WAIT UNTIL RCV_JOBS >= SND_JOBS UP TO '0.1' SECONDS.
          ENDIF.
          IF SY-SUBRC = 0.
            CLEAR EXCP_FLAG.  "Reset flag
          ELSE.  "No replies
            "Endless loop handling
          ENDIF.
        ENDCASE.
    ENDDO.
    Receive remaining asynchronous replies
    WAIT UNTIL RCV_JOBS >= SND_JOBS.
    LOOP AT TASKLIST INTO WA_TASKLIST.
        WRITE:/   'Received Task:', WA_TASKLIST-TASKNAME COLOR 1,
              30  'Destination: ', WA_TASKLIST-RFCDEST COLOR 1.
    ENDLOOP.
    FORM RETURN_INFO USING TASKNAME.
      RECEIVE RESULTS FROM FUNCTION 'RFC_SYSTEM_INFO'
        IMPORTING RFCSI_EXPORT = INFO
        EXCEPTIONS
          COMMUNICATION_FAILURE = 1
          SYSTEM_FAILURE        = 2.
      RCV_JOBS = RCV_JOBS + 1.  "Receiving data
        IF SY-SUBRC NE 0.
    Handling communication and system failure
       ELSE.
         READ TABLE TASKLIST WITH KEY TASKNAME = TASKNAME
                    INTO WA_TASKLIST.
         IF SY-SUBRC = 0. "Daten registrieren
           WA_TASKLIST-RFCDEST = INFO-RFCDEST.
           MODIFY TASKLIST INDEX SY-TABIX FROM WA_TASKLIST.
         ENDIF.
       ENDIF.
    ENDFORM.
    plz reward if useful

  • Can we call functional module in a subroutine? Any example?

    Can we call functional module in a subroutine? Any example?

    sample code....
    REPORT  ZPL_BDC_PA30.
    TABLES : PA0022.
    DATA : V_PERNR LIKE PA0022-PERNR,
           V_SLABS LIKE PA0022-SLABS.
    DATA : FILENAME TYPE STRING.
    DATA : BEGIN OF IT_DATA OCCURS 0,
             PERNR LIKE PA0022-PERNR,       "Personnel Number
             SLABS LIKE PA0022-SLABS,       "Certificate code
             SLABS1 LIKE PA0022-SLABS,      "Certificate code new
           END OF IT_DATA.
    DATA : IT_BDCDATA LIKE BDCDATA OCCURS 1 WITH HEADER LINE.
    DATA : BEGIN OF IT_ERROR OCCURS 0,
             POS LIKE SY-TABIX,
             TEXT(40),
           END OF IT_ERROR.
    PARAMETERS : P_FNAME TYPE DXFIELDS-LONGPATH.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FNAME.
      CALL FUNCTION 'F4_DXFILENAME_TOPRECURSION'
    EXPORTING
      I_LOCATION_FLAG       = ' '
      I_SERVER              = '?'
      I_PATH                = I_PATH
      FILEMASK              = '.'
      FILEOPERATION         = 'R'
       IMPORTING
      O_LOCATION_FLAG       = O_LOCATION_FLAG
      O_SERVER              = O_SERVER
         O_PATH                = P_FNAME
      ABEND_FLAG            = ABEND_FLAG
       EXCEPTIONS
         RFC_ERROR             = 1
         ERROR_WITH_GUI        = 2
         OTHERS                = 3
      IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
    START-OF-SELECTION.
      FILENAME = P_FNAME.
      PERFORM UPLOAD.            "Uploading inputfile to internal table.
      PERFORM VALIDATE.          "validating the values
      PERFORM POPULATE_BDC.      "Populating bdc internal table
      PERFORM ERROR_RECORDS
            TABLES IT_ERROR.     "Error records
    *&      Form  bdc_fdata
    FORM BDC_FDATA  USING  FNAM FVAL.
      CLEAR IT_BDCDATA.
      IT_BDCDATA-FNAM = FNAM.
      IT_BDCDATA-FVAL = FVAL.
      APPEND IT_BDCDATA.
    ENDFORM.                    " bdc_fdata
    *&      Form  bdc_hdata
    FORM BDC_HDATA  USING PROGRAM SCRNO DYNBEGIN.
      CLEAR IT_BDCDATA.
      IT_BDCDATA-PROGRAM = PROGRAM.
      IT_BDCDATA-DYNPRO = SCRNO.
      IT_BDCDATA-DYNBEGIN = DYNBEGIN.
      APPEND IT_BDCDATA.
    ENDFORM.                    " bdc_hdata
    *&      Form  upload
    FORM UPLOAD .
      CALL FUNCTION 'GUI_UPLOAD'
        EXPORTING
          FILENAME                      = FILENAME
         FILETYPE                      = 'ASC'
         HAS_FIELD_SEPARATOR           = 'X'
      HEADER_LENGTH                 = 0
      READ_BY_LINE                  = 'X'
      DAT_MODE                      = ' '
      CODEPAGE                      = ' '
      IGNORE_CERR                   = ABAP_TRUE
      REPLACEMENT                   = '#'
      CHECK_BOM                     = ' '
      VIRUS_SCAN_PROFILE            = VIRUS_SCAN_PROFILE
      NO_AUTH_CHECK                 = ' '
    IMPORTING
      FILELENGTH                    = FILELENGTH
      HEADER                        = HEADER
        TABLES
          DATA_TAB                      = IT_DATA
       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 I000(BCTRAIN) WITH 'FILE NOT UPLOADED'.
      ELSE.
       MESSAGE I000(BCTRAIN) WITH 'FILE UPLOADED'.
      ENDIF.
    ENDFORM.                    " upload
    *&      Form  populate_bdc
    FORM POPULATE_BDC .
      LOOP AT IT_DATA .
        PERFORM BDC_HDATA USING 'SAPMP50A'
                                    '1000'
                                    'X'.
        PERFORM BDC_FDATA USING 'RP50G-PERNR'
                                 IT_DATA-PERNR.
        PERFORM BDC_FDATA USING 'RP50G-CHOIC'
                                 '0022'.
        PERFORM BDC_FDATA USING 'BDC_OKCODE'
                                 '=MOD'.
        PERFORM BDC_HDATA USING 'MP002200'
                                     '2000'
                                     'X'.
        PERFORM BDC_FDATA USING 'P0022-SLABS'
                                 IT_DATA-SLABS1.
        PERFORM BDC_FDATA USING 'BDC_OKCODE'
                                 '=UPD'.
        CALL TRANSACTION 'PA30' USING IT_BDCDATA.
        REFRESH IT_BDCDATA.
      ENDLOOP.
    ENDFORM.                    " populate_bdc
    *&      Form  validate
    FORM VALIDATE .
        data : num like sy-tabix,
               num1 like sy-tabix.
      LOOP AT IT_DATA.
       num = num + 1.
    num1 = sy-tabix.
        SELECT PERNR
             FROM PA0022
             INTO V_PERNR WHERE
             PERNR EQ IT_DATA-PERNR.
        ENDSELECT.
        IF SY-SUBRC <> 0.
          MOVE num TO IT_ERROR-POS.
          MOVE 'Invalid Pernr' TO IT_ERROR-TEXT.
          APPEND IT_ERROR.
          DELETE IT_DATA .
        ELSE.
          IF IT_DATA-SLABS IS INITIAL.
            MOVE num TO IT_ERROR-POS.
            MOVE 'Certificate code is initial' TO IT_ERROR-TEXT.
            APPEND IT_ERROR.
            DELETE IT_DATA.
          ENDIF.
        ENDIF.
      ENDLOOP.
    ENDFORM.                    " validate
    *&      Form  error_records
    FORM ERROR_RECORDS TABLES IT_ERRORS.
      FORMAT COLOR COL_GROUP.
      WRITE : / 'Error in the following records : ' .
      FORMAT COLOR COL_NEGATIVE.
      LOOP AT IT_ERROR.
        WRITE : /  IT_ERROR-POS,
                   IT_ERROR-TEXT.
      ENDLOOP.
    ENDFORM.                    " error_records

  • Call function 'Download' using different internal tables

    Hi everyone!
    i declare 10 different internal tables, with the same structure but different data.
    i need to create 10 different files (one from each internal table)
    i dont want to call 10 times the function download.
    is there someway to put a variable name(that refeer to my internal table)
    something like this.
    PERFORM Create_file USING mytable.
    PERFORM Create_file USING mytable2.
    PERFORM Create_file USING mytable3.
    PERFORM Create_file USING etc....
    FORM create_file USING table.
      DATA: file(128),
            zcancel(1).
      archivo = 'c:\loans.dat'.
      CALL FUNCTION 'DOWNLOAD'
           EXPORTING
                bin_filesize        = ' '
                codepage            = ' '
                filemask_all        = ' '
                filemask_mask       = ' '
                filemask_text       = ' '
                filename            = file
                filetype            = 'dat'
                filetype_no_change  = ' '
                filetype_no_show    = ' '
                item                = ' '
                mode                = ' '
                wk1_n_format        = ' '
                wk1_n_size          = ' '
                wk1_t_format        = ' '
                wk1_t_size          = ' '
           IMPORTING
                cancel              = zcancel
           TABLES
                data_tab            =  <b>TABLE</b>
           EXCEPTIONS
                invalid_filesize    = 01
                invalid_table_width = 02
                invalid_type        = 03
                no_batch            = 04
                unknown_error       = 05.
    ENDFORM.

    Hi,
    Check this example..
    It download t_mara1 & t_mara2..Modify the code according to your requirement..
    DATA: t_mara1  LIKE mara OCCURS 0 WITH HEADER LINE.
    DATA: t_mara2 LIKE mara OCCURS 0 WITH HEADER LINE.
    DATA: v_filename LIKE rlgrap-filename.
    DATA: v_char5(5).
    FIELD-SYMBOLS: <fs> TYPE table.
    DATA: v_variable(30).
    DO 2 TIMES.
      CLEAR: v_filename.
      v_char5 = sy-index.
      SHIFT v_char5 LEFT DELETING LEADING space.
      CONDENSE v_char5.
      CONCATENATE 'C:\TEST' v_char5 '.TXT' INTO v_filename.
      CONCATENATE 'T_MARA' v_char5 '[]' INTO v_variable.
      ASSIGN (v_variable) TO <fs>.
      CALL FUNCTION 'DOWNLOAD'
           EXPORTING
                filename                = v_filename
                filetype                = 'DAT'
           TABLES
                data_tab                = <fs>
           EXCEPTIONS
                invalid_filesize        = 1
                invalid_table_width     = 2
                invalid_type            = 3
                no_batch                = 4
                unknown_error           = 5
                gui_refuse_filetransfer = 6
                customer_error          = 7
                OTHERS                  = 8.
      IF sy-subrc <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
    ENDDO.
    Thanks,
    Naren

Maybe you are looking for

  • Distorted video

    Hi, I'm new to videocams and related software, so please be patient with me! I have just bought a sony HDR-HC3 videocam and decided to use FCE HD 3.5. When I capture the video and using the easy setup 1080i50 which the videocam supports, I notice tha

  • 'File Link' shows image on local pc only

    Hello All, I am trying to make a report with an image as background image ...for doing this i tried inserting File link and given a path of image and when i run on the local developement pc it shows the image ... but when i give the same link to anot

  • Downloaded a song but the file was corrupt , how do i get refunded back if the song

    when i downloadeda song on itunes i found that one of the files was corrpt and now wont completely dwnload and still had 2 pay for it . My question is how do i get my money back from that purchase or get thesong i wanted ?

  • Sales Process at the Opportunity Revenue Level

    Hello, My client is managing all the opportunities at the part level (product revenue) level. All there approvals happen at the part level and it is possible that for an opportunity there could be muiltiple parts with some Closed/Won and some Closed/

  • Illustrator CC - can't be installed

    Slightly disappointed that I can't use the latest Illustrator as I don't have all the system's requirements. I already uninstalled Illustrator 6. Can I get download it again? So frustrated as I have work to do and deadlines to meet. Can anyone help m