/// <summary> /// </summary> /// /// <returns> /// </returns> /// /// <remarks> /// This method accesses the HealthVault service across the network. /// If the filters specified do not reduce the amount of data being retrieved from the /// record, this method could take a significant amount of time as data gets paged into /// memory from HealthVault. /// /// Note: There may be data in items that HealthVault does not include when converting /// to the CCR or CCD formats. /// </remarks> /// /// <exception cref="HealthServiceException"> /// The response from the server was anything but /// <see cref="HealthServiceStatusCode.Ok"/>. /// -or- /// <see cref="Microsoft.Health.HealthRecordSearcher.Filters"/> is empty /// or contains invalid filters. /// </exception> /// public string ExportItems() { HealthRecordSearcher searcher = new HealthRecordSearcher(_record); for (int index = 0; index < Filters.Count; ++index) { searcher.Filters.Add(Filters[index]); } ReadOnlyCollection<HealthRecordItemCollection> results = searcher.GetMatchingItems(); StringBuilder resultXml = new StringBuilder(1000); XmlWriterSettings settings = SDKHelper.XmlUnicodeWriterSettings; settings.ConformanceLevel = ConformanceLevel.Document; using (XmlWriter writer = XmlWriter.Create(resultXml, settings)) { // <response> writer.WriteStartElement("response"); // <wc:info> writer.WriteStartElement("wc", "info", "urn:com.microsoft.wc.methods.response.GetThings3"); foreach (HealthRecordItemCollection items in results) { // <group> writer.WriteStartElement("group"); // We are leveraging the HealthRecordItemCollection paging here to retrieve // all the data from HealthVault if it doesn't come with the first request. for (int itemIndex = 0; itemIndex < items.Count; ++itemIndex) { bool filterApproved = true; foreach (HealthRecordClientFilterHandler filter in ClientFilters) { filterApproved = filter(items[itemIndex]); if (!filterApproved) { break; } } if (filterApproved) { items[itemIndex].WriteItemXml(writer, true, "thing"); } } // </group> writer.WriteEndElement(); } // </wc:info> writer.WriteEndElement(); // </response> writer.WriteEndElement(); writer.Flush(); writer.Close(); } return TransformItemXml(resultXml.ToString()); }