# RXS_Throw()

This subprocedure can be used to throw an error. The error information is populated into a data structure which is then passed to RXS_Throw. The error can be caught by [RXS_Catch()](https://isupport.katointegrations.com/rxs/3.0/rxs_catch.md).

## Subprocedure Prototype

### IBM i 6.1+

```rpgle
     D RXS_Throw...
     D                 PR                  Extproc('RXS_Throw')

      // The RXS_CatchThrowErrorDS_t data structure that contains the error
      //   information to be thrown.
     D   DS                                Likeds(RXS_CatchThrowErrorDS_t)
```


## Example Code

### IBM i 6.1+

#### Example 1
```rpgle
      *--------------------------------------------------------------
      * This example code demonstrates throwing a diagnostic error
      *  by assigning values to a RXS_CatchThrowErrorDS_t datastructure and
      *  throwing the error datastructure to the calling program.
      *--------------------------------------------------------------
     H DFTACTGRP(*NO) BNDDIR('RXSBND') ACTGRP(*CALLER)

      /copy QRPGLECPY,RXSCB

     D gErrorDS        DS                  Likeds(RXS_CatchThrowErrorDS_t)
     D                                     Inz(*LikeDS)
      /free
       // Send a diagnostic error message

       reset gErrorDS;
       gErrorDS.MessageId = 'CPF9898';                                       
       gErrorDS.MessageFile = 'QCPFMSG';                                     
       gErrorDS.MessageData = 'This is a *DIAG error being thrown'; 
       gErrorDS.MessageType = RXS_MESSAGE_TYPE_DIAG;                         
       RXS_Throw(gErrorDS);

       *INLR = *ON;
      /end-free
```

## Data Structures

### RXS_CatchThrowErrorDS_t

```rpgle
     D RXS_CatchThrowErrorDS_t...
     D                 DS                  Qualified Template Inz

      // The message ID that was received.
     D   MessageId                    7A

      // The message file used to store the message ID.
     D   MessageFile                 20A

      // The message data to be merged with the text of the message ID.
     D   MessageData               1024A   Varying

      // The type of message that was sent.
      // Valid values: RXS_MESSAGE_TYPE_DIAG, RXS_MESSAGE_TYPE_COMP,
      //   RXS_MESSAGE_TYPE_INFO, RXS_MESSAGE_TYPE_INQ, RXS_MESSAGE_TYPE_RQS,
      //   RXS_MESSAGE_TYPE_NOTIFY, RXS_MESSAGE_TYPE_ESCAPE,
      //   RXS_MESSAGE_TYPE_STATUS
     D   MessageType                  5I 0

      // The full message text that combines the value of the message ID's text
      //   and the merged message data.
     D   MessageText               4096A   Varying
```

