TestStand sequence error handling

I have a sequence which calls DLL steps and subsequencies (which also call DLL steps). I would like to know which is the best way to handle DLL error return values. My DLL's return non-zero values on error and also error message string.
I have configured all my DLL steps as Actions. In the "Post Action" of each DLL step I have set a custom condition: "If Locals.status != 0 Goto destination (end_ERROR)". In each of my sequence I have end_ERROR and end_OK labels at the end. In the end_ERROR block I store the DLL numeric error code and error string to StationGlobal variables (StationGlobals.system_error and StationGlobals.error_msg), which I then display in the Cleanup Group of my main sequence, if StationGlobals.system_error != 0.
My prob
lem is basically this: How can I tell the end user the DLL step name which returned error code, and also tell in which sequence the error occurred. Currently I only get error codes and strings from DLL's but there will be so many DLL calls, so knowing the exact location would be usefull.
I am not sure whether this is the most pratical way to do this. Are there any built-in mechanisms in TestStand to do this? Should I change my DLL steps to Pass/Fail Tests? There seems to be TestStand property RunState/PreviousStep? Maybe I could somehow use this in my end_ERROR label to check where the error occurred.
Any help would be greatly appreciated.
BR,
Timo Sakari

I'm not sure of the prototype of your dll functions as far as how the error code and message are returned, but there is an easier solution that involves the use of built-in properties of the action steptype.
When you are "specifying the module" of a DLL Flexible Prototype Adapter step, you can specify that the return value or any output parameter (those passed by reference) can be assigned to the Step.Result.Error.Code property value. You can also specify that if this value falls within a predetermined range it will cause the Step.Result.Error.Occurred boolean value to be set to true. If this property is set to true, the specific step will be marked as causing an error in the report and the error message will be reported to the user as it happens. If you want to
see examples (including DLL source code examples) that are structured to more efficiently use these properties, take a look at the examples C-DLL based examples in the \Examples\AccessingPropertiesAndVariables.
For more information on using the DLL Flexible Prototype Adapter (more specifically the parameter settings mentioned above), take a look at Chapter 13 of the TestStand User Manual (available via the Sequence Editor's Help menu).
Jason F.
Applications Engineering
National Instruments
www.ni.com/ask

Similar Messages

  • Teststand error handling Option

    Hi all,
      I am looking for a way that when a step get error,  Sequence will not be terminated but continue to run other steps.
    I found no error handle option to fit my need as the below.   Value 1 seems to be good but it terminated the sequence.  Value 2 sumary test result validate as good which is not useful.  is there any way I can change the error handle structure?
    RTEOption_Abort–(Value: 3) Instructs the execution to abort the execution.
    RTEOption_Continue–(Value: 1) Instructs the execution to process the error by propagating the error to the calling sequence, if one exists. If the current step group is Setup or Main, the execution jumps directly to the Cleanup step group.
    RTEOption_Ignore–(Value: 2) Instructs the execution to ignore the error and continue normal execution.
    RTEOption_Retry–(Value: 4) Instructs the execution to ignore the error and re-execute the step that caused the error condition. For the StationOptions.RTEOption property, the Execution.RTEOptionForThisExecution property, and the Thread.SetBatchRTEOption method, TestStand interprets the RTEOption_Retry value as RTEOption_Continue.
    RTEOption_ShowDialog–(Value: 0) Instructs the execution to launch the Run-Time Error dialog box when an error occurs.
    Purpose
    Solved!
    Go to Solution.

    You could use the SequenceFilePostStepRuntimeError callback and handle errors if you need to do something custom.
    An example ships with Teststand which will give you some pointers.
    http://zone.ni.com/reference/en-XX/help/370052K-01/tssuppref/infotopics/callbacks_sequencefilepostst...
    Beginner? Try LabVIEW Basics
    Sharing bits of code? Try Snippets or LAVA Code Capture Tool
    Have you tried Quick Drop?, Visit QD Community.

  • Getting sequence filename and sequence name in process model error handler

    We are using the sequential process model and would like to log sequence step error information to a file.  We have an Error Handler callback in SequentialModel.seq and that is where we will write to the error file.  In the Error Handler callback, I can get the error container info for the step where the error occurs and the name of the that step thru the Error Handler Step parameter.  I would also like to record the sequence file and the sequence where the error occurred, but I have not been able to find those in the sequence context.  I know they are available because the TestStand RunTime Error dialog box displays them.  How can I access the name of the sequence file and the name of the sequence where the error occurred?
    Thanks,
    Hans

    Hey hans,
    Use the API.  Since you already have the Step object reference coming in as a parameter you can just use a few ActiveX steps to get the Sequence File and Sequence from which the error was thrown.
    Step.Sequence
    Sequence.Name (gets the name of the sequence)
    Sequence.SequenceFile
    SequenceFile.Path (gets the path of the sequence file)
    So basically just 4 activex steps.  I hope this helps.
    Regards,
    jigg
    CTA, CLA
    teststandhelp.com
    ~Will work for kudos and/or BBQ~

  • Break execution after custom run-time error handler callback

    I am using Teststand 2010 SP1 and have written a custom runtime error handler based on the ErrorHandlerExample example that ships with TestStand. It has been implemented as a StationPostStepRuntimeError callback in my Station Callbacks folder.  I have modified the example as follows:
    (1) Added code to turn off the UUT transmitter if it was on.
    (2) Added a call to an executable that sends an email to the currently logged in user.
    (3) Calls the standard TestStand run-time error dialog using the Engine DisplayRunTimeErrorDialog method.
    (4) Processes the user's selection, then turns on the UUT transmitter for any option other then Abort.
    The callback also checks the status of the Break and "Don't Show again for this execution" options selected by the user.  If the user selects Break then the only option I can find is to call the API Execution.Break() method which breaks the execution right there in my callback. The user then has to single step there way out of the callback.   Is there a way of instructing TestStand to complete the callback execution and break immediately after completing the callback (i.e.at the step following the error)?  I've zipped up and attached my modified sequence.
    Alternatively, is there a better way of doing this?
    Regards,
    David
    Solved!
    Go to Solution.
    Attachments:
    StationCallbacks.7z ‏13 KB

    Didn't have a chance to try it yet but maybe StepOut is your solution?
    From the TS Help:
    StepOut Method
    Syntax
    Execution.StepOut
    Purpose
    Resumes the execution from a suspended state and then suspends the execution again after execution of the current sequence completes.
    jigg
    CTA, CLA
    teststandhelp.com
    ~Will work for kudos and/or BBQ~

  • Sequence stopped on user interface when a sequence error happens on a step. Is possible to change this?

    I'd like to know if when developing an user interface over TS using MFC, if a sequence error occurs, I get an error on the user interface and the sequence stops without giving any other option. Is possible to continue the sequence, and show as failed the sequence that caused the error?
    Dani

    hello Daniel -
    If you are talking about the behavior of the simple operator interface example for MFC, then the reason why the error immediately causes a 'skip to clean-up' is because it is set explicitly in the code for the error case. To fully handle the error (as the sequence editor would), you would want to modify the case where the error is detected and perhaps tap into the TestStand API for Engine.DisplayRunTimeErrorDialog( ). If you are able to view the C code written for the full version of the CVI operator interface, you may want to use that as an example of how to completely handle every error.
    An alternative is always to handle errors yourself. If you are interested in knowing strategies for such customizations I recommend you look into the shipping examp
    les and downloadable programs for sequences leveraging the PostStepRunTimeError callback.
    Regards,
    Elaine R.
    National Instruments
    http://www.ni.com/ask

  • General error handling operation

    Hi,
    I did not find a comprehensive explanation how error handling works in TestStand, only bits and pieces about the callbacks (perhaps I looked at the wrong places).
    Anyway, I made some experiments with SequenceFilePostStepRuntimeError and StationPostStepRuntimeError - intentionally leaving out ProcessModelPostStepRuntimeError to reduce complexity - and came up with the attached flow chart. I would like to know:
    if that shows the correct operation of TestStand error handling (we are currently using 4.1, about to switch to 2010 or 2012, so it would also be interesting to know if anything changes with the new versions)
    if it is always the case that the combination of ErrorReported=True und Error.Occurred=True after the error handler leads to termination of the execution? I could not find any setting governing that (the "goto cleanup immediately" setting of the sequence was off;
    Best regards
    Peter
    Attachments:
    TestStand_ErrorHandling.png ‏36 KB

    Hi Peter,
    1) Every step has :
    error.code   - to set the error code
    error.occured - boolen if set true displays a popup error message to the user
    error.message - the popup contains this message
    when you set error.occured=true it will bring up a popup message with the error.message and error.code.
    Please note that this may not be acceptable in the manufacturing environment where operators may not be trained to check for errors.
    The general practice in manufacturing is to fail all important steps that errors out so that the final result is failed.Then do a offline analysis.This is done by step.results.status = "Failed".You can also populate step.results.ReportText with proper values so that your test report reflects the type of error/failure.
    2) Regarding the  SequenceFilePostStepRuntimeError and StationPostStepRuntimeError - they are optional error handling methods if you want to act on errors.
    3)Every step has an option ( look for properties-->post actions).On Pass or On fail destinations can be set for each step.Cleanup is always executed except in cases of abort.
    4) In the menu configure-->Station options-->execution there is an option for runtime errors ( one of them is run cleanup).
    Hope the above information helps.

  • I am trying to have some LabVIEW code called in a New thread exit when the testStand sequence terminates

    I have a Sequence that launches a sequence in a New Thread that happens to launch some LabVIEW code.  The problem is when the LabVIEW code finishes, it will not close even when the TestStand sequence terminates. Is there a way to tell this LabVIEW code to Exit, I've tried the Quit LabVIEW function, but that causes a C++ RunTime Error.  The LabVIEW code does end though, and it is set in the VI properties to:
    Checked - Show Front Panel When Called
    Checked - Close Afterwardds if originally closed
    The sequence call that the LabVIEW code is launched from has the following options:
    - New Thread
    Unchecked - Automatically wait for the thread to complete at the end of the current sequence
    Unchecked - Initially Suspended
    Unchecked - Use single threaded apartment
    Any clues on this would be appreciated.

    Hi ADL,
    Everything should close correctly if you check the checkbox "Automatically wait for the thread to complete at the end of the current sequence" in the thread settings.
    With it unchecked, I am seeing the behavior you are. 
    Gavin Fox
    Systems Software
    National Instruments

  • Function sequence error

    Hi Chris, we where using this Java code with TimesTen 5.1.34:
    while (rs.next()) {
    associatedMsbs.add(Integer.toString(rs.getInt(HGROUPID)));
    // Prepare object to insert in database
    SvcLog_VO svcLog = new SvcLog_VO();
    svcLog.setLogId(svcLogDAO.getlogIdNextVal(conn));
    svcLog.setService( CommonConstants.MobileSwitchboardSvcId );
    svcLog.setOperType( CommonConstants.OPER_TYPE_UPDREL );
    svcLog.setEntityType( CommonConstants.ENTITY_TYPE_MOBILESWITCHBOARD);
    svcLog.setEntityId( rs.getInt(HGROUPID) );
    svcLog.setRelEntityId( woUserId );
    // Insert object in database
    svcLogDAO.insertData(svcLog, conn);
    This code no longer works in TimesTen 7.0.3. We receive the following error:
    [TimesTen 7.0.3.0.0 ODBC Driver]Function sequence error.
    We had to change the code this way:
    while (rs.next()) {
    // Prepare object to insert in database
    SvcLog_VO svcLog = new SvcLog_VO();
    svcLog.setLogId(svcLogDAO.getlogIdNextVal(conn));
    svcLog.setService( CommonConstants.MobileSwitchboardSvcId );
    svcLog.setOperType( CommonConstants.OPER_TYPE_UPDREL );
    svcLog.setEntityType( CommonConstants.ENTITY_TYPE_MOBILESWITCHBOARD);
    svcLog.setEntityId( rs.getInt(HGROUPID) );
    svcLog.setRelEntityId( woUserId );
    // Store object in ArrayList
    svcLogs.add(svcLog);
    // Insert the objects in the ArrayList in database
    for (int i = 0; i < svcLogs.size(); i++) {
    SvcLog_VO svcLog = (SvcLog_VO)svcLogs.get(i);
    svcLogDAO.insertData(svcLog, conn);
    Once we split the code in two, first iterating the ResultSet and then inserting the objects, it works properly again. Is there any known issue in TimesTen about this?
    Thanks in advance,

    Hi, Chris:
    The code where this occurs is the following:
    public void insertParameters(String xxx1, String xxx2, String xxx3,
    int xxx4, Connection conn) throws TTException, SQLException {
    PreparedStatement ps = null;
    String query = null;
    try {
    query = queryInsert;
    ps = conn.prepareStatement(query);
    ps.setInt(1, xxx1);
    ps.setString(2, xxx2);
    ps.setString(3, xxx3);
    ps.setString(4, xxx4);
    // If debug is activated, the query is printed
    if (log.isDebugEnabled()) {
    ReadableQuery rq = new ReadableQuery();
    rq.addParam(new Integer(xxx1));
    rq.addParam(new String(xxx2));
    rq.addParam(new String(xxx3));
    rq.addParam(new String(xxx4));
    log.debug(" Query to execute .. [" + rq.get(query) + "]");
    ps.executeUpdate();
    // Exception handling
    catch (Exception ex) {
    log.error(ex);
    throw new TTException(ex);
    } // Resources are closed
    finally {
    try {
    if (ps != null) {
    ps.close();
    } catch (SQLException e) {
    log.error("Error closing JDBC resources");
    throw e;
    This method accesses to DDBB and inserts data in a table with the following structure
    Command> desc wo.bs_tb_bsvc_param_values;
    Table XXXXXXX:
    Columns:
    *aaa                          TT_INTEGER NOT NULL
    *bbb                       TT_CHAR (35) NOT NULL
    ccc TT_CHAR (10) NOT NULL
    ddd TT_CHAR (256) NOT NULL
    1 table found.
    (primary key columns are indicated with *)
    Command>
    Thanks.

  • LabVIEW VI with Report Generation Toolkit elements in a TestStand sequence does not run with a LabVIEW 8.5 Run-Time Engine

    Hi all,
    I am using LabVIEW 8.5.1 and TestStand 4.1. I have done a TestStand sequence with a VI in it, which uses Report Generation Toolkit elements. On my machine I am using LabVIEW and TestStand with a Development System license. On the other machine I am using TestStand with a Base Deployment license and I have chosen the LabVIEW 8.5 Run-Time Engine in the Adapter Configuration. Everything is running well except of this VI with Report Generation Toolkit elements. The error message is showing that the VI is not executable. It works well only after I have installed LabVIEW with an Evaluation license and chosen LabVIEW 8.5 Development System in the Adapter Configuration.
    I have found other posts and a document in the KnowledgeBase with a similar problem: http://digital.ni.com/public.nsf/allkb/8A0E6274D9B​D7B1986256F62006AD402?OpenDocument But I am not using EXE files in my sequence, so I don't know how to solve mine. Anybody has an idea?
    Solved!
    Go to Solution.

    Hello guys,
    thank you very much for your answers!
    @Ruediger:
    I tried to follow the instruction for Method 2 in the mentioned document: http://digital.ni.com/public.nsf/allkb/F3DC40A6E3F​3B25B862570AD005D1D3D?OpenDocument, but the steps on my machine are different starting from step 4. After I click "Continue..." in step 3, I dont get a window, the system just makes a new folder with the same VI. 
    To be honest, I am new to LabVIEW and have some difficulties at this time. What I understood from your reply is, that I need to make a LLB-File, where the files from Report Generation Toolkit are in!?
    @GovBob:
    I was following the instruction in the document: http://digital.ni.com/public.nsf/allkb/9E00E7EFE06​35E678625734600779EFE, but it wasnt working. Can you please tell me how I can check if the VI Server is installed and running on the machine?
    I am using LabVIEW 8.5.1 and TestStand 4.1 on my machine, on the deploy machine there is TestStand 4.1.1. The version of my Report Generation Toolkit is 1.1.2.
    Kind regards, Roman

  • Error Handling in File Adapter

    I have been working on a requirement where the file adapter picks up the file and gives to the BPEL for processing the data.
    So, in order to do Error Handling for file adapter, i have been reading the Oracle documentation for technology adapters. In that, some of the
    points which i felt valuable for my error handling when using file adapter are the uniqueMessageSeparator property, fault-policies for rejected messages,
    and one of the action for rejected messages could be writing the payload to a file or invoking any other webservice.
    In my composite, i have configured the file adapter as a service for reading files, and i defined the xsd using the native format builder....If i put some data like 'aaaa' in the attribute of type integer , the .csv file is being picked up and its being passed to the BPEL without any error ? I believe there should be a translation error...right...
    But i am not getting the error, please tell me if anything is wrong in my xsd....
    Here is my xsd...
    <?xml version="1.0" encoding="UTF-8" ?>
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
    xmlns:tns="http://TargetNamespace.com/InboundService"
    targetNamespace="http://TargetNamespace.com/InboundService"
    elementFormDefault="qualified"
    attributeFormDefault="unqualified"
    nxsd:version="NXSD"
    nxsd:stream="chars"
    nxsd:encoding="US-ASCII"
    nxsd:hasHeader="true"
    nxsd:headerLines="1"
    nxsd:headerLinesTerminatedBy="${eol}"
    >
    <xsd:element name="names">
    <xsd:complexType>
    <xsd:sequence>
    <xsd:element name="name" minOccurs="1" maxOccurs="unbounded">
    <xsd:complexType>
    <xsd:sequence>
    <xsd:element name="FirstName" type="xsd:string" nxsd:style="terminated" nxsd:terminatedBy="," />
    <xsd:element name="LastName" type="xsd:string" nxsd:style="terminated" nxsd:terminatedBy="," />
    <xsd:element name="Number" type="xsd:integer" nxsd:style="terminated" nxsd:terminatedBy="${eol}" />
    </xsd:sequence>
    </xsd:complexType>
    </xsd:element>
    </xsd:sequence>
    </xsd:complexType>
    </xsd:element>
    </xsd:schema>
    And for DB Adapter, there is a property called SchemaValidation, i think that is not there for File adapter, by default it will take care of validation i guess....In another composite, my file adapter is picking up the .xml file and if i put any wrong data over there, that is working fine, i am getting the translation error, but only here in the case of csv file, i am not getting the error. Experts, please help me in this regard...I am using SOA 11G
    Thanks,
    Naresh

    Hi Yatan,
    Thanks for the reply. I did the same way, where my composite is picking up an XML file and translation error is coming. Even the fault policies are working fine, like writing to a file and even invoking other web service. Its really good that you have achieved the same thing in csv files. But the same thing i am unable to achieve when my file adapter is picking up the csv file. I really cant understand where i am doing wrong.
    here is my XSD which i defined through my native builder format...
    <?xml version="1.0" encoding="UTF-8" ?>
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
    xmlns:tns="http://TargetNamespace.com/FileRecv"
    targetNamespace="http://TargetNamespace.com/FileRecv"
    elementFormDefault="qualified"
    attributeFormDefault="unqualified"
    nxsd:version="NXSD"
    nxsd:stream="chars"
    nxsd:encoding="US-ASCII"
    nxsd:hasHeader="true"
    nxsd:headerLines="1"
    nxsd:headerLinesTerminatedBy="${eol}"
    >
    <xsd:element name="Roots">
    <xsd:complexType>
    <xsd:sequence>
    <xsd:element name="FirstName" type="xsd:string" nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy="&quot;" />
    <xsd:element name="LastName" type="xsd:string" nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy="&quot;" />
    <xsd:element name="Number" type="xsd:integer" nxsd:style="terminated" nxsd:terminatedBy="${eol}" nxsd:quotedBy="&quot;" />
    </xsd:sequence>
    </xsd:complexType>
    </xsd:element>
    </xsd:schema>
    the jca file ..
    <adapter-config name="FileRecv" adapter="File Adapter" wsdlLocation="FileRecv.wsdl" xmlns="http://platform.integration.oracle/blocks/adapter/fw/metadata">
    <connection-factory location="eis/FileAdapter" UIincludeWildcard="n*.csv"/>
    <endpoint-activation portType="Read_ptt" operation="Read">
    <activation-spec className="oracle.tip.adapter.file.inbound.FileActivationSpec">
    <property name="DeleteFile" value="true"/>
    <property name="MinimumAge" value="0"/>
    <property name="PhysicalDirectory" value="C:\files"/>
    <property name="Recursive" value="false"/>
    <property name="PollingFrequency" value="5"/>
    <property name="IncludeFiles" value="n.*\.csv"/>
    <property name="UseHeaders" value="false"/>
    </activation-spec>
    </endpoint-activation>
    </adapter-config>
    I told that the file will contain only 1 record while defining xsd and i kept a record whose values are John , Peter and akjdkjdskj.
    Now if the data is like above, the file is still getting picked up without any translation error and the BPEL is getting completed successfully...
    Is it possible for you to send your sample project and the csv file from which you have defined the xsd to me if you dont mind ?
    Thanks,
    Naresh

  • TestStand Deplyment Error- Error: Unable to locate all subVIs from saved VIs because a subVI is missing

    Hi,
    I am a Systems and Software Engineer based in Vancouver. I developed an automated test system using LabVIEW 2013 and TestStand 2013 with custom operator interface.
    I encountered 'missing VIs' problem which is kind of weird because I passed analyzing the sequence for both TestStand Sequence Editor and TestStand Deployment Utility >> Distrubuted Files Tab.
    But when I tried building the installer and reaching the point 'Calling distribution VIs, it always throw an error saying 'An error occurred while trying to read the depencies of the VIs, possible because the VIs are not saved in the current version of LabVIEW. Do you want to save any modified now?'. I tried both cases (i.e. Yes and No) for this option but it did not solve the issue.
    This is part of the original error message displayed in TestStand Deployment Utility:
    While Processing VIs...
    Error: Unable to locate all subVIs from saved VIs because a subVI is missing or the VI is not saved in the current version of LabVIEW.
    The call chain to missing VIs:
    1 - ATE_AccelerometerTest.vi
    2 - CreateAndMergeErrors.vi (missing)
    3 - LogControl_CheckForErrorSendUpdates.vi (missing) "
    All missing VIs are coming from userlib.
    Actions Done:
    - Analyzed sequence file using TestStand Sequence Editor and TestStand Deployment Utility
    - Verified 'Search Directories' include all necessary files/dependencies.
    - Mass compile the directory of the missing VIs
    - Added all needed files and folders in the workspace file.
    The result is still the same based from the actions done.
    The last debugging I did earlier is that I tried locating the sequence and steps of missing VIs as mentioned above (e.g. ATE_AccelerometerTest.vi)
    and I found out that the step seems to be an empty action step. Would this be possible even if it already passed the analysis?
    Other considerations include:
    I am using LabVIEW 2013 sp1 and TestStand 2013. We tried building from three (3) computers and we only succeeded once to a freshly-installed comptuer.
    Hope to hear from you soon.
    With Best Regards,
    Michael Panganiban
    Systems and Software Engineer
    www.synovus.ca
    [email protected]
     

    Hi All,
    We were able to resolve the issue. First to note is that the release notes in TestStand 2013 is outdated and we confirmed from NI Engineer in Austin that TestStand 2013 works fine with LabVIEW 2013 SP1.
    Secondly, we played around TestStand Deployment option that resolved the issue. Attached are the images.
    We just enabled the 'Remove Unused VI Components'. It could be one of the libraries (lvlib) we included in the build but we haven't figured it out yet because we verified that all VIs are working. It could be also something else that I think very difficult to find based from the information. However, if anybody experienced the same issue, this could be helpful.
    Again, we revert back in using TestStand 2013 and LabVIEW 2013 SP1.
    I appreciate any comments and feedbacks. Otherwise, you can close this support request.
    Thank you.
    With Best Regards,
    Michael Panganiban
    Systems and Software Engineer
     

  • Error Handling in Mediation for sequential Invocation in Routing rules

    Hi all,
    I have a situation File Adapter->Mediator->BPEL Process 1->BPEL Process 2.When an error occurs in BPEL Process 1 a soap fault is returned to the mediator service.
    Now since the mediator service invokes BPEL process 1 synchronously hence the fault policy is by-passed and the error is returned to the file adapter(the caller).
    I have configured rejection handling in the fault-policy file as below -
    _+<faultName xmlns:rjm="http://schemas.oracle.com/sca/rejectedmessages" name="rjm:pollFlatFiles">+_
    _+<condition>+_
    _+<action ref="ora-ws"/>+_
    _+</condition>+_
    _+</faultName>+_
    _+<service faultPolicy="RejectionMessageHandlerPolicy">+_
    _+<name>pollFlatFiles</name>+_
    _+</service>+_
    The following scenario occurs when trying to test the error handling -
    1.First when the error occurs in BPEL processes 'oracle.fabric.common.BusinessFaultException' is thrown at the composite level and no message is rejected by the file adapter.
    2.Immediately when the errors occurs for a second time the messages gets rejected and my rejection handler is called since the following exception is thrown from the file adapter -
    The adapter has exceeded maximum configured retries. The adapter was unable to process "{0}" after having retried for {1} times, now the adapter will reject the message. This exception usually comes due to errors in downstream systems. Please increase the value for "jca.retry.maxRetries" in composite.xml for the inbound service and redeploy.
    I have tried increasing the retry count also in composite.xml but the same sequence occurs i.e-
    First time business exception.
    Next time message rejection.
    Any idea how the error can be properly handled in synchronous invocation to avoid this situation so that the messages always get rejected?
    I am using SOA Suite 11.1.1.2.0 version.
    Thanks and Regards,
    Mandrita.

    Hi samay,
    In the transfer rules, if returncode is not 0, the upload stop,so..
    Actually I delete the "wrong" data in the start routine of the transfer rules

  • Error handling in simulatenous loops

    I am trying to design a good error handling system for a project I am working on, but I have run into a "design" problem. I thought it would be good to ask for some guidance here before I sit down and start create the error handling system.
    I have more than one subVI started from one mainVI, each subVI with an individual while loop running (they all stop when I press the same stop button from the mainVI). Each while loop continously retrievews information from various serial devices. Each VISA call etc. can thus of course generate errors. I only want one error dialog box in my mainVI front panel displaying any error that happens.
    How would I design this in a good way? As I see it, I would have to use the error dialog box in the mainVI as a global/functional global. Each subVI would then write to this global error dialog box. This could however cause race conditions where only the latest error gets displayed even if earlier errors happened. Appreciate some good advice here.
    Solved!
    Go to Solution.

    First and foremost I would avoid using the sequence structure. LabVIEW is a data flow language and you should take advantage of that rather than forcing it to be a sequenctial language. Take a look various examples that ship with LabVIEW. You will want to definitely check out the examples for state machines and the producer consumer architectures. Your current code will not meet your needs of continually monitoring for errors since your "Error" queue is not in a parallel loop task.
    I have attached a very quik example of a producer consumer architecture with an error processing loop. There are no real code details but this is a simple example of an approach to take for an application. This along with the above examples should give you a decent starting point.
    Message Edited by Mark Yedinak on 10-05-2009 04:05 PM
    Mark Yedinak
    "Does anyone know where the love of God goes when the waves turn the minutes to hours?"
    Wreck of the Edmund Fitzgerald - Gordon Lightfoot
    Attachments:
    Simple Application Architecture (8-6).vi ‏13 KB

  • Error handler for event based messaging framework

    I've been very interested in using the event based messaging framework (described here http://forums.ni.com/t5/LabVIEW/Community-Nugget-2009-03-13-An-Event-based-messageing-framework/td-p...) for my next large application.
    My main concern is the fact that it seems like typos would be very difficult to debug since you need to ignore unknown commands to make this system work.
    To solve this problem I've been considering the idea of having a single message error handler VI which will store all valid commands and check all sent commands to see if they are valid.  Each VI would send out a register message on startup with their name and all messages they can send and receive.  The message error handler would store these and then check all future messages to be sure it is a valid message, throwing an error if it is not.
    My basic problem is this: for this to work the message error handler VI would have to be started before any messages are sent so that it can capture all the register events.  If this is a VI that will be continuously running the entire application how can I ensure it starts first since I cannot wait for it to complete? (I.e. the usual method of running an error out wire or using a sequence structure will not work since everything will then wait for it to complete which will not happen until the program is ready to shut down)
    I'm assuming the answer might be to use an asynchronous call but I'm not very familiar with this method.  
    Any help is appreciated.  Thanks. 

    Could you just use the error handler as a subVI inside a case structure that is only called when you have new message to be checked? I'm not sure I understood the exact functionality you are looking for, so sorry if this does not apply.
    Zach P.
    Product Support Engineer | LabVIEW R&D | National Instruments

  • Best error handling for visa calls?

    We are using some handlers we've devloped for power supply handling (over GPIB). The power supplies are SCPI and use SCPI/GPIB commands. The handlers use the NI visa api's Read() and Write() functions to send the commands.  They work fine, for the most part, and we've been using them for a number of years.
    However, we're hearing reports that there may have been a few times that commands were not executed on the power supply and our handler did not report back any error.
    So, I'm trying to update these handlers to add a little error checking to make them more robust and hopefully we'll catch this error if it happens again.
    For error handling, I've come up with 3 solutions and tried all 3. I find some benefits and drawbacks with each and hoped I could get your opinions about error handling as I'm not overly familiar with some of the methods.
    Method 1:
    Set the Event Status Enable register to catch all events (or all that I care about).
    Read status byte (STB?) after each command and check the event bit and then event status bit if event bit set.
    Drawback1: I have one power supply that does not implement this correctly and a second type that appears to not be working correctly either.
    Drawback2: Errors are generic. I'll know if I got, for example, a DDE (Device Dependant Error), but I won't know more detail than that.
    Method 2:
     After each command sent, read the error queue with the System:Error? query.
    Drawback: It seems I get a lot of messages back in this method that aren't real errors. It's very "noisy" and I have no way to distinguish real errors from "noise" messages like "query interrupted" and such.
    Method 3:
    Check the return code of the Visa Read() and Write() commands. At first I didn't think this was very robust, but after seeing the list of errors here, I'm beginning to think that these might be more robust and detailed than Method 1. However, I'm not sure.
    So is method 3 as robust as it looks, or is there a combination/comprimise I can make, or another method I did not mention which is best to trap errors from Visa Reads/Writes to these GPIB power supplies? Keep in mind that the handlers work for a number of different power supplies and its likely that some things may be implemented differently between supplies....so its best to stick with somethind standard that will work on all power supplies.

    Hi KingTermite,
    I hope you will got answer of the question and may be implemeted something .It was really a nice discussion .I am also facing the same issue where I am communicating with different instrument using  GPIB communication and RS 232 too.
    Can you share and discuss about the implementation of your initiative.
    Best Regards
    Regards:
    Vaibhav Kanchan
    Sr. Engineer
    NI Certified LabVIEW Developer(CLD)
    NI Certified TestStand Developer(CTD}

Maybe you are looking for