Need to know how to iterate a list of field from the req xml in page servic

Hi All,
Please help me out with java code in which i am able to iterate a list of field coming in the request xml to my page service class under read(Pageheader header) method of mine queryPagemaintenace class.
package com.splwg.cm.domain.pageService;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import com.ibm.icu.math.BigDecimal;
import com.splwg.base.api.businessObject.BusinessObjectDispatcher;
import com.splwg.base.api.businessObject.BusinessObjectInstance;
import com.splwg.base.api.businessObject.COTSInstanceListNode;
import com.splwg.base.api.datatypes.Date;
import com.splwg.base.api.lookup.BusinessObjectActionLookup;
import com.splwg.base.api.service.DataElement;
import com.splwg.base.api.service.ItemList;
import com.splwg.base.api.service.PageHeader;
import com.splwg.shared.common.ApplicationError;
import com.splwg.shared.environ.FieldDefinition;
import com.splwg.shared.environ.ListDefinition;
import com.splwg.shared.logging.Logger;
import com.splwg.shared.logging.LoggerFactory;
* @author
@QueryPage (program = CMUSER, service = CMUSER,
* body = @DataElement (contents = { @ListField (name = USER_GROUP_LIST)
* , @ListDataField (name = USR_GRP_ID)
* , @DataField (name = MESSAGE_TEXT)
* , @DataField (name = USER_ID)
* , @DataField (name = PASSWORD)
* , @DataField (name = LAST_NAME)
* , @DataField (name = FIRST_NAME)
* , @DataField (name = USER_TYPE_FLG)
* , @DataField (name = EMAILID)}),
* actions = { "add"
* ,"read"
* , "delete"
* , "change"},
* header = { @DataField (name = USER_TYPE_FLG)
* , @DataField (name = EMAILID)
* , @DataField (name = LAST_NAME)
* , @DataField (name = FIRST_NAME)
* , @DataField (name = PASSWORD)
* , @DataField (name = USER_ID)},
* headerFields = { @DataField (name = USER_TYPE_FLG)
* , @DataField (name = USR_GRP_ID)
* , @DataField (name = EMAILID)
* , @DataField (name = LAST_NAME)
* , @DataField (name = FIRST_NAME)
* , @DataField (name = PASSWORD)
* , @DataField (name = USER_ID)},
* lists = { @List (name = USER_GROUP_LIST, size = 100, includeLCopybook = false,
* body = @DataElement (contents = { @DataField (name = USR_GRP_ID)}))},modules = {})
public class CMUSER extends CMUSER_Gen {
public static final Logger logger = LoggerFactory.getLogger(CMUSER.class);
     DataElement root = new DataElement();
     PageHeader page = new PageHeader();
     protected DataElement read(PageHeader header) throws ApplicationError{
I want to know how can i iterate this USER_GROUP_LIST in my read method and get the USR_GRP_ID field data from it.
A Prompt reply from your end will help me to resolve this issue

Guru Sir,
i tried to override the add() method of the framework in that i was able to iterate the field from the list. But now the i am facing there is that i am not able to send back the response to the external system in XML format. I am getting a blank response in my SOAP UI Tool while testing here is the code:
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import com.ibm.icu.math.BigDecimal;
import com.splwg.base.api.businessObject.BusinessObjectDispatcher;
import com.splwg.base.api.businessObject.BusinessObjectInstance;
import com.splwg.base.api.businessObject.COTSInstanceListNode;
import com.splwg.base.api.datatypes.Date;
import com.splwg.base.api.lookup.BusinessObjectActionLookup;
import com.splwg.base.api.service.DataElement;
import com.splwg.base.api.service.ItemList;
import com.splwg.base.api.service.PageHeader;
import com.splwg.shared.common.ApplicationError;
import com.splwg.shared.logging.Logger;
import com.splwg.shared.logging.LoggerFactory;
* @author
@QueryPage (program = CMUSER4, service = CMUSER4,
* body = @DataElement (contents = { @DataField (name = MESSAGE_TEXT)
* , @DataField (name = PASSWORD)
* , @DataField (name = USER_ID)
* , @DataField (name = LAST_NAME)
* , @DataField (name = FIRST_NAME)
* , @DataField (name = USER_TYPE_FLG)
* , @DataField (name = EMAILID)
* , @ListDataField (name = USR_GRP_ID)
* , @ListField (name = USER_GROUP_LIST)}),
* actions = { "add"
* , "delete"
* , "change"
* , "read"},
* header = { @DataField (name = USER_ID)
* , @DataField (name = MESSAGE_TEXT)},
* headerFields = { @DataField (name = USER_ID)
* , @DataField (name = MESSAGE_TEXT)},
* lists = { @List (name = USER_GROUP_LIST, size = 100,
* body = @DataElement (contents = { @DataField (name = USR_GRP_ID)}))}, modules = {})
public class CMUSER4 extends CMUSER4_Gen {
     public static final Logger logger = LoggerFactory.getLogger(CMUSER4.class);
     DataElement root = new DataElement();
     PageHeader page = new PageHeader();
     protected PageHeader add(DataElement item) throws ApplicationError{
          BusinessObjectInstance boInstance = BusinessObjectInstance.create("CM-USER");
          String USR_GRP_ID = null;
          try{
          logger.info("Data coming from the Service into the Application is :"+item.get(STRUCTURE.USER_ID));
          logger.info("Data coming from the Service into the Application is :"+item.get(STRUCTURE.FIRST_NAME));
          logger.info("Data coming from the Service into the Application is :"+item.get(STRUCTURE.LAST_NAME));
          logger.info("Data coming from the Service into the Application is :"+item.get(STRUCTURE.EMAILID));
          // logger.info("Data coming from the Service into the Application is :"+getInputHeader().getString(STRUCTURE.list_USER_GROUP_LIST.USR_GRP_ID));
          // Iterator it = STRUCTURE.
          ItemList sourceList = item.getList(STRUCTURE.list_USER_GROUP_LIST.name);
          List userGrpID = new ArrayList();
          logger.info("The Size of the User Group List here is :"+sourceList.size());
          Iterator iter;
          if ((sourceList != null) &&
          (sourceList.size() > 0)) {
          for (iter = sourceList.iterator(); iter.hasNext(); ) {
          DataElement myItem = (DataElement)iter.next();
          USR_GRP_ID = myItem.get(STRUCTURE.list_USER_GROUP_LIST.USR_GRP_ID);
          logger.info("The User Group Id coming in the List here is :"+USR_GRP_ID);
          logger.info("Data coming from the Service into the Application is :"+item.get(STRUCTURE.PASSWORD));
          boInstance.set("user", item.get(STRUCTURE.USER_ID));
          boInstance.set("firstName", item.get(STRUCTURE.FIRST_NAME));
          boInstance.set("lastName", item.get(STRUCTURE.LAST_NAME));
          boInstance.set("emailAddress", item.get(STRUCTURE.EMAILID));
          // COTSInstanceList userGrpList = boInstance.getList("userGroupUser");
          // COTSInstanceListNode userGroupList = userGrpList.newChild();
          COTSInstanceListNode userGroupList = boInstance.getList("userGroupUser").newChild();
          userGroupList.set("userGroup", USR_GRP_ID);
          logger.info("Data coming from the Service into the Application is :"+userGroupList.toString());
          /*boInstance.set
          boInstance.set("userGroup", getInputHeader().getString(STRUCTURE.HEADER.USR_GRP_ID));*/
          // UserTypeLookup.constants.TEMPLATE_USER
          //if(element.get(STRUCTURE.USER_TYPE_FLG))
          //boInstance.set("user", element.get(STRUCTURE.));
          boInstance.set("dashboardWidth","200");
          boInstance.set("homeNavigationOption","CI0000000574");
          boInstance.set("language","ENG");
          boInstance.set("toDoEntriesAge1", new BigDecimal(50));
          boInstance.set("toDoEntriesAge2",new BigDecimal(100));
          boInstance.set("displayProfileCode", "NORTHAM");
          String expirationDate = "2100-12-31";
          String[] array = expirationDate.split("-");
          userGroupList.set("expirationDate",new Date(Integer
                         .parseInt(array[0]), Integer
                         .parseInt(array[1]), Integer
                         .parseInt(array[2])));
          //boInstance.set("userGroupUser", userGroupList);
          COTSInstanceListNode roleUserList = boInstance.getList("roleUser").newChild();
          roleUserList.set("toDoRole","F1_DFLT");
          COTSInstanceListNode dataAccessList = boInstance.getList("dataAccessUser").newChild();
          dataAccessList.set("dataAccessRole","***");
          String expiryDate = "2100-01-01";
          String[] array1 = expiryDate.split("-");
          dataAccessList.set("expireDate",new Date(Integer
                         .parseInt(array1[0]), Integer
                         .parseInt(array1[1]), Integer
                         .parseInt(array1[2])));
          BusinessObjectDispatcher.execute(boInstance,
                         BusinessObjectActionLookup.constants.FAST_ADD);
          page.put(STRUCTURE.HEADER.MESSAGE_TEXT, "User Added Successfully");
          page.put(STRUCTURE.HEADER.USER_ID,item.get(STRUCTURE.USER_ID));
          }catch(Exception e){
               e.printStackTrace();
               page.put(STRUCTURE.HEADER.MESSAGE_TEXT, "Caught Exception in the ORMB System. Please reach out to the Admin"+e.getMessage());
               page.put(STRUCTURE.HEADER.USER_ID,item.get(STRUCTURE.USER_ID));
          return page;
If you can help me to find out what went wrong here while sending the response back it can close my issue.

Similar Messages

  • I need to know how to copy pictures to a cd with the captions showing, elements 8 and windows 7

    I need to know how to copy
    pictures to a cd with the captions showing, elements 8, windows 7

    Here are some suggestions.  Perhaps others will have even better ideas.
    1 -- for viewing on a Windows computer,  you can experiment with making a PSE Organizer slide show creation in which you specify to show the captions. Then save the Output of the slide show as a WMV file that the recipient could play on a computer with Windows Media Player.
    If you have a DVD burner on your PC, you can also use that WMV file as input to the Windows 7 DVD Maker program for making a TV playable DVD. And if your recipient(s) who will view on a computer have DVD readers, you could make video DVDs playable on computers or TV DVD players instead of using CDs.
    The limitations of this approach are that this wmv file you create is really a video file so
    -- it advances photo slides at the rate specified when you create the slide show
    -- the choices to save a wmv file are not very high resolution so that recipients who have high resolution monitors will not see the photo images are not getting the benefit of seeing the photos at their best
    -- your recipients can't print from this video slide show
    2 An entirely different approach is to
    -- For each individual photo, make a copy of the photo file and depending on how high resolution your originals you might want to resize down to monitor viewing sizes.
    -- Then use the PSE Editor Text Tool to place the caption on a layer above the photo. (I think that you could display the existing caption and then do a copy and paste so that you don't need to retype everything.)
    -- You should save this photo copy with the text as a uniquely named JPEG file. Use the file names to control the sequence in which you want the viewer to see the photos.  (Don't save as a PSD because others probably can't read the PSD format).
    -- Then use your computers CD burning software to burn a folder containing all those jpeg files with the captions to CD
    This approach is a bit of work for each photo and you did not say how many photo files you will be doing. However,
    -- computer users should be able to display  the jpegs as high resolution photos on their computer as well as optionally print from those photo files
    -- many TV DVD players can play (display) jpg files from a CD disc which also gives recipients the opportunity to view the photos on their larger TV screen
    Process 2 may seem complicated but once you get started I think it will be more of a production line.
    ADDITION
    Do you have any portrait orientation photos included with those you wish to send ? If yes, we might need to discuss some additional processing for them.

  • I need to know how to authorize or deauthorize a computer when the email address attached to it no longer exists.

    I need to know how to authorize or deauthorize a computer when the email address attached to it no longer exists
    I can't access the account because your system doesn't recognize the last password -- and it won't let me change the password because it says the birthday information is wrong -- it's not.  There is no help item for that either, so somebody PLEASE tell me how to get around this problem.  My music is being held hostage.

    See Here > Apple ID: Contacting Apple for help with Apple ID account security
              Ask to speak with the Account Security Team..

  • My computer crashed.  I now have a new one and I need to know how to sync my iPad without losing all the photos, contacts, podcasts, etc I have on my iPad.

    My computer crashed.  I now have a new one and I need to know how to sync my iPad without losing the photos, contacts, podcasts, apps, etc I have on my iPad.  Can anyone help?

    Downloading past purchases from the App Store, iBookstore, and iTunes Store
    Some items cannot be redownloaded. You will need third-party software for them - Phone to Mac - Pod to Mac | Macroplant.com or Phone to PC | macroplant.com depending on your hardware.
    You might consider modifying your profile information so we will know what your hardware, OS, etc. is. Makes it easier to provided assistance.

  • I need to know how to delete downloaded videos and movies from iTunes when the instructions on the support page does not work.  I have swiped the selections from left to right on the phone and nothing happens.

    Hello.
    I need help deleting videos, tv shows, and movies downloaded from itunes.  I have followed the instructions to delete from the macbook, I selected the videos I wanted to delete and right clicked to delete.  Nothing happens.  When I double click on the video it still starts playing.  I also followed the instructions to delete the videos from the iphone by swiping from left to right with nothing happening.  I opened the videos on the ipad and there is no edit selection like in the instructions on the support page. Can you please tell me how to permanently remove this content so it doesn't try to copy from each device when I want to back up the Iphone and Ipad to my macbook.  Thank you.

    Hi Shawninglewood,
    Welcome to the Support Communities!
    The article below may be able to help you with this.
    How to delete content you've downloaded from the iTunes Store, App Store, iBooks Store, or Mac App Store
    http://support.apple.com/kb/HT5772
    Cheers,
    - Judy

  • Need to know how komp-evrwr will be as 'X' in the below code(Include LV61A004).

      Guys,
      In debug mode I see komp-evrwr field is coming as SPACE and thats why one of the custom condition type is not coming while I am trying to create billing from a delivery document no. Can anybody help me to know - how komp-evrwr will be as 'X'?
    Include          LV61A004
    * Determine costs according to item category configuration (TVAP)
    form kobed_004.
      sy-subrc = 4.
      if komp-kposn ne 0.
        check: t001-bukrs = t001k-bukrs.
        check: komp-werks ne space.
        check: komp-evrwr = 'X'.
        check: komp-fareg na '45'.
      endif.
      sy-subrc = 0.
    endform.
    * Prestep
    form kobev_004.
      sy-subrc = 0.
    endform.
    Regards,
    Shyamal.

    Hi Shyamal,
    I think this should be taken care by respective functional consultant. Some field should be checked while creating custom condition type.
    ABAP work is not needed here.
    Regards,
    Siddhesh Satghare.

  • I need to know how to reset a business owned iPad after the employee that set it up has been terminated and will not divulge his password info

    I have an iPad 2 that we need to restore to factory settings.  The employee for which it was issued was terminated and no longer has the username or password that the iPad and Find My iPhone was established with. 
    I have put it into recovery mode 2x...it still prompts for the user name and password of the person that set it up. 
    What do you suggest. 

    Just had an employee terminated most acrimoniously and had an iPhone 5C that was a brick. Apple support can help remove the lock. Better hold onto your original receipt and record the Serial# !  I do not mean the MEID or IMEI but the Serial# found on the original box or Settings>General>About. In my case no receipt or Serial#.  2 hours on the phone between Apple and Verizon and got what was needed. Submitted form and got reply to allow 2-10 business days.
    Here is the form I had to complete and sent to [email protected]..
    ORIGINAL SALES INFORMATION:
    PRODUCT PURCHASE DATE:
    INVOICE/RECEIPT NUMBER:
    PRODUCT SERIAL NUMBER:
    PRODUCT IMEI/MEID:
    PRODUCT DESCRIPTION:
    BUSINESS/INSTITUTION NAME:
    REQUESTOR NAME/TITLE:
    PHONE NUMBER:
    STREET ADDRESS:
    CITY:
    STATE:
    POSTAL CODE:
    EMAIL ADDRESS:
    UNLOCK AUTHORIZATION STATEMENT: I [YOUR NAME] representing
    [BUSINESS/INSTITUTION NAME] authorize Apple, Inc. to unlock the devices listed.
    Best regards,
    The Apple Support Team

  • Need to know how to get those columns to insert in the interface

    when i insert into "RCV_TRANSACTIONS_INTERFACE "
         /* ,TRANSACTION_TYPE
         ,PROCESSING_STATUS_CODE
         ,PROCESSING_MODE_CODE
         ,TRANSACTION_STATUS_CODE
         ,UNIT_OF_MEASURE */ )
    i donot know how to get the values or which tables are those columns found to insert in the interface

    Hi,
    You can find information about what is expected in each column of the interface table in the Oracle Manufacturing APIs and Open Interfaces Manual. For 11i, the manual can be found here. I hope it helps.
    Regards.

  • How to Validate a Portal Form field from the database

    I created a Portal Form based on a procedure, which requires three parameters. One of the parameters is Item Number. I need to check if the Item Number exists in database. I am trying to use pl/sql button event handler, where I try to use the select count(*) statement to verify. However, I don't know how to reference the form field in the where clause. Please advise. Or is it possible to achieve this by creating a javascript? If you go to 'Shared Component' provider and click on javascript, you will see some system validation scripts, which you can call in the form level validation. My doubts with javascipt is how I can talk to database in the script? Any input is appreciated.

    Hi,
    You cannot access the DB from the script. If you want to access the values of a field you should use session variables. Here is a sample to access the values of a form field.
    declare
    ticket_no varchar2(20);
    flight_no varchar2(20);
    blk varchar2(30) := 'DEFAULT';
    begin
    ticket_no := p_session.get_value_as_varchar2(
    p_block_name => blk,
    p_attribute_name => 'A_TICKET_NO');
    flight_no := p_session.get_value_as_varchar2(
    p_block_name => blk,
    p_attribute_name => 'A_FLIGHT_NO');
    end;
    Thanks,
    Sharmila

  • I need to know how to download all photos AND videos from 2 "libraries" within Adobe Revel. Please help.

    I was quite angered last night when I posted the first time, so lets try this again:
    Here is my setup:  I have adobe Revel on my Mac and iOS devices and it has worked quite well to be honest until I recently realized my photos and videos are basically trapped within the software. There is no way (that I am aware) to export all photos/videos or any kind of tool to pull the raw data out of the app and put it into say iPhoto or Lightroom.
    Since I am not a fan of this sort of lock-in, (something I despise and encourage companies never to do), I am sadly going to cancel my Revel account once I get this sorted and store my photos elsewhere. This is a huge missed opportunity for Adobe, as the money is not an issue - its simply that the quality of service I need just doesn't seem to be there for this product.
    So here is what I am trying to achieve:  I simply want every one of my photos and videos to store on my hard drive like the old days.  I don't care about folders or hirarcy or any kind of organization - I can do that with the metadata later. I simply want all of my things. 
    My hang up is in that I have already tried methods like "Show package contents" in the photos/adobe revel route and that works to an extent, but is incredibly cumbersome as I have to sift through all of the many folders.  If that were the worst of it, I might be ok.  But what is truly alarming and making this difficult is that I don't know where on earth the videos in Revel are actually stored.  They show up in the application and I could export them one by one but I literally have hundreds.  I can't find the actual files on my Mac anywhere.
    Is there anyone at all who can help with this?  The goal is to make this transition fairly easy and I feel that Adobe has very intentionally made it very difficult to consider leaving. I spend >$50/month on Adobe services and I am a little in shock this application seems so poorly designed for anything other than just dropping your photos into it.  Please, please help if you can.  I would be so grateful as Adobe customer service doesn't seem to know or care much about supporting this product.

    Hi KDT
    Yeah. I agree, if you are used to a situation where "it's on the cloud AND synced down to your hard disk where you can get it" Revel is not exactly that. There were legacy decisions behind that - most not as sinister as you might think but I won't bore you with those details.  AND yes you are correct. We currently don't have any way for you to wholesale download everything at once. So you aren't missing anything. Until we provide that mechanism I can provide some guidance.
    I'm going to assume you have the current version of Revel on your Mac which is 2.0.
    The easiest thing for you to do will be to export your files manually. You can actually select a range of files and export. So it's not a one by one thing.
    You'll have to decide how best to perform the selection based on your photography habits. If you tend to take batches of files surrounding specific dates. You could do it by date. In the date view (In the applications upper right "Showing: Dates"). If you look at the end of a date row you'll see a small grid. If you click that grid you are taking into a grid view of just that date. If you select all and file>export you'll export the contents of that date.
    The other option is remaining in Grid view (In the applications upper right "Showing:Grid") and perform a shift+selection where you select your first file, move down the desired range and while holding shift you select a second file (standard multi-select stuff).
    One thing to keep in mind as you do this. You'll notice when you export you can export original or 'current version'. Export original does just that. Exports unedited original versions of your images as they were uploaded to us. When you export the current version of an image we'll export a rendition of the edited image. This "current version" image is not the original and in most cases will be a rendition that is not the same size as the original. So keep that in mind as you proceed.
    Not ideal, I fully realize, but I do hope it gets you closer to having your images back on your hard disk as you desire.
    As for your subscription. Assure you have checked your iOS Appstore subscription settings and set Revel to not auto-renew. Unfortunately for a pro-rated refund on the subscription balance you no longer desire you'll need to work with Apple as they hold the purse strings for Appstore purchases. Refunds haven't been a problem in the past so you should have no issue.
    Hope this helps.
    Jason

  • I am having to reinstall Adobe Pro because of a hard drive failure. I have lost the License Key and need to know how to retrieve it so I can reinstall the product.

    How do I retrieve the Adobe Pro License key/# so I can reinstall on my computer. I had to have the hard drive replaced due to failure and don't have the necessary information to reinstall Adobe Pro.

    As this was a 1,000 USD + purchase I did registered back in 2008 when I got my copy of "Adobe Creative Suite 3 Design Premium". And now I'm in the same situation as you. I did go to manage my account and found my serial number.
    My disk crashed completely and I got everything back and running from my Time Machine backup. A few days ago Illustrator said there was a licensing issue. I tried all their gradual solutions up to the very last one: Reinstalling.
    I did that and inserted the Serial number; it worked. Now that I'm opening the Adobe Acrobat Pro it requires me to input the serial and it says is invalid!
    Anyone has an idea about this?

  • Help! I  need to know how to make photos black and white from color and leave one thing colored.

    I am a new user. I have elements 6. I really want to take pic of flower that i shot in front
    yard and change it to black and white and then erase the b/w flower to reveal the true
    color of the flower underneath. I have had mixed ways advised to me but not successful
    any way i try. Help please!

    Hi,
    You can use Smart brush.  From tools panel on the left, select Smart brush tool and select Black & White category and select any effect which you wish and start painting over the area to be changed to B/W.To edit your adjustments, you can select Detailed smart brush if you feel more comfortable in using brush than Quick selection tool.
    Cheers
    Swarnima

  • HT201209 i've redeemed my apple gift card but i don't know how to use it to purchase songs from the itunes store

    when i download a song it takes me to the page where i can redeem a gift card (which i did and have $100 credit) but i cannot figure out how to activate the balance for my purchase. please help??

    Select the app you want to purchase and your balance will be debited accordingly!

  • HT2729 NEED HELP? how do I transfer game to ipod from the computer

    Have downloaded games on my computer and GameStop said I could transfer them to the IPod but cant figure out how,
    Please help????

    Unless you downloaded them through iTunes, you can't. If you did, sync the iPod.
    (78554)

  • How to remove fields from the default user portal page ?

    Hi Travis,
    How do I modify the page that display after submitting the ticket. These plugins are helpful to modify portal's home page only. Please advise if I'm missing anything.
    Thank you

    I like to remove the right hand side ticket history field that displays after user submit a new issue.
    This topic first appeared in the Spiceworks Community

Maybe you are looking for

  • Can i get a sepperate icloud for my business?

    Can I get a sepperate I cloud from the one I have registereed on my divice? I want storage for my business that is accessible to people within the business but I dont want to use my own Icloud. Is this possible?

  • Captivate published Swf to open an external PDF file

    Hi all, I need help to open an external PDF file from the swf file. I used this previously. But realised that I can only open the pdf file from the published html file but not the swf file. function onClick() { window.open("mypdf.pdf"); onClick(); Ca

  • ! BSAK vs PAYR !

    Hey Folks: We have these fields in PAYR table called PRINT DATE and CHECK NUMBER. I am looking for a substitute fields in BSAK (vendor cleared items) for PRINT DATE and CHECK NUMBER. Please also let me know if we have substitute for PAYMENT DATE in B

  • Easy question about String

    Hi! I have a string in a variable. how can I check if the String is composed just by numbers? thank you very much!

  • Linked doc to project. Added index to topic. What happens when I update?

    Hi all: I'm using RH10 and Word 2010. After a lot of struggle and with help from Peter Grainge's excellent website, I successfully linked a doc to a RH project. Four topics were generated from the doc. There were no index keywords in the doc. I added