Add validation in VORowImpl

Hi,
I'm extending a page to add a validation on a textbox. When importing the PersonDetailsVO of the page, it does not have an Entity object attached. And normally, validations on a particular field are done on EOImpl. Can i extend and add my validation codes in the VORowImpl file itself?
thanks,
vik

Exactly, its based on custom sql. I need to insert a basic validation a textbox National Identity (value must not be greater than 13char).
Ive extended my VO and inserted the following codes in its XX_RO_PersonDetailsVORowImpl:
public class XX_RO_PersonDetailsVORowImpl extends PersonDetailsVORowImpl
protected static final int MAXATTRCONST = oracle.jbo.server.ViewDefImpl.getMaxAttrConst("oracle.apps.per.selfservice.common.server.PersonDetailsVO");;
* This is the default constructor (do not remove)
public XX_RO_PersonDetailsVORowImpl()
//my codes Begin
public void setNationalIdentifier(String s)
{   //EPO065 Add validation on National ID textbox
if (s != null)
// Proper message with the message name should be seeded.
if (s.length() > 13)
{  throw new OAAttrValException(OAException.TYP_VIEW_OBJECT,                                    
getViewObject().getFullName(), // VO name
"NationalIdentifier", // Attribute Name
super.getNationalIdentifier(), // Attribute value
"XXPER", // Message product short name
"XXPER_RO_ER0002"); // Message name
super.setNationalIdentifier(s);
// my codes End
Im getting the following errors when compiling:
Error(34,20): constructor OAAttrValException(int, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) not found in class oracle.apps.fnd.framework.OAAttrValException

Similar Messages

  • Add Validity Start and Validity End On PO Header

    Dear SAP,
    need your help, I am trying to add Validity Start and Validity End Field on Additional Tab in Purchase Order header.
    How do i add this field ?
    i already check on MM define screen layout a document level, but there is not setting for this two field.

    Hi Nizam,
    The validity start date & end date are used only for service orders. In configuration goto IMG>MM>Purchasing>PO>Define screen layout at document level and check into Administrative data, header of ME21N , the field selection key attached to your document type (Say NBF) and for field selection key AKTH.
    The fields Start of validity period & Validity period end of field selection key ME21N, NBF & AKTH should be set as optional then only required fields will be visible on screen.

  • Add validation in login using :p1-1_user_name

    Hi,
    Is it possible to add validations in login ?
    I can't uses the :p101_user_name value to validate,
    the value is still unknown.
    Is there a way ?
    Regards,
    Raanan.

    Hi
    This is one thing I don't like about Apex... in most places, you can type an nonexistent field name and Apex will simply ignore it (I assume that it will evaluate to NULL and Apex will assume that it hasn't been initialised yet?) instead of raising an error or warning.
    I don't know if this is on purpose or not (if it is, does anyone know the advantages of this?), but in a few occasions I have spent a few hours solving problems related to this feature...
    Luis

  • Add Validation to a Button

    Hi, i need to add a validation to a Button (i don't know the technical name) that is in a standard tcode ( F110 ), Thanks.

    Hi Sergio,
    Try using the guard condition to validate the data.
    or,
    Double click the button to open the properties popup window.
    Add the needed condition to the disable property in the general tab.
    or,
    you can have a web service test your database and return false or true as a response accordingly. Add start point to the WS and a form for the response (you can set the form's visibility condition to false).
    kindly reward if found helpful.
    cheers,
    Hema.

  • Add validation in Sourcing Cockpit

    Hi all,
    I want to add a validation in the step 2 "Assign Sources of Supply".
    I've tried to add this validation in the class /SAPSRM/CL_CH_WD_DOM_SOCO_GAF2. But in the method DOC_CHECK can't put an enhancement point, the following message is displayed; "Implicit enhancement impl. cannot be displayed due to syntax error"
    Then, i've tried to do it in the method /SAPSRM/IF_CLL_MAPPER~REFRESH. But i have a problem. When my error message is displayed (when the user try to create a draft) all the items are removed in step 2 and filled in step 3. Although I am staying in step 2.
    On top i can read in the step 2 :Assign Sources of Supply ( No Items ), and in the step 3: Review Drafts ( 1 Items ).
    I use the following code for add the message;
    loe_workarea = lon_workarea->get_element( index = sy-tabix ).
            lv_msgv1 = ls_workarea-EXT_DEMID_POSID.
            CALL METHOD mo_cll_message_handler->add_validation_error
              EXPORTING
                iv_msgno      = 022
                iv_msgid      = 'Z...'
                ioe_error     = loe_workarea
                iv_msgv1      = lv_msgv1.
    And i have managed to repopulate the table in step 2 as well;
    mon_cll_set_facade->bind_data_table( EXPORTING new_items = lt_workarea_all
                                                       set_initial_elements = abap_false ).
    But i don't know how remove the lines of the table in the step 3...
    Do you know how can i do it? I do not know to if it has become clear.
    Thanks in advance.

    Finally i've put an enhancement point in the method /SAPSRM/IF_CLL_MAPPER~CHECK_FOR_REQUIRED_FIELDS

  • How to add Valid values in user field?

    Hi,
    I'm trying to add a user field (valid values) in my user table, but i don't know what's wrong with my code.
    It creates the field, but not the field that i want.
    oUserFieldsMD = oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oUserFields)
                oUserFieldsMD.TableName = sTableName
                oUserFieldsMD.Name = sFieldName
                oUserFieldsMD.Description = sDescription
                oUserFieldsMD.Type = FieldType
                oUserFieldsMD.Size = iSize
                'Valid Values 1
                oUserFieldsMD.ValidValues.Value = "D"
                oUserFieldsMD.ValidValues.Description = "Disable"
                oUserFieldsMD.ValidValues.Add()
                oUserFieldsMD.DefaultValue = "D"
                'Valid Values 2
                oUserFieldsMD.ValidValues.Value = "A"
                oUserFieldsMD.ValidValues.Description = "Active"
                oUserFieldsMD.ValidValues.Add()
                Dim i As Integer
                Dim err As String
                i = oUserFieldsMD.Add()
                If i <> 0 Then
                    oCompany.GetLastError(i, err)
                    SBO_Application.MessageBox(i & "; " & err)
                End If
    Bruce

    Hi Bruce
    It looks good, just take out the second one "UserFieldsMD.ValidValues.Add()". Leave the first one. Just take out the second one after oUserFieldsMD.ValidValues.Description = "Active"
    Hope this helps

  • How to add validation to a EO field

    Hi,
    I have the expenditureItemDate from PoDistributionMergeEO. I want to add a validation to this field in the setAttribute method. What are the steps that I should follow. Please let me know.
    Thanks,
    HC

    Below is the exception message.
    Exception Details.
    oracle.apps.fnd.framework.OAException: oracle.jbo.JboException: JBO-29000: Unexpected exception caught: java.lang.NoClassDefFoundError, msg=null
         at oracle.apps.fnd.framework.OAException.wrapperException(OAException.java:896)
         at oracle.apps.fnd.framework.OAException.wrapperException(OAException.java:872)
         at OAErrorPage.jspService(_OAErrorPage.java:221)
         at com.orionserver.http.OrionHttpJspPage.service(OrionHttpJspPage.java:59)
         at oracle.jsp.runtimev2.JspPageTable.service(JspPageTable.java:462)
         at oracle.jsp.runtimev2.JspServlet.internalService(JspServlet.java:594)
         at oracle.jsp.runtimev2.JspServlet.service(JspServlet.java:518)
         at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
         at com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:713)
         at com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:370)
         at com.evermind.server.http.ServletRequestDispatcher.unprivileged_forward(ServletRequestDispatcher.java:259)
         at com.evermind.server.http.ServletRequestDispatcher.access$100(ServletRequestDispatcher.java:51)
         at com.evermind.server.http.ServletRequestDispatcher$2.oc4jRun(ServletRequestDispatcher.java:193)
         at oracle.oc4j.security.OC4JSecurity.doPrivileged(OC4JSecurity.java:284)
         at com.evermind.server.http.ServletRequestDispatcher.forward(ServletRequestDispatcher.java:198)
         at com.evermind.server.http.EvermindPageContext.handlePageThrowable(EvermindPageContext.java:871)
         at com.evermind.server.http.EvermindPageContext.handlePageException(EvermindPageContext.java:816)
         at OA.jspService(_OA.java:256)
         at com.orionserver.http.OrionHttpJspPage.service(OrionHttpJspPage.java:59)
         at oracle.jsp.runtimev2.JspPageTable.service(JspPageTable.java:379)
         at oracle.jsp.runtimev2.JspServlet.internalService(JspServlet.java:594)
         at oracle.jsp.runtimev2.JspServlet.service(JspServlet.java:518)
         at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
         at com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:713)
         at com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:370)
         at com.evermind.server.http.ServletRequestDispatcher.unprivileged_forward(ServletRequestDispatcher.java:259)
         at com.evermind.server.http.ServletRequestDispatcher.access$100(ServletRequestDispatcher.java:51)
         at com.evermind.server.http.ServletRequestDispatcher$2.oc4jRun(ServletRequestDispatcher.java:193)
         at oracle.oc4j.security.OC4JSecurity.doPrivileged(OC4JSecurity.java:284)
         at com.evermind.server.http.ServletRequestDispatcher.forward(ServletRequestDispatcher.java:198)
         at com.evermind.server.http.EvermindPageContext.forward(EvermindPageContext.java:395)
         at OA.jspService(_OA.java:221)
         at com.orionserver.http.OrionHttpJspPage.service(OrionHttpJspPage.java:59)
         at oracle.jsp.runtimev2.JspPageTable.service(JspPageTable.java:379)
         at oracle.jsp.runtimev2.JspServlet.internalService(JspServlet.java:594)
         at oracle.jsp.runtimev2.JspServlet.service(JspServlet.java:518)
         at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
         at com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:713)
         at com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:370)
         at com.evermind.server.http.ServletRequestDispatcher.unprivileged_forward(ServletRequestDispatcher.java:259)
         at com.evermind.server.http.ServletRequestDispatcher.access$100(ServletRequestDispatcher.java:51)
         at com.evermind.server.http.ServletRequestDispatcher$2.oc4jRun(ServletRequestDispatcher.java:193)
         at oracle.oc4j.security.OC4JSecurity.doPrivileged(OC4JSecurity.java:284)
         at com.evermind.server.http.ServletRequestDispatcher.forward(ServletRequestDispatcher.java:198)
         at com.evermind.server.http.EvermindPageContext.forward(EvermindPageContext.java:395)
         at RF.jspService(_RF.java:225)
         at com.orionserver.http.OrionHttpJspPage.service(OrionHttpJspPage.java:59)
         at oracle.jsp.runtimev2.JspPageTable.service(JspPageTable.java:379)
         at oracle.jsp.runtimev2.JspServlet.internalService(JspServlet.java:594)
         at oracle.jsp.runtimev2.JspServlet.service(JspServlet.java:518)
         at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
         at com.evermind.server.http.ResourceFilterChain.doFilter(ResourceFilterChain.java:64)
         at oracle.apps.jtf.base.session.ReleaseResFilter.doFilter(ReleaseResFilter.java:26)
         at com.evermind.server.http.EvermindFilterChain.doFilter(EvermindFilterChain.java:15)
         at oracle.apps.fnd.security.AppsServletFilter.doFilter(AppsServletFilter.java:318)
         at com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:621)
         at com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:370)
         at com.evermind.server.http.HttpRequestHandler.doProcessRequest(HttpRequestHandler.java:871)
         at com.evermind.server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:453)
         at com.evermind.server.http.AJPRequestHandler.run(AJPRequestHandler.java:313)
         at com.evermind.server.http.AJPRequestHandler.run(AJPRequestHandler.java:199)
         at oracle.oc4j.network.ServerSocketReadHandler$SafeRunnable.run(ServerSocketReadHandler.java:260)
         at com.evermind.util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:303)
         at java.lang.Thread.run(Thread.java:595)
    ## Detail 0 ##
    java.lang.NoClassDefFoundError
         at java.lang.Class.forName0(Native Method)
         at java.lang.Class.forName(Class.java:242)
         at oracle.jbo.common.java2.JDK2ClassLoader.loadClassForName(JDK2ClassLoader.java:38)
         at oracle.jbo.common.JBOClass.forName(JBOClass.java:164)
         at oracle.jbo.common.JBOClass.findCustomClass(JBOClass.java:177)
         at oracle.jbo.server.EntityDefImpl.loadFromXML(EntityDefImpl.java:2450)
         at oracle.jbo.server.EntityDefImpl.loadFromXML(EntityDefImpl.java:2275)
         at oracle.jbo.server.MetaObjectManager.loadFromXML(MetaObjectManager.java:522)
         at oracle.jbo.mom.DefinitionManager.loadLazyDefinitionObject(DefinitionManager.java:547)
         at oracle.jbo.mom.DefinitionManager.findDefinitionObject(DefinitionManager.java:425)
         at oracle.jbo.mom.DefinitionManager.findDefinitionObject(DefinitionManager.java:358)
         at oracle.jbo.mom.DefinitionManager.findDefinitionObject(DefinitionManager.java:340)
         at oracle.jbo.server.MetaObjectManager.findMetaObject(MetaObjectManager.java:700)
         at oracle.jbo.server.EntityDefImpl.findDefObject(EntityDefImpl.java:339)
         at oracle.jbo.server.ViewDefImpl.doAddEntityUsage(ViewDefImpl.java:2914)
         at oracle.jbo.server.ViewDefImpl.loadEntityReference(ViewDefImpl.java:2983)
         at oracle.jbo.server.ViewDefImpl.loadFromXML(ViewDefImpl.java:2170)
         at oracle.jbo.server.ViewDefImpl.loadFromXML(ViewDefImpl.java:1983)
         at oracle.jbo.server.MetaObjectManager.loadFromXML(MetaObjectManager.java:526)
         at oracle.jbo.mom.DefinitionManager.loadLazyDefinitionObject(DefinitionManager.java:547)
         at oracle.jbo.mom.DefinitionManager.findDefinitionObject(DefinitionManager.java:425)
         at oracle.jbo.mom.DefinitionManager.findDefinitionObject(DefinitionManager.java:358)
         at oracle.jbo.mom.DefinitionManager.findDefinitionObject(DefinitionManager.java:340)
         at oracle.jbo.server.MetaObjectManager.findMetaObject(MetaObjectManager.java:700)
         at oracle.jbo.server.ViewDefImpl.findDefObject(ViewDefImpl.java:394)
         at oracle.jbo.server.ApplicationModuleDefImpl.loadViewObject(ApplicationModuleDefImpl.java:493)
         at oracle.jbo.server.ApplicationModuleImpl.doFindViewObject(ApplicationModuleImpl.java:2702)
         at oracle.jbo.server.ApplicationModuleImpl.findViewObject(ApplicationModuleImpl.java:2840)
         at oracle.apps.po.document.server.DocumentAMImpl.getPoHeaderMergeVO(DocumentAMImpl.java:90)
         at oracle.apps.po.document.server.DocumentAMImpl.getHeaderRow(DocumentAMImpl.java:149)
         at oracle.apps.po.document.server.PoControlActionsSvrCmd.isConvertCurrencyValid(PoControlActionsSvrCmd.java:2988)
         at oracle.apps.po.document.server.PoControlActionsSvrCmd.isValidAction(PoControlActionsSvrCmd.java:1478)
         at oracle.apps.po.document.server.PoControlActionsSvrCmd.initControlActionsList(PoControlActionsSvrCmd.java:976)
         at oracle.apps.po.document.server.PoHeadersSummaryVOImpl.executeQuery(PoHeadersSummaryVOImpl.java:69)
         at oracle.apps.fnd.framework.server.OAViewObjectImpl.initQuery(OAViewObjectImpl.java:753)
         at oracle.apps.fnd.framework.webui.OAWebBeanHelper.setCriteriaOnVO(OAWebBeanHelper.java:2332)
         at oracle.apps.fnd.framework.webui.OAWebBeanHelper.setCriteriaOnVO(OAWebBeanHelper.java:2304)
         at oracle.apps.fnd.framework.webui.OAQueryHelper.handleCustomizeGoButtonAfterController(OAQueryHelper.java:2607)
         at oracle.apps.fnd.framework.webui.OAQueryHelper.setCurrentCustomization(OAQueryHelper.java:4971)
         at oracle.apps.fnd.framework.webui.OAQueryHelper.prepareCustomizationPickListOnProcessRequest(OAQueryHelper.java:6265)
         at oracle.apps.fnd.framework.webui.OAQueryHelper.renderCustomize(OAQueryHelper.java:2000)
         at oracle.apps.fnd.framework.webui.OAQueryHelper.processRequestAfterController(OAQueryHelper.java:633)
         at oracle.apps.fnd.framework.webui.OAWebBeanHelper.processRequest(OAWebBeanHelper.java:654)
         at oracle.apps.fnd.framework.webui.OAWebBeanContainerHelper.processRequest(OAWebBeanContainerHelper.java:251)
         at oracle.apps.fnd.framework.webui.OAQueryHelper.processRequest(OAQueryHelper.java:555)
         at oracle.apps.fnd.framework.webui.beans.layout.OAStackLayoutBean.processRequest(OAStackLayoutBean.java:350)
         at oracle.apps.fnd.framework.webui.OAWebBeanHelper.processRequestChildren(OAWebBeanHelper.java:964)
         at oracle.apps.fnd.framework.webui.OAWebBeanHelper.processRequestChildren(OAWebBeanHelper.java:931)
         at oracle.apps.fnd.framework.webui.OAWebBeanHelper.processRequest(OAWebBeanHelper.java:655)
         at oracle.apps.fnd.framework.webui.OAWebBeanContainerHelper.processRequest(OAWebBeanContainerHelper.java:251)
         at oracle.apps.fnd.framework.webui.beans.layout.OAStackLayoutBean.processRequest(OAStackLayoutBean.java:350)
         at oracle.apps.fnd.framework.webui.OAWebBeanHelper.processRequestChildren(OAWebBeanHelper.java:964)
         at oracle.apps.fnd.framework.webui.OAWebBeanHelper.processRequestChildren(OAWebBeanHelper.java:931)
         at oracle.apps.fnd.framework.webui.OAWebBeanHelper.processRequest(OAWebBeanHelper.java:655)
         at oracle.apps.fnd.framework.webui.OAWebBeanContainerHelper.processRequest(OAWebBeanContainerHelper.java:251)
         at oracle.apps.fnd.framework.webui.OASubTabLayoutHelper.processRequest(OASubTabLayoutHelper.java:433)
         at oracle.apps.fnd.framework.webui.beans.layout.OASubTabLayoutBean.processRequest(OASubTabLayoutBean.java:465)
         at oracle.apps.fnd.framework.webui.OAWebBeanHelper.processRequestChildren(OAWebBeanHelper.java:964)
         at oracle.apps.fnd.framework.webui.OAWebBeanHelper.processRequestChildren(OAWebBeanHelper.java:931)
         at oracle.apps.fnd.framework.webui.OAWebBeanHelper.processRequest(OAWebBeanHelper.java:655)
         at oracle.apps.fnd.framework.webui.OAWebBeanContainerHelper.processRequest(OAWebBeanContainerHelper.java:251)
         at oracle.apps.fnd.framework.webui.beans.layout.OAStackLayoutBean.processRequest(OAStackLayoutBean.java:350)
         at oracle.apps.fnd.framework.webui.OAWebBeanHelper.processRequestChildren(OAWebBeanHelper.java:964)
         at oracle.apps.fnd.framework.webui.OAWebBeanHelper.processRequestChildren(OAWebBeanHelper.java:931)
         at oracle.apps.fnd.framework.webui.OAWebBeanHelper.processRequest(OAWebBeanHelper.java:655)
         at oracle.apps.fnd.framework.webui.OAWebBeanContainerHelper.processRequest(OAWebBeanContainerHelper.java:251)
         at oracle.apps.fnd.framework.webui.OAPageLayoutHelper.processRequest(OAPageLayoutHelper.java:1166)
         at oracle.apps.fnd.framework.webui.beans.layout.OAPageLayoutBean.processRequest(OAPageLayoutBean.java:1569)
         at oracle.apps.fnd.framework.webui.OAWebBeanHelper.processRequestChildren(OAWebBeanHelper.java:964)
         at oracle.apps.fnd.framework.webui.OAWebBeanHelper.processRequestChildren(OAWebBeanHelper.java:931)
         at oracle.apps.fnd.framework.webui.OAWebBeanHelper.processRequest(OAWebBeanHelper.java:655)
         at oracle.apps.fnd.framework.webui.OAWebBeanContainerHelper.processRequest(OAWebBeanContainerHelper.java:251)
         at oracle.apps.fnd.framework.webui.beans.form.OAFormBean.processRequest(OAFormBean.java:385)
         at oracle.apps.fnd.framework.webui.OAWebBeanHelper.processRequestChildren(OAWebBeanHelper.java:964)
         at oracle.apps.fnd.framework.webui.OAWebBeanHelper.processRequestChildren(OAWebBeanHelper.java:931)
         at oracle.apps.fnd.framework.webui.OAWebBeanHelper.processRequest(OAWebBeanHelper.java:655)
         at oracle.apps.fnd.framework.webui.OAWebBeanContainerHelper.processRequest(OAWebBeanContainerHelper.java:251)
         at oracle.apps.fnd.framework.webui.beans.OABodyBean.processRequest(OABodyBean.java:353)
         at oracle.apps.fnd.framework.webui.OAPageBean.processRequest(OAPageBean.java:2497)
         at oracle.apps.fnd.framework.webui.OAPageBean.preparePage(OAPageBean.java:1893)
         at oracle.apps.fnd.framework.webui.OAPageBean.preparePage(OAPageBean.java:537)
         at oracle.apps.fnd.framework.webui.OAPageBean.preparePage(OAPageBean.java:425)
         at OA.jspService(_OA.java:212)
         at com.orionserver.http.OrionHttpJspPage.service(OrionHttpJspPage.java:59)
         at oracle.jsp.runtimev2.JspPageTable.service(JspPageTable.java:379)
         at oracle.jsp.runtimev2.JspServlet.internalService(JspServlet.java:594)
         at oracle.jsp.runtimev2.JspServlet.service(JspServlet.java:518)
         at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
         at com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:713)
         at com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:370)
         at com.evermind.server.http.ServletRequestDispatcher.unprivileged_forward(ServletRequestDispatcher.java:259)
         at com.evermind.server.http.ServletRequestDispatcher.access$100(ServletRequestDispatcher.java:51)
         at com.evermind.server.http.ServletRequestDispatcher$2.oc4jRun(ServletRequestDispatcher.java:193)
         at oracle.oc4j.security.OC4JSecurity.doPrivileged(OC4JSecurity.java:284)
         at com.evermind.server.http.ServletRequestDispatcher.forward(ServletRequestDispatcher.java:198)
         at com.evermind.server.http.EvermindPageContext.forward(EvermindPageContext.java:395)
         at OA.jspService(_OA.java:221)
         at com.orionserver.http.OrionHttpJspPage.service(OrionHttpJspPage.java:59)
         at oracle.jsp.runtimev2.JspPageTable.service(JspPageTable.java:379)
         at oracle.jsp.runtimev2.JspServlet.internalService(JspServlet.java:594)
         at oracle.jsp.runtimev2.JspServlet.service(JspServlet.java:518)
         at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
         at com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:713)
         at com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:370)
         at com.evermind.server.http.ServletRequestDispatcher.unprivileged_forward(ServletRequestDispatcher.java:259)
         at com.evermind.server.http.ServletRequestDispatcher.access$100(ServletRequestDispatcher.java:51)
         at com.evermind.server.http.ServletRequestDispatcher$2.oc4jRun(ServletRequestDispatcher.java:193)
         at oracle.oc4j.security.OC4JSecurity.doPrivileged(OC4JSecurity.java:284)
         at com.evermind.server.http.ServletRequestDispatcher.forward(ServletRequestDispatcher.java:198)
         at com.evermind.server.http.EvermindPageContext.forward(EvermindPageContext.java:395)
         at RF.jspService(_RF.java:225)
         at com.orionserver.http.OrionHttpJspPage.service(OrionHttpJspPage.java:59)
         at oracle.jsp.runtimev2.JspPageTable.service(JspPageTable.java:379)
         at oracle.jsp.runtimev2.JspServlet.internalService(JspServlet.java:594)
         at oracle.jsp.runtimev2.JspServlet.service(JspServlet.java:518)
         at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
         at com.evermind.server.http.ResourceFilterChain.doFilter(ResourceFilterChain.java:64)
         at oracle.apps.jtf.base.session.ReleaseResFilter.doFilter(ReleaseResFilter.java:26)
         at com.evermind.server.http.EvermindFilterChain.doFilter(EvermindFilterChain.java:15)
         at oracle.apps.fnd.security.AppsServletFilter.doFilter(AppsServletFilter.java:318)
         at com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:621)
         at com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:370)
         at com.evermind.server.http.HttpRequestHandler.doProcessRequest(HttpRequestHandler.java:871)
         at com.evermind.server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:453)
         at com.evermind.server.http.AJPRequestHandler.run(AJPRequestHandler.java:313)
         at com.evermind.server.http.AJPRequestHandler.run(AJPRequestHandler.java:199)
         at oracle.oc4j.network.ServerSocketReadHandler$SafeRunnable.run(ServerSocketReadHandler.java:260)
         at com.evermind.util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:303)
         at java.lang.Thread.run(Thread.java:595)

  • How do I add validation to a system-generated Selection Screen?

    As HR ABAPers know, using the Logical Database approach (I'm using PNPCE) gives you a system-generated Selection Screen.  Part of the specs I have for this report involves making sure that the begin and end dates for the period selected are for a two-week period.  If not, I should display an error message until the user enters a period such that the period (pn-begda and pn-endda) reflect a two-week period.
    The code for the validation is easy enough, and I put it in the AT SELECTION-SCREEN event.  But here's the problem -- the code fires every time the user clicks the "Reporting Period" drop-down box, never giving the user a chance to specify a two-week period.  It fires because pn-begda and pn-endda are still all zeroes.  Even if I select "Other Period" from the drop-down list, the text boxes to allow me to specify the begin and end dates don't appear.
    I've been working on this for quite a while, trying all kinds of things, but I'm spinning my wheels now.  I just want that check to happen when the user clicks the Execute button on the Selection Screen, not when he/she is still trying to enter criteria.  I'm thinking screen field validation for a system-generated Selection Screen has to be a pretty common thing, and there must be a good solution out there.
    Any ideas?

    Rich,
    Absolutely beautiful -- that's exactly what I needed to learn.  Thank you so much.
    Rob, I thought about that.  I even proposed to the users that I could default in a two-week range beginning with today, exactly as you suggested, but they didn't want that.  They felt that this report would more often than not be run to reflect data from two-week periods not necessarily starting today.  Still thought it was a good idea, but that's their call. _
    Again, thanks Rich.  Points awarded.

  • Add Valid (not Default) File Extensions

    I sometimes want to open source code files in Pages, but the file extensions are grayed out (eg foo.c, foo.cpp, foo.rb, foo.haml.html, foo.css). (I usually do this to print out nicely formatted code snippets for meetings)
    Of course I could make Pages the default program to open such files, but I'd much prefer to leave 'vim' as the default! What I'd like is to not have to rename the 'foo.haml.html' files to 'foo.txt' in order to get Pages to admit that it can open them. In other words, to add a dozen additional plain-text file extensions to the ones that Pages is willing to treat as plain text.
    - Randy

    If you change the extension name, you will just get an unusable file.
    If I give trousers to my daughter I will not get a second son
    The only acceptable changes are:
    replace .pages by .template to get … you win, you will get a template
    replace .pages by .zip to be able to expand the packed file if the document was a flatFile one.
    Only Pages may read Pages document.
    I replaced .pages by .piges just for see.
    I got the alert claiming that there is no defined application to open file with such extension.
    I was able to use the Get Info path to teach Pages to open this document but I didn't. No need to store garbage in the launchServices database.
    Yvan KOENIG (VALLAURIS, France) mercredi 28 juillet 2010 23:15:43

  • Add validations to z table update view

    Hi all,
    i have a z table updated by a z transaction that uses an update view generated in se11. The view inserts and/or updates one field of several registers and i need to check if the sum of them is less than certain value.
    Thanks in advance for any help.

    Hi Ebaristo,
    You would need to use table maintenance events "01" and "05" so that the check will be executed when you changes an existing entry as well as when you create a new entry.
    There is good article in SDN on how to use events: at http://www.sdn.sap.com/irj/scn/go/portal/prtroot/docs/library/uuid/8129f164-0a01-0010-2a8e-8765287250fc?quicklink=index&overridelayout=true
    Regards,
    Ramnivas

  • (ABAP-HR) To add columns for validity duration of any qualification

    Hi,
    We have a standard program RHXPEP01 which outs the employees , their qualification , required or not, they have passed it or not.
    And we have also a standard Program RHXPE_EXPIRED_QUALI that outs details with validity of the qualification.
    I would like to enhance the ALV report generated by  RHXPEP01 to add two more columns in the list that will add validity start and end date of all /some qualifications.
    Thanks,
    Sourya Prakash.

    .

  • How to Add/Edit validation rule for Column in ADf table(Jdeveloper11g)

    I am working on Jdevloper11g with ADF table. There i have one column where user can enter numeric value in range 1-1000 .So i have to add validation as such he/she can't enter value apart from 1-1000 range also not any other charcters.
    I know on form, if i select attribute from binding and right click i will find one option "Edit Vlaidation rule..." and from there i can change validation rule for perticular field.
    But how i can achive same on Column's filed??
    Thanks for all help.
    Jaydeep

    Hi Barnislav,
    I tried the way you mentioned but i am getting below exception.
    Could not complete Edit validation Rule... Because it would result in an invalid document
    oracle.bali.xml.model.XmlInvalidOnCommitException: SEVERE: Element RangeValidationBean not expected [ node = RangeValidationBean ]
    <tree IterBinding="searchConfigurationDataIterator" id="searchConfigurationData" ApplyValidation="true">
    <nodeDefinition DefName="com.oraclecnm.util.search.SearchAttributeBean">
    <AttrNames>
    <Item Value="searchAttributeName" />
    <Item Value="searchAttributeId" />
    <Item Value="weightage" />
    <Item Value="isAttributeSearchable" />
    </AttrNames>
    </nodeDefinition>
    <RangeValidationBean OnAttribute="weightage" ResId="pages.SearchConfigurationPageDef.searchConfigurationData_Rule_1" Inverse="false" Severity="Error" Name="searchConfigurationData_Rule_0" OperandType="LITERAL" MinValue="1" MaxValue="1000" />
    </tree>
         at oracle.bali.xml.model.XmlModel._validateSubtree(XmlModel.java:3669)
         at oracle.bali.xml.model.XmlModel._validateDocument(XmlModel.java:3577)
         at oracle.bali.xml.model.XmlModel.__precommitTransaction(XmlModel.java:2825)
         at oracle.bali.xml.model.XmlContext.precommitTransaction(XmlContext.java:1166)
         at oracle.bali.xml.model.XmlContext.__precommitTransaction(XmlContext.java:1653)
         at oracle.bali.xml.model.XmlContext.__commitTransaction(XmlContext.java:1684)
         at oracle.bali.xml.model.XmlModel.__requestCommitTransaction(XmlModel.java:2898)
         at oracle.bali.xml.model.XmlModel.commitTransaction(XmlModel.java:586)
         at oracle.bali.xml.model.XmlModel.commitTransaction(XmlModel.java:556)
         at oracle.bali.xml.model.task.StandardTransactionTask.__commitWrapperTransaction(StandardTransactionTask.java:469)
         at oracle.bali.xml.model.task.StandardTransactionTask.runThrowingXCE(StandardTransactionTask.java:208)
         at oracle.bali.xml.model.task.StandardTransactionTask.run(StandardTransactionTask.java:103)
         at oracle.adfdtinternal.model.ide.validation.RuleEditAction.actionPerformed(RuleEditAction.java:35)
         at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
         at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
         at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
         at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
         at javax.swing.AbstractButton.doClick(AbstractButton.java:357)
         at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1220)
         at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:1261)
         at java.awt.Component.processMouseEvent(Component.java:6041)
         at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
         at java.awt.Component.processEvent(Component.java:5806)
         at java.awt.Container.processEvent(Container.java:2058)
         at java.awt.Component.dispatchEventImpl(Component.java:4413)
         at java.awt.Container.dispatchEventImpl(Container.java:2116)
         at java.awt.Component.dispatchEvent(Component.java:4243)
         at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
         at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
         at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
         at java.awt.Container.dispatchEventImpl(Container.java:2102)
         at java.awt.Window.dispatchEventImpl(Window.java:2440)
         at java.awt.Component.dispatchEvent(Component.java:4243)
         at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
         at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
         at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
         at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
         at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
         at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
         at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

  • EXIT_SAPMM06E_012 : Incoterms validation for header/item in a PO.

    Hi,
    I need to add validation to PO that :
    The header level incoterm 1 and 2 and the items incoterm1 and 2 has to be populated by the user, for PO create(ME21n) and change (ME22n)
    modes.
    THe header level inocterm field validations were done in Change mode(ME22n) using the i_ekko in EXIT_SAPMM06E_012.
    But i'm not able to do this, for the item level incorterms. I cant find which table holds the incoterm data for items.
    Also, please let me know how to do it when the PO is in create mode. Can EXIT_SAPMM06E_012 be used?
    and which internal table will have the inco terms for header and item data , when in create mode.
    Thanks in advance ,
    Shyam.

    Hi
    Try with BADI ME_PROCESS_PO_CUST method CHECK.
    Regards
    Eduardo

  • Forms and validations - here's some of my ideas, what are yours?

    One of the big things still missing from the JFX space (especially where JEE is concerned) is forms and form validations. Maybe you guys have been luckier but at least 80% of the screens I've had to build in my career have been boring old forms - enter data in the fields, validate them and hit submit.
    So, I've been hacking around on this to try and get a pattern and hopefully some reusable classes for doing this in JavaFX. I have something that works but the code is verbose and less than elegant. I'm hoping some of you guys might want to kick around some ideas on this with me here. If we can come up with something that works, I'd like to either include it in [url http://www.zenjava.com/jfx-flow/]JFX Flow, or put it out as a separate open source project (whichever makes more sense).
    What I think needs to be supported:
    * Map between a normal Java bean and the fields on a form
    * Validate the data, i.e. specifying the constraints on a field and then checking those constraints
    * Show a validation summary at the top of the form
    * Highlight individual fields if they have validation errors
    * Support auto-validation, i.e. the validation highlights and messages will instantly update as the user types
    Some extra restrictions:
    * The data input will ideally be a normal bean and so it won't have observable values on it. In most projects I use, the beans are coming from the server and sometimes may be shared between desktop client and a jsp/web client, or even be a third party API so they can't be changed. End result: we don't want any JFX complexities or dependencies in our server code (design leak). This rule could be bent but only as a last resort.
    * The validations must be defined relative to the normal data bean not a JFX model or controller, etc. This is so the bean can be validated on the server as well as the client. The server must do validation to prevent dodgy data getting in (never trust a client). Ideally we don't want to be specifying the validations in two places (i.e. once for the client and once for the server) as this creates maintenance problems and weakens the integrity of the system over time.
    * Ideally the validation mechanism will be based on [url http://java.dzone.com/articles/bean-validation-and-jsr-303]JSR 303 - Bean Validations as this is quite nice. This is flexible however if there is a suitable alternative that integrates better.
    To give us something to reference in conversation, I've created a small working sample. This is only meant to be a rough starting point (at best) and I'd really like to get feedback on both the code (i.e. should we have a 'presentation model', how could bindings be better used, etc) and the general way I'm representing errors (i.e. should we use tooltips to show errors, or actually show the errors next to the field, should we use border colours or put a little exclamation mark over the field, should the fields be auto-validated or only validated on submit, etc).
    The example is a single form for editing a person. It has three fields, first name, last name and gender. When the form is blank, auto-editing is off. When the user submits the form it is validated and from that point on auto-validating is on. Error fields are highlighted with a style change, and a tooltip is added with details (I think we can do better - what's your ideas?).
    I have used all plain Java to keep thngs simple, but I'd be looking for the end result to translate to FXML as well. I've also coded everything into the one class but the eventual goal would be to have the common stuff moved out to reusable base classes, etc.
    Here's a workspace with some example code in it: http://code.google.com/p/jfxee/source/browse/trunk/jfxforms/
    Here's a running deploy of that code: http://zenjava.com/demo/form/forms.html
    (edit: I've moved the code to its own project and changed the url for the launch - the values above are the new, correct ones)
    Looking forward to hearing some thoughts on this topic.
    Edited by: zonski on 01-Dec-2011 13:41

    At Devoxx I did some straw man prototype that you might find useful (or hopeless, I'm not sure which, I did it in a hurry :-)). I followed some principles that I was influenced by years back by JGoodies, but I haven't looked at the JGoodies stuff in forever and know it isn't all the same. But anyway, like I said, I'm not sure it is actually useful but maybe there is something genius hidden in there.
    I have a Validator, which is just a simple SAM:
    import javafx.scene.control.Control;
    * @author Richard
    public interface Validator<C extends Control> {
        public ValidationResult validate(C control);
    }The idea is that it is given a Control, it will validate that control, and then return a ValidationResult. ValidationResult is actually only needed in cases of errors, since returning null indicates success, so the following is somewhat of a crock but you could rename it ValidationError or something and remove the "SUCCESS" type and there you are.
    public class ValidationResult {
        public enum Type { ERROR, WARNING, SUCCESS }
        private final String message;
        private final Type type;
        public ValidationResult(String message, Type type) {
            this.message = message;
            this.type = type;
        public final String getMessage() {
            return message;
        public final Type getType() {
            return type;
        }For good measure I threw in a ValidationEvent.
    import javafx.event.Event;
    import javafx.event.EventType;
    * @author Richard
    public class ValidationEvent extends Event {
        public static final EventType<ValidationEvent> ANY =
                new EventType<ValidationEvent>(Event.ANY, "VALIDATION");
        private final ValidationResult result;
        public ValidationEvent(ValidationResult result) {
            super(ANY);
            this.result = result;
        public final ValidationResult getResult() { return result; }
    }Because Control's don't presently have the notion of validation built in, I created a ValidationPane which is like a specialized StackPane, where there is a bottom layer, the control, and a glass pane layer. And from CSS you can style it however you like. The ValidationPane has a CSS style class set in case of errors / warnings. So without augmenting controls, the idea is that a ValidationPane subclass would exist to wrap each type of control you needed to validate. It did this because somebody has to wire up the listeners to the control to react on text input etc, and so I thought I'd like that encapsulated in something reusable, and there it was.
    import javafx.beans.DefaultProperty;
    import javafx.beans.property.ObjectProperty;
    import javafx.beans.property.ReadOnlyObjectProperty;
    import javafx.beans.property.ReadOnlyObjectWrapper;
    import javafx.beans.property.SimpleObjectProperty;
    import javafx.beans.value.ChangeListener;
    import javafx.beans.value.ObservableValue;
    import javafx.event.EventHandler;
    import javafx.scene.control.Control;
    import javafx.scene.layout.Region;
    * @author Richard
    @DefaultProperty("content")
    public abstract class ValidatorPane<C extends Control> extends Region {
         * The content for the validator pane is the control it should work with.
        private ObjectProperty<C> content = new SimpleObjectProperty<C>(this, "content", null);
        public final C getContent() { return content.get(); }
        public final void setContent(C value) { content.set(value); }
        public final ObjectProperty<C> contentProperty() { return content; }
         * The validator
        private ObjectProperty<Validator<C>> validator = new SimpleObjectProperty<Validator<C>>(this, "validator");
        public final Validator<C> getValidator() { return validator.get(); }
        public final void setValidator(Validator<C> value) { validator.set(value); }
        public final ObjectProperty<Validator<C>> validatorProperty() { return validator; }
         * The validation result
        private ReadOnlyObjectWrapper<ValidationResult> validationResult = new ReadOnlyObjectWrapper<ValidationResult>(this, "validationResult");
        public final ValidationResult getValidationResult() { return validationResult.get(); }
        public final ReadOnlyObjectProperty<ValidationResult> validationResultProperty() { return validationResult.getReadOnlyProperty(); }
         *  The event handler
        private ObjectProperty<EventHandler<ValidationEvent>> onValidation =
                new SimpleObjectProperty<EventHandler<ValidationEvent>>(this, "onValidation");
        public final EventHandler<ValidationEvent> getOnValidation() { return onValidation.get(); }
        public final void setOnValidation(EventHandler<ValidationEvent> value) { onValidation.set(value); }
        public final ObjectProperty<EventHandler<ValidationEvent>> onValidationProperty() { return onValidation; }
        public ValidatorPane() {
            content.addListener(new ChangeListener<Control>() {
                public void changed(ObservableValue<? extends Control> ov, Control oldValue, Control newValue) {
                    if (oldValue != null) getChildren().remove(oldValue);
                    if (newValue != null) getChildren().add(0, newValue);
        protected void handleValidationResult(ValidationResult result) {
            getStyleClass().removeAll("validation-error", "validation-warning");
            if (result != null) {
                if (result.getType() == ValidationResult.Type.ERROR) {
                    getStyleClass().add("validation-error");
                } else if (result.getType() == ValidationResult.Type.WARNING) {
                    getStyleClass().add("validation-warning");
            validationResult.set(result);
            fireEvent(new ValidationEvent(result));
        @Override
        protected void layoutChildren() {
            Control c = content.get();
            if (c != null) {
                c.resizeRelocate(0, 0, getWidth(), getHeight());
        @Override
        protected double computeMaxHeight(double d) {
            Control c = content.get();
            return c == null ? super.computeMaxHeight(d) : c.maxHeight(d);
        @Override
        protected double computeMinHeight(double d) {
            Control c = content.get();
            return c == null ? super.computeMinHeight(d) : c.minHeight(d);
        @Override
        protected double computePrefHeight(double d) {
            Control c = content.get();
            return c == null ? super.computePrefHeight(d) : c.prefHeight(d);
        @Override
        protected double computePrefWidth(double d) {
            Control c = content.get();
            return c == null ? super.computePrefWidth(d) : c.prefWidth(d);
        @Override
        protected double computeMaxWidth(double d) {
            Control c = content.get();
            return c == null ? super.computeMaxWidth(d) : c.maxWidth(d);
        @Override
        protected double computeMinWidth(double d) {
            Control c = content.get();
            return c == null ? super.computeMinWidth(d) : c.minWidth(d);
    }And finally the TextInputValidatorPane instance good for any TextInputControl. I think.
    import javafx.beans.InvalidationListener;
    import javafx.beans.Observable;
    import javafx.beans.value.ChangeListener;
    import javafx.beans.value.ObservableValue;
    import javafx.scene.control.TextInputControl;
    * @author Richard
    public class TextInputValidatorPane<C extends TextInputControl> extends ValidatorPane<C> {
        private InvalidationListener textListener = new InvalidationListener() {
            public void invalidated(Observable o) {
                final Validator v = getValidator();
                final ValidationResult result = v != null ?
                    v.validate(getContent()) :
                    new ValidationResult("", ValidationResult.Type.SUCCESS);
                handleValidationResult(result);
        public TextInputValidatorPane() {
            contentProperty().addListener(new ChangeListener<C>() {
                public void changed(ObservableValue<? extends C> ov, C oldValue, C newValue) {
                    if (oldValue != null) oldValue.textProperty().removeListener(textListener);
                    if (newValue != null) newValue.textProperty().addListener(textListener);
        public TextInputValidatorPane(C field) {
            this();
            setContent(field);
    }This should also be usable as is from FXML since you can easily wrap a TextInputValidatorPane around a TextField, and CSS does all the styling, so I think it all just works. You probably need to have some library of sophisticated Validators which know how to read text from a TextField and compare against the validation annotations, but otherwise it should work well enough. Anyway, in the actual implementation I think I would omit the ValidationPane stuff completely and just build that part into the controls / skins. Like I said, this was a quick hack but seemed to get the "how do I visualize validation errors" part of the problem solved.
    Richard

  • Problem with validating a field in VA01/VA02

    Hi,
    I was required to add validation for Material Group 3 (VBAP-MVGR3) in 'Additional Data A' tab (VA01/VA02). The corresponding screen number in 4459. In the PAI section, there is a module called 'vbap_bearbeiten'. In this module, there is an enhancement point called 'VBAP_BEARBEITEN_10 '. I created an implementation of this enhancement point to call a validation subroutine which i put in user exit MV45AFZZ. My problem is whenever a wrong entry is entered for that field, the whole screen in the 'Additional Data A' tab turned grey and disabled for user entry. Re-entry for the correct Material Group 3 is not allowed.
    Initially, i used a different approach. I made a core change to screen 4459 by adding a statement like below in the PAI section :-
    FIELD vbap-mvgr3 MODULE zsd_check_mvgr3 ON REQUEST.
    In fact, the validation worked without any issue. User was prompted for an error message and then was allowed to re-enter a correct entry for that field if a wrong entry was entered initially. However, since this approach involved a core change, it was not allowed by my superior and he demands for using the enhancement framework approach.
    Kindly please let me know if you have any idea of resolving this issue. Thanks much in advance.

    Hi guys, thanks much for your feedback.
    I tried to call my validation subroutine from USEREXIT_CHECK_VBAP (MV45AFZB). However, it did not work as well. Although the validation subroutine was successfully called in USEREXIT_CHECK_VBAP and error message dialog box was shown if entry was not correct, but when i clicked on the dialog box / pressed the 'enter' key, the 'Material Group 3' field was not opened for re-editing (it was still shown in grey and disallowed for user entry). In fact, through debugging, i found that USEREXIT_CHECK_VBAP was called again (after i pressed the 'enter' key) and it caused the program to enter an infinite loop.
    On the other hand, i also tried to use USEREXIT_MOVE_FIELD_TO_VBKD (MV45ZFZZ). Unfortunately, i also met with the same issue as described above.  Kindly please let me know if there is a way to solve this issue. Thanks.

Maybe you are looking for