Condividi tramite

é possibile estrarre una stringa da una colonna "fileleafref" in un'altra colonna di una libreria SharePoint?

Anonimo
2025-07-02T09:47:10+00:00

Salve,

ho una libreria su SharePoint ed ho necessità di estrarre una stringa contenente tutto ciò che viene dopo il simbolo "_". Il problema è che non posso farlo con una colonna calcolata perchè queste non possono accedere a campi di sistema come FileLeafRef. Nel mio caso la colonna si chiama "Name" ed è evidenziata da un asterisco rosso. Sapete come posso fare? Ho provato anche con PowerAutomate senza successo.

Grazie in anticipo della collaborazione.

Saluti

Microsoft 365 e Office | SharePoint | Altro | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2025-07-02T13:27:11+00:00

La risposta è stata tradotta automaticamente. Di conseguenza, potrebbero esserci errori grammaticali o parole insolite.

Ciao Finamore Remo, 

Grazie per la tua risposta e apprezzo molto le informazioni che mi hai fornito. 

Apprezzo molto la vostra pazienza mentre esaminiamo la questione. Grazie per aver scelto Microsoft e apprezziamo il tuo supporto. 

In base ai dettagli, l'errore che si verifica in Power Automate, "Il flusso potrebbe avere un ciclo circolare", si verifica perché il flusso si attiva alla creazione o alla modifica del file (ad esempio, "Quando un file viene creato o modificato") e quindi aggiorna le proprietà dello stesso file (ad esempio, l'impostazione della colonna ExtractedName). Questo aggiornamento conta come una modifica, che può riattivare il flusso, creando un ciclo infinito. Di seguito, spiegherò perché questo accade, come risolverlo in Power Automate e fornirò un approccio alternativo se Power Automate continua a essere problematico. 

Correggere il flusso di Power Automate per evitare cicli infiniti 

Per evitare il ciclo circolare, è necessario aggiungere la logica per garantire che il flusso aggiorni il file solo quando necessario, impedendone il riattivazione. Ecco come modificare il flusso di Power Automate: 

  1. Crea la colonna personalizzata:  
    • Assicurati di avere una colonna di testo (ad esempio, ExtractedName) nella tua libreria SharePoint per archiviare la stringa estratta.
  2. Modifica il flusso:  
    • Trigger: mantenere il trigger "Quando un file viene creato o modificato (solo proprietà)" per la raccolta di SharePoint.
  • Ottieni le proprietà del file:
  1. Aggiungere un'azione "Ottieni proprietà file" per recuperare i metadati dell'elemento corrente, tra cui FileLeafRef (Name) e ExtractedName.
  2. Utilizzare l'ID del trigger.
  • Aggiungere una condizione per evitare cicli:
  1. Aggiungere un'azione "Condizione" per verificare se la colonna ExtractedName contiene già il valore corretto (o non è vuota, a seconda delle esigenze).
  2. Condizione di esempio:
  3. Espressione: triggerOutputs()? ['body/ExtractedName'] non è uguale a split(triggerOutputs()?[' body/{Name}'], '_')? [1] 
    1. In questo modo viene verificato se il valore ExtractedName corrente differisce dalla stringa estratta dopo "_".
    2. In alternativa, se si desidera eseguire l'aggiornamento solo quando ExtractedName è vuoto:  
      1. Espressione: empty(triggerOutputs()?[' body/ExtractedName']) è uguale a true.
  • Se Sì (condizione vera):

Aggiungere un'azione "Componi" per estrarre la stringa dopo "_": 

split(triggerOutputs()?[' body/{Name}'], '_')? [1] 

  • Aggiungere un'azione "Aggiorna proprietà file" per impostare ExtractedName sull'output dell'azione "Componi".
  • Utilizzare l'ID del trigger per identificare il file

Se no (condizione false):  

  • Non fare nulla (lasciare vuoto questo ramo) per evitare aggiornamenti non necessari.

