1. قبل البدء
ما ستُنشئه
في هذا الدرس التطبيقي حول الترميز، ستتعرّف على كيفية إنشاء تطبيق Android باستخدام مكتبة "التقاط البيانات المنظَّمة". سيستخدم تطبيقك مكتبة Structured Data Capture Library لعرض استبيانات FHIR والردود ومعالجتها.
المُعطيات
- كيفية دمج مكتبة Structured Data Capture Library في تطبيق Android
- كيفية عرض استبيان
- كيفية الحصول على إجابات بصفتك
QuestionnaireResponse
- كيفية استخراج موارد FHIR من
QuestionnaireResponse
المتطلبات
- إصدار حديث من "استوديو Android" (الإصدار 4.1.2 أو إصدار أحدث)
- محاكي Android أو جهاز Android
- نموذج التعليمات البرمجية
- معرفة أساسية بتطوير تطبيقات Android باستخدام لغة Kotlin
تركّز هذه الدرسّات التطبيقية على مكتبة ميزة "التقاط البيانات المنظَّمة". يتم تجاهل المفاهيم غير ذات الصلة ووحدات الرموز البرمجية، ويتم توفيرها لك لنسخها ولصقها بسهولة. إذا لم يسبق لك إنشاء تطبيقات Android، يمكنك البدء من خلال إنشاء تطبيقك الأول.
2. الإعداد
تنزيل الرمز
لتنزيل رمز هذا الدليل التعليمي، يمكنك استنساخ مستودع حزمة تطوير البرامج (SDK) لنظام التشغيل Android لمعيار FHIR: git clone https://github.com/google/android-fhir.git
يمكن العثور على المشروع الأوّلي لهذا الدرس التطبيقي حول الترميز في codelabs/datacapture
.
استيراد التطبيق إلى Android Studio
لنبدأ باستيراد التطبيق المبدئي إلى Android Studio.
افتح Android Studio، واختَر Import Project (استيراد المشروع) (Gradle أو Eclipse ADT أو غير ذلك)، ثم اختَر مجلد codelabs/datacapture
من رمز المصدر الذي نزّلته سابقًا.
تشغيل التطبيق النموذجي
بعد استيراد المشروع إلى "استوديو Android"، تكون مستعدًا لتشغيل التطبيق للمرة الأولى.
وصِّل جهاز Android عبر USB بالجهاز المضيف، أو ابدأ محاكي Android Studio، ثم انقر على رمز التشغيل () في شريط أدوات Android Studio.
كما ترى، لا يتوفّر الكثير من المعلومات هنا بعد، لذا لنبدأ مباشرةً في عرض استبيان في تطبيقك.
3- إضافة مكتبة "التقاط البيانات المنظَّمة" إلى المشروع
إضافة التبعيات لـ "مكتبة تسجيل البيانات المنظَّمة"
تتيح لك التبعيات في مكتبة "التقاط البيانات المنظَّمة" دمج هذه المكتبة في تطبيقك. أضِف السطور التالية إلى نهاية ملف app/build.gradle.kts
في مشروعك:
dependencies {
// ...
implementation("com.google.android.fhir:data-capture:1.2.0")
implementation("androidx.fragment:fragment-ktx:1.6.0")
}
مزامنة مشروعك مع ملفات Gradle
للتأكّد من توفّر جميع التبعيات لتطبيقك، عليك مزامنة مشروعك مع ملفات Gradle في هذه المرحلة.
اختَر مزامنة المشروع مع ملفات Gradle () من شريط أدوات "استوديو Android". يمكنك أيضًا تشغيل التطبيق مرة أخرى للتأكّد من عمل التبعيات بشكل صحيح.
4. عرض استبيان
في هذه الخطوة، ستضيف الوظيفة إلى التطبيق المبدئي لعرض استبيان في FragmentContainerView
.
أثناء إنشاء التطبيق، سيطلب منك Android Studio إضافة عمليات الاستيراد اللازمة:
androidx.core.os.bundleOf
androidx.fragment.app.add
androidx.fragment.app.commit
android.util.Log
com.google.android.fhir.datacapture.QuestionnaireFragment
الخطوة 1: إضافة FragmentContainerView
أضِف FragmentContainerView
إلى تنسيق التطبيق. هذا هو المكان الذي سيتم فيه عرض QuestionnaireFragment
الذي ستُنشئه لاحقًا.
- افتح
activity_main.xml
(res > layout > activity_main.xml). - ابحث عن خيارات طرق عرض "الرمز" و"التقسيم" و"التصميم" في أعلى يسار "أداة تعديل التنسيق".
- اختَر عرض "الرمز".
- إذا لم تكن بحاجة إلى
TextView
، يمكنك حذفه. احرص على حذف كل المحتوى من<TextView
إلى/>
الختامي. - أضِف
FragmentContainerView
داخلConstraintLayout
. من المفترض أن يظهر ملفactivity_main.xml
بالشكل التالي:<?xml version="1.0" encoding="utf-8" ?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <androidx.fragment.app.FragmentContainerView android:id="@+id/fragment_container_view" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>
الخطوة 2: ضبط QuestionnaireFragment
يتطلب QuestionnaireFragment
استبيان FHIR بترميز JSON لعرضه. بما أنّ الاستبيان صغير (أقل من 512 كيلوبايت)، يمكنك تضمينه كـ String
في Bundle
من الوسيطات التي سيتم استخدامها لإنشاء المقتطف. يجب تقديم الاستبيانات الأكبر حجمًا كURI
لأسباب تتعلّق بالأداء.
يمكنك الاطّلاع على ملف questionnaire.json
إذا أردت، ولكن من مزايا "مكتبة تسجيل البيانات المنظَّمة" أنّك لا تحتاج إلى معرفة بنية استبيان FHIR (أو أيّ شيء عن FHIR) لعرضه. ستتمكّن من الاطّلاع على هذا الملف عن كثب لاحقًا في ورشة رموز البرامج.
أنشئ QuestionnaireFragment
باستخدام أداة إنشائه، واضبط الاستبيان باستخدام الدالة "المُعدّة". لعرض QuestionnaireFragment
داخل حاوية التنسيق، استخدِم FragmentManager
لإنشاء FragmentTransaction
.
افتح MainActivity.kt
وأضِف الرمز التالي إلى فئة MainActivity
:
// Step 2: Configure a QuestionnaireFragment
questionnaireJsonString = getStringFromAssets("questionnaire.json")
val questionnaireFragment =
QuestionnaireFragment.builder().setQuestionnaire(questionnaireJsonString!!).build()
الخطوة 3: إضافة QuestionnaireFragment إلى FragmentContainerView
لعرض QuestionnaireFragment
داخل حاوية التنسيق، استخدِم FragmentManager
لإنشاء FragmentTransaction
. يعالج FragmentManager
إنشاء العنصر باستخدام questionnaireParams
الذي تم إنشاؤه سابقًا.
أضِف الرمز التالي إلى فئة MainActivity
:
// Step 3: Add the QuestionnaireFragment to the FragmentContainerView
if (savedInstanceState == null) {
supportFragmentManager.commit {
setReorderingAllowed(true)
add(R.id.fragment_container_view, questionnaireFragment)
}
}
// Submit button callback
supportFragmentManager.setFragmentResultListener(
QuestionnaireFragment.SUBMIT_REQUEST_KEY,
this,
) { _, _ ->
submitQuestionnaire()
}
مزيد من المعلومات عن كيفية استخدام الأجزاء
لننفِّذ رمز البرمجة من خلال النقر على رمز التشغيل () في شريط أدوات Android Studio. من المفترض أن يظهر لك ما يلي:
تنقَّل في الاستبيان وحاول إدخال بعض الإجابات. هناك بعض التطبيقات المصغّرة المختلفة للإجابات المستخدَمة، بما في ذلك القيم المنطقية والنصوص والتواريخ، والتي تم عرضها تلقائيًا استنادًا إلى النوع الأساسي في استبيان FHIR الأصلي.
من الناحية الفنية، هذا كل ما عليك فعله لعرض استبيان. تهانينا!
لا يكون الاستبيان مفيدًا جدًا إذا لم تتمكّن من الاطّلاع على الإجابات التي يُدخلها المستخدمون. لننتقل إلى الخطوة التالية للحصول على ردّ على الاستبيان.
5- الحصول على ردّ على استبيان
في الخطوات السابقة، عرضت استبيان FHIR في تطبيقك.
في هذا القسم، ستحصل على الإجابات من الاستبيان على شكل QuestionnaireResponse.
ابحث عن الطريقة submitQuestionnaire()
وأضِف الرمز التالي:
// Get a questionnaire response
val fragment = supportFragmentManager.findFragmentById(R.id.fragment_container_view)
as QuestionnaireFragment
val questionnaireResponse = fragment.getQuestionnaireResponse()
// Print the response to the log
val jsonParser = FhirContext.forCached(FhirVersionEnum.R4).newJsonParser()
val questionnaireResponseString =
jsonParser.encodeResourceToString(questionnaireResponse)
Log.d("response", questionnaireResponseString)
للحصول على ردّ الاستبيان، يمكنك استرداد المقتطف من الاستبيان الذي تم إنشاؤه سابقًا ثم استخدام الطريقة getQuestionnaireResponse()
. يؤدي ذلك إلى عرض QuestionnaireResponse
HAPI FHIR الذي يمكنك استخدامه مباشرةً أو مع أجزاء أخرى من حزمة تطوير البرامج (SDK) لنظام FHIR على Android. يستخدم هذا الدرس التطبيقي مكتبات HAPI FHIR أخرى لتحويلها إلى سلسلة JSON لعرضها في السجلّ.
شغِّل التطبيق مرة أخرى لإعادة إنشائه باستخدام أحدث التغييرات. بعد تشغيله، أدخِل بعض المعلومات في الاستبيان وانقر على إرسال. في السجلّ، من المفترض أن تظهر لك رسالة تحتوي على QuestionnaireResponse
بتنسيق JSON.
D/response: {"resourceType":"QuestionnaireResponse","item":[{"linkId":"PR","text":"Patient information","item":[{"linkId":"PR-name","text":"Name","item":[{"linkId":"PR-name-given","text":"First Name","answer":[{"valueString":"Dani"}]},{"linkId":"PR-name-family","text":"Family Name","answer":[{"valueString":"Lee"}]}]},{"linkId":"PR-birthdate","text":"Date of Birth","answer":[{"valueDate":"1990-02-14"}]},{"linkId":"PR-id","text":"Identifying information","item":[{"linkId":"PR-name-id-url"},{"linkId":"PR-name-id","text":"Patient Id","answer":[{"valueString":"12345"}]}]}]}]}
6- استخراج موارد FHIR من ملف QuestionnaireResponse
يهدف الاستبيان المُدرَج في المشروع الأوّلي إلى توفير عملية تسجيل بسيطة للمرضى، لذا قد تحتاج في النهاية إلى استخدام إجابات الاستبيان لإنشاء مورد مريض FHIR استنادًا إليها. تُعرف عملية التحويل هذه من ردّ على استبيان إلى موارد FHIR باسم استخراج البيانات. يمكننا إجراء ذلك باستخدام فئة ResourceMapper
من مكتبة "التقاط البيانات المنظَّمة".
لإجراء عملية استخراج البيانات، يجب إنشاء الاستبيان لتضمين معلومات عن كيفية إجراء عملية استخراج البيانات. لحسن الحظ، سبق أن تم إعداد نموذج الاستبيان للاستخراج المستنِد إلى التعريف.
ابحث عن الطريقة submitQuestionnaire()
وأضِف الرمز التالي:
lifecycleScope.launch {
val questionnaire =
jsonParser.parseResource(questionnaireJsonString) as Questionnaire
val bundle = ResourceMapper.extract(questionnaire, questionnaireResponse)
Log.d("extraction result", jsonParser.encodeResourceToString(bundle))
}
يتطلب ResourceMapper.extract()
استبيان HAPI FHIR، والذي يمكنك إنشاؤه من خلال تحليل سلسلة JSON للاستبيان من وقت سابق، وQuestionnaireResponse
الذي سبق أن حصلنا عليه. ويعرض حِزمة معاملة HAPI FHIR تحتوي على مورد واحد أو أكثر تم استخراجه، وفي هذه الحالة مورد مريض واحد.
شغِّل التطبيق مرة أخرى لإعادة إنشائه باستخدام أحدث التغييرات. بعد تشغيل التطبيق، أدخِل بعض المعلومات وانقر على إرسال. في السجلّ، من المفترض أن تظهر الآن رسالة extraction result
تحتوي على تمثيل JSON لحِزمة FHIR التي تم استخراجها.
D/extraction result: {"resourceType":"Bundle","type":"transaction","entry":[{"resource":{"resourceType":"Patient","identifier":[{"value":"12345"}],"name":[{"family":"Lee","given":["Dani"]}],"birthDate":"1990-02-14"}}]}
7- تهانينا!
إذا كنت قد استخدمت مكتبة Structured Data Capture Library لمعالجة استبيانات FHIR وردود المستخدمين في تطبيقك:
- عرض استبيان
- الحصول على ردّ على استبيان
- استخراج موارد FHIR من
QuestionnaireResponse
هذا كل ما عليك فعله لبدء استخدام التطبيق.
أثناء المتابعة، قد تحتاج إلى استخدام موارد FHIR بطرق إضافية في تطبيقك. اطّلِع على مكتبة FHIR Engine في حزمة تطوير البرامج لأجهزة Android لمعيار FHIR للتعرّف على كيفية تخزين موارد FHIR وإدارتها محليًا في تطبيقك ومزامنة البيانات مع خادم FHIR عن بُعد.
المواضيع التي تناولناها
- كيفية إضافة مكتبة "التقاط البيانات المنظَّمة" إلى تطبيق Android
- كيفية استخدام
QuestionnaireFragment
وResourceMapper
للعمل مع استبيانات FHIR
الخطوات التالية
- استكشاف مستندات مكتبة Structured Data Capture Library
- تخصيص شكل الاستبيانات المعروضة ومظهرها
- تطبيق مكتبة Structured Data Capture Library في تطبيق Android الخاص بك