Voor organisaties die de urenstaten en budgetten van Asana gebruiken, is periodieke rapportage essentieel voor nauwkeurige boekhouding en salarisadministratie. Hoewel Asana robuuste in-app-weergaven biedt, heb je af en toe een uitgebreide CSV-export nodig van alle tijdinvoer in je hele domein voor externe audits of aangepaste verwerking aan het einde van een maand of kwartaal.
In dit artikel wordt uitgelegd hoe je de Asana API gebruikt om tijdinvoer uit je hele werkruimte samen te voegen en deze op te maken in een schone, boekhoudkundige CSV die voldoet aan je interne vereisten.
Opmerking
Hoewel deze handleiding is afgestemd op gebruikers van de invoegtoepassing urenstaten en budgetten, is deze op API gebaseerde exportmethode ook beschikbaar voor gebruikers zonder invoegtoepassing die tijd registreren via standaard Asana-taakvelden.
Waarom exporteren via API?
Hoewel de Asana-gebruikersinterface krachtige dashboards biedt, kun je met exporteren via API:
- Rapportage automatiseren: plan maandelijkse of driemaandelijkse exports voor je financiële team zonder handmatige klikken.
- Audit-granulariteit: toegang tot specifieke metadata, zoals taakstatus, prioriteit en invoer-GID's, die cruciaal zijn voor het bijhouden van gegevens.
- Systeemintegratie: voer je Asana-tijdgegevens eenvoudig in ERP- of salarissoftware.
Om compatibiliteit met standaard boekhoudpraktijken te garanderen, moet je exportscript een CSV produceren met de volgende velden zoals te zien in je exports voor beoordelaarsweergave:
Kolom | Beschrijving |
Taaknaam | De titel van de taak waar de tijd werd geregistreerd. |
Tijd (uren) | Totale duur omgezet van minuten naar decimale uren. |
Datum | De specifieke dag waarop het werk werd uitgevoerd. |
Indiener | De naam van het teamlid dat de tijd registreerde. |
Taak-GID | De unieke identificatiecode voor de Asana-taak. |
Project-GID | De unieke identificatie voor het bovenliggende project. |
Taakstatus | Of de taak momenteel 'Open' of 'Voltooid' is. |
Invoer-GID | De unieke identificatiecode voor het specifieke tijdlogboek. |
Implementatie: exporteren via Python
Om 'alle' tijd te exporteren, moet je script door je projecten gaan om taken te vinden en vervolgens tijdinvoer voor die taken ophalen met behulp van het eindpunt Tijdregistratie-items voor een taak ophalen.
Vereisten
Het exportscript
Python
importeer Asana
importeer pandas als pd
# Initialiseer Client
client = asana.Client.access_token('YOUR_PERSONAL_ACCESS_TOKEN')
workspace_gid = 'JOUW_WERKRUIMTE_GID'
def export_domain_time():
all_time_data = []
# 1. Doorloop alle projecten in de werkruimte
projects = client.projects.get_projects({'Werkruimte': workspace_gid})
voor project in projecten:
# 2. Haal alle taken voor het project op
tasks = client.tasks.get_tasks_for_project(project['gid'], opt_fields=[
'name', 'gid', 'Voltooid', 'completed_at', 'priority'
])
voor taak in taken:
# 3. Haal tijdinvoer op voor elke taak
time_entries = client.time_tracking_entries.get_time_tracking_entries_for_task(
task['gid'],
opt_fields=['created_by.name', 'duration_minutes', 'entered_on', 'gid']
)
voor invoer in time_entries:
# Bereken uren in decimaal formaat
hours = round(entry['duration_minutes'] / 60, 2)
# Bouw de rij om overeen te komen met het CSV-sjabloon
all_time_data.append({
"Taaknaam": task['name'],
"Tijd (uren)": uren,
"Datum": entry['entered_on'],
"Indiener": entry['created_by']['name'],
"Taak-GID": task['gid'],
"Project-GID": project['gid'],
"Taakstatus": "Voltooid" als taak['voltooid'] anders "Open",
"Voltooiingsdatum taak": task.get('completed_at', ''),
"Taakprioriteit": task.get('priority', ''),
"Invoer GID": entry['gid']
})
# 4. Opslaan in CSV
df = pd.DataFrame(all_time_data)
df.to_csv('asana_time_export_accounting.csv', index=False)
print("Export voltooid: asana_time_export_accounting.csv")
export_domain_time()
Kritieke overwegingen voor grote domeinen
Wanneer je deze export voor een hele organisatie uitvoert, houd dan de volgende beste praktijken in gedachten:
- API-snelheidslimieten: Asana heeft limieten voor het aantal aanvragen dat je per minuut kunt doen. Overweeg voor grote domeinen om time.sleep() toe te voegen of de ingebouwde herkansingslogica van de Asana-bibliotheek te gebruiken.
- Datumfiltering: gebruik voor maandelijkse boekhouding het veld entered_on in je script om alleen te filteren op de relevante periode (bijvoorbeeld de vorige maand).
- Machtigingen: Zorg ervoor dat het persoonlijke toegangstoken toebehoort aan een serviceaccount of een beheerder die toegang heeft tot alle relevante projecten, zodat er geen vermeldingen worden overgeslagen.