Maniglia mancante "_" (opzionale):  

  • Per evitare errori se il nome di un file manca di "_", aggiungi un'altra condizione prima della divisione: 
    • Espressione: contains(triggerOutputs()?[' body/{Name}'], '_') è uguale a true.
    • Se false, impostare ExtractedName su un valore predefinito (ad esempio, una stringa vuota o l'intero FileLeafRef).

Testare il flusso:  

  • Carica un nuovo file o modifica il nome di uno esistente.
  • Controllare la cronologia di esecuzione del flusso per assicurarsi che venga elaborata correttamente e che aggiorni ExtractedName una sola volta.
  • Verificare che le esecuzioni successive non vengano attivate a meno che il nome del file non cambi.

Utilizzare una condizione di trigger in Power Automate 

Invece di una condizione all'interno del flusso, è possibile aggiungere una condizione di attivazione per impedire l'esecuzione del flusso quando non è necessario. Questo è più efficiente in quanto impedisce al flusso di attivarsi. 

  1. Imposta il flusso:  
    • Utilizzare lo stesso trigger: "Quando un file viene creato o modificato (solo proprietà)".
    • Aggiungere le azioni "Ottieni proprietà file", "Componi" (con espressione split) e "Aggiorna proprietà file" come descritto nella Soluzione 1.
  2. Aggiungi una condizione di attivazione:  
    • Nelle impostazioni di trigger del flusso aggiungere una condizione di trigger per eseguire il flusso solo quando la colonna ExtractedName è vuota o non corrisponde all'output desiderato.
    • Esempio di condizione trigger:

@not(uguale a(triggerOutputs()?[' corpo/ExtractedName'], split(triggerOutputs()?[' body/{Name}'], '_')? [1])) 

  • In questo modo si garantisce che il flusso venga eseguito solo se è necessario aggiornare ExtractedName.
  • In alternativa, per eseguire solo quando ExtractedName è vuoto

@empty(triggerOutputs()?[' body/ExtractedName']) 

Passaggi per aggiungere la condizione di attivazione:  

  • In Power Automate, vai alle impostazioni del trigger (fai clic sui tre punti sul trigger e seleziona "Impostazioni").
  • Aggiungere l'espressione della condizione di attivazione in "Condizioni di attivazione".
  • Salvare e testare il flusso.

Prova:  

  • Caricare o modificare un file e verificare che ExtractedName venga aggiornato correttamente senza riattivarlo.

Se PSe Automate continua a causare problemi (ad esempio, a causa di autorizzazioni, complessità o restrizioni dell'ambiente), è possibile utilizzare uno script PowerShell per elaborare i file nella libreria di SharePoint. Si tratta di un processo batch una tantum o pianificato piuttosto che di una soluzione automatizzata basata su trigger. 

  1. Prerequisiti:  
    • Installare il modulo PowerShell PnP (Install-Module -Name PnP.PowerShell).
    • Assicurarsi di disporre delle autorizzazioni per eseguire script sul sito di SharePoint.
  2. Script per estrarre la stringa dopo "_":

 

Esegui lo script:  

  • Sostituisci https://yourtenant.sharepoint.com/sites/yoursite con l'URL del tuo sito e YourLibraryName con il nome della tua libreria.
  • Eseguire lo script in PowerShell.
  • Elabora tutti i file nella libreria, estrae la stringa dopo "_" e aggiorna la colonna ExtractedName.

Attendiamo con ansia la tua risposta. Continueremo ad assisterti in caso di altre domande o in base alle informazioni fornite. Apprezzo sinceramente la vostra pazienza e collaborazione.   

Se la mia risposta è utile, contrassegnala come risposta, il che aiuterà sicuramente gli altri nella comunità che hanno domande simili a trovare soluzioni ai loro problemi più velocemente. 

Grazie e buona giornata!!  

Migliori saluti.      

Sting-Ng - Specialista del supporto della community Microsoft.

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

4 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2025-07-03T10:14:41+00:00

    La risposta è stata tradotta automaticamente. Di conseguenza, potrebbero esserci errori grammaticali o parole insolite.

    Caro Remo Finamore,

    Grazie per il tuo feedback. Il che aiuterà sicuramente gli altri nella comunità che hanno domande simili a trovare soluzioni ai loro problemi più velocemente.  

    Sono così apprezzato per il tuo feedback

    Grazie e buona giornata!!  

    Migliori saluti.

    Sting-Ng - Specialista del supporto della community Microsoft.

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2025-07-03T10:01:28+00:00

    Grazie per la risposta. Ho corretto il flusso in Power Automate, ho ottenuto ancora l'avviso "Il flusso potrebbe avere un ciclo circolare", ma facendo partire il flusso ho ottenuto il risultato desiderato. Per me va bene così. Ancora Grazie.

    Saluti

    Remo Finamore

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2025-07-02T12:52:57+00:00

    La risposta è stata tradotta automaticamente. Di conseguenza, potrebbero esserci errori grammaticali o parole insolite.

    Ciao Finamore Remo,  

    Grazie per la risposta, e le informazioni che mi hai dato le apprezzo davvero.    

    Apprezzo davvero la vostra pazienza mentre esaminiamo la questione. Grazie per aver scelto Microsoft e apprezziamo il tuo supporto. 

    L'estrazione di una stringa dopo il carattere di sottolineatura (_) dalla colonna FileLeafRef (spesso visualizzata come "Nome" nelle raccolte documenti di SharePoint) e l'archiviazione in un'altra colonna è effettivamente complicata perché le colonne calcolate di SharePoint non possono fare riferimento direttamente a campi di sistema come FileLeafRef. Poiché hai provato anche Power Automate senza successo, illustrerò una soluzione Power Automate affidabile per raggiungere questo obiettivo, insieme a una spiegazione del motivo per cui le colonne calcolate non funzionano e potenziali soluzioni alternative. 

    La colonna FileLeafRef (nome interno per la colonna "Nome" nelle raccolte documenti) è un campo di sistema in SharePoint e, come si è notato, le colonne calcolate non possono farvi riferimento direttamente. Questa limitazione è ben documentata; Ad esempio, il campo "Nome" non è visibile nell'editor di formule della colonna calcolata e i tentativi di utilizzarlo (ad esempio, [@FileLeafRef]) generano errori o valori vuoti. Inoltre, le formule di colonna calcolate di SharePoint non dispongono di funzioni avanzate di manipolazione delle stringhe come RIGHT o SUBSTRING che potrebbero facilmente estrarre il testo dopo un delimitatore come _. 

    Quindi ecco un passaggio per riprovare: 

    Crea un nuovo flusso:  

    • Vai a Power Automate (flow.microsoft.com) e crea un nuovo flusso cloud automatizzato.
    • Scegliere il trigger: SharePoint - Quando un file viene creato o modificato (solo proprietà).
    • Selezionare il sito di SharePoint e la raccolta documenti.

     

    Ottieni le proprietà del file:  

    • Aggiungere l'azione SharePoint - Ottieni proprietà file .
    • Impostare l'indirizzo del sito e il nome della raccolta nella raccolta documenti.
    • Per l'ID, utilizza l'ID contenuto dinamico del trigger per fare riferimento al file che ha attivato il flusso.

     

     

    Estrai stringa dopo il carattere di sottolineatura:  

    • Aggiungere un'azione Componi per estrarre la stringa dopo _.
    • Utilizzare l'espressione seguente nell'azione Componi per ottenere la sottostringa dopo il carattere di sottolineatura:

    last(split(outputs('Get_file_properties')?[' {FileLeafRef}'], '_')) 

    Spiegazione: La funzione split divide il valore FileLeafRef (il nome del file) in un array basato sul delimitatore _. L'ultima funzione accetta l'ultimo elemento di tale array, che è la sottostringa dopo il carattere di sottolineatura finale. Ad esempio, se FileLeafRef è Document_12345.pdf, l'output sarà 12345.pdf. 

    Aggiorna le proprietà del file:  

    • Aggiungere l'azione SharePoint - Aggiorna proprietà file .
    • Imposta l'indirizzo del sito, il nome della libreria e l'ID (usa l'ID del trigger).
    • Nel campo ExtractedName (o nella colonna personalizzata), selezionare l'output dell'azione Componi del passaggio 3 (ad esempio, Output dell'azione Compone).

     

    Salva e verifica il flusso:  

    • Salva il flusso e testalo caricando o modificando un file nella libreria.
    • Assicurati che il nome del file contenga un carattere di sottolineatura (ad esempio, Test_Document.pdf). Il flusso deve estrarre Document.pdf e scriverlo nella colonna ExtractedName.

    Esempio di gestione dei nomi di file: 

    • Ingresso: Report_2025_Analysis.docx → Uscita: Analysis.docx
    • Input: NoUnderscore.pdf → Output: NoUnderscore.pdf (nome completo, poiché non c'è un carattere di sottolineatura)
    • Input: Test_123_456.pdf → Output: 456.pdf (prende la parte dopo l'ultimo underscore)

     

    Soluzione alternativa: usare Power Automate per popolare una colonna del titolo: 

    Se preferisci non creare una nuova colonna personalizzata, puoi usare Power Automate per copiare il valore FileLeafRef nella colonna Title e quindi estrarre la sottostringa in un'altra colonna. Tuttavia, ciò richiede che la colonna Titolo sia abilitata nella libreria: 

    • Segui lo stesso flusso di cui sopra, ma nell'azione Aggiorna proprietà file imposta il campo Titolo sul valore FileLeafRef (disponibile come contenuto dinamico).
    • Aggiungere una seconda azione Aggiorna proprietà file per impostare la colonna personalizzata (ad esempio, ExtractedName) utilizzando la stessa espressione last(split(...)), facendo invece riferimento al campo Titolo.

    Questo approccio è meno comune in quanto comporta l'aggiornamento di due campi, ma può essere utile se si desidera mantenere il nome del file originale nella colonna Titolo per altri scopi. 

    Se è necessario estrarre una parte diversa del nome del file (ad esempio, tra trattini bassi specifici o prima dell'estensione), è possibile modificare la divisione e l'ultima espressione. Per esempio: 

    • Per ottenere la parte compresa tra il primo e il secondo trattino basso (ad esempio, 123 da Test_123_456.pdf):

    split(outputs('Get_file_properties')?[' {FileLeafRef}'], '_')[1] 

    Per escludere l'estensione del file: 

    first(split(last(split(outputs('Get_file_properties')?[' {FileLeafRef}'], '_')), '.')) 

    Per garantire il funzionamento del flusso: 

    • Carica i file di test con nomi come Test_Document.pdf, NoUnderscore.pdf e Multi_Part_Name.pdf.
    • Controllare la cronologia di esecuzione del flusso per verificare gli aggiornamenti delle stringhe e delle colonne estratte.
    • Verificare che la colonna ExtractedName nella libreria mostri i valori corretti.

     

    Attendiamo con ansia la tua risposta. Continueremo ad assisterti in caso di altre domande o in base alle informazioni fornite. Apprezzo sinceramente la vostra pazienza e collaborazione.   

     

    Se la mia risposta è utile, contrassegnala come risposta, il che aiuterà sicuramente gli altri nella comunità che hanno domande simili a trovare soluzioni ai loro problemi più velocemente. 

    Grazie e buona giornata!!  

     

    Migliori saluti.      

    Sting-Ng - Specialista del supporto della community Microsoft. 

    Grazie Sting-Ng per la rapida risposta.

    Ho provato entrambi i metodi ma ottengo sempre lo stesso tipo di errore:

    "Your flow was saved, but with a warning: Your flow may have a circular loop Actions in this flow may result in an infinite trigger loop. Please ensure you add appropriate conditional checks to prevent this flow from triggering itself."

    sai da cosa dipende?

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2025-07-02T10:08:37+00:00

    La risposta è stata tradotta automaticamente. Di conseguenza, potrebbero esserci errori grammaticali o parole insolite.

    Ciao Finamore Remo,  

    Grazie per la risposta, e le informazioni che mi hai dato le apprezzo davvero.    

    Apprezzo davvero la vostra pazienza mentre esaminiamo la questione. Grazie per aver scelto Microsoft e apprezziamo il tuo supporto. 

    L'estrazione di una stringa dopo il carattere di sottolineatura (_) dalla colonna FileLeafRef (spesso visualizzata come "Nome" nelle raccolte documenti di SharePoint) e l'archiviazione in un'altra colonna è effettivamente complicata perché le colonne calcolate di SharePoint non possono fare riferimento direttamente a campi di sistema come FileLeafRef. Poiché hai provato anche Power Automate senza successo, illustrerò una soluzione Power Automate affidabile per raggiungere questo obiettivo, insieme a una spiegazione del motivo per cui le colonne calcolate non funzionano e potenziali soluzioni alternative. 

    La colonna FileLeafRef (nome interno per la colonna "Nome" nelle raccolte documenti) è un campo di sistema in SharePoint e, come si è notato, le colonne calcolate non possono farvi riferimento direttamente. Questa limitazione è ben documentata; Ad esempio, il campo "Nome" non è visibile nell'editor di formule della colonna calcolata e i tentativi di utilizzarlo (ad esempio, [@FileLeafRef]) generano errori o valori vuoti. Inoltre, le formule di colonna calcolate di SharePoint non dispongono di funzioni avanzate di manipolazione delle stringhe come RIGHT o SUBSTRING che potrebbero facilmente estrarre il testo dopo un delimitatore come _. 

    Quindi ecco un passaggio per riprovare: 

    Crea un nuovo flusso:  

    • Vai a Power Automate (flow.microsoft.com) e crea un nuovo flusso cloud automatizzato.
    • Scegliere il trigger: SharePoint - Quando un file viene creato o modificato (solo proprietà).
    • Selezionare il sito di SharePoint e la raccolta documenti.

    Ottieni le proprietà del file:  

    • Aggiungere l'azione SharePoint - Ottieni proprietà file .
    • Impostare l'indirizzo del sito e il nome della raccolta nella raccolta documenti.
    • Per l'ID, utilizza l'ID contenuto dinamico del trigger per fare riferimento al file che ha attivato il flusso.

    Estrai stringa dopo il carattere di sottolineatura:  

    • Aggiungere un'azione Componi per estrarre la stringa dopo _.
    • Utilizzare l'espressione seguente nell'azione Componi per ottenere la sottostringa dopo il carattere di sottolineatura:

    last(split(outputs('Get_file_properties')?[' {FileLeafRef}'], '_')) 

    Spiegazione: La funzione split divide il valore FileLeafRef (il nome del file) in un array basato sul delimitatore _. L'ultima funzione accetta l'ultimo elemento di tale array, che è la sottostringa dopo il carattere di sottolineatura finale. Ad esempio, se FileLeafRef è Document_12345.pdf, l'output sarà 12345.pdf. 

    Aggiorna le proprietà del file:  

    • Aggiungere l'azione SharePoint - Aggiorna proprietà file .
    • Imposta l'indirizzo del sito, il nome della libreria e l'ID (usa l'ID del trigger).
    • Nel campo ExtractedName (o nella colonna personalizzata), selezionare l'output dell'azione Componi del passaggio 3 (ad esempio, Output dell'azione Compone).

    Salva e verifica il flusso:  

    • Salva il flusso e testalo caricando o modificando un file nella libreria.
    • Assicurati che il nome del file contenga un carattere di sottolineatura (ad esempio, Test_Document.pdf). Il flusso deve estrarre Document.pdf e scriverlo nella colonna ExtractedName.

    Esempio di gestione dei nomi di file: 

    • Ingresso: Report_2025_Analysis.docx → Uscita: Analysis.docx
    • Input: NoUnderscore.pdf → Output: NoUnderscore.pdf (nome completo, poiché non c'è un carattere di sottolineatura)
    • Input: Test_123_456.pdf → Output: 456.pdf (prende la parte dopo l'ultimo underscore)

    Soluzione alternativa: usare Power Automate per popolare una colonna del titolo: 

    Se preferisci non creare una nuova colonna personalizzata, puoi usare Power Automate per copiare il valore FileLeafRef nella colonna Title e quindi estrarre la sottostringa in un'altra colonna. Tuttavia, ciò richiede che la colonna Titolo sia abilitata nella libreria: 

    • Segui lo stesso flusso di cui sopra, ma nell'azione Aggiorna proprietà file imposta il campo Titolo sul valore FileLeafRef (disponibile come contenuto dinamico).
    • Aggiungere una seconda azione Aggiorna proprietà file per impostare la colonna personalizzata (ad esempio, ExtractedName) utilizzando la stessa espressione last(split(...)), facendo invece riferimento al campo Titolo.

    Questo approccio è meno comune in quanto comporta l'aggiornamento di due campi, ma può essere utile se si desidera mantenere il nome del file originale nella colonna Titolo per altri scopi. 

    Se è necessario estrarre una parte diversa del nome del file (ad esempio, tra trattini bassi specifici o prima dell'estensione), è possibile modificare la divisione e l'ultima espressione. Per esempio: 

    • Per ottenere la parte compresa tra il primo e il secondo trattino basso (ad esempio, 123 da Test_123_456.pdf):

    split(outputs('Get_file_properties')?[' {FileLeafRef}'], '_')[1] 

    Per escludere l'estensione del file: 

    first(split(last(split(outputs('Get_file_properties')?[' {FileLeafRef}'], '_')), '.')) 

    Per garantire il funzionamento del flusso: 

    • Carica i file di test con nomi come Test_Document.pdf, NoUnderscore.pdf e Multi_Part_Name.pdf.
    • Controllare la cronologia di esecuzione del flusso per verificare gli aggiornamenti delle stringhe e delle colonne estratte.
    • Verificare che la colonna ExtractedName nella libreria mostri i valori corretti.

    Attendiamo con ansia la tua risposta. Continueremo ad assisterti in caso di altre domande o in base alle informazioni fornite. Apprezzo sinceramente la vostra pazienza e collaborazione.   

    Se la mia risposta è utile, contrassegnala come risposta, il che aiuterà sicuramente gli altri nella comunità che hanno domande simili a trovare soluzioni ai loro problemi più velocemente. 

    Grazie e buona giornata!!  

    Migliori saluti.      

    Sting-Ng - Specialista del supporto della community Microsoft.

    La risposta è stata utile?

    0 commenti Nessun commento