Přeskočit obsah
For the complete DHIS2 documentation index, see llms.txt.

Modules and repositories

Objekt D2 je vstupním bodem pro interakci s SDK. Sada SDK vynutí, aby objekt D2 byl v aplikaci singleton.

Moduly jsou vrstvou pod D2. Fungují jako wrapper pro související funkce. Modul obsahuje některá související úložiště a může vystavovat některé služby a pomocníky.

Úložiště fungují jako fasáda pro DB (nebo v některých případech pro webové API). Nabízejí možnosti čtení metadat a čtení / zápis pro data.

Řešení návratových typů: RxJava

Sada SDK používá jako preferovaný návratový typ pro všechny metody třídy RxJava (pozorovatelné, jednoduché, dokončitelné, Flowable). Důvody pro výběr tříd RxJava jsou hlavně dva:

  • Pro usnadnění asynchronního zpracování vrácených objektů. Většina akcí v SDK je časově náročná a musí být provedena v sekundárním vlákně. Tyto návratové typy přinutí aplikaci vypořádat se s tímto asynchronním chováním.
  • Chcete-li upozornit na postup. Metody jako metadata nebo synchronizace dat mohou trvat několik minut. Z pohledu uživatele je velmi užitečné mít pocit pokroku.

To neznamená, že aplikace jsou nuceny používat RxJava ve svém kódu: jsou nuceny vypořádat se pouze s asynchronním chováním některých metod. SDK obvykle vystavuje blokující verzi každé metody.

Například stejný dotaz pomocí RxJava a AsyncTask:

Používání RxJava

d2.programModule().programs()
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .get()
    .subscribe(programs -> {}); //List<Program>

Používání AsyncTask

new AsyncTask<Void, Void, List<Program>>() {
    protected List<Program> doInBackground() {
        return d2.programModule().programs().blockingGet();
    }

    protected void onPostExecute(List<Program> programs) {

    }
}.execute();

Přístup do databáze je časově náročný a doporučuje se to provést v samostatném vlákně pomocí kterékoli z doporučených metod. Postupy, které zahrnují přístup k webovému rozhraní API, jako je přihlášení, stahování nebo nahrávání metadat nebo dat, musí být spuštěny v samostatném vlákně, jinak Android vyvolá chybu.

Budování dotazů

Úložiště nabízejí syntaxi stavitele s ověřením v době kompilace pro přístup k prostředkům. Typický dotaz se skládá z některých modifikátorů (filtr, pořadí, vnořená pole) a končí akcí (get, count, getPaged, ...).

// Generic syntax
d2.<module>.<repository>
    .[ filter | orderBy | nested fields ]
    .<action>;

// An example for events
d2.eventModule().events()
    .byOrganisationUnitUid().eq("DiszpKrYNg8")
    .byEventDate().after(Date("2019-05-05"))
    .orderByEventDate(DESC)
    .withTrackedEntityDataValues()
    .get();

Filtry

Úložiště vystavují seznam dostupných filtrů s předponou klíčového slova „by“. Seznam operátorů filtrů dostupných pro každý filtr závisí na typu hodnoty filtru: například typ hodnoty Date nabídne operátory jako after, before, inPeriods, zatímco typ hodnoty Boolean bude nabídka isFalse neboisTrue.

Common filter operators include: - Equality: eq(), notEq() - Comparison: gt(), lt(), ge(), le() - String matching: like(), notLike() - Collection: in() - matches any value in the provided list - Null checks: isNull(), isNotNull()

K jednomu dotazu lze v libovolném pořadí připojit několik filtrů. Filtry se globálně spojují pomocí operátoru „AND“. To znamená, že dotaz jako

d2.eventModule().events()
    .byOrganisationUnitUid().eq("DiszpKrYNg8")
    .byEventDate().after(Date("2019-05-05"))
    ...

vrátí události přiřazené organizační jednotce "DiszpKrYNg8" AND, jehož eventDate je po "2019-05-05".

The in() operator is particularly useful for querying multiple values at once:

// Query tracked entity instances with specific data values
d2.trackedEntityModule().trackedEntityInstanceQuery()
    .byDataValue("dataElementUid").in("value1", "value2", "value3")
    .onlineFirst()
    .get();

Řadit podle

Modifikátory řazení mají předponu klíčové slovo „orderBy“.

K jednomu dotazu lze připojit několik modifikátorů „orderBy“. Pořadí modifikátorů „orderBy“ v dotazu určuje prioritu objednávky. To znamená, že dotaz jako

d2.eventModule().events()
    .orderByEventDate(DESC)
    .orderByLastUpdated(DESC)
    ...

na prvním místě seřadí následující EventDate a poté následující LastUpdated.

Zahrnout vnořená pole

Úložiště vracejí třídy, které nejsou přesnou shodou databázových tabulek: jsou to složitější objekty, které mohou zahrnovat některé vlastnosti získané z jiných tabulek. Například třída Event má vlastnost nazvanoutrackedEntityDataValues, která obsahuje seznam TrackedEntityDataValues. Hlavním důvodem pro výběr tohoto druhu objektů je absorbovat složitost práce s tabulkami odkazů, takže se aplikace nemusí starat o vytváření vazeb mezi objekty.

Z důvodu problémů s výkonem není tento druh vlastností ve výchozím nastavení zahrnut: musí být dotazovány explicitně. V úložištích mají vlastnosti, které nejsou ve výchozím nastavení zahrnuty a je třeba je dotazovat, předponu klíčového slova "with".

Několik vlastností lze připojit ke stejnému dotazu v libovolném pořadí. Například dotaz jako

d2.programModule().programs()
    .withTrackedEntityType()
    ...

vrátí vnořený objekt TrackedEntityType.

Pomocníci

Sada SDK obsahuje některé pomocníky v balíčku org.hisp.dhis.android.core.arch.helpers. Lze je snadno najít v Android Studio vyhledáním Helper v názvech tříd. Zahrnují některé užitečné metody k provádění běžných operací:

  • AccessHelper: související s objektem přístupu (nastavení sdílení).
  • CollectionsHelper: společné operace se sbírkami.
  • CoordinateHelper, GeometryHelper: manipulace s geoprostorovými daty.
  • FileResizeHelper,FileResourceDirectoryHelper: manipulace se zdroji souboru.
  • UidsHelper: běžné operace s kolekcemi objektů s uid.
  • UserHelper: operace související s ověřením uživatele.
  • ValueType: list of different value types and their validators.

Seznam modulů

Moduly systému:

  • importModule
  • maintenanceModule
  • systemInfoModule
  • settingModule
  • dataStoreModule
  • wipeModule

Moduly velkých bloků:

  • metadataModule
  • aggregatedDataModule

Konkrétní moduly:

  • attributeModule
  • categoryModule
  • constantModule
  • dataElementModule
  • dataSetModule
  • dataValueModule
  • enrollmentModule
  • eventModule
  • fileResourceModule
  • indicatorModule
  • legendSetModule
  • noteModule
  • organisationUnitModule
  • optionModule
  • periodModule
  • programModule
  • relationshipModule
  • smsModule
  • trackedEntityModule
  • userModule
  • validationModule