ReadOnly items based on transient attribute - best approach?

JDev11 question:
Do you have any idea how can I make items updatable/readOnly based on transient attribute?
Why is there only feature for "Updatable while new"..?It should be updatable based on function.
I tried making my coponents disabled based on transient attribute based on a groovy expression.
However when I invoke af:query, there is a problem - a bug which is similar to this thread:
http://cn.forums.oracle.com/forums/thread.jspa?threadID=1018561&tstart=89
So there should be another good approach.. Please suggest anything you think is flexible enough.

Navid,
JHeadstart checks whether the attribute definition is queryable before adding it to the list of advanced search attributes. A transient VO attribute can still be set to queryable, for a transient EO attribute this is not possible. We will remove this check on queryability in the upcoming patch release, since you have a valid use case. For now, you can subclass JhsSearchBean and override method createArgumentListForAdvancedSearch and comment out the check for "def.isQueryable()".
Steven Davelaar,
JHeadstart Team.

Similar Messages

  • What is the best approach to delete multiple list items

    Hi
    I want to delete multiple list items at once, what is best approach please suggest?
    Ramesh

    Hi Ramesh,
    Better approach for removing many items from a list is to use the ProcessBatchData method provided by the SPWeb class. First, you need a collection of the list items
    you want to remove, and then you can use the Get-SPListItem function to retrieve a list of items that match a given criteria. Then build a batch string with resultant items and call the ProcessBatchData method.
    Here is the sample code.
    function Get-SPList($webUrl, $lstUrl)
    $webObj = Get-SPWeb -identity $webUrl
    $lstObj = $webObj.GetList($lstUrl);
    return $lstObj
    $spList = Get-SPList -webUrl "http://mysitecollecton/MySite" -lstUrl "http://mysitecollecton/MySite/Lists/EmpInfo"
    $spQuery = new-object Microsoft.SharePoint.SPQuery
    $camlQuery =
    "<Where>
    <Eq>
    <FieldRef Name='Department' />
    <Value Type='Text'>HR</Value>
    </Eq>
    </Where>"
    $spQuery.Query = $camlQuery
    $spQuery.RowLimit = 100
    $spListItemCollection = $spList.GetItems($spQuery)
    # Create batch remove CAML query
    $batchRemove = '<?xml version="1.0" encoding="UTF-8"?><Batch>';
    # The command is used for each list item retrieved
    $command = '<Method><SetList Scope="Request">' +
    $spList.ID +'</SetList><SetVar Name="ID">{0}</SetVar>' +
    '<SetVar Name="Cmd">Delete</SetVar></Method>';
    foreach ($item in $spListItemCollection)
    $batchRemove += $command -f $item.Id;
    $batchRemove += "</Batch>";
    # Remove the list items using the batch command
    $spList.ParentWeb.ProcessBatchData($batchRemove) | Out-Null
    Please don't forget to mark it answered, if your problem resolved or helpful.

  • Best approach -Tabs based ADF Tree left side navigation with Dynamic Regions with out UI Shell

    Hi,
    Somebody can help for the best approach to implement the following requirement.
    Req: When the user select the ADF Tree left side navigation menu, each menu will open as multiple tabs(Dynamic Tabs) in right side content area with out UI Shell Template.
    I completed the
    Step-1: From the Model project, I can able to render ADF Tree in the using view and view links. I can get the adf tree which is having 3 menu items. Each menu item having 2 sub menu's.
    I took each menu item as one(1) taskflow, each taskflow will have two(2) fragments.
    Total I have 3 task flows as Menu Items and 6 fragments for sub menu's.
    Step-2:  My question is How do I implement Tab based the ADF tree navigation (left side area to dynamic regions in content area) through dynamic regions? Please provide the steps in view layers.

    Than ks for your response.
    This is working fine for ADF Tree navigation with dynamic regions if the taskflow having only one fragment. if the taskflow having more than one fragments, this will not work. The following conditions are always satisfies one page fragment of either "employees" or "departments" task flow.  If the "employees" task flow have 2 page fragments, it's not work even you pass parameters through routers.
    public TaskFlowId getDynamicTaskFlowId() {
    if (currentTaskFlowID == null ||
    currentTaskFlowID.equalsIgnoreCase(“employees”)) {
    return TaskFlowId.parse(employeetaskFlowId);
    if (currentTaskFlowID != null &&
    currentTaskFlowID.equalsIgnoreCase(“departments”)) {
    return TaskFlowId.parse(departmetaskFlowId);
    return TaskFlowId.parse(employeetaskFlowId);
    My question is "Same use case with Dynamic Tabs" when the user click on any adf tree node.

  • Can Shuttles be based non-base  table ViewObjects with transient attributes

    Hello,
    Users have to select records from a data collection and a Shuttle looks most appropriate/nice for this purpose. We can introduce technical intersection tables in order to generate the Shuttles with JHeadstart 10g R3 if necessary, but there is no “functional” need to update any data in the database and therefore it would be practical if the ‘right’ side from a Shuttle can be based non-base table ViewObjects with transient attributes only. So, our interested is to know which records have been selected, i.e. moved to the right side from the Shuttle.
    Hope that my question is clear enough.
    Greetings,
    Michael

    Michael,
    This cannot be generated out-of-the-box.
    It is easiest to add the shuttle post-generation to your page, and then create a custom template to generate your custom shuttle into the page. I suggest you take a look at an example of a generated shuttle in a page, and the JHeadstart IntersectionShuttleBean class. You will see that the value property of <af:selectManyShuttle> points to the selectedKeys method in the JHeadstart Shuttle bean. In your case, you can create your own managed bean and bind the value property to your own method which will provide you access to the selected rows. The value property of the selectItem within the af:selectManyShuttle determines the property that is used to identify the selected row (which is the row key in case of Jhs-generated shuttles).
    Steven Davelaar,
    JHeadstart Team.

  • JHeadstart SU1 - LOV target item cannot be based on key attribute

    I have just installed by the SU1 and tried to re-generate one of my Application Modules and I am getting the following error
    JAG-00131 [ QualificationPapers / PaperVariants / SessionPaperQuestions / VariantCode ] Lov target item 'VarId' cannot be based on key attribute of base ViewObject, uncheck the key attribute checkbox for this attribute.
    Is this a new check that has been introduced?
    Thanks
    Mark

    Mark, take a look at Re: What is the reason for JAG-00131 in SU97?
    Toine

  • UCCX 7 Agent Based Routing - Best Approach

    Hello all,
    Our agent phones have two lines.  The first line is the contact centre agent number and the second line is the agent's personal DDI.
    I am trying to work out the best approach to deal with calls coming in on the DDI line as I would like these to be part of the contact centre too and be able to report on call activity here.  My initial thoughts are that a call will come into the DDI and if the agent is not available then it will be transfered to the CSQ for that agent.
    Would it be better for the DDI line to have a "call foward all" set to the CSQ trigger and then use some enterprise parameter to see the original called number, do a lookup and send this call to the agent whose DDI it is?  I'm just wondering how this is achieved programatically?  Or would a better approach be for all of the agent DDI numbers to be triggers for the UCCX application? This leads to the question how many triggers can an application have?
    Thanks,

    This is always a sticky topic. Both of your ideas are possible and there isn't really a "best" option IMO.
    If you create a trigger and have agents CFA their lines to it, then it is only a single trigger in CCX to configure.
    Agents can turn this off by disabling CFA. This could be good or bad though.
    CCX would need to handle redirecting the call to VM if reaching the agent fails.
    You remove the ability for the agent to even see the call (call waiting) since the busy trigger is set to one on their ICD line. Their only indication someone called would be if they leave a voicemail.
    There is no documented limit of triggers per application.
    Agents cannot turn this on/off.
    Everything else would be the same as option one.
    You can do this either with a Call Consult Transfer step or attempt an agent-based routing with the Select Resource step. For reporting reasons you would want to use Select Resource though. This also means the agent cannot answer calls at all unless they are logged in to CAD though.
    Also, you could choose to route to a CSQ instead of the agent's voicemail in any of these scenarios if you wanted. CCX cannot queue callers to a specific agent and CSQs don't scale well enough to have one per agent. This somewhat depends on who is calling though. A menu option with choices works well: Press one for voicemail or two to speak with another representative."
    Lastly, another scenario might be to create an IVR with a "dial by extension" concept where the customers know the extension of who they are reaching and not the direct line number. CCX could do agent-based routing as discussed above there. The advantage is that their direct line would remain untouched. This only works if they would refrain from giving that number out though.

  • Retrieving Sharepoint List Item Information for SAP Best Approach

    Hi
    We have a request for retrieving Sharepoint list item information to create DVS objects in SAP. Has anybody been doing something like that, getting information out of Sharepoint into SAP? What would the best approach for this be, as usually implementations are the other way around, i.e. getting data out of SAP into Sharepoint. I think that Duet Enterprise would be an overkill for this and also requires additional licenses.
    So I have been thinking using either a PI/Web Service using the Sharepoint WSDL to retrieve the information, or maybe there are also possibilities using WebDAV. There are some CL_HTTP_WEBDAV classes, but I am not sure whether and how they could be used for this.
    Does anybody have how-tos or examples for either approach? Feedback is much appreciated.
    Thanks,
    Daniel

    Without using a ridiculously long workflow (which even then may not work) I do not think this is feasible in a sharepoint list. A workflow can be used to alter other fields in an item but not incrementing items like you require. You would be better changing
    to data sheet view (quick edit in 2013) and changing them all manually then, or changing to terms such as priority high, low etc. Overall, no this is not really possible.
    Brendan Lee

  • Best approach for building dialogs based on Java Beans

    I have a large amount of Java Beans with several properties each. These represent all the "data" in our system. We will now build a new GUI for the system and I intend to reuse the beans as far as possible. My idea is to automatically generate the configuration dialogs for each bean using the java.beans package.
    What is the best approach for achieving this? Should I use PropertyEditors or should I make my own dialog-generator using the Introspetor class or are there any other suitable solutions?
    All suggestions and tips are very welcome.
    Thanks!
    Erik

    Definitely, it is better for you to use JTable. Why not try it?

  • Setting value of items based on a radio group selection

    Hi,
    I have a radio group with 3 values (let's say A, B, C)... at the moment I have dynamic actions set to hide and unhide items based on the selection from the radio group...
    e.g when value A is selected then only item_1 and item_2 are displayed, when value B is selected then only item_3 and item_4 are displayed... and so on...
    idea was to let users to only enter information related to specific selection... but with what I currently have, users can select option A from the radio group and can enter information in item_1 and item_2 and then they can change there minds and select option B and start entering information in item_3 and item_4 and when they save the form they potentially could have information in all items (item_1 to item_4 and so on)...
    Is there a way I can set the value of certain items to null based on the selection from the radio group... e.g when user select option A, then values of item_3 and item_4 be set to null and if they select option B, then values of item_1 and item2 be set to null...
    Please advice how to approach it the best... I would appreciate a step by step solution as I am a new bee...
    Thanks in advance

    Hi,
    You can hide and disable other items.
    Disabled items values are not submitted.
    And you can create after submit computation that set NULL to item session state according your radio group state
    Regards,
    Jari

  • What is the best approach to handle multiple FK with single table.

    If two tables are joined with each other with more than one ways, for example
    MAIN table is (col1, col2,....coln, person_creator_id, person_modifier_id)
    PERSON table is (person_id, name, address,........ phone) etc
    At database level PERSON_CREATOR_FK and PERSON_MODIFIER_FK are defined.
    Objective is to create a report that shows
    col1, col2...coln, person creator name, person modifier name
    If above two objects are imported with FKs in a EUL and discoverer plus is used to create above report. On first inclusion of person name discoverer plus will ask you to pick the join (provided the checkbox to disable this feature is not checked). Once you pick 'person creator' join it will never allow you to pick person modifier name.
    One solution is two create a custom folder with query like
    select col1, col2,...coln,
    pc.name, pc.address,.... pc.phone
    pm.name, pm.address,.... pm.phone
    from main m,
    person pc,
    person pm
    where m.person_id_creator = pc.person_id
    and m.person_id_modifier = pm.person_id
    Second solution is to import the PERSON folder twice in EUL (optionally named one as perosn_creator and other as person_modifier) and manually define one join per table. i.e. join MAIN with PERSON_CREATOR on person_creator_fk and join MAIN with PERSON_MODIFIER table using person_modifier_fk.
    Now discoverer plus will let you drag Name from each person folder without needing to resolve multiple joins.
    Question is, what approach is better OR is there a better way?
    With solution 1 you will not be able to use functions on folder items.
    With solution 2 there is a EUL design overhead of including same object multiple times and then manually defining all join (or deleting unwanted joins), and this could be a problem when you have person_modifier and person_creator in nearly all tables. It could be more complicated if person table is further linked other tables and users want to see that information too. (for instance, if person address is stored in LOCATION table joined with location_id and user want to see both creator address and modifier address....now you will have to create multiple LOCATION folders).
    A third solution could be to register a function in discoverer that return person name when person_id is passed. This will work perfectly for above requirement but a down side is the report will run slower if they need filters on person names (then function will be used in where clause). Also, this solution is very specific to above scenario, it will not work if you want the report developer the freedom to pick any attribute from person table (lets say, person table contain 50 attributes then its not a good idea to register 50 functions).
    Any comments/suggestion will be appreciated.
    thanks

    Hi
    In a roundabout way you have really answered your own question :-)
    In my opinion, the best approach, although by all means not the only approach - see below) would be to have the object loaded as two folders with one join going to the first folder and the second join to the other folder. You would of course name the folders appropriately.
    Here's a workflow that I use all of the time and one that I teach when I'm giving Discoverer Administrator training. It might help you:
    1. Bring in the PERSON folder to begin with
    2. Make all necessary adjustments to bring it up to deployment standard. These adjustments would be: folder name (E.g PERSON_CREATOR), item names, item placement, default positions, default aggregation and so on.
    3. Create or assign the required lists of values
    4. Create any required calculations
    5. Create any required conditions
    6. Create the first join from this folder to MAIN.
    7. Click on the heading for the folder and press CTRL-C.
    8. Click on the heading for the business area and press CTRL-V. A second copy of the folder, complete with all of the adjustments you made earlier will be inserted into the business area.
    Note: joins are not copied, everything else is.
    9. Rename this folder to say PERSON_MODIFIED
    10. Rename the items as appropriate
    11. Add a join from this folder to MAIN - you're done
    Other ideas that I have used and work well would be to use a database view or create a complex folder. Either will work, In both cases you would need to join on some other column other than the ones you referred earlier.
    I hope this helps
    Best wishes
    Michael

  • Problem with transient attribute attach to standard vo from the controller

    Hi all,
    I attached two transient attributes to the standard vo through controller.
    Then i passed values to these fields from controller based on another field in the standard vo.
    I created two columns in the table without given the view instance and view attribute.
    But in the controller i'm setting the view instance and view attribute for this two columns.
    After i applied this extended controller it is working fine, but one problem is there.
    Once if i clear the cache and then i enters the page, the extended fields are appearing with null. if i press F5 in the browser then its working fine.
    same problem happens only when the cache cleared or server gets bounced. so i need to go each page and press F5 once then everything is fine.
    Here, I shared my code, please tell me what is the problem and how to solve this.
    Code:
    public void processRequest(OAPageContext pageContext, OAWebBean webBean)
    super.processRequest(pageContext, webBean);
    OAApplicationModule am = pageContext.getApplicationModule(webBean);
    OAViewObject cvo=(OAViewObject)am.findViewObject("FinalCompListVO");
    if(!cvo.isPreparedForExecution()){
    cvo.executeQuery();
    if(cvo!=null){
    try{
    String temp1=cvo.findAttributeDef("XXCompNameAttr").toString();
    }catch(Exception e){
    cvo.addDynamicAttribute("XXCompNameAttr");
    try{
    String temp1=cvo.findAttributeDef("XXCompTypeAttr").toString();
    }catch(Exception e){
    cvo.addDynamicAttribute("XXCompTypeAttr");
    Row compRow[]=cvo.getAllRowsInRange();
    for(int i=0; i<compRow.length;i++){
    FinalCompListVORowImpl cVORowImpl=(FinalCompListVORowImpl)compRow;
    String name[]=cVORowImpl.getName().split("\\.");
    String compName=name[2];
    cVORowImpl.setAttribute("XXCompNameAttr",compName);
    for(int i=0; i<compRow.length;i++){
    FinalCompListVORowImpl cVORowImpl=(FinalCompListVORowImpl)compRow[i];
    String name[]=cVORowImpl.getName().split("\\.");
    String compName=name[0];
    if(i==0){
    cVORowImpl.setAttribute("XXCompTypeAttr","Behavioral");
    }else if(i!=0&&compName.equals("FUNC")){
    cVORowImpl.setAttribute("XXCompTypeAttr","Functional");
    break;
    OAMessageStyledTextBean mstb=(OAMessageStyledTextBean)webBean.findChildRecursive("XXCompTypeCol");
    mstb.setViewUsageName("FinalCompListVO");
    mstb.setViewAttributeName("XXCompTypeAttr");
    OAMessageStyledTextBean mstb1=(OAMessageStyledTextBean)webBean.findChildRecursive("XXCompNameCol");
    mstb1.setViewUsageName("FinalCompListVO");
    mstb1.setViewAttributeName("XXCompNameAttr");
    Thanks in advance,
    SAN

    Hi,
    1. ExecuteQuery should already be executed in Base Controller, So please check if you need it. though i don't think that might be causing the issue.
    cvo.executeQuery();
    2. The code where you call findAttributeDef and handle the Exception, Can you debug that portion. As It may not be throwing exception in any case and so the Attributes were never added to VO and Page Displays null..
    I am not sure, but i think the issue seems to be around 2.
    all the best
    -Idris

  • How to make Transient Attribute Mandatory in View Object?

    Hi ,
    I have a Transient Attribute 'TransientFromCode' which is based on LOV .On UI ,I am showing this 'TransientFromCode' as 'SelectOneChoice' .
    So on selection of this i am populating other mandatory attributes.
    My requirement is to show this as 'Required' on UI but in View Object i am not able to find mandatory property for this attribute.
    I dont want to use required='true' . So can you plesae tell me is there any way to make Transient attibute as mandatory on UI .
    Thanks

    940637 - Your Use Case is a little vague\confusing.
    If you are just trying to get the standard "Required" architecture, it probably isn't working because you have incorrect syntax. It is #{bindings.MyViewObj.MyAttr.hints.mandatory}
    Yours: "#{bindings.UnitOfMeasureIntraClassConversion.hints.TransientItemDesc.mandatory}"
    It will "dynamically" pick this up at Runtime from the ViewObject Attributes "Mandatory" property (Attributes\Details tab), BUT the EL will always evaluate to "true" so this is the same functionally as just hard coding the UI component's Required property to "true" (although doing so is against Best Practices)
    If you are just wanting to SHOW the field as required without the standard Validation logic (because you are coding your own), you could:
    1) JUST set the UI component's "ShowRequired" property = true. This displays the * next to the Label (regardless of actual View Object Attr setting) but fires no validation.
    2) If you want to not show * but some custom standard, you could just create ANOTHER transient Attribute in the View Object and call it "TransientItemDescRequired" and set it to a Literal "y" or leave it blank and programmatically set it later... You can code your own validator\method\whatever against it, etc
    Edited by: donhoyt on Jul 5, 2012 7:58 AM

  • Validation based on view attributes

    JDeveloper 11.1.1.x
    What is the best practice to create validations based on a view attribute from a view object that is of a level higher in the hierarchy?
    For example:
         * Use the departments and employees tables from the hr schema.
         * Create an EO for only the employees table, so not for the department table
         * Create VO's for both tables. You should create the Viewlink manually between both views.
         * In the query for the department, add a calculated field in the query.
         For example : availableSalary : 100000 - (select sum(salary) from employees where department_id = Departments.DEPARTMENT_ID) availableSalary
         * I would like to add a validation on the salary field of the employee EO, that says that the new value shouldn't be bigger then the availableSalary field
         Be aware : that when changing an existing salary, only the difference between the old and new salary should be taken into account
         (This removes the "Compare with View Object Attribute" possibility :-()
         * I also want to use some fields from the departments view in my error message on the salary field of the employees EO.
    How can we best tackle these requirements ?
    Thank you in advance.
    Filip Huysmans.

    Filip,
    I think you are trying to avoid the lesser cost of a Department Entity by an extremely expensive way to get to the comparison done. Firstly, you wire a view instance with an entity, which is strange as there is no association between the entity and the View Object. So all you would have is to access a method in the AM Impl method that looks up the VO and returns the current row's information you need. This AM method can be referenced from the entity object using groovy to perform the comparison (you see that even this is kind of awkward as it connects the entity to the AM, producing a tight coupling that makes any of your code reviewers shake heads in disbelieve). Assuming the update of the VO updates the entity (Departments EO you don't have), you could follow an association using Groovy to perform the validation (which I think sounds easier to do (though by the small cost of creating an EO)
    Btw.:
    if you have a ViewLink defined then the transient attribute can be easier calculated using Groovy
    10000 - DetailTargeName.sum('Salary');
    I would think its less expensive then running a SQL query for each department Id
    Frank

  • Show Hide transient attribute making row dirty

    Hi All
    I am using an advanced table where one of the columns(Description) is shown in detail region. To implement detail region, we need a transient attribute on the VO. I was able to get everything working. But I have the following problem.
    When the user clicks Add Rows, new rows are created for user to enter information. If the user does not make any changes and clicks Apply, no transactions are committed(which is working as expected). But when the user clicks on "Show" for one of these rows and does not enter information on any of the fields for that row, the system is throwing error on some of the mandatory fields. This is because the framework is identifying them to be dirty(Since clicking show changes the value of transient attribute on VO).
    I tried the following option to get around it, but it did not work.
    * When Show/Hide is clicked, capture that event and get the row that was clicked. Perform row.setNewRowState(row.STATUS_INITIALIZED) on that row to let system know that the row is not dirty. The problem here is that when control comes to this part of the code(be it in Controller or AM), the row status is STATUS_INITIALIZED. It becomes dirty after the Show action is processed in ProcessFormRequest(I think so..)
    To get around the issue, I had to remove the Mandatory flag on some of the fields, and implement the same manually. Also, just before committing all changes, I had to loop through all rows and see those that do not have any information entered but are still dirty. Perform row.setNewRowState(row.STATUS_INITIALIZED) on them before committing.
    Can any of you tell me a better way other than how I implemented it? I want to keep the mandatory flag on the field set(VO is based on a EO) and nto remove it. The error for no value entered should not be triggered by Show/Hide being clicked. I hope I was clear enough.
    Thanks
    Kumar
    Edited by: kvsankar on Feb 5, 2013 11:20 AM

    I did that. But I wanted the Server side validations to fire if the row was touched by the user before Submit as this is a middle page in set of pages implemented via train. I think I found the solution.
    I overrode the set method for DetailAttribute item on the VO and added the logic to set the row to STATUS_INITIALIZED if no other attribute was entered and it worked like a charm.
    Thanks
    Kumar

  • Best approach for multi-team/multi-projects.

    Hi,
    I'm looking for the best approach to handle multi-teams/multi-projects scenario. We have 20 development groups and over 300 products. Each products on it's own Schedule.
    Product X can be assign to Group A, but at some point, it can be assign to Group B.
    We are currently using TFS 2012, but will be upgrading to 2013 soon.
    Based on many reading, we are thinking to create only one Team Projects to ease management.
    In it, we will create a team for each development group, but we will not create an associated area path with the name of the team.
    - Group A
    - Group B
    - Group C
    Than, we will create an Area for each product.
    - Product X
    - Product Y
    - Product Z
    and, we will create multi-level of iterations to match each Schedule.
    - Product X
       - Release 1
          - Sprint 1
          - Sprint 2
    - Product Y
        - Release 1
           -Sprint 1
        - Release 2
           -Sprint 1
    The main issue, we have with this approach is that we can't use the Backlog or the Task Board effectivelly, as there is no way to filter per areas and iterations.
    Reading "How do I change the underlying query for the task board (and backlog board) on TFS Preview", this doen't seam to be possible in TFS 2012.
    In TFS 2013, "The Agile Portfolio Management: Using TFS to support backlogs across multiple teams" was introduced. Will this help to solve the problem?
    We would create a management team for each development group.
    We would create an agile team with an associated area for each product.
    The only thing that I couldn't find in the documentation is how to re-assign an agile team to another management team. Is this possible?
    Also can each agile team have their specific itérations, if so will it roll up properly to the management team?
    Regards
    SYSOTI
    PS: Sorry couldn't post the links of the quoted text as I get the message: Body text cannot contain images or links until we are able to verify your account. ;-(

    Hi SYSOTI,
    Based on your description, seems the area path is not configured properly hence you can't use the Backlog or the Task Board effectivelly.
    From the
    Agile Portfolio Management: Using TFS to support backlogs across multiple teams, the area path is set as agile team which is a consist of team members but not a product name. For you scenario, you can set the area path name as your product name to
    identify the associate products for work items.  And the groups you mentioned for products in the team projects are sub-group of contributors.
    Seems there is no need to create a management team for each development group since management team might be in a higher level to view the progress for all of the work across the agile teams. Certianly, you can create multiple management teams, but the management
    teams will be able to view works for all agile teams. 
    If you have multiple teams and products, you can create a team project for each product if the products don't have much relationship. However, it's OK to manage the projects for multiple products in the same team project. And working within a single team
    project also have benifits, you ccan check this
    blog for more information.
    Best regards,
    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click
    HERE to participate the survey.

Maybe you are looking for