Manipolazione dei dati

Completato

È possibile usare i plug-in per centralizzare la logica che modifica o aumenta i dati. I plug-in istantanei sono utili perché permettono di completare l'azione su richiesta. Ad esempio, si potrebbe avere un plug-in istantaneo ScheduleService che usa un connettore per trovare il successivo slot di servizio disponibile dal servizio di prenotazione. Quindi, il connettore può creare una riga di dati correlata al richiedente per tenere traccia della prenotazione.

I plug-in automatizzati sono utili per modificare i dati o aggiungere righe di dati correlati dopo aver aggiunto la riga di dati primaria a Dataverse. Un vantaggio significativo dei plug-in automatizzati è che qualsiasi modifica ai dati apportata dai plug-in fa parte della transazione originale e il sistema completa o esegue il rollback tutte le modifiche. Ad esempio, si consideri uno scenario in cui si crea una riga di dati di progetto e quindi un plug-in eseguito al momento della creazione della riga crea alcune attività iniziali correlate al progetto. Se una di queste attività non è valida e la creazione ha esito negativo, il sistema eseguirà il rollback del progetto e di tutte le attività create.

Modifica dati prima del salvataggio

L'opzione Modifica dati prima del salvataggio si applica solo ai plug-in automatizzati eseguiti su eventi creati o aggiornati. In entrambi i casi è possibile impostare il plug-in in modo che venga eseguito prima dell'operazione, per avere l'opportunità di modificare i dati nella riga che si sta creando o aggiornando prima di procedere al salvataggio dei dati. Questa opzione è utile negli scenari in cui si desidera impostare alcuni valori predefiniti. Inoltre, è possibile usare la logica condizionale di Power Fx per far sì che le impostazioni predefinite dipendano da altri dati sulla riga che si sta modificando.

È necessario eseguire il plug-in prima dell'operazione e usare la funzione Set per modificare le colonne di dati. Questo approccio garantisce che le modifiche vengano incluse quando si salva la riga di dati anziché essere eseguite come aggiornamento separato, il che potrebbe causare un ciclo infinito o eventualmente attivare automazioni indesiderate a causa dell'aggiornamento separato.

L'esempio seguente mostra l'uso della funzione Set per modificare la colonna Budget nella riga del progetto che si sta creando.

Set(contoso_budget,1000)

È possibile usare questo approccio solo per modificare i dati sulla riga che attiva il plug-in. Non è possibile creare dati correlati nella fase precedente all'operazione poiché non è disponibile alcuna riga principale cui associare i dati correlati.

Un altro scenario comune è quando si desidera creare dati correlati a una riga di dati primaria. È possibile eseguire questa attività usando plug-in istantanei e automatizzati, sfruttando la funzione Collect per aggiungere i dati. Ad esempio, la seguente funzione aggiunge automaticamente il creatore del progetto come membro iniziale del team.

Collect([@'Team Members'],{Name: "David So",'Team Project': ThisRecord })

Nell'esempio precedente, ThisRecord è la riga del progetto passata su un plug-in istantaneo configurato con un ambito di entità per la tabella del progetto oppure viene passata su un plug-in automatizzato durante la creazione della tabella del progetto.

In alcuni scenari, è necessario usare la funzione Patch anziché la funzione Collect. Ad esempio, si potrebbe usare la funzione Patch quando si lavora con la colonna Regarding nella tabella Tasks per consentire al sistema di impostare correttamente la colonna Tema. Il motivo è che la colonna Regarding è polimorfica e può puntare a più tipi di righe di tabella diversi. L'esempio seguente mostra un plug-in creato per essere eseguito alla creazione di un progetto per aggiungere alcune attività iniziali di ogni progetto.

Patch([@Tasks], Collect([@Tasks], { Subject : "Review Project"} ),{ Regarding: ThisRecord });
Patch([@Tasks], Collect([@Tasks], { Subject : "Schedule Project Launch"} ),{ Regarding: ThisRecord });
Patch([@Tasks], Collect([@Tasks], { Subject : "Assign Project Lead"} ),{ Regarding: ThisRecord });

Nell'esempio precedente, la funzione Patch è stata combinata con la funzione Collect per aggiornare la colonna Regarding.

Un altro scenario comune è la rimozione condizionale di dati correlati. Ad esempio, si potrebbe creare un plug-in istantaneo chiamato Annulla progetto. Questo plug-in avrà un parametro di input di tipo EntityReference per il progetto che si sta annullando. Quindi, il plug-in potrebbe aggiornare la riga del progetto per indicare che è stato annullato e quindi trovare e rimuovere gli elementi di lavoro aperti in modo che nessuno possa lavorare sul progetto annullato. La logica seguente mostra l'espressione per trovare tutti gli elementi di lavoro correlati al progetto e illustra come usare ForAll per scorrere e chiamare Remove per ogni elemento di lavoro.

ForAll(Filter([@'Work Items'], 'Team Project'.'Team Project' = Project.'Team Project'),  Remove([@'Work Items'], ThisRecord))