Поиск на сервере FHIR определенного идентификатора ресурса

Я использую Hapi FHIR DSTU2 HL7Org. В моем приложении мне нужно создать MedicationOrder и предоставить возможность обновления/удаления ошибочных записей. У меня есть идентификатор, идентификатор пациента и т. д. созданного MedicationOrder, но написать код с предложением where довольно проблематично. Во всех примерах, которые я видел, такие записи, как

where(Patient.FAMILY.matches().value("duck") 

подарки, но получаю SP_PATIENT, SP_STATUS и т. д.

FhirContext ctx = FhirContext.forDstu2Hl7Org();
IGenericClient client = ctx.newRestfulGenericClient("http://fhirtest.uhn.ca/baseDstu2");
Bundle bundle = client.search().forResource(MedicationOrder.class).where(MedicationOrder.SP_PATIENT.equals("patientId")).returnBundle(Bundle.class).encodedXml().prettyPrint().execute();

Приведенный выше код не компилируется, говоря: «Метод where (ICriterion) в типе IQuery неприменим для аргументов (логических)». Мне не удалось создать какой-либо объект IQuery.

Может кто-нибудь, пожалуйста, проинструктируйте меня, как действовать?


person Nethanjalie Lelwala    schedule 21.06.2016    source источник


Ответы (1)


Это немного странно — структуры DSTU2 HL7Org были созданы в тот момент, когда мы еще не перенесли все функции модели из структур HAPI в структуры HL7Org. Эти константы критерия «не-SP» — одна из тех вещей, которые мы не копировали.

Хорошей новостью является то, что вы по-прежнему можете использовать структуры DSTU2 или DSTU3, если хотите, даже если вы используете структуры DSTU2-Hl7Org. Вы можете сделать это с помощью чего-то вроде:

FhirContext ctx = FhirContext.forDstu2Hl7Org();
IGenericClient client = ctx.newRestfulGenericClient("http://fhirtest.uhn.ca/baseDstu2");
Bundle bundle = client.search().forResource(MedicationOrder.class).where(ca.uhn.fhir.model.dstu2.resource.MedicationOrder.PATIENT.matches().value("duck")).returnBundle(Bundle.class).encodedXml().prettyPrint().execute();
person James Agnew    schedule 21.06.2016
comment
Спасибо @Джеймс Агнью. Я думал, что URL-адрес ресурса уникален для данного ресурса, поэтому, если я обновляю/удаляю ресурс, предложение where должно содержать его. Но я вижу, что ничего подобного в доступных параметрах поиска нет. Есть ли обходной путь для этого? - person Nethanjalie Lelwala; 22.06.2016
comment
Извините, я не уверен, что понимаю. Код, который вы показываете, предназначен для поиска, а не для создания или удаления. Вы можете взять результаты и удалить их, если хотите. Если вы пытаетесь выполнить условное удаление, пример этого есть на нашей странице документации здесь и вы могли бы сделать тот же тип предложения where. - person James Agnew; 22.06.2016
comment
Привет! Мое ​​приложение создает ресурсы MedicationOrder на удаленном сервере FHIR, и также должна быть доступна возможность удаления созданного ресурса. Поскольку у пациента может быть несколько заказов для разного времени администрирования, я подумал, что условное удаление с использованием idPart является лучшим здесь. Это служит этой цели? client.delete().resourceById("MedicationOrder", "<logicalId>").encodedXml().prettyPrint().execute(); - person Nethanjalie Lelwala; 24.06.2016
comment
Это похоже на условное удаление. Что-то вроде следующего должно сделать это: client.delete() .resourceConditionalByType("MedicationOrder") .where(MedicationOrder.PATIENT.hasId("123")) .execute(); - person James Agnew; 24.06.2016
comment
Нам нужно, чтобы его искали и удаляли по значению, которое мы установили для идентификатора, а не по идентификатору пациента, очевидно, что у одного пациента может быть много заказов на лекарства. MedicationOrder имеет только параметры поиска, такие как SP_IDENTIFIER, и такие условия дают ту же ошибку, что и исходный вопрос. - person Nethanjalie Lelwala; 30.11.2016