Per le organizzazioni che utilizzano i fogli ore e i budget di Asana, la creazione di resoconti periodici è essenziale per una contabilità e un libro paga accurati. Sebbene Asana fornisca solide viste in-app, potresti occasionalmente aver bisogno di un'esportazione CSV completa di tutte le voci temporali nell'intero dominio per l'auditing esterno o l'elaborazione personalizzata alla fine di un mese o di un trimestre.
Questo articolo spiega come usare l’API Asana per aggregare le voci di tempo da tutto lo spazio di lavoro e formattarle in un file CSV pulito e pronto per la contabilità che soddisfi i tuoi requisiti interni.
Nota
Sebbene questa guida sia pensata per gli utenti dell’add-on Fogli ore e budget, questo metodo di esportazione basato su API è disponibile anche per gli utenti non add-on che registrano il tempo tramite i campi delle attività standard di Asana.
Perché esportare tramite API?
Sebbene l'interfaccia utente di Asana offra potenti dashboard, l'esportazione tramite API ti consente di:
- Automatizzare la creazione di resoconti: pianifica esportazioni mensili o trimestrali per il tuo team finanziario senza clic manuali.
- Granularità dell’audit: accedi a metadati specifici, come lo stato delle attività, la priorità e i GID di inserimento, che sono fondamentali per la tenuta dei registri.
- Integrazione di sistema: trasferisci facilmente i tuoi dati relativi al tempo di Asana in software ERP o di gestione delle retribuzioni.
Per garantire la compatibilità con le pratiche contabili standard, lo script di esportazione dovrebbe produrre un file CSV contenente i seguenti campi, come mostrato nelle esportazioni della vista revisore:
Colonna | Descrizione |
Nome attività | Il titolo dell’attività in cui è stato registrato il tempo. |
Tempo (ore) | Durata totale convertita da minuti a ore decimali. |
Data | Il giorno specifico in cui è stato eseguito il lavoro. |
Mittente | Il nome del membro del team che ha registrato lasso di tempo. |
GID attività | L’identificatore univoco per l’attività di Asana. |
GID del progetto | L’identificatore univoco del progetto principale. |
Stato delle attività | Indica se l’attività è attualmente “Aperta” o “Completata”. |
GID voce | L’identificatore univoco per il registro delle ore specifico. |
Implementazione: esportazione tramite Python
Per esportare "tutto" il tempo, lo script deve iterare attraverso i progetti per trovare le attività, quindi recuperare le voci temporali per tali attività utilizzando l’endpoint Ottieni voci di monitoraggio del tempo per un’attività.
Prerequisiti
Lo script di esportazione
Python
import Asana
import pandas come pd
# Inizializza client
client = asana.Client.access_token('YOUR_PERSONAL_ACCESS_TOKEN')
workspace_gid = 'IL_TUO_GID_DELLO_SPAZIO_DI_LAVORO'
def export_domain_time():
all_time_data = []
# 1. Iterare tutti i progetti nello spazio di lavoro
projects = client.projects.get_projects({'spazio di lavoro': workspace_gid})
per project in projects:
# 2. Ottieni tutte le attività per il progetto
attività = client.tasks.get_tasks_for_project(project['gid'], opt_fields=[
"name", "gid", "completed", "completed_at", "priority"
])
for attività in attività:
# 3. Recupera le voci temporali per ogni attività
time_entries = client.time_tracking_entries.get_time_tracking_entries_for_task(
attività['gid'],
opt_fields=['created_by.name', 'duration_minutes', 'entered_on', 'gid']
)
per l'inserimento in time_entries:
# Calcola le ore in formato decimale
hours = round(entry[’duration_minutes’] / 60, 2)
# Costruisci la riga in modo che corrisponda al modello CSV
all_time_data.append({
"Nome attività": task['name'],
"Time (hours)": hours,
"Data": entry['entered_on'],
"Submitter": entry['created_by']['name'],
"GID attività": task['gid'],
"GID progetto": project['gid'],
"Task Status": "Completed" if task['completed'] else "Open",
"Data di completamento attività": task.get('completed_at', ''),
"Task Priority": task.get('priority', ''),
"GID voce": entry['gid']
})
# 4. Salva in CSV
df = pd.DataFrame(all_time_data)
df.to_csv('asana_time_export_accounting.csv', index=False)
print("Esportazione completata: asana_time_export_accounting.csv")
export_domain_time()
Considerazioni critiche per domini di grandi dimensioni
Quando esegui questa esportazione per un’intera organizzazione, tieni a mente le seguenti best practice:
- Limiti di velocità dell’API: Asana ha dei limiti sul numero di richieste che puoi effettuare al minuto. Per i domini di grandi dimensioni, prendi in considerazione l’aggiunta di time.sleep() o l’utilizzo della logica di ripetizione integrata nella raccolta di Asana.
- Filtro per data: per la contabilità mensile, utilizza il campo entered_on all’interno dello script per filtrare solo per il periodo pertinente (ad esempio, il mese precedente).
- Autorizzazioni: assicurati che il token di accesso personale appartenga a un account di servizio o a un amministratore che abbia accesso a tutti i progetti pertinenti, in modo che nessuna voce venga ignorata.