1. قبل البدء
ما الذي ستقوم ببنائه
في هذا الدرس التطبيقي حول الترميز، ستتعلم كيفية إنشاء تطبيق Android باستخدام مكتبة التقاط البيانات المنظَّمة. سيستخدم تطبيقك مكتبة التقاط البيانات المنظَّمة لعرض استبيانات وردود FHIR ومعالجتها.
ما ستتعرَّف عليه
- كيفية دمج مكتبة التقاط البيانات المنظَّمة في تطبيق 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"
لنبدأ باستيراد تطبيق المبتدئين إلى "استوديو Android".
افتح "استوديو Android" واختَر استيراد مشروع (Gradle أو Eclipse ADT أو غير ذلك) واختَر مجلد codelabs/datacapture
من رمز المصدر الذي نزّلته سابقًا.
تشغيل تطبيق إجراء التفعيل
بعد أن استوردت المشروع إلى "استوديو Android"، أصبحت جاهزًا لتشغيل التطبيق لأول مرة.
يمكنك توصيل جهاز Android بمضيفك عبر USB، أو تشغيل محاكي "استوديو Android"، والنقر على "تشغيل" () في شريط أدوات "استوديو Android".
كما ترى، لا تتوفّر الكثير من المعلومات هنا حتى الآن، لذا لنبدأ عرض استبيان في تطبيقك مباشرةً.
3- إضافة مكتبة التقاط البيانات المنظَّمة إلى المشروع
إضافة الملحقات إلى "مكتبة التقاط البيانات المنظَّمة"
تسمح لك تبعيات مكتبة التقاط البيانات المنظَّمة بدمج مكتبة التقاط البيانات المنظَّمة في تطبيقك. أضِف الأسطر التالية إلى نهاية ملف app/build.gradle.kts
لمشروعك:
dependencies {
// ...
implementation("com.google.android.fhir:data-capture:1.0.0")
implementation("androidx.fragment:fragment-ktx:1.5.5")
}
مزامنة مشروعك مع ملفات Gradle
وللتأكد من أن جميع التبعيات متاحة لتطبيقك، يجب عليك مزامنة مشروعك مع ملفات Gradle في هذه المرحلة.
اختَر مزامنة المشروع مع ملفات Gradle () من شريط أدوات "استوديو Android". يمكنك أيضًا تشغيل التطبيق مرة أخرى للتحقق من عمل التبعيات بشكل صحيح.
4. عرض استبيان
في هذه الخطوة، ستتم إضافة الوظيفة إلى تطبيق إجراء التفعيل لعرض استبيان في FragmentContainerView
.
بالإضافة إلى ذلك، سيطلب منك "استوديو Android" إضافة عمليات الاستيراد اللازمة:
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 > التنسيق > 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
إلى FragmentContainerView
يتطلّب عرض "QuestionnaireFragment
" استبيان FHIR بترميز JSON. بما أنّ الاستبيان صغير (أقل من 512 كيلوبايت)، عليك تضمينه كـ String
في Bundle
من الوسيطات التي سيتم استخدامها لإنشاء الجزء. يجب تقديم استبيانات أكبر حجمًا على أنّها URI
لأسباب تتعلّق بالأداء.
يمكنك الاطّلاع على ملف questionnaire.json
إذا أردت ذلك، ولكن إحدى مزايا مكتبة تسجيل البيانات المنظَّمة هي عدم الحاجة إلى معرفة بنية استبيان FHIR (أو أي معلومات حول FHIR) لعرضه. وسوف تطّلع على هذا الملف عن كثب لاحقًا في الدرس التطبيقي حول الترميز.
يمكنك إنشاء QuestionnaireFragment
باستخدام أداة الإنشاء الخاصة بها، وإعداد الاستبيان باستخدام الدالة setter. لعرض QuestionnaireFragment
ضمن حاوية التنسيق، استخدِم FragmentManager
لإنشاء FragmentTransaction
.
افتح MainActivity.kt
وأضِف الرمز التالي إلى الصف MainActivity
:
// Step 2: Configure a QuestionnaireFragment
questionnaireJsonString = getStringFromAssets("questionnaire.json")
if (savedInstanceState == null) {
supportFragmentManager.commit {
setReorderingAllowed(true)
add(
R.id.fragment_container_view,
QuestionnaireFragment.builder().setQuestionnaire(questionnaireJsonString!!).build()
)
}
}
المزيد من المعلومات حول كيفية استخدام الأجزاء
لنقم بتشغيل الدرس التطبيقي حول الترميز من خلال النقر على "تشغيل" () في شريط أدوات "استوديو Android". من المفترض أن يظهر لك محتوى مشابه لما يلي:
يمكنك التنقّل في الاستبيان ومحاولة إدخال بعض الإجابات. تم استخدام بعض التطبيقات المصغّرة المختلفة للإجابات، بما في ذلك القيم المنطقية والنص والتواريخ، والتي تم عرضها تلقائيًا استنادًا إلى النوع الأساسي في استبيان 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()
. ويؤدي ذلك إلى عرض رمز HAPI FHIR QuestionnaireResponse
الذي يمكنك استخدامه بشكل مباشر أو مع أجزاء أخرى من حزمة تطوير البرامج (SDK) لـ Android FHIR. يستخدم هذا الدرس التطبيقي حول الترميز مكتبات 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. تهانينا!
لقد استخدمت مكتبة التقاط البيانات المنظَّمة لمعالجة استبيانات وردود FHIR في تطبيقك:
- عرض استبيان
- الحصول على إجابة على الاستبيان
- استخراج موارد FHIR من
QuestionnaireResponse
هذا كل ما تحتاجه لتشغيله.
أثناء المتابعة، قد ترغب في العمل مع موارد FHIR بمزيد من الطرق في جميع أنحاء طلبك. يمكنك الاطّلاع على مكتبة FHIR Engine التابعة لحزمة Android FHIR SDK للتعرّف على كيفية تخزين موارد FHIR وإدارتها محليًا في تطبيقك ومزامنة البيانات مع خادم FHIR بعيد.
المواضيع التي تناولناها
- كيفية إضافة مكتبة التقاط البيانات المنظَّمة إلى تطبيق Android
- كيفية استخدام
QuestionnaireFragment
وResourceMapper
للعمل على استبيانات FHIR
الخطوات التالية
- الاطّلاع على مستندات "مكتبة التقاط البيانات المنظَّمة"
- تخصيص مظهر الاستبيانات المعروضة ومضمونها
- تطبيق مكتبة التقاط البيانات المنظَّمة في تطبيقك على Android