[  Startseite  ]   [  EN  |  DE  ]  

Zeiterfassung: Task Liste exportieren und importieren

(A) Exportieren und importieren der Taskliste
• Exportiere die Taskliste auf deinem „Master“ Gerät mit einer der „Exportieren“ Option.
• Das Dateiformat ist „Freitext“, d.h. du kannst es danach mit einem Texteditor bearbeiten.
• Speicherort bei „Exportieren | Google Drive“ ist „Zeiterfassung / timerec-tasks-free.txt“ oder „ZeiterfassungPro / timerec-tasks-pro.txt“
• Nach dem Editieren der Datei, oder um neue Geräte aufzusetzen, benutze „Importieren“.
• Beachte: die Taskreihenfolge wird beim Importieren abgeleitet aus der Zeilenreihenfolge innerhalb der Textdatei.

(B) Importieren via Intranet-Seite
• Kopiere die exportierte Datei auf einen Webserver.
• Benutze „Importieren | Webseite“ gemäss oben. Dies ist verfügbar seit Zeiterfassung Version 7.67

(C) Power-User Optionen
• Der Task-ID Bereich von 20'000 bis 29'999 ist reserviert und wird *nicht* von der App benutzt für neu erzeugte Tasks; das heisst, du kannst in deiner Import-Datei Task-IDs aus diesem Bereich benutzen, um einen ID-Konflikt zwischen „Task in der App durch Benutzer angelegt“ und „Task importiert via Datei“ zu verhindern.
• Das Importieren unterstützt optional den „MERGE“ Modus (anstelle des Standards „Ganze Liste beim Importieren ersetzen“). Wenn aktiviert, dann werden nur neue Tasks angelegt bzw bestehende aktualisiert (anhand der Task-ID); bereits bestehende Tasks, welche nicht in der Import-Datei sind, werden unverändert beibehalten.
Füge folgende Zeile in der Importdatei ein um dies zu aktivieren:
!MERGE
Tasklöschung im „MERGE“ Modus kann erzwungen werden mit dieser Anweisung (eine Zeile pro Löschung):
!DELETE {taskid}

(D) API Aufruf
Die Tasks Textdatei kann via Android App API Aufruf exportiert und importiert werden. Beispiele:
// export Button btExport = new Button(this); btExport.setText("Tasks Export Test"); btExport.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(); // for "Pro" use "com.dynamicg.timerecording.pro" intent.setComponent(new ComponentName("com.dynamicg.timerecording" , "com.dynamicg.timerecording.PublicServices")); intent.setAction("com.dynamicg.timerecording.TASKLIST_EXPORT"); BroadcastReceiver resultReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { Bundle result = this.getResultExtras(true); System.out.println("## EXPORT STATUS> "+result.getString("STATUS")); System.out.println("## EXPORT FILEPATH> "+result.getString("FILEPATH")); String data = result.getString("DATA"); // this is the full file content of file pointed to by FILEPATH System.out.println("## EXPORT DATA LEN> "+(data!=null ? data.length() : -1)); System.out.println("## EXPORT ERRORS> "+result.getString("ERRORS")); } }; context.sendOrderedBroadcast(intent, null, resultReceiver, null, 0, null, null); } }); body.addView(btExport);
// import Button btImport = new Button(this); btImport.setText("Tasks Import Merge Test"); btImport.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(); // for "Pro" use "com.dynamicg.timerecording.pro" intent.setComponent(new ComponentName("com.dynamicg.timerecording" , "com.dynamicg.timerecording.PublicServices")); intent.setAction("com.dynamicg.timerecording.TASKLIST_IMPORT"); String data = "### TEST IMPORT WITH MERGE ###" +"\n!MERGE" +"\n20001|Import-Task1|Import-ClientA" +"\n20002|Import-Task2|Import-ClientA" +"\n20003|Import-Task3|Import-ClientB" ; intent.putExtra("DATA", data); BroadcastReceiver resultReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { Bundle result = this.getResultExtras(true); System.out.println("## IMPORT STATUS> "+result.getString("STATUS")); System.out.println("## IMPORT INFO> "+result.getString("INFO")); System.out.println("## IMPORT ERRORS> "+result.getString("ERRORS")); } }; context.sendOrderedBroadcast(intent, null, resultReceiver, null, 0, null, null); } }); body.addView(btImport);



  [  Nach oben  ]  
  [  Index  ]  
  [  © DynamicG  ]