Domanda

Ho un modulo di InfoPath 2007 con diverse viste, destinati ad essere utilizzati in un browser. Ho problemi precompilarlo un campo di una tabella ripetuta, iniziando con un determinato valore e quindi utilizzando un valore predefinito formula derivata.

Nella visualizzazione Summary, chiedo TotalCost di un progetto e di spesa programmato l'anno fiscale in corso di (CurrentFYSpend):

+------------------------------+
|  Project Summary             |
+------------------------------+
|  Total Cost:       $100,000  |  -- TotalCost
|  Current FY Spend: $ 25,000  |  -- CurrentFYSpend
+------------------------------+
Sulla prossima vista (Detail), ho una tabella FYSpending ripetuta in cui l'utente ha bisogno di uscire TotalCost del progetto su un numero arbitrario di esercizi. La tabella FYSpending ha un campo YearlyCost che sostiene la spesa stimata di quell'anno. Sotto la tabella ripetuta ho campi RunningTotal e Remaining. RunningTotal ha un valore predefinito di sum(YearlyCost); Remaining ha un valore predefinito di TotalCost - sum(YearlyCost); insieme mostrano all'utente come gran parte del totale è già stato rappresentato, e quanto hanno ancora bisogno di uscire in fila anno fiscale.

Quando è necessario inserire la vista Detail, il campo YearlyCost della prima riga della tabella ripetuta FYSpending deve essere presente il valore CurrentFYSpend:

+--------------------------------+
|  Project Detail                |
+--------------------------------+
|  Total Cost:        $100,000   |  <- TotalCost
|                                |
|  Fiscal Year Spending:         |
|  +---------------------------+ |  <- FYSpending repeating table
|  |  FY  |        Yearly Cost | 
|  +---------------------------+ |  <- FYSpending repeating table
|  | 2009 |           $ 25,000 | |  <- YearlyCost[1], from Summary CurrentFYSpend
|  +---------------------------+ |
|  | Add Fiscal Year |           |
|  +-----------------+           |
|                                |
|  Running Total:     $ 25,000   |
|  Remaining:         $ 75,000   |  <- TotalCost - sum(YearlyCost)
+--------------------------------+

Quando l'utente aggiunge una nuova riga anno fiscale, voglio che il valore predefinito di campo YearlyCost della nuova riga da calcolare come l'importo rimanente: YearlyCost[n] = TotalCost - sum(YearlyCost):

+--------------------------------+
|  Project Detail                |
+--------------------------------+
|  Total Cost:        $100,000   |
|                                |
|  Fiscal Year Spending:         |
|  +---------------------------+ | 
|  |  FY  |        Yearly Cost | |
|  +---------------------------+ |
|  | 2009 |           $ 25,000 | |
|  | 2010 |           $ 50,000 | |  -- YearlyCost[2], calc'd by rule on Add Row  
|  +---------------------------+ |
|  | Add Fiscal Year |           |
|  +-----------------+           |
|                                |
|  Running Total:     $ 75,000   |
|  Remaining:         $ 25,000   |
+--------------------------------+

Ho problemi perché il conflitto due azioni Precompilazione tra loro e sembrano essere la creazione di una condizione di competizione. Ho cercato di impostare una regola sul campo Summary del CurrentFYSpend per impostare il valore di FYSpending di YearlyCost, quindi impostare un valore predefinito sul campo YearlyCost per impostare Value: TotalCost - sum(YearlyCost). Quando ho salvare il modulo, ottengo il seguente errore:

  

è verificato un errore nel codice del modulo.   Il numero di chiamate al Modificato   evento per un singolo aggiornamento nei dati   superato il limite massimo.

(Grazie, InfoPath, per tale specifico messaggio di errore! Quanto ho bisogno di pagare per ottenere il nome dell'oggetto che ha attivato l'evento, o che si è tentato di aggiornare?)

In ogni caso, qualcuno può descrivere una tecnica per realizzare questo? In sintesi,

  1. popolare YearlyCost prima di fila dal CurrentFYSpend della vista precedente
  2. permettere l'override YearlyCost della prima fila, e popolare, successivamente, il valore aggiunto di default YearlyCost le righe per TotalCost - sum(YearlyCost)
È stato utile?

Soluzione 2

E un'altra tecnica da Jimmy Riche presso il infopathdev.com forum :

CurrentFYSpend ha una regola che imposta YearlyCost = .

RunningTotal ha un valore predefinito di sum(YearlyCost), aggiornato quando la formula è recalc'd. Remaining ha un valore predefinito di TotalCost - RunningTotal, aggiornato quando la formula è recalc'd.

Infine, il campo YearlyCost nella tabella ripetuta ha un valore predefinito di

(Remaining) * (Remaining > 0), non aggiornati quando la formula è recalc'd. (Trucco pulito, eh?)

Questo funziona bene, anche se la formula per YearlyCost è, um, non ovvie. Ma, ho constatato che un sacco di XPath è così - è necessario trovare soluzioni non ovvie per cose che sarebbe morto semplice in un linguaggio imperativo. In ogni caso, questo funziona, quindi sto attuazione.

Altri suggerimenti

OK, ho ricevuto una risposta da Alec Pojidaev , che è piuttosto l'esperto di InfoPath. Egli dice:

Hai problemi di coppia sono stato in grado di individuare. Il primo è che hai controllato casella di controllo "Aggiorna questo valore quando risultato della formula viene ricalcolato" su YearlyCost campo. Il suo funzionamento una volta in modo da non volete ricalcolare esso.

Il secondo problema è la formula stessa. Il risultato del vostro ../../../my:TotalCost - sum(.) formula è assolutamente lo stesso di ../../../my:TotalCost - .
sum () funzione non hanno alcun senso in quel contesto.

Se ho capito la tua intenzione di correggere la formula giusta dovrebbe essere: ../../../my:TotalCost - sum(../../my:FY/my:YearlyCost)

Dopo aver fatto queste modifiche, il modulo lavorato come desiderato.

Il sum(.) nella formula è stata generata automaticamente. Ho costruito la formula attraverso point-and-click, piuttosto che scrivere l'espressione XPath. Quando ho aggiunto la funzione sum() e selezionato il campo YearlyCost, l'editor di formule sostituito YearlyCost con un . ho pensato che sapeva ciò che stava facendo, così ho lasciato da solo. Vedo che ho bisogno di prestare molta attenzione a ciò che viene generato XPath sottostante.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top