Cómo rellenar previamente un campo sumado en una tabla de repetición de InfoPath

StackOverflow https://stackoverflow.com/questions/1590703

  •  22-09-2019
  •  | 
  •  

Pregunta

Tengo un formulario de InfoPath 2007 con varios puntos de vista, destinado a ser utilizado en un navegador. Estoy teniendo pre-rellenar un campo de una tabla de repetición, a partir de un valor dado y a continuación, utilizando un valor por defecto fórmula derivada de problemas.

En la vista Summary, pido TotalCost de un proyecto y la corriente del año fiscal prevé que el gasto (CurrentFYSpend):

+------------------------------+
|  Project Summary             |
+------------------------------+
|  Total Cost:       $100,000  |  -- TotalCost
|  Current FY Spend: $ 25,000  |  -- CurrentFYSpend
+------------------------------+
En la siguiente vista (Detail), tengo una tabla de repetición FYSpending donde el usuario tiene que salir TotalCost del proyecto durante un número arbitrario de los años fiscales. La tabla tiene un campo FYSpending YearlyCost que mantiene el gasto estimado de ese año. Debajo de la mesa repitiendo tengo campos RunningTotal y Remaining. RunningTotal tiene un valor predeterminado de sum(YearlyCost); Remaining tiene un valor predeterminado de TotalCost - sum(YearlyCost); Juntos se muestran al usuario la cantidad del total ya se ha tenido en cuenta, y lo mucho que todavía tienen que romper en una fila año fiscal.

Cuando primero entrar en la vista Detail, el campo YearlyCost de la primera fila de la FYSpending tabla de repetición debe ser poblado con el valor 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)
+--------------------------------+

Cuando el usuario agrega una nueva fila año fiscal, quiero que el valor por defecto del campo YearlyCost de la nueva fila que se calcula como la cantidad restante: 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   |
+--------------------------------+

tengo problemas porque el conflicto dos acciones rellenando previamente entre sí y parece estar creando una condición de carrera. Traté de establecer una regla en el campo de la Summary CurrentFYSpend para establecer el valor de FYSpending de YearlyCost, a continuación, establecer un valor predeterminado en el campo YearlyCost al conjunto Value: TotalCost - sum(YearlyCost). Cuando guardo la forma, me sale el siguiente error:

  

Se ha producido un error en el código del formulario.   El número de llamadas a la Cambiada   acontecimiento para una sola actualización de los datos   superado el límite máximo.

(Gracias, InfoPath, para tal mensaje de error específico! ¿Cuánto tengo que pagar para obtener el nombre del objeto que generó el evento, o que ha intentado actualización?)

De todos modos, ¿alguien puede describir una técnica para lograr esto? En resumen,

  1. YearlyCost de poblar primera fila de CurrentFYSpend de la vista anterior
  2. permitir anulando YearlyCost de la primera fila, y llenar posteriormente añadido valor predeterminado YearlyCost filas a TotalCost - sum(YearlyCost)
¿Fue útil?

Solución 2

Y otra técnica de Jimmy Riche en en los foros infopathdev.com :

CurrentFYSpend tiene una regla que establece YearlyCost = .

RunningTotal tiene un valor predeterminado de sum(YearlyCost), actualizado cuando se recalc'd la fórmula. Remaining tiene un valor predeterminado de TotalCost - RunningTotal, actualiza cuando se recalc'd la fórmula.

Finalmente, el campo YearlyCost en la tabla de repetición tiene un valor predeterminado de

(Remaining) * (Remaining > 0), no actualizado cuando se recalc'd la fórmula. (Puro truco, ¿eh?)

Esto funciona muy bien, aunque la fórmula para YearlyCost es, um, no evidente. Pero, estoy encontrando que una gran cantidad de XPath es como que - usted tiene que encontrar soluciones no evidentes a cosas que serían simples muertos en un lenguaje imperativo. De todos modos, esto funciona, así que estoy implementarlo.

Otros consejos

OK, tengo una respuesta de Alec Pojidaev , que es bastante el experto InfoPath. Dice:

tiene problemas de pareja que fue capaz de identificar. La primera es que marcar la opción "Actualizar este valor cuando el resultado de la fórmula se calcula de nuevo" en el campo YearlyCost. Su funcionamiento una vez por lo que no quiero a calcular de nuevo.

El segundo problema es la fórmula en sí. El resultado de su fórmula ../../../my:TotalCost - sum(.) es absolutamente el mismo que ../../../my:TotalCost - .
sum () la función tiene ningún sentido en ese contexto.

Si entiendo su intención de corregir la fórmula correcta debe ser: ../../../my:TotalCost - sum(../../my:FY/my:YearlyCost)

Después de hacer estos cambios, la forma trabajó como deseado.

El sum(.) en la fórmula fue generado automáticamente. Construí la fórmula a través de apuntar y hacer clic con el botón en lugar de escribir la expresión XPath. Cuando añadí la función sum() y seleccionado el campo YearlyCost, el editor de fórmulas reemplazado YearlyCost con un . pensé que sabía lo que estaba haciendo, así que lo dejé solo. Veo que tengo que prestar mucha atención a lo que subyace XPath se está generando.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top