How do I query changed view object attribute in another view object

Jdeveloper 10.1.3.4
My requirement is that I want to be able to query a view object (based on entity) on a non-key attribute where the value I am searching on may either be in the database on an existing record or, have just been recorded by updating a different view object based on the same entity (and yet to be committed).
When querying the second view object for a value just updated via a different view object, the second view object always returns no rows. I had expected the process to be :
EntityA
ViewObjectA based on EntityA
ViewObjectB based on EntityA
ViewObjectA - query row with key = 123. update attribute Y with value 456 (attribute Y in database null). Entity cache for EntityA, key 123, atttribute Y updated with value 456
ViewObjectB - query row with attribute = Y. expect record in EntityA cache just updated to be returned. Instead, nothing is returned
Here is the code I was using (where RandScheduleEdit and RandScheduleSearch are identical view objects based on entity object RandSchedule)
  public static void main(String[] args) {
    String        amDef = "test.cache.model.AppModule";
    String        config = "AppModuleLocal";
    ApplicationModule am = Configuration.createRootApplicationModule(amDef,config);
    ViewObject rsEdit = am.findViewObject("RandScheduleEdit");
    Key rsKey = new Key(new Object[]{40});
    Row[] rsEditRows = rsEdit.findByKey(rsKey,1);
    Row rsEditRow = rsEditRows[0];   
    rsEditRow.setAttribute("SId", new Number(7827));
    ViewObject rsSearch = am.findViewObject("RandScheduleSearch");
    rsSearch.setWhereClause("S_ID = :SId");
    rsSearch.defineNamedWhereClauseParam("SId", null, null);
    rsSearch.setNamedWhereClauseParam("SId",new Number(7827));
    rsSearch.executeQuery();
    Row rsSearchRow = rsSearch.first();
    Configuration.releaseRootApplicationModule(am, true);
  }Why does rsSearch not find the record S_ID = 7827 ? It seems to only be querying new records in the database and ignoring the cached record just updated ?
Any help greatly appreciated.
Cheers,
Brent

rsSearch.setNamedWhereClauseParam("SId",new Number(7827));This might help:
rsSearch.setQueryMode(ViewObject.QUERY_MODE_SCAN_ENTITY_ROWS);
rsSearch.executeQuery();

Similar Messages

  • How to use layout of one view(some part) in another view

    Hi All,
                 I need how to use a layout of one view(some part) in another view.if anybody knows, help me.
    Ex : I took two views.but some part of layout in first view is also needed in second view.Is it possible.
    Thank You,
    Anupama.

    Hi,
    Whichever common ui elements you want to put in both views. Keep them in one view.
    Now create two views which You want to display.( i.e you have to create three views in that two only will be used for display purpose ) In that both views add viewcontainer ui element and embedd that view which has common UIs. And Then add rest uncommon UIs in both views.
    I hope it helps.
    Regards,
    Rohit

  • How to reference the Parent view Object attribute in Child View object

    Hi , I have the requirememt to generate Tree like struture to display Salary from joining date to retirement date in yearly form.I have writtent two Pl/SQL function to return parent node and child nodes(based on selected year).
    1.First function --> Input paramter (employee id, retirement date , joining date) --> return parent node row with start_date and end_date
    2. 2nd function --> input paarmter(employee id, startDate, end_date) --> return child node based on selected parent node i.e. start date and end date
    I have created two ADF view object based on two function return
    Parent Node --> select * from Table( EUPS.FN_GET_CONTR_SAL_BY_YR(employeeId,retirement Date, dateOf joining)) ;
    Child Node --> select * FROM TABLE( EUPS.FN_GET_CONTR_SAL_FOR_YEAR( employeId,startDate, endDate) ) based on selected parent node.
    I am giving binding variable as input for 2nd function (child node) . I don't know how to reference the binding variable value in child view from parent view.
    Like I have to refernce employeId,startDate, endDate values in 2nd function from parent view object. some thing like parentNode.selectedStart_date parentNode.employeeId.
    I know we can achive this writing the code in backing bean.But i want to know how can we refernce parent view object attribute values in child view object using Groovy or otherway?
    I will appreciate your help.
    Thanks

    I have two view com.ContractualSalaryByYearlyView for Parent Node and com.ContractualSalaryByYearlyView for child Node.
    I have created view link(ContractualSalYearlyByYearViewLink) betweem two view by giving common field empId, stDate , endDate.(below is the view link xml file).
    I tried give the binding attribute values using parent object reference like below in com.ContractualSalaryByYearlyView xml file but getting error
    Variable ContractualSalaryByYearlyView not recognized.I think i am using groovy expression.
    Thanks for quick response.
    com.ContractualSalaryByYearlyView xml
    <ViewObject
    <DesignTime>
    <Attr Name="_isExpertMode" Value="true"/>
    </DesignTime>
    <Variable
    Name="empId"
    Kind="where"
    Type="java.lang.Integer">
    <TransientExpression><![CDATA[adf.object.ContractualSalaryByYearlyView.EmpId]]></TransientExpression>
    </Variable>
    ContractualSalYearlyByYearViewLink.xml file
    <ViewLinkDefEnd
    Name="ContractualSalaryByYearlyView"
    Cardinality="1"
    Owner="com.ContractualSalaryByYearlyView"
    Source="true">
    <DesignTime>
    <Attr Name="_finderName" Value="ContractualSalaryByYearlyView"/>
    <Attr Name="_isUpdateable" Value="true"/>
    </DesignTime>
    <AttrArray Name="Attributes">
    <Item
    Value="com.ContractualSalaryByYearlyView.EmpId"/>
    <Item
    Value="com.ContractualSalaryByYearlyView.StDate"/>
    <Item
    Value="com.ContractualSalaryByYearlyView.EndDate"/>
    </AttrArray>
    </ViewLinkDefEnd>
    <ViewLinkDefEnd
    Name="ContractualSalaryForYearView"
    Cardinality="-1"
    Owner="com.ContractualSalaryForYearView">
    <DesignTime>
    <Attr Name="_finderName" Value="ContractualSalaryForYearView"/>
    <Attr Name="_isUpdateable" Value="true"/>
    </DesignTime>
    <AttrArray Name="Attributes">
    <Item
    Value="com.ContractualSalaryForYearView.EmpId"/>
    <Item
    Value="com.ContractualSalaryForYearView.StDate"/>
    <Item
    Value="com.ContractualSalaryForYearView.EndDate"/>
    </AttrArray>
    </ViewLinkDefEnd>

  • To change the program attributes of a business object

    Hi All,
    How can i change the program attibutes of a business object

    SWO1 is the tcode for business objects.Once you enter the object name navigate to the program by clicking on Program button present at the top.
    Now from the menu choose Goto-->Basic Data.You will get a screen with tab strips like change data,general , transport data, where you can give package ,description etc.
    Hope it helps.
    Regards,
    Lakshman.

  • How To Force User to Fulfill validations in view before switch to another view in infopath 2012

    i have a form with different views
    ,, every view has some validations ,, how to validate each view's validations before switching to another view
    if manual how to do that ?

    Hi Ahmed,
    You can use custom validation for verifying all the fields with required data, and write rule in you submit button to disable till all the fields are entered with valid data. Enabling submit or switch view rule after validation will help you on this regards.
    You can also use internal flags for enabling disabling submit button if required, or just make all the fields required OOTB.,
    I usuall use expressions to validate the form for values, this will help to check multiple fields atonce.
    http://social.technet.microsoft.com/Forums/sharepoint/en-US/39160c15-2074-4f27-b9bc-5b0a20d2d29e/validate-30-fields-on-infopath-form-before-swiching-view-or-submit-form-data
    here are some links for reference,
    http://office.microsoft.com/en-us/infopath-help/introduction-to-rules-HA010381865.aspx
    http://office.microsoft.com/en-us/infopath-help/add-rules-for-validation-HA101783369.aspx
    http://sharepoint-mattharmon.blogspot.com/2013/03/conditional-validation-rules-infopath.html
    http://www.bizsupportonline.net/infopath2007/infopath-basics-3-ways-validate-data-infopath.htm
    Hope this helps!
    Ram - SharePoint Architect
    Blog - SharePointDeveloper.in
    Please vote or mark your question answered, if my reply helps you

  • Using view context attribute values in view methods

    Hello,
    I have a view context mapped to a window context.  The window context has a supply function that gets some data.  I would like to use some of this data in one of my view methods but can't seem to find the syntax to use the values in the mapped view context attributes.  I know for displaying on the view you map the screen field to the context attribute but I just need to use this value in a method.  Any help will be greatly appreciated.
    Thank you,
    JR

    Hi Joseph,
    If you already had mapped the view context with the window context, all you have to do in the view method is to read the view context. For this, you can use the next code:
      DATA: lo_node      TYPE REF TO if_wd_context_node,
            lo_element   TYPE REF TO if_wd_context_element,
            lv_attribute TYPE wd_this->element_node-attribute.
      lo_node = wd_context->get_child_node( name = wd_this->wdctx_node ).
      lo_element = lo_node->get_element( ).
      lo_element->get_attribute(
        EXPORTING
          name =  `ATTRIBUTE`
        IMPORTING
          value = lv_attribute ).
    This is supossing you have a node named 'NODE' with an attribute named 'ATTRIBUTE'.
    Also, you can use the Web Dynpro Statement Structure. It's a wizard that helps you to generate some code. The icon is like a magic wand.
    Regards,
    Isaac Meléndez

  • How does metadata get changed by both Lightroom and another application??

    I am frequently getting the message "The metadata for this photo has been changed by both Lightroom and another application. Should Lightroom import settings from disk or overwrite disk settings with those from the catalog?" on images in my catalog. I use only Lightroom to organize, add keywords, do basic adjustments, etc. On the occasions I am taking an image into Photoshop to do further work, it's exported as a TIFF or PSD and the original stays in the LR catalog untouched by anything else I might do to the image.
    I have two choices with this message: Use Lightroom's settings, OR overwrite them from disc. The first few times this scared me, as I had no idea where those changes were coming from and why the disc file had something different than the lightroom catalog. I have all my metadata saved in XMP files. But I took the chance and said overwrite LR settings, and saw nothing change on the sliders or image being displayed. I then tried a few saying 'keep LR settings', and again I saw no visible signs of changes. That leads me to believe that they are NOT changed but LR things they are somehow. But I don't like seeing it, I want it to go away unless there really are changes happening outside of LR (like if I went into Bridge or something...)
    Any ideas why this message shows up? I just discovered about 100 images in a collection of images I sent to stock agency three years ago, and haven't done anything with them outside of LR since.
    Thanks for any help you can give.

    Users have complained for years about spurious metadata-has-changed notifications.  If you're confident that you're not editing the file itself outside of LR, then choosing Overwrite Settings will rewrite the metadata in the file with the catalog metadata and (usually) make the spurious notification go away.
    Unfortunately, LR doesn't tell you which metadata fields have changed, so users are left flying blind.  I believe Rob Cole had a plugin that would tell you metadata differences between the catalog and the disk file, but his Web site has been down for a couple of weeks now.
    ManiacJoe: My guess is that Photoshop is updating some EXIF data fields in the raw file, for example the "edited with software" field. Since Lightroom probably has already set that field, it gives you a warning that something changed.
    Interesting hypothesis.  I just tested that with LR 5.7.1, Photoshop CC 2014, OS X 10.10 and couldn't reproduce the problem.  I exported a TIFF from a cataloged raw file into the same folder as the raw, edited the TIFF and changed some of its metadata in Photoshop, and saved it.  LR didn't report a metadata-has-changed notification.
    In general, I'd be (only moderately) surprised that if you edited x.tif in PS, it would change any metadata in x.cr2 or x.xmp.

  • How to re-query changed record in multi-row block after update in a called form

    Hi,
    I have a form that I use to perform searches, which is a multi-record block.
    The user can navigate to a record, press a button on call another form which provides
    more detail, and allows update of the record.
    If the user changes it, and returns to the original search form, how can I re-query the
    changed record to update the fields on the search form.
    Is there a way other than to re-query the
    whole block - a built-in to just update on record if it's changed on the database.
    If not, can I use globals to pass back the data (since only a few fields are updatable),
    and change the record without effecting its forms status.
    Many thanks
    Bernie

    BD,
    I haven't managed to look at a solution yet, but the block is a large multi-row block,
    with an ORDER BY, and since it can return a large number of records, there is a short
    delay. I was hoping there was a way of just
    re-querying the one record, which was displayed
    in the second form for update.
    I'll give the query a go, or might try and pass back some globals with the update values.
    By the way, DML Return Value is an excellent feature, but only works against Oracle 8.
    It basiclly adds the RETURNING clause to any DML statement (see SQL manual), so that if
    a trigger changes/adds values you didn't provide, it will return them back to you
    so the values in your form are correct.
    I use a trigger on the DB to populate history fields (create/update,who/when) and
    the PK sequence. Using this feature, those values are returned to the block and displayed.
    Regards
    Bernie

  • Saving PDF form on Mac prevents viewing and printing by another viewer

    We run a student competition which is affiliated with a national competition.  The national competition provides a set of forms that must be filled out by the students, teachers, etc.  We have a process set up whereby students can download a PDF form (which is enabled by the authors  for saving from Reader).  They are supposed to fill out this form (actually several of them), and then save the file(s) to their drive.  Once they have the forms filled out and approved by their teacher, they upload them to our website via a standard web form, which simply saves the uploaded PDF for later viewing by the student, teachers, judges, and committee members.  When students do this using Adobe Reader on a PC, it works fine.  (I'm not sure if Reader X works, actually, but I know Reader 9 does).  The problem, though, comes up with Mac users.  When they do the same thing, it seems to override the extended rights in the document, resulting in a document saved on their disk that displays with all the fields initially unviewable (that is  they all appear blank).  If you click on one of the fields, you can view the fields one at a time.  Each field appears and disappears as you move thru the document.  But we can't simply read the form, nor can we print a copy (which is necessary if the student wins and proceeds to the national competition.)  This is true if the form is uploaded or emailed or transported by USB drive--it is simply a property of the saved file.   In our testing, this appears to be a generic property of forms processed on  a Mac--and we haven't found a way around it.  Is there any way for a student who has filled out a form on a Mac to save the form while PRESERVING the extended rights?  Or do we just have to tell them that Macs don't work right?  If there is a way for them to do this, I could provide the instructions on the page that delivers the forms.  But we've tried to explore the Mac interface (inside Safari and in the PDF viewer that is provided on the Mac systems) and can't find any place that gives options that seem to affect the extended rights.  Help!

    kblyons46 wrote:
    and we haven't found a way around it.  Is there any way for a student who has filled out a form on a Mac to save the form while PRESERVING the extended rights? 
    There's an easy way around it. Make sure they are using Adobe Reader to fill in the form. 99% of these cases are because they are using the Mac Preview application to open PDF's and it will corrupt Adobe forms.

  • Categorize one object by if another different object is related.

    I want make a report that says if a Service Request has one of a specific type of Task then categorize that SR as "Category 1" and if it does not call it "Category 2".
    I tried doing this using this calc: "case WHEN Activity.Type = 'Request New' then 'Category 1' else 'Category 2' end"
    It works the closest but if a SR has one 'Request New' task and a task of a different type, it gets double categorized.
    I want something that says if it has a 'Request New' task the it should ignore the others and categorize it as 'Category 1'.
    Any ideas on how to do this? I'm stumped. Thanks ahead for your help.

    Hi 830832,
    This is a tough one and I don't see a way to do it in a single report. You could, however, create two reports and combine them for display purposes in a dashboard or custom tab.
    Here is a simplified example (this would be an Activity report):
    SR ID | SR | Type (from Activity) | Category (calculated value as below)
    --> Filter on Type = 'Request New'
    This is your "Category 1" report.
    For your "Category 2" report, you want all the other SRs that DON'T have an activity of Type = 'Request New' So use the first report as a filter in your second report:
    Where SR ID IS NOT IN (name of sub report).
    Another alternative to consider is using ome external mechanism (web services or manual import / update ) to explicitly mark the SRs as "category 1" or "category 2". This would make reporting super easy, but clearly adds some overhead.
    Good luck!

  • Access object attributes using other object JNI native method

    Hi. I'm trying to change an attribute of object O1 from another object O2 without invoking a O1 method and without making the attribute as public or protected.
    The only possibility that comes to my mind for doing so is writting a JNI native method
    public class O1 {
    static public native changeAttribute (Object O2, Object newAttributeValue) ;
    that change the attribute memory reference, but all I've found about accesing attributes in JNI is about accessing the invoker attributes (in this case, O1).
    �Does any one know if it's possible to do so? Thanks.

    I know that is not a good practice but I cannot figure out another way.
    I'll try to explain the whole problem so you see the reason. I'm working with transactions, using objects as the data. An object can be opened for write by several transactions because the granularity for conflicts is not the object, is each of its attributes. As long as two transaction don't write the same attribute, they both can write. For writing, each transactions uses a private copy of the object. At committing, the actual copy of the object must be replaced by the committer one, but as far as the granularity is the object attributes, only each written attribute must be replaced (if not, only the last commit would be visible).
    This attribute replace must be done by the transaction manager as far as the transactional object is provided by the client. So what i was thinking was to use JNI or some trick like that to replace the object attributes transparently to the object.
    I hope the explain is clear, my english is a little asleep :-(.
    How to do it with reflection? I thought that was only for method calling. Anyway, there wouldn't be problems if the attributes are private?
    Thanks for answering.
    EDIT: I've been able to change a public field using reflection, but not the private one
    import java.lang.reflect.*;
    class Caca {
    public static void main(String[] args) {
    Integer r = new Integer(0);
    System.out.println("original: " + r.toString());
    modifyWidth(r, 300);
    System.out.println("modified: " + r.toString());
    static void modifyWidth(Integer r, int newValue ) {
    Field valueField; Class c = r.getClass();
    try {
    valueField = c.getField("value");
    valueField.set(r, newValue);
    } catch (Exception e) { System.out.println(e); }
    Message was edited by:
    dfasdfsdafsadfasdf

  • Trigger an event in the parent view, when popping a child view (Mobile)

    So from one view I'm pushing another view with some data:
    <s:Button label="Edit System" click="navigator.pushView(EditSystem, systems.selectedItem)"/>
    The problem I have is that in this other view I'm updating a view things in my sqlite database, so when I pop the 'EditSystem' view and return to the original, I want to run a function to requery the the sql so I can update a view things in the original view. But from what I can fugure Eventlisteners dont work across views? How do I trigger an event in the original view when I return from a child view via pop? 

    You should find this post useful: http://flexponential.com/2010/12/05/saving-scroll-position-between-views-in-a-mobile-flex- application/
    It demonstrates one way of saving and restoring data when pushing and popping a view.

  • Implementing History types on query based view object attributes

    Hi All,
    I have to implement the history types
    created on,
    created by,
    modified on,
    modified by
    in my application, but I have all the Query based view objects in my work space, but according to my research History types can only be implemented on the Entity Objects attributes. So how can I do this for my application ? Any Solution ? Any alternative  please ?
    (NOTE: I have all the entity objects available in my common Model work space ).

    @TimoHahn, I have the following master view object query, which i can not generate by using the Entity objects, Basically I am transforming an oracle form base ERP into Oracle ADF application, so I have available all the quries , Please let me know if i can have any alternative solution ?
    SELECT  NVL(A.STYP,0) STYP,A.DAT,C.BATNO,C.ITST, B.DEMNO,B.ITEM,LTRIM(RTRIM(D.ITEMNAME))ITEM_NAME,0 TRINQ,D.UOM ABRV,P.DAT DDAT,
        A.CSNO,PARTY,NVL(CSRAT,0)+(NVL(CSRAT,0)*NVL(B.GST,0))/100 GSTCSRAT,CSRAT,
        A.PDAYS DAYS, DECODE(C.CSTERM,1,'CASH',2,'CREDIT',3,'DD',4,'PAY ORDER',5,'ADVANCE%',6,'CHEQUE') ,B.GST,E.MASTDS PNAME,NVL(SUM(B.RQTY),0)DRQTY,DEPT.SEC_NAME DEPTDS,SUM(STOK.QTY) BAL,P.TRNO,C.EBY, C.SYSIP, C.TDAT
                  FROM ACCSTORE.STAC_CSM A, ACCSTORE.STAC_CSD B,ACCSTORE.ST_STAC_DEM_APRVD C,ACCSTORE.VITEMS D, ACC_MAST E,ACCSTORE.PRE_DEMANDM P,ACCSTORE.VSECTIONS DEPT,
                  (SELECT STYP,ITEMID,SUM(BALANCE) QTY FROM ACCSTORE.VITEMSTOCK GROUP BY STYP,ITEMID) STOK
                  WHERE A.CSNO=B.CSNO AND B.CSNO=C.CSNO AND B.DEMNO=C.DEMNO AND B.ITEM=C.ITEM AND B.STYP=C.STYP  AND C.PDEMNO=P.TRNO(+) AND P.DEPT=DIVNO AND P.SEC_NO=DEPT.SECNO(+)
                              AND C.STYP=STOK.STYP AND C.ITEM=STOK.ITEMID
                    AND C.STYP=D.STYP AND C.ITEM=D.ITEMID AND C.PARTY=E.MASTCD  AND B.APP=1 AND NVL(C.PONO,0)=0 
                    AND C.ITST=DECODE(C.STYP,0,11,14)
                    GROUP BY NVL(A.STYP,0),A.DAT,C.BATNO,C.ITST,B.DEMNO,B.ITEM,D.ITEMNAME,A.CSNO,PARTY,P.DAT,DEPT.SEC_NAME,P.TRNO,C.EBY, C.SYSIP, C.TDAT,
                    CSRAT,A.PDAYS,C.CSTERM,B.GST,E.MASTDS,D.UOM ORDER BY A.CSNO,D.ITEMNAME
    ORDER BY "DAT" DESC
    which i can not generate by using the Entity objects, Basically I am transforming an oracle form base ERP into Oracle ADF application, so I have available all the quries , Please let me know if i can have any alternative solution ?

  • How to create LOV not based on a View Object attribute?

    Hi,
    I am creating a handed-made search form and I want to create an af:inputListOfValues.
    I have :
    - a read-only-view-object to get the LOV values from BD.
    - af:inputListOfValues tag (droped from Component Palette).
    How can I create the listOfValuesModel in Bindings layer? (the inputListOfValues is not based on a View Object attribute).

    Sorry, I think I am not very clear in my posts.
    My requirement is to create a LOV but I have no ViewObject. I just want an input (not based on a view object attribute), alone, but with a LOV (where lov's datas are get from a view object).
    In a "normal" LOV I would have something like this :
    in jsff :
    <af:inputListOfValues id="departmentIdId"
                                popupTitle="Search and Select: #{bindings.DepartmentId.hints.label}"
                                value="#{bindings.DepartmentId.inputValue}"
                                label="#{bindings.DepartmentId.hints.label}"
                                model="#{bindings.DepartmentId.listOfValuesModel}"
                                required="#{bindings.DepartmentId.hints.mandatory}"
                                columns="#{bindings.DepartmentId.hints.displayWidth}"
                                shortDesc="#{bindings.DepartmentId.hints.tooltip}">
            <f:validator binding="#{bindings.DepartmentId.validator}"/>
            <af:convertNumber groupingUsed="false"
                              pattern="#{bindings.DepartmentId.format}"/>
          </af:inputListOfValues>in pageDef :
    <listOfValues StaticList="false" IterBinding="EmployeesView1Iterator"
                      Uses="LOV_DepartmentId" id="DepartmentId"/>in model layer : a view object (EmployeeView) with view accessor and LOV based attribute, and a read only view object (DepartmentRVO) to get datas for the LOV.
    But in my case I have no ViewObject, so I don't know how to create the listOfValuesModel in fragment pageDef.
    I have :
    <af:inputListOfValues label="Label 1"
                                    popupTitle="Search and Result Dialog"
                                    id="ilov1" model="here I want to point to a listOfValuesModel but I don't know how to create it"/>in pageDef : the listOfValuesModel but I don't know how to create it.
    in model layer : just a read only view object (like DepartmentRVO), to get the datas for the LOV.
    Edited by: h0s on 29 févr. 2012 00:31

  • How to change the groupType attribute of a user group object?

    I'm trying to change the "groupType" attribute, of a user group object, from 'Distribution' to 'Security' (and the group scope is set to 'Global').
    The CAD bit mask value needed would be: 0x80000002 (Decimal -2147483646).
    How to change/modify the "groupType" attribute for this user group object?
    Thanks,
    UD

    Attribute attr= new BasicAttribute("groupType", "-2147483646");
    items[0]=new ModificationItem(DirContext.REPLACE_ATTRIBUTE, attr);
    ctx.modifyAttributes(dn, items);
    --does not work.
    javax.naming.OperationNotSupportedException: [LDAP: error code 53 - 00002141: SvcErr: DSID-031A0B56, problem 5003 (WILL_NOT_PERFORM)
    Is it possible to modify it?
    Thanks,
    UD.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               

Maybe you are looking for