Can I rotate application log in OC4J_Portal_default_island_1?

My application.log file in %oracle_home%\j2ee\oc4j_portal\application-deployments\portal\oc4j_portal_default_island_1 grows quickly. Can I configure it to rotate every day or when it reaches a certain size? If yes, how?
TIA
Edited by: Angrydot on Aug 25, 2008 9:51 PM - what happens if I edit an old post in the new forum?
Edited by: Angrydot on Aug 25, 2008 9:52 PM - nothing

To rotate the OC4J log files under $ORACLE_HOME/opmn/logs, there are few parameters you can modify that are not documented in Oracle 9.0.4/10.1.2 documentation.
[New JVM parameters]
"stdstream.filesize"
Max file size limit of each archive. Unit is megabyte.
"stdstream.filenumber"
Max number of files that oc4j can keep as archives. The oldest file will be automatically deleted if the limit is exceeded.
[Usage]
ex 1: rotate stdout/stderr when the file size is reached to 2.5M byte.
java -Dstdstream.filesize=2.5 -jar oc4j.jar -out std.out -err std.err
OraHome\opmn\conf\opmn.xml
In order to get these parameters in opmn.xml you need to define it as follows:
<category id="start-parameters">
<data id="java-options" value="-server -Djava.security.policy=$ORACLE_HOME/j2ee/home/config/java2.policy -Djava.awt.headless =true -Dstdstream.filesize=0.2 -Dstdstream.filenumber=5"/>
<data id="oc4j-options" value="-out std.out -err std.err"/>
</category>
The new log files will be created under:$ORACLE_HOME\j2ee\home\home_default_island_1\
The file naming will be like:
std_2006_02_22_14_01_17.out
std_2006_02_22_14_16_25.out
Important notes:
1. Backup opmn.xml file before any modification.
2. Modify opmn.xml file to specify stdstream.filesize and stdstream.filenumber. See the example above.
3. Test and validate this solution in your test system first before implementing in Production.

Similar Messages

  • Can you write Application.log from an EJB?

    I can write to my EAR's Application.log file from a servlet using the ServletContext's log method. But I can't find a way to do the same from an EJB. Anyone know if it's possible?

    Yes have a read of - Working with Plan Types
    Cheers
    John
    http://john-goodwin.blogspot.com/

  • How we can see application log

    i  have created a application  log and put messages in that..
    how we can see that application log..
    thanks and regards......

    Hi Sharada,
    Use   CALL FUNCTION 'BAL_DSP_LOG_DISPLAY' to display the application log. Displaying application log can be possible in many ways, as a popup window, as normaal one ,as tree. YOu can play around with APPLICATION with these standard programs.
    SBAL_DEMO_01
    SBAL_DEMO_02
    SBAL_DEMO_03
    SBAL_DEMO_04
    SBAL_DEMO_04_*
    SBAL_DEMO_05
    Still if you any need any more on this , let me know.
    <b>Example Program</b>
    * create a log where all message should be added to
      PERFORM log_create.
    * Add information that this is a check for passenger flights
    * this informnation can be added as a free text
      PERFORM msg_add_free_text USING text-002.
        PERFORM msg_add_free_text USING text-003.
    * display log file
      PERFORM log_display.
    * FORM LOG_CREATE
    FORM log_create.
      DATA:
        l_s_log TYPE bal_s_log.
    * define some header data of this log
      l_s_log-extnumber = 'Application Log Demo'.             "#EC NOTEXT
      l_s_log-aluser    = sy-uname.
      l_s_log-alprog    = sy-repid.
    * create a log
      CALL FUNCTION 'BAL_LOG_CREATE'
           EXPORTING
                i_s_log = l_s_log
           EXCEPTIONS
                OTHERS  = 1.
      IF sy-subrc <> 0.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.
    ENDFORM.
    * FORM MSG_ADD_FREE_TEXT
    FORM msg_add_free_text USING value(i_text) TYPE c.
    * add this message to log file
    * (I_LOG_HANDLE is not specified, we want to add to the default log.
    *  If it does not exist we do not care =>EXCEPTIONS log_not_found = 0)
      CALL FUNCTION 'BAL_LOG_MSG_ADD_FREE_TEXT'
           EXPORTING
    *           I_LOG_HANDLE  =
                i_msgty       = 'S'
                i_text        = i_text
           EXCEPTIONS
                LOG_NOT_FOUND = 0
                OTHERS        = 1.
      IF sy-subrc <> 0.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.
    ENDFORM.
    * FORM LOG_DISPLAY
    FORM log_display.
      DATA:
        l_s_display_profile TYPE bal_s_prof,
        l_s_fcat            TYPE bal_s_fcat.
    * get a prepared profile
      CALL FUNCTION 'BAL_DSP_PROFILE_POPUP_GET'
           IMPORTING
                e_s_display_profile = l_s_display_profile
           EXCEPTIONS
                OTHERS              = 1.
      IF sy-subrc <> 0.
        MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                 WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
    * show log file with modified output profile
    * - we specify the display profile since we created our own
    * - we do not specify any filter (like I_S_LOG_FILTER, ...,
    *   I_T_MSG_HANDLE) since we want to display all messages available
      CALL FUNCTION 'BAL_DSP_LOG_DISPLAY'
           EXPORTING
    *           I_S_LOG_FILTER         =
    *           I_T_LOG_CONTEXT_FILTER =
    *           I_S_MSG_FILTER         =
    *           I_T_MSG_CONTEXT_FILTER =
    *           I_T_LOG_HANDLE         =
    *           I_T_MSG_HANDLE         =
                i_s_display_profile    = l_s_display_profile
           EXCEPTIONS
                OTHERS                 = 1.
      IF sy-subrc <> 0.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.
    Regards,
    Raghav

  • Can I generate .txt / .log file from Oracle Diagnostic Logging?

    Hi all,
    on my application I need to limit the size of application log, I've read this [http://download.oracle.com/docs/cd/B25221_04/web.1013/b14432/logadmin.htm#CHDJHHHB|http://download.oracle.com/docs/cd/B25221_04/web.1013/b14432/logadmin.htm#CHDJHHHB] that using ODL, but generated file is .xml, but I need .log / .txt file. How can I do this??
    thanks in advance.
    Regards,
    Kahlil

    ODL generates log files in XML format only. Using ODL you can not have plain text format log files. You have to decide what is more desired - log rotation (that ODL provides) or text format (which is the default, non-ODL, format). If text format is more desired than don't enable ODL and write your own shell script to rotate application log (but that can only be done while OC4J is down).
    At the same time if you are concern about readability of log file (i.e. text format is easier to read vs. xml format) than you might consider using one the log viewer tool (log viewer in EM or printlogs command line) provided by Oracle. Both of these tools help you view the logs in much more readable format than just looking at xml format log file.
    (printlogs utility is under $OH/diagnostic/bin directory. Run "printlogs -help" to read about it).
    Hope this helps.
    Thanks
    Shail

  • How to create application log in SAP

    According to my reqirement,I need to display messages in the application log whenever some updation is done.
    How to do create application log and display messages in the application log.

    Hello Smriti
    If you have interface IF_RECA_MESSAGE_LIST available on your system then I highly recommend to use as message collector.
    When you create an instance of the interface (CF_RECA_MESSAGE_LIST=>CREATE) you can provide an application log object.
    The collected messages can easily be saved as log.
    For an example have a look at my Wiki posting [Message Handling - Finding the Needle in the Haystack|https://wiki.sdn.sap.com/wiki/display/profile/2007/07/09/MessageHandling-FindingtheNeedleintheHaystack]
    Regards
      Uwe

  • Application Log Issue

    Hello all,
    I need to get the application log data into an internal table.
    I have the following parameters with me: 1) OBJECT ID
                                                                      2) SUBOBJECT
                                                                      3) EXTERNAL ID
    When i enter the same in SLG1 i get the information.
    How do i get the entire message into an Internal table in my program.I n
    Regards,
    Arun

    Hello Arun,
    Using function module 'APPL_LOG_READ_DB' u can read the application log.
    DATA: P_NUMBER_OF_LOGS LIKE SY-TABIX.
    Log header data
    DATA: BEGIN OF P_HEADER_DATA_TAB OCCURS 0.
    INCLUDE STRUCTURE BALHDR.
    DATA: END OF P_HEADER_DATA_TAB.
    Log parameters
    DATA: BEGIN OF P_HEADER_PARA_TAB OCCURS 0.
    INCLUDE STRUCTURE BALHDRP.
    DATA: END OF P_HEADER_PARA_TAB.
    Log messages
    DATA: BEGIN OF P_MESSAGE_TAB OCCURS 0.
    INCLUDE STRUCTURE BALM.
    DATA: END OF P_MESSAGE_TAB.
    Message parameters
    DATA: BEGIN OF P_MESSAGE_PARA_TAB OCCURS 0.
    INCLUDE STRUCTURE BALMP.
    DATA: END OF P_MESSAGE_PARA_TAB.
    CALL FUNCTION 'APPL_LOG_READ_DB'
      EXPORTING
        OBJECT          = 'ZTEST'
        SUBOBJECT       = 'ZTEST01'
        EXTERNAL_NUMBER = 'Application Log Demo'
      IMPORTING
        NUMBER_OF_LOGS  = P_NUMBER_OF_LOGS
      TABLES
        HEADER_DATA        = P_HEADER_DATA_TAB
        HEADER_PARAMETERS  = P_HEADER_PARA_TAB
        MESSAGES           = P_MESSAGE_TAB
        MESSAGE_PARAMETERS = P_MESSAGE_PARA_TAB.
    Please let me know any help needed further.

  • Application Log in Function Module

    Hi Experts,
    I have come across application log as input in several function modules. What is the significance of the application log and how do I generate it so that I can use the function module. Following is the interface of my function module
    *"*"Local Interface:
    *"  IMPORTING
    *"     REFERENCE(IV_UPDATE_TYPE) TYPE  UPDATE_TYPE DEFAULT 'U'
    *"     REFERENCE(IV_PRODUCT_GUID) TYPE  COMT_PRODUCT_GUID
    *"     REFERENCE(IS_SET_MAINTAIN) TYPE  ZSORGIB_MAINTAIN
    *"     REFERENCE(IV_APPLICATION_LOG) TYPE  BALLOGHNDL
    Regards,
    Abdullah Ismail.

    Hi,
    You can use the Application Log to display error messages, warnings, and other information generated by KM applications and services.
    Use FM Application 'BAL_LOG_CREATE'  for creating an handle and then call FM 'BAL_LOG_MSG_ADD' to add new messages under this handle. When you call the function module with the handle generated by you. The messages inside the fm will be logged with that handle which later on you can get using BAL_LOG_MSG_READ.
    Thanks and warm regards,
    Smita.

  • How to setup rotation for application.log?

    In order to get the Portal Performance Statistics running, we need to retrieve the page views from file application.log in directory <ORAHOME>\j2ee\OC4J_Portal\application-deployments\portal\OC4J_Portal_default_island_1.
    This file continues to grow and therefore we want to set up rotation, in order to get one file per day.
    We are following note 264373.1 and have read all documents and manuals about logging, but can not figure out how to manage this.
    Can anyone help us? We are working with 9.0.4.1.
    For Oracle employees: see also tar 4193327.994.

    I can't speak for how portal uses the log file, but in general, the way you do it for a deployed J2EE application on OC4J is as follows.
    Deploy the application EAR file. Lets say the app is called Test.
    In the j2ee/home/application-deployments/Test directory, a file will be created called orion-application.xml.
    If you look in this file, you will see an entry which looks like
    <log>
    <file path="application.log" />
    </log>
    This defines the log file for this application.
    Now if you want to setup log file rotation for this app, edit the orion-application.xml file and firstly, comment out the above.
    Note: you can leave the log tag in if you wish, but you'll get double log messages. Remove it if you do this in production and are trying to conserve space ;-).
    Then add in the below to setup ODL based logging for this application:
    <log>
    <odl path="logdir"
    max-file-size="1000" max-directory-size="10000" />
    </log>
    What this does it to tell OC4J to output the log messages using it's ODL format model, to create a directory called logdir (in the current directory) and then to start writing to log files called log.xml in that directory.
    The max file size of log.xml is 1000KB, and the max directory size of the new logdir directory will be 10MB.
    The ODL logging system will manage the log files in this directory according to these constraints -- when a log file gets bigger than max-file-size it gets archived as logN.xml. When the overall directory size gets bigger than the max-directory-size specified, the oldest log file from the list is removed so that the max directory size is honoured.
    I don't think we can specify a rollover period (ie one day) with ODL. I'm pretty sure it's just file size based only.
    I think the above should apply to Portal since it runs on OC4J. In which case, you'd change the orion-application.zml in the <ORAHOME>\j2ee\OC4J_Portal\application-deployments\portal directory instead of j2ee/home/application-deployments/<app-name>.
    However, I can't speak officially for Portal since I don't work with that product. From a pure OC4J perspective the above holds true and works.
    cheers
    -steve-

  • Rotate OC4J_Portal application log?

    How can I rotate the OC4J_PORTAL application.log file that resides in %oracle_home%\j2ee\OC4J_Portal\application-deployments\portal\OC4J_Portal_default_island_1 without stopping the Portal?

    http://www.oracle.com/technology/products/ias/portal/html/admin_monitor_modplsql.htm#maintenance

  • OC4J_Portal_default_island_1/application.log

    Hi ,
    i cannot find this file in my portal installation , i am using Oracle Portal Version: 10.1.2.0.2 (Build: 139)
    $ORACLE_HOME/j2ee/OC4J_Portal/application-deployments/portal/OC4J_Portal_default_island_1/application.log
    this file is important to me to generate performance reports from the portal where can i find this file?

    It is quite simple to see where that file would be provided it has not been deleted and that the OC4J_instances were created using EM or by default installation.
    Go to Enterprise Manger and Middle-tier; see which component is listed with a name like OC4J_ , eg. OC4J_Portal or OC4J_Custom, etc.
    The file-system architecture for this application log file in an OC4J_Instance is as follows:
    ORACLE_HOME\j2ee\OC4J_InstanceName\application-deployments\OC4J-AppName\OC4J_InstanceName_default_island_1\application.log
    For instance, in the following cases:
    Instance            OC4J_InstanceName    OC4J-AppName   location
    infrastructure        OC4J_SECURITY           SSO               %ORACLE_HOME%\j2ee\OC4J_Security\application-deployments\sso\OC4J_Security_default_island_1\application.log
    middle-tier           OC4J_Portal             Portal            %ORACLE_HOME%\j2ee\OC4J_Portal\application-deployments\portal\OC4J_Portal_default_island_1\application.log
    middle-tier           OC4J_Portal30           Portal30          %ORACLE_HOME%\j2ee\OC4J_Portal30\application-deployments\portal30\OC4J_Portal30_default_island_1\application.log
    BI-Discoverer         OC4J_BI_Forms           Discoverer        %ORACLE_HOME%\j2ee\OC4J_BI_Forms\application-deployments\Discoverer\OC4J_BI_Forms_default_island_1\application.logMake sure that you are looking at the right instances and applications.
    Also note that on unix machines, all addresses are case-sensitive, and forward-slashes should be replaced with back-slashes.
    hope that helps!
    AMN

  • Messages from IDoc processing can be found in application log

    We are using the IDOC_INPUT_INVOIC_MRM Function Module to post Inbound Vendor EDI Invoices. During testing, we sometimes see the error "Messages from IDoc processing can be found in application log". We then have to check transaction SLG1 to ascertain the 'real' issue, e.g. "No GR documents found". In a Production environment however, this will be very inconvenient. Our business users process their own iDoc errors according to the iDoc Status, so to have to call up another transaction, and select the correct Application Log to find the true error, is not a process I would feel comfortable with for our users.
    My question is, can we configure/determine which messages are passed to the iDoc Status, or redirect Application Log messages ? Might a Z version of FM IDOC_INPUT_INVOIC_MRM be the way forward ?
    Many thanks,
    Paul.

    Hi,
       Just monitor your error idocs in WE20 transaction. Give idoc number here then execute, you can see the all three records(control, data, status). Click on status record node then double click
    on status number(e.g 51), it will take you to another screen there you click on "application log" button on application toolbar. This is the standard way finding the application log of an idoc, even i am finding the application log on production server like this.
    Thanks,
    Asit Purbey.

  • How can I control the application log display format?

    Hello all,
    I am running into a problem with regard to application log display, and I don't know if we can work on the standard log profile(BAL_S_PROF) to fulfill my requirement, I would like to get you advises.
    Basically, we already saved numbers of the messages for each level (Domain BALLEVEL), so at last we will get a log tree with branches hopefully. Like below:
    Level 1: Check document item 01 (traffic light is Red)
       Level 2: Display success status (Traffic light is Red)
          Level 3: Display method B( Traffic light is Red)
             Level 4: Display processing status for method B( Traffic light is Red)
          Level 3: Display method C ( traffic light is Green)
             Level 4: Display processing status for method C ( traffic light is Green)
    At present system determine the traffic light color of the upper level depending on the lower level status, if there is even one red light in the lower level, the upper one would be red, like in level 2.  My requirement is that we need to make level 2 as GREEN, this way it is more reasonable from the business point of view because a solution has been found. I did some research for the function module 'BAL_DSP_PROFILE_DETLEVEL_GET', but obviously I haven't found a way till now, can anyone shed some light on this?
    Thanks,
    Derek

    Hello Gaurav,
    Thank You..!!! I tried appling filterFunction on the ADG and got whatever I expected but filter changes the original dataprovider behaviour. SO which I dont want to do it.
    I have created a local variable and binded whatever data wanted to display on that page. Infact it works as expexted and I still have original data provider as well.
    I have one more problem, I'm using creationComplete to initialize my local data provider value. It works only once while creation of state. If I navigate my screens fore and back and come back to this screen, it doesn't display the modified values as creationComplete loads only while state creation.
    Is there any mothid which does the samething while vising the page every time than creation?
    Thanks,
    Siva

  • Error Message in portal application.log

    Hi all,
    There are error messages continually been written to application.log.
    Here is the path.
    $ORACLE_HOME/j2ee/OC4J_Portal/application-deployments/portal/OC4J_Portal_default_island_1/application.log
    We couldn't find out what's wrong.
    Portal Version is 10.1.2.2.0.
    application.log
    07/01/31 16:54:54 portal: [module=RepositoryServlet, ecid=103102642203,1] ERROR: Repository Gateway error: Request Processing Error:
    maxlength.htc: PROCEDURE DOESN'T EXIST
    07/01/31 17:23:44 portal: [module=RepositoryServlet, ecid=133169185626,1] ERROR: Repository Gateway error: Request Processing Error:
    maxlength.htc: PROCEDURE DOESN'T EXIST
    07/01/31 17:23:58 portal: Broken pipe
    07/01/31 17:23:58 portal: Broken pipe
    07/01/31 17:23:58 portal: id=146054097151,1 Exception processing portlet response
    java.lang.ArrayIndexOutOfBoundsException
         at java.lang.System.arraycopy(Native Method)
         at com.evermind.server.http.EvermindServletOutputStream.write(EvermindServletOutputStream.java:216)
         at com.evermind.server.http.EvermindServletOutputStream.write(EvermindServletOutputStream.java:151)
         at oracle.webdb.repository.service.RepositoryHttpResponseWrapper$RepositoryOutputStreamWrapper.write(Unknown Source)
         at oracle.webdb.page.CharConvertingOutputStream.write(Unknown Source)
         at oracle.webdb.page.v2.BaseDataProcessor.addToOutputStream(Unknown Source)
         at oracle.webdb.page.v2.BaseDataProcessor.includePortlet(Unknown Source)
         at oracle.webdb.page.v2.BaseDataProcessor.parseLayout(Unknown Source)
         at oracle.webdb.page.v2.BaseDataProcessor.assemblePage(Unknown Source)
         at oracle.webdb.page.v2.BaseDataProcessor.process(Unknown Source)
         at oracle.webdb.page.PageBuilder.process(Unknown Source)
         at oracle.webdb.page.Main.doRequest(Unknown Source)
         at oracle.webdb.page.ParallelServlet.doGet(Unknown Source)
         at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
         at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
         at com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:834)
         at com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:340)
         at com.evermind.server.http.ServletRequestDispatcher.forward(ServletRequestDispatcher.java:260)
         at oracle.webdb.portal.servlet.PortalServlet.doGet(Unknown Source)
         at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
         at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
         at com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:834)
         at com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:340)
         at com.evermind.server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:830)
         at com.evermind.server.http.AJPRequestHandler.run(AJPRequestHandler.java:228)
         at com.evermind.server.http.AJPRequestHandler.run(AJPRequestHandler.java:133)
         at com.evermind.util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:192)
         at java.lang.Thread.run(Thread.java:534)
    ----------------------

    $ORACLE_HOME/j2ee/OC4J_Portal/application-deployments/portal/OC4J_Portal_default_island_1/application.log
    os the log of the "parent application". This is rather high level in the container. The message in the logfiles tells you that a procedure doesn't exist.
    This can mean 3 things:
    1. The procedure really doesn't exist
    2. The procedure expects different parameters then passed
    3. In the procedure a specific array member is called (but not found). (don't know how to explain this better in English, sorry for that).
    It has been a while since I touched portal. In the past portal used a DAD (located in your HTTP-Server configuration). By changing the error style of the dad, you might find a more comprohensive error message.

  • Control the size of Essbase.log and application log

    Understand that there are many message were written to the Essbase.log and application log. Is there any method to control what kind of message to be written to the log file so as to reduce the IO frequency of the server disk folders?
    Thanks for your help!

    CL wrote:
    You might want to think about forcing your BSO/ASO PAG & IND/DAT files to go onto a separate drive volume from your base Essbase binaries. This can be tough to do in a SAN environment as it is difficult to know what is truly where.
    Another option would be to use CLEARLOGFILE to reset the logs (this will delete them every time you stop/restart Essbase, so make sure you archive them if you need log history).
    See: http://download.oracle.com/docs/cd/E10530_01/doc/epm.931/html_esb_techref/config/clearlogfile.htm
    Yet another would be to set SSLOGUNKNWON to false to cut down on the log.
    See: http://download.oracle.com/docs/cd/E10530_01/doc/epm.931/html_esb_techref/config/sslogunknown.htm
    Regards,
    Cameron LackpourThanks! We already separate the log files from the data files but they still in the same hardware server. Yes, in SAN environment we really don't know where it the physical drive.
    Essbase do not have log rotate option like Apache and maybe we should archive the essbase log regularly and clear it up.
    We don't have much unknown member case in our log. Anyway we will investigate the option SSLOGUNKNOWN
    Thanks again!

  • How to create performance counter based on no. of errors generated in application log

    i have written custom events into application log and am able to see those events as alerts in the scom console and now i want to see how many event errors are generated for every 15mins.(interval)performance counter with same event source or id. how can
    i get started with this 

    Hi,
    Please try to create event monitor Triggered on Count:
    Trigger on count consolidation of events lets a monitor require multiple occurrences of the same event in a specified time window before it changes the health state to an error. The time window can be rotating time duration of specified length or
    a specific window based on day of the week.
    Trigger on count consolidation resembles trigger on timer consolidation except that multiple occurrences of the event are required instead of just one. When the time window is reached, the event count is returned to zero, and the specific number of events
    must detected before the time window expires again for the health state to be changed.
    More details:
    Event Monitors
    http://technet.microsoft.com/en-us/library/ff629447.aspx
    Regards, Yan Li

Maybe you are looking for