none
Record Name change in AuthorizedRecords

    Question

  • First of all – you can now get the names (as well as the nicknames) of other children in the account via the list of records in AuthorizedRecords which is great

    However the names of the record holder in AuthorizedRecords only upodate if you save the records’s profile in the shell. It looks like the details are are cached at healthvault. We need to find some way to refresh cache from our application.

    Here is how this manifests itself – steps to reproduce

    1.  Change record’s name in our application 

    2.  Look in the shell and the name has been changed

    3.  Look in AuthorizedRecords in our application debugging and the name still has the previous value.

    4.  Logout and login again - the name still has the previous value.

    5.  Logout, login to another account, logout of that account and log back into this one- the name still has the previous value.

    6.  In the shell – click to edit the record’s personal information – make no changes and save

    7.  Look in AuthorizedRecords and the name has changed to the new value – no need to log out and in


    • Edited by Chris Eckl Wednesday, December 04, 2013 1:47 PM
    Wednesday, December 04, 2013 1:47 PM

Answers

  • Early on in HealthVault there was a set of metadata associated with a record that was separate from the health record items contained in the record. Things like the record size quota, the record state, the physical location of the person the record is about, and unfortunately the name. We have publicly stated that record custodians using Shell is the only way to change this metadata and we have no authorization mechanism to allow users to permit applications to modify it. I'm working with the policy folks to ensure we can change the behavior for this case without changing our policy documents. At that time we can make the technical changes. I can't guarantee when this will be resolved, so for now the only mechanisms you have are to read the Personal Information item from each record or use the record name and/or nickname as is.

    RE: personinfo.AuthorizedRecords makes available the name (the value in personal.name) and the nickname for each child in the account

    PersonInfo.AuthorizedRecords doesn't make the Personal.Name value available. It makes the HealthRecordInfo.Name value available which can be different from Personal.Name. A few years back we changed Shell to set both the Personal.Name and HealthRecordInfo.Name to the same value, however, there is no technical constraint that requires these to be the same and will be different if an application changes Personal.Name.


    Jeff Jones Technical Lead HealthVault Development Team

    Friday, December 06, 2013 5:24 PM

All replies

  • How are you setting the record name from your application?

    Jeff Jones Technical Lead HealthVault Development Team

    Wednesday, December 04, 2013 9:14 PM
  • We are updating the first name and last name in the personal itemtype

    When I look in the shell, personal information, I can see the changes are there

    But only when I click on save (without making any changes) to personal information in the shell does the name change in personinfo.AuthorizedRecords

    Is there a way we can trigger healthvault to clear its cache when we save the name change in our application. Currently we have to tell users to change in out application and then log in to the shell and save the child’s personal details (without making any changes) to get the list of children’s names in the account to update

                var name = new Name();

                    name.First = name.First;

                    name.Middle = name.Middle;

                p_data.Name = name;

    where name is Microsoft.Health.ItemTypes.Name

    and p_data is Microsoft.Health.ItemTypes.Personal

    Thursday, December 05, 2013 11:27 AM
  • Applications cannot change the record name. Only Shell can do that. You can redirect the user to the EditRecord page in Shell. Check out http://msdn.microsoft.com/en-us/library/ff803620.aspx#EDITRECORD for more information.

    Jeff Jones Technical Lead HealthVault Development Team

    Thursday, December 05, 2013 4:39 PM
  • So why is it a setable property? Maybe the API is telling us something you want to introduce very soon?

    Thanks

    Chris

    Thursday, December 05, 2013 4:43 PM
  • The Personal Information health record item and the record name are disjoint pieces of data. The Personal Information is shared across all access to the record and can be modified by applications. The name of the record can only be updated through Shell by a record custodian. They are not necessarily a one-to-one mapping. A single person can have multiple records for their own health data and partition their data between those records. For example, I may want one record for my fitness data and another for my health data. In that case I would name one record Jeff's Exercise and the other Jeff's Fitness. I don't want applications changing the name of those records. Each of those records will contain a Personal Information health record item that includes my name. In both of these the name will probably be Jeff Jones. If I give write access to an application for the Personal Information thing type, that application could change the name in the Personal Information but they wouldn't be able to change the record name.

    Jeff Jones Technical Lead HealthVault Development Team

    Thursday, December 05, 2013 4:54 PM
  • In out application we have a record for a custodian and one or more records for children of this custodian.

    Sending a user to the HV shell is such a bad UX experience that no sane application developer would do this.

    So what you are saying is we can change the Name in PersonInfo but not the nickname.

    If we now allow the custodian to change the name of a child in our application we can change the name in Personal Information.

    However to provide a dropdown of all authorized records with their Name (and not Nickname) we would need to use personinfo.AuthorizedRecords, change to the relevant record and gather the real names from each Personal Information.

    If, as you are stating the nickname is really only shell relevant, why would it be one of the properties of AuthorizedRecords? To an user in an application it might  no sense.

    Is there a simpler way to get to the Fullname in Personal Information, without looping through the records.

    As I understand (and have been told in trainings) is the multiple record featre is not mainly to partition ones health information, but to enable a family health manager.

    Chris 

    Thursday, December 05, 2013 9:43 PM
  • This is known usability issue and hasn't been fixed yet due to privacy and security policy issues. I've brought it up again with the policy folks and I'm trying to get this fixed. However, you won't be able to rely on this being fixed for some time. In the interim, why can't you use the Nickname?

    You can't change the Name in PersonInfo either. It has the same restrictions as the record name.


    Jeff Jones Technical Lead HealthVault Development Team

    Thursday, December 05, 2013 10:14 PM
  • Hi Jeff

    "Applications cannot change the record name" (referred to as nickname in the shell).

    We have no desire to change the record name. We do not use that property in our application.

    "The Personal Information is shared across all access to the record and can be modified by applications."

    Yes we know that and this is what we are displaying and modifying in our application.

    "They are not necessarily a one-to-one mapping. A single person can have multiple records for their own health data and partition their data between those records."

    We realise and understand this.

    personinfo.AuthorizedRecords gives basic details of all children in an account. We use this to create a child switcher to switch between children in an account.

    personinfo.AuthorizedRecords makes available the name (the value in personal.name) and the nickname for each child in the account

    We display the personal.name of each child in then account in the child switcher which we access from personinfo.AuthorizedRecords

    this all works fine

    here is the code

                    foreach (KeyValuePair<Guid, HealthRecordInfo> data in _personinfo.AuthorizedRecords)

                    {

                        _authorisedRecords.Add(new RecordAccessDetail()

                        {

                            Id = data.Value.Id,

                            Name = data.Value.Name,

                            RelationshipName = data.Value.RelationshipName,

                            ApplicationSpecificRecordId = data.Value.ApplicationSpecificRecordId,

                            HealthRecordKey = data.Key

                        });

                    }

    where we have a problem is if a parent updates the name of one of their children.

    The value for data.Value.Name above does not update although the value for personal.name has changed.

    The only way we can get that value to change is to go into the shell and save the personal information there (no need to make any changes because the change to the name has been saved).

    Then the value of data.Value.Name above in the AuthorizedRecords is then changed to the new value - the value entered by the parent in their change in our application.

    Since an application like ours can change the child's name - why would it be privacy and security policy not to update the value in some of the data that comes back from HealthVault (_personinfo.AuthorizedRecords) but to update it in other data that comes back form HealthVault – i.e. personalinfo.name.

    That causes conflicting data. Some of the data from healthvault is out of date and some is up to date - so we have 2 different child names depending on how we access the data – the current name and the name before it was changed.

    How can we get the changed data updated in AuthorizedRecords without going to the HV Shell?

    Can you help?

    Chris

    Friday, December 06, 2013 3:04 PM
  • Early on in HealthVault there was a set of metadata associated with a record that was separate from the health record items contained in the record. Things like the record size quota, the record state, the physical location of the person the record is about, and unfortunately the name. We have publicly stated that record custodians using Shell is the only way to change this metadata and we have no authorization mechanism to allow users to permit applications to modify it. I'm working with the policy folks to ensure we can change the behavior for this case without changing our policy documents. At that time we can make the technical changes. I can't guarantee when this will be resolved, so for now the only mechanisms you have are to read the Personal Information item from each record or use the record name and/or nickname as is.

    RE: personinfo.AuthorizedRecords makes available the name (the value in personal.name) and the nickname for each child in the account

    PersonInfo.AuthorizedRecords doesn't make the Personal.Name value available. It makes the HealthRecordInfo.Name value available which can be different from Personal.Name. A few years back we changed Shell to set both the Personal.Name and HealthRecordInfo.Name to the same value, however, there is no technical constraint that requires these to be the same and will be different if an application changes Personal.Name.


    Jeff Jones Technical Lead HealthVault Development Team

    Friday, December 06, 2013 5:24 PM