ABAP - input data validation

I have been trying to look through the forum for means of input data validation to no vail. It is necessary to validate data before saving in database. There is an interface IF_WD_VALIDATION out there which seems to handle this task but no more information is provided on how to use it. Does anyone know more about it?
By validation, I mean verification of:
data type
data value (min value, max value)
data dependence (a<b, or a>b)
Your suggestion is appreciated.

There is more solution to validate fields.
If you import adaptiev RFC model, Dynpro will make validation.
Secend vay is to put validation in setters function and raise exception if is not valide
public void setName(String name)
  if(name.length() > 100) throw new Exception("name is to loong");
  this.name = name;
or mabie more simpliest is to make boolean function check()
If you want stop workflow in not valide case you can do with
wdComponentAPI.getMessageManager().raiseException("message", true)

Similar Messages

  • Input Data Validation Of A Field Associated To A Check Table

    Hello,
    Does Web Dynpro have an inherent functionality to validate input fields associated to a check table?
    For example I created a structure with the field UNAME and defined USR02 as the check table for it.  And then I defined a UI InputField in my View and bind it to UNAME.  Web Dynpro does NOT seem to do an automatic validation to check if the value entered by the user exists in USR02. 
    Is there an interface or class that can be called in method WDDOBEFOREACTION to do the validation.  Or do we just have to do some manual validation using SELECT statements?
    Thanks.
    Giscard

    Hi Giscard,
    Web Dynpro does automatic validation when  you assign the check table  .
    You need not write any code as such.
    If the data which you entered is incorrect ,when you are trying to perform any action(like saving the data in data base or performing any further action with the wrong data that ia entered )
       the system throws an error message as"USERNAME -
    NOT IN THE SYSTEM'.
    Regards,
    Priya

  • ABAP programming: Data validation

    Hi everybody,
    I wanted to know how to display error messages if a user enters invalid  data at the selection screen in a particular select-options field. Also the selection screen should be redisplayed after the message.
    thanks

    Hi,
      Check this code
    REPORT z_sdn.
    TABLES:
      vbak.
    DATA:
      w_vbeln TYPE vbak-vbeln.
    SELECT-OPTIONS:
      s_vbeln  FOR vbak-vbeln.             " Sales Document
    *                 AT SELECTION-SCREEN ON s_vbeln EVENT
    AT SELECTION-SCREEN ON s_vbeln.
    * Subroutine to validate the sales document entered by user.
      PERFORM f0000_validate_sales_doc.
    START-OF-SELECTION.
      WRITE: / 'TEST'.
    *&      Form  f0000_validate_sales_doc
    *       text
    FORM f0000_validate_sales_doc .
      IF s_vbeln[] IS NOT INITIAL.
    * Select query to fetch sales document
        SELECT vbeln                       " Sales Document
          FROM vbak
          INTO w_vbeln
         UP TO 1 ROWS
         WHERE vbeln IN s_vbeln.
        ENDSELECT.                         " SELECT vbeln
        IF sy-subrc NE 0.
          MESSAGE 'The entries you have specified do not exist in master table' TYPE 'E'.
        ENDIF.                             " IF sy-subrc NE 0.
        CLEAR w_vbeln.
      ENDIF.                               " IF s_vbeln IS NOT INITIAL
    Regards
    Abhijeet

  • Data validations in XI or ABAP report

    Hi All,
              What kind of data validations should be done in XI and what kinds should be left for ABAP team to handle in the report or proxies?
    Regards,
    XIer

    It depends on your message definitions.
    For example, if you have external .xsd definitions and you basically want to check if the input XML is valid for that schema, you can easily achieve that in java coding (within a java mapping or a module).
    Other than that, if you want to really validate the field values (validation against some possible values, expected formats, etc.) you have some alternatives. If it is only in a few fields and the logic is really simple, you could do it in mapping. But the recomendation would really to code the validation in the sender system itself (or create an application specific for that).
    Regards,
    Henrique.

  • Validating keyboard input data

    I am new to java and have a question regarding validating input.
    I did check the FAQ for "Validating keyboard input data" but found no help.
    I have to check that the keyboard input is only one of the following char a c,C,d,D
    Ihave tried different conditional loops and statements but cannot get it right.
    Could someone point me in the right direction.
    I am using the latest java.
    Thanx

    well i think i am close but i can't figure out why i have an endless loop or how to fix it
    System.out.print("Please enter the Costumer Type C or R: ");
    String cosTypeTemp = scan.nextLine();
    cosType = cosTypeTemp.charAt(0);
    while (cosType != 'c' || cosType != 'C' || cosType != 'd' || cosType != 'D');
    do
    costumerType = 'N';
    System.out.print("Wrong input please enter the Costumer Type c or r: ");
    cosTypeTemp = scan.nextLine();
    cosType = cosTypeTemp.charAt(0);
    while (cosType != 'c' || cosType != 'C' || cosType != 'd' || cosType != 'D');
    costumerType = cosType;
    System.out.print("Please enter the Number of basic service connections: ");
    System.out.print("Please enter the Costumer Type C or R: ");
    String cosTypeTemp = scan.nextLine();
    cosType = cosTypeTemp.charAt(0);
    while (cosType != 'c' || cosType != 'C' || cosType != 'd' || cosType != 'D');
    do
    costumerType = 'N';
    System.out.print("Wrong input please enter the Costumer Type c or r: ");
    cosTypeTemp = scan.nextLine();
    cosType = cosTypeTemp.charAt(0);
    while (cosType != 'c' || cosType != 'C' || cosType != 'd' || cosType != 'D');
    costumerType = cosType;
    System.out.print("Please enter the Number of basic service connections: ");
    numBsSrvConecs = scan.nextInt();
    when i enter the correct data ( c, C, d, D) it goes into infinite loop and never reaches the next keyboard scan for System.out.print("Please enter the Costumer Type C or R: ");

  • Problem validating an two Input Date components !...

    Hi to all the users !. I would like to tell my problem... I have two input dates ("from" and "to") and I would like that the value from the "from" component isn't higher than the value from the "to" component... For that, I have use a validateDateTimeRange validator and set the "Maximum" value... My problem is that I don't get validated my inputdates components and additionally, when I select a date it appears with a strange format... Although I set the pattern to "dd/mm/yyyy" !... Let say... If I choose the 23th of July of 2012, the input date show "23/58/2012"... What would be the problem ?... Thankx !...

    Navaneetha: Thankx for your help !; I will check it right now... I didn't answer as I was having lunch ! :D Thankx again
    Suresh: A friend from another group told me that and the problem was solved !; anyway... Thankx for your time ! :d

  • Help with date validation on input boxes.

    I need some help with date validation on input boxes.
    What I�m trying to create is a form where a user inputs dates and then the rest of the form calculates the other dates for them.
    i.e. � A user inputs 2 dates (A & B) and then a 3rd date which is 11 weeks before date B is calculated automatically.
    Is this possible and if so how do I do it ???
    Thanks

    Hi,
    to get third date try this:
    java.util.Date bDate = ...;
    Calendar yourCalendar = new GregorianCalendar();
    yourCalendar.setTime(bDate);
    yourCalendar.roll(Calendar.WEEK_OF_YEAR, -11);
    java.util.Date cDate = yourCalendar.getTime();Regards
    Ldinka

  • Inputs for Data validation

    Hi,
    can anyone share the inputs for data validation.
    Source data to SAP retail data
    any validation tools?
    any enay method to extract data from SAP, apart from tables
    Regards,
    Arun

    Hi vamsi nagaraju
    it depends on wich version of ECC you are using, if you are using ECC 6.0 or ECC 5.0 all records are in table FAGLFLEXT but if you are using R/3 4.7, 4.6 etc, all records are in ECMCT for consolidation purposes.
    Try to run T-code F.01 for balance sheet in both versions.
    which validations do you want?
    regards!!

  • Data validation for Date Field in Web Dynpro ABAP

    Hi ,
    In my WDA i want to perform data validation for date filed. (i.e. While creating a new record i have to check the Start Date should be always lesser than End Date.)
    If u ll enter the wrong date it should validate the Date and throw an error message.
    Please Reply soon its urgent.
    Thanks,
    Deepika

    Hi,
    First read the two attributes start date and end date.
    Then write the following condition.
    IF item_start_date > item_end_date.
    Error message.
    Endif.
    For pop up error message you need to use Create_window method of the Interface if_wd_window.
    Thanks.

  • Date validation in ABAP Webdynpro.

    Hi,
        I have created a field for date in my table and binded it with a field of a data dictionary table . The problem is when the user enters the year , whether one , two or three digits it automatically sets the remaining digits and the year is a four digit value . This happens even before reading the value of the date field attribute , so I m not able to find a way to validate that user enters the four digits of the year accurately.

    Hi,
    Pls check out this thread on date validation in detail-
    How can I check these data whether valid ?
    Validation code
    date format in application
    Regards
    Lekha

  • Losing Data Validation Messages when writing back to context

    ( The base for this question is the ALV grid in section 2 of this [TimeSheetMockUp|http://www.duke.edu/~michaelm/TimeCard/AnnotatedTimeSheet.jpg] )
    Users enter values in the white cells which represent the hours recorded on a given day for a certain type of time.  
    Lets say we have a z-object that supplies us with the overall grid structure, including the headers and (the shaded) summarization cells. The web dynpro ALV had been set to allow input only on the raw data cells. They are set to 4 places with one decimal.
    As the app was being developed, when we entered invalid data in a cell, such as 123456, or 1.2345 or u2018qu2019, a nice message was displayed that told the us about the issue.  This was free u2013 I guess the phase model does that for us, and we liked it.
    Well, down the road a pieceu2026 we needed to add a method to recalc all the summary values from the raw inputs. 
    METHOD wddoafteraction .
    * wizard: navigate to and get the rows data                         *
      DATA lo_nd_nd_rows TYPE REF TO if_wd_context_node.
      DATA lt_nd_rows TYPE wd_this->elements_nd_rows.
    * navigate from <CONTEXT> to <ND_ROWS> via lead selection
      lo_nd_nd_rows = wd_context->get_child_node( name = wd_this->wdctx_nd_rows ).
      lo_nd_nd_rows->get_static_attributes_table( IMPORTING table = lt_nd_rows ).
    * do the math                                                       *
      DATA lt_updated_rows TYPE wd_this->elements_nd_rows.
      CALL METHOD wd_assist->o_wc->recalc_update_and_return_wrows
        EXPORTING
          im_rows = lt_nd_rows
        IMPORTING
          ex_rows = lt_updated_rows.
    * repopulate the rows                                      *
      lo_nd_nd_rows->bind_table( new_items = lt_updated_rows set_initial_elements = abap_true ).
    Now, weu2019re losing all the nice data validation messages u2013 they do not display (the offending entries are just cleared) !!!
    After some investigation, it seems that the bind_table call is where they get lost (without that call, they appear) .
    Iu2019ve tried placing this code in a number of hook methods, but the same thing occurs.  It is currently in the viewu2019s afteraction hook.
    So, u2026 I have two questions.
    u2022     How do I get my nice messages back. ?
    u2022      Where is the right place to update my context from 
    ( Btw, downstream, our recalc outines will also want to throw messages that we will want processed after we get through the initial validation  )
    Thanksu2026
    u2026Mike

    Fixed with SAP Note 1410122 - WD ABAP ALV: Messages are not displayed

  • How to display records that match user input date

    hi all,
      i need to display records that match user input date (i.e., for example if the difference between user input date and record date is less than 5 years then display those records) , this is for hr bw. any exit is there to check for validation for records to be displayed based on some abap coding.
    vijay

    I just see getApplication method but "Retrieves a list of all the deployed applications."
    My scenario is: I get user, end i want to discorver how application this user i enable to see.

  • Date picker for af:inputDate   is not picking up the correct input date

    view source:
    <af:inputDate value="#{bindings.DateField.attributeValue}" label="#{bindings.DateField.hints.label}"
    required="#{bindings.DateField.hints.mandatory}"
    valueChangeListener="#{pageFlowScope.CollectApplicantInformation.datesItemChanged}"
    columns="#{bindings.DateField.hints.displayWidth}" shortDesc="#{CustomTooltip[DateField]}"
    autoSubmit="true" helpTopicId="AppDt" id="DateField" simple="true">
    <f:validator binding="#{bindings.DateField.validator}"/>
    *<f:converter converterId="CustomConverter"/>*
    </af:inputDate>
    Here I am not using <af:ConvertDateTime> insted using customConverter, so what code changes do I need to make sure the date picker always picks the already existind date in the inputDate rather picking the current date?
    Here is my CustomConverter.java
    CustomConverter.java
    public class CustomConverter extends DateTimeConverter implements ClientConverter, Converter
    public Object getAsObject(FacesContext context, UIComponent component, String value)
    String dataType = (String) resolveExpression("#{bindings." + component.getId() + ".attributeDef.javaType.name}");
    if (dataType != null && !dataType.equalsIgnoreCase("oracle.jbo.domain.Date") && !dataType.equalsIgnoreCase("oracle.jbo.domain.Timestamp"))
    String test = null;
    if (context == null || component == null)
    throw new NullPointerException();
    if (value != null)
    // To solve DB transaction dirty issue, Check isEmpty and return null.
    if (value.isEmpty())
    return null;
    // the "value" is stored on the value property of the component.
    // The Unified EL allows us to check the type
    ValueExpression expression = component.getValueExpression("value");
    if (expression != null)
    Class<?> expectedType = expression.getType(context.getELContext());
    if (expectedType != null)
    System.out.println("expectedType Value:::" + expectedType.getName());
    // try to convert the value (Object) to the TYPE of the "value" property
    // of the underlying JSF component
    try
    return TypeFactory.getInstance(expectedType, value);
    catch (DataCreationException e)
    String errorMessage;
    if (expectedType.equals(CustomNumber.class))
    errorMessage = "You can enter only Numbers in this field";
    else
    errorMessage = e.getMessage();
    if (errorMessage != null)
    FacesContext ctx = FacesContext.getCurrentInstance();
    FacesMessage fm = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Invalid Format" , errorMessage);
    ctx.addMessage(component.getClientId(), fm);
    catch (CustomDomainException e)
    int errorCode = e.getErrorMessageCode();
    String[] errorMessage = e.getErrorMessageParams();
    if (errorCode == 7 && errorMessage != null)
    String msg = "Invalid " + errorMessage[0];
    FacesContext ctx = FacesContext.getCurrentInstance();
    FacesMessage fm = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Application Error: ", msg);
    ctx.addMessage(component.getClientId(), fm);
    catch (JboException e)
    Throwable cause = e.getCause();
    if (cause == null)
    cause = e;
    test = "not good format";
    throw e;
    return null;
    else
    return value != null? value: null;
    public String getAsString(FacesContext context, UIComponent component, Object value)
    return value != null? value.toString(): null;
    public String getClientLibrarySource(FacesContext context)
    return null;
    @Override
    public Collection<String> getClientImportNames()
    return Collections.emptySet();
    @Override
    public String getClientScript(FacesContext context, UIComponent component)
    String formatMask = (String) resolveExpression("#{bindings." + component.getId() + ".format}");
    if (formatMask != null)
    String dataType = (String) resolveExpression("#{bindings." + component.getId() + ".attributeDef.javaType.name}");
    if (dataType.equalsIgnoreCase("oracle.jbo.domain.Date") || dataType.equalsIgnoreCase("oracle.jbo.domain.Timestamp"))
    if (component == null)
    _LOG.severe("The component is null, but it is needed for the client id, so no script written");
    return null;
    // Add a JavaScript Object to store the datefield formats
    // on the client-side. We currently store the format string
    // for each and every field. It'd be more efficient to have
    // an array of formats, then store for each field the
    // index of the format, especially if we could delay outputting
    // these objects to when the <form> closes.
    String clientId = component.getClientId(context);
    if (clientId != null)
    // =-=AEW Only if Javascript...
    Map<String, Object> requestMap = context.getExternalContext().getRequestMap();
    // this fetch could be at the place where we append, but has been
    // moved ahead to optimize use of StringBuilder
    String jsPattern = getJSPattern(context, component);
    String loc = _getLocaleString(context);
    // FIX - figure out size!!!
    // 127 chars for javascript + length of jspattern + locale + 12 chars for
    // tranforming to name in the worst case.
    StringBuilder buff = new StringBuilder(139 + jsPattern.length() + loc.length());
    if (requestMap.get(_PATTERN_WRITTEN_KEY) == null)
    requestMap.put(_PATTERN_WRITTEN_KEY, Boolean.TRUE);
    // only create the _dfs object if it doesn't exist, so we don't
    // wipe out _dfs[xxx] values if we ppr the first date field on a
    // page with multiple date fields.
    buff.append("if(window['_dfs'] == undefined){var _dfs=new Object();}if(window['_dl'] == undefined){var _dl=new Object();}");
    buff.append("_dfs[\"");
    buff.append(clientId);
    buff.append("\"]=");
    buff.append(jsPattern);
    buff.append(";");
    buff.append("_dl[\"");
    buff.append(clientId);
    buff.append("\"]=");
    buff.append(loc);
    buff.append(";");
    return buff.toString();
    else
    LOG.severe("NULLCLINET_ID_NO_SCRIPT_RENDERED");
    return null;
    else
    return null;
    else
    return null;
    private String _getLocaleString(FacesContext context)
    Locale dateTimeConverterLocale = getLocale();
    if (dateTimeConverterLocale != null)
    Locale defaultLocale = RenderingContext.getCurrentInstance().getLocaleContext().getFormattingLocale();
    if (!(dateTimeConverterLocale.equals(defaultLocale)))
    String loc = dateTimeConverterLocale.toString();
    StringBuffer sb = new StringBuffer(2 + loc.length());
    sb.append("'");
    sb.append(loc);
    sb.append("'");
    return (sb.toString());
    return "null";
    @Override
    @Deprecated
    public String getClientConversion(FacesContext context, UIComponent component)
    String formatMask = (String) resolveExpression("#{bindings." + component.getId() + ".format}");
    if (formatMask != null)
    String dataType = (String) resolveExpression("#{bindings." + component.getId() + ".attributeDef.javaType.name}");
    if (dataType.equalsIgnoreCase("oracle.jbo.domain.Date") || dataType.equalsIgnoreCase("oracle.jbo.domain.Timestamp"))
    String jsPattern = getJSPattern(context, component);
    Map<String, String> messages = new HashMap<String, String>();
    if (jsPattern != null)
    Class<?> formatclass = formatMask.getClass();
    System.out.println("FormatClass::" + formatclass);
    System.out.println(" Format Mask : " + formatMask);
    // SimpleDateFormat sdfDestination = new SimpleDateFormat(formatMask);
    String pattern = formatMask; //getPattern();
    if (pattern == null)
    pattern = getSecondaryPattern();
    String key = getViolationMessageKey(pattern);
    Object[] params = new Object[]
    { "{0}", "{1}", "{2}" };
    Object msgPattern = getMessagePattern(context, key, params, component);
    //if hintFormat is null, no custom hint for date, time or both has been specified
    String hintFormat = _getHint();
    FacesMessage msg = null;
    String detailMessage = null;
    if (msgPattern != null)
    msg = MessageFactory.getMessage(context, key, msgPattern, params, component);
    detailMessage = XhtmlLafUtils.escapeJS(msg.getDetail());
    Locale loc = context.getViewRoot().getLocale();
    SimpleDateFormat formatter = new SimpleDateFormat(pattern, loc);
    java.lang.Object obj = resolveExpression("#{bindings." + component.getId() + ".attributeValue}");
    String databaseDate=null;
    if(obj!=null)
    databaseDate = obj.toString();
    DateFormat df = new SimpleDateFormat(pattern,loc);
    System.out.println("DateComponent input value :::::::::::::::::::::::::"+databaseDate);
    Date today;
    try {
    // System.out.println("Before Conversion::::::::::::"+df.parse(databaseDate).toString());
    if(databaseDate!=null)
    today = df.parse(databaseDate);
    else
    today = new Date();
    System.out.println("After Conversion Date :::::::::::::::::::::::::::::"+today.toString());
    //Date today = new Date();
    String dt = formatter.format(today);
    String exampleString = dt;
    String escapedType = XhtmlLafUtils.escapeJS(getType().toUpperCase());
    StringBuilder outBuffer = new StringBuilder();
    outBuffer.append("new TrDateTimeConverter(");
    outBuffer.append(jsPattern);
    // loc = getLocale();
    if (loc != null)
    outBuffer.append(",'");
    outBuffer.append(loc.toString());
    outBuffer.append("','");
    else
    outBuffer.append(",null,'");
    outBuffer.append(exampleString);
    outBuffer.append("','");
    outBuffer.append(escapedType);
    outBuffer.append("'");
    if (msgPattern != null || hintFormat != null)
    messages.put("detail", detailMessage);
    messages.put("hint", hintFormat);
    outBuffer.append(',');
    // try
    // JsonUtils.writeMap(outBuffer, messages, false);
    // catch (IOException e)
    // outBuffer.append("null");
    outBuffer.append(')'); // 2
    return outBuffer.toString();
    catch(ParseException e)
    System.out.println("Parse Exception :::::::::::::::::::::"+e);
    return null;
    else
    // no pattern-matchable date
    return null;
    else
    return null;
    else
    return null;
    protected String getJSPattern(FacesContext context, UIComponent component)
    String jsPattern = null;
    String datePattern = (String) resolveExpression("#{bindings." + component.getId() + ".format}");
    if (datePattern != null)
    String secondaryPattern = getSecondaryPattern();
    if (datePattern != _NO_JS_PATTERN)
    int length = datePattern.length() * 2 + 2;
    if (secondaryPattern != null)
    length = length + 3 + secondaryPattern.length() * 2;
    StringBuilder outBuffer = new StringBuilder(length);
    jsPattern = _getEscapedPattern(outBuffer, datePattern, secondaryPattern);
    else
    jsPattern = datePattern;
    return jsPattern;
    private static void _escapePattern(StringBuilder buffer, String pattern)
    buffer.append('\'');
    XhtmlUtils.escapeJS(buffer, pattern);
    buffer.append('\'');
    private static String _getEscapedPattern(StringBuilder buffer, String pattern, String secondaryPattern)
    if (secondaryPattern != null)
    buffer.append('[');
    _escapePattern(buffer, pattern);
    if (secondaryPattern != null)
    buffer.append(",'");
    XhtmlUtils.escapeJS(buffer, secondaryPattern);
    buffer.append("']");
    return buffer.toString();
    private String _getHint()
    String type = getType();
    if (type.equals("date"))
    return getHintDate();
    else if (type.equals("both"))
    return getHintBoth();
    else
    return getHintTime();
    public static Object resolveExpression(String pExpression)
    FacesContext facesContext = FacesContext.getCurrentInstance();
    Application app = facesContext.getApplication();
    ExpressionFactory elFactory = app.getExpressionFactory();
    ELContext elContext = facesContext.getELContext();
    ValueExpression valueExp = null;
    valueExp = elFactory.createValueExpression(elContext, pExpression, Object.class);
    return valueExp.getValue(elContext);
    private static final String _NO_JS_PATTERN = new String();
    private static final TrinidadLogger _LOG = TrinidadLogger.createTrinidadLogger(DateTimeConverter.class);
    // RenderingContext key indicating the _dateFormat object
    // has been created
    private static final String _PATTERN_WRITTEN_KEY = "org.apache.myfaces.trinidadinternal.convert.DateTimeConverter._PATTERN_WRITTEN";
    *Problem is if any input date componet is displaying other than current date then the date picker is always picking the current date rather existing date*
    Please suggest me where to make changes?
    Edited by: 858782 on Oct 3, 2011 7:43 AM
    Edited by: 858782 on Oct 3, 2011 11:44 PM

    I need custom date foramts to be applied for different inputDates which are not defined in <af:convertDateTime>
    Thanks
    Edited by: 858782 on Oct 13, 2011 4:59 PM

  • Data validation at the UI level

    Hi
    I have a requirement like i need to validate the input data at the UI level.
    If the data is valid ,only then it should be allowed to be saved.
    If someone knows how to do the same.
    I have seen a method DO_VALIDATE_INPUT method in View controller (IMPL) class.No clue on how it is being used.
    Regards
    Leon

    Hi Leon,
    Are you talking about the Webclient as UI or something else??
    There are 2 options:
    1) You use the Get and Set methods of your context node attributes (The ...CN01 etc classes) (to be found under your IMPL class --> attributes TYPED_CONTEXT(...CTXT class) and in there you should have some ...CN01, CN02, etc. classes. Here are all the GET and SET methods. (you could also go via the views' attributes, this is the shortest way).
    Within the Get (put the value in the model) and Set (get the value from the model)methods you could do some checks and show an error.
    2) Use the Do_handle_data method of your IMPL class. Once data is entered in the screen, this method is always called when another action is performed (pressing a button). Here you can easily check the content of fields.
    3) Use the Do_handle_event method of your IMPL class. This method is called when there is an event that is being triggered (save button is pressed). You can redefine this method and before really saving the data you can perform your checks.
    Hope this helps.
    Kind regards,
    Micha

  • Creation of error log  on input data  and stat report

    I am doing call transaction on <b>C202</b> transaction.my client asked me before uploading the file he needs some validations on input file and he is asking me to create  a log for all the validations.i have to place error lof for all the input data.
    •An error log will record all errors occurring during upload. For each error the list should
    contain the data (line) going in error and an error text in a subsequent column (subsequent to data). The change number used to perform  the upload will be stated in the header of the error list.A txt-file containing the error log will get the same name as the input file, but with an ending –err.xls.
    Therefore no Batch-Input-Session is needed.
    • After execution of the batch input program, the following analysis regarding execution will be shown:
    o Number of records in input file (including title, first line)
    o Number of records successfully updated
    o Number of records in error
    Example:
    Number of records in input file (incl. first line) 4
    Number of records successfully updated:   3
    Number of records in error:      0
    How to do this according to client  requirements.can u help me to get a statastical way to represent errors.  Send me some smpale code for number of errors and no records gets success and no of failed.
    Thanks
    chandrasekhar

    Hai Chandrasekhar
    Go through the following Code
    report Z_CALLTRANS_VENDOR_01
    no standard page heading line-size 255.
    Generated data section with specific formatting - DO NOT CHANGE ***
    data: begin of it_lfa1 occurs 0,
    KTOKK like lfa1-ktokk,
    NAME1 like lfa1-name1,
    SORTL like lfa1-sortl,
    LAND1 like lfa1-land1,
    end of it_lfa1.
    End generated data section ***
    data : it_bdc like bdcdata occurs 0 with header line.
    *DATA: IT_MESSAGES TYPE TABLE OF BDCMSGCOLL WITH HEADER LINE.
    *DATA: LV_MESSAGE(255).
    data : it_messages like bdcmsgcoll occurs 0 with header line.
    data : V_message(255).
    data : V_flag.
    data : V_datum1 type sy-datum.
    data : begin of it_mesg occurs 0,
    message(100),
    end of it_mesg.
    *V_datum1 = sy-datum-1.
    parameters : P_Sess like APQI-GROUPID.
    start-of-selection.
    perform Get_data.
    *perform open_group.
    loop at it_lfa1.
    perform bdc_dynpro using 'SAPMF02K' '0100'.
    perform bdc_field using 'BDC_CURSOR'
    'RF02K-KTOKK'.
    perform bdc_field using 'BDC_OKCODE'
    '/00'.
    perform bdc_field using 'RF02K-KTOKK'
    it_lfa1-KTOKK.
    perform bdc_dynpro using 'SAPMF02K' '0110'.
    perform bdc_field using 'BDC_CURSOR'
    'LFA1-LAND1'.
    perform bdc_field using 'BDC_OKCODE'
    '=UPDA'.
    perform bdc_field using 'LFA1-NAME1'
    it_lfa1-name1.
    perform bdc_field using 'LFA1-SORTL'
    it_lfa1-sortl.
    perform bdc_field using 'LFA1-LAND1'
    it_lfa1-land1.
    call transaction 'XK01' using it_bdc
    mode 'N'
    update 'S'
    messages into it_messages.
    if sy-subrc <> 0.
    if V_flag <> 'X'.
    perform open_group.
    V_flag = 'X'.
    endif.
    perform bdc_transaction. "using 'XK01'.
    endif.
    perform format_messages.
    refresh : it_bdc,it_messages.
    endloop.
    if V_flag = 'X'.
    perform close_group.
    endif.
    *& Form Get_data
    text
    --> p1 text
    <-- p2 text
    FORM Get_data .
    CALL FUNCTION 'GUI_UPLOAD'
    EXPORTING
    FILENAME = 'C:\srinu_vendor.txt'
    FILETYPE = 'ASC'
    TABLES
    DATA_TAB = it_lfa1
    EXCEPTIONS
    CONVERSION_ERROR = 1
    INVALID_TABLE_WIDTH = 2
    INVALID_TYPE = 3
    NO_BATCH = 4
    UNKNOWN_ERROR = 5
    GUI_REFUSE_FILETRANSFER = 6
    OTHERS = 7
    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. " Get_data
    *& Form bdc_dynpro
    text
    -->P_0061 text
    -->P_0062 text
    FORM BDC_DYNPRO USING PROGRAM DYNPRO.
    CLEAR it_BDC.
    it_BDC-PROGRAM = PROGRAM.
    it_BDC-DYNPRO = DYNPRO.
    it_BDC-DYNBEGIN = 'X'.
    APPEND it_BDC.
    ENDFORM.
    Insert field *
    FORM BDC_FIELD USING FNAM FVAL.
    CLEAR it_BDC.
    it_BDC-FNAM = FNAM.
    it_BDC-FVAL = FVAL.
    APPEND it_BDC.
    ENDFORM.
    *& Form format_messages
    text
    --> p1 text
    <-- p2 text
    FORM format_messages .
    loop at it_messages.
    CALL FUNCTION 'FORMAT_MESSAGE'
    EXPORTING
    ID = it_messages-MSGID
    LANG = 'EN'
    NO = it_messages-MSGNR
    V1 = it_messages-MSGV1
    V2 = it_messages-MSGV2
    V3 = it_messages-MSGV3
    V4 = it_messages-MSGV4
    IMPORTING
    MSG = V_message
    EXCEPTIONS
    NOT_FOUND = 1
    OTHERS = 2
    IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
    write : / V_message.
    clear : V_message.
    endloop.
    ENDFORM. " format_messages
    *& Form open_group
    text
    --> p1 text
    <-- p2 text
    FORM open_group .
    CALL FUNCTION 'BDC_OPEN_GROUP'
    EXPORTING
    CLIENT = SY-MANDT
    GROUP = P_Sess
    HOLDDATE = V_datum1
    KEEP = 'X'
    USER = SY-UNAME
    IF SY-SUBRC = 0.
    write : / 'Session Creating wit Name : ',P_Sess.
    ENDIF.
    ENDFORM. " open_group
    *& Form close_group
    text
    --> p1 text
    <-- p2 text
    FORM close_group .
    CALL FUNCTION 'BDC_CLOSE_GROUP'.
    ENDFORM. " close_group
    *& Form bdc_transaction
    text
    -->P_0132 text
    FORM bdc_transaction. "USING VALUE(P_0132).
    CALL FUNCTION 'BDC_INSERT'
    EXPORTING
    TCODE = 'XK01'
    POST_LOCAL = NOVBLOCAL
    PRINTING = NOPRINT
    SIMUBATCH = ' '
    CTUPARAMS = ' '
    TABLES
    DYNPROTAB = it_bdc
    EXCEPTIONS
    INTERNAL_ERROR = 1
    NOT_OPEN = 2
    QUEUE_ERROR = 3
    TCODE_INVALID = 4
    PRINTING_INVALID = 5
    POSTING_INVALID = 6
    OTHERS = 7
    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. " bdc_transaction
    Regards
    Sreeni
    Message was edited by: Sreenivasulu Ponnadi

Maybe you are looking for

  • Older apps no longer print

    Just noticed this today, no sure why? Older apps no longer print. I knew that these whould no longer work in Lion, but I have not upgraded yet so why did they stop working now? Quicken (2006), no longer can print checks Appleworks I can no longer pri

  • Imac late 2012 problems with motu ultralite mkIII through thunderbolt to firewire

    first - hi @all users here in the forum. i have a really curious problem with my audio configuration. at first i must say the audio-config. with my macbook pro (mid 2010) and my imac (early 2008) works fine without problems by using firewire. but not

  • Having to switch off my Iphone just to get a connection to the internet and also receive Imessages

    Hi all, I have recently updated my Iphone 5 to the Iphone 6 in the hope that it would eliviate some of my problems with the Iphone 5, thinking maybe it could be a problem with the phone...alas still the same problem! Basically I can connect to the in

  • Experts say it been tampered with...

    My wifes i mac pro (2009)-black keys OSX-Lion has had many strange thing happening to her settings display mail system and network connections to Verizon. She has also had duplicate issues on her iphone. This is the 3rd "apple experts analysis: Maria

  • A7-30TC tablet connection to external USB drive

    Hi, bit of a rookie here! I have copied about 70GB of music from my PC to a 500GB external hard drive, which I now want to connect to my tablet so I can play the music. However, the tablet either doesnt recognise the external storage at all (it doesn