Añadir una segunda línea de direcciones a esta función personalizada (FileMaker Pro)

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

  •  19-09-2019
  •  | 
  •  

Pregunta

Quiero añadir un segundo campo de direcciones en esta función personalizada (es decir. Apt. # 101). Si quisieras, podrías explicar cómo el caso (no funciona IsEmpty y yo estaría dispuesto a intentar añadir el segundo campo de dirección en mí mismo ...

Let(
[
    x1 = Name;
    x2 = x1 & Case(not IsEmpty(Address); Case(not IsEmpty(x1); "¶") & Address);
    x3 = Case(not IsEmpty(City); City & ", ") & Case(not IsEmpty(State); Upper ( State ) & " ") & Zip;
    x4 = x2 & Case(not IsEmpty(x3); "¶") & x3;
    x5 = x4 & Case(not IsEmpty(Country); Case( not IsEmpty(x4); "¶") & Country)
];

    x5

)
¿Fue útil?

Solución

Me gustaría recomendar la supresión de la sentencia let, parece hacerlo más confuso. El objetivo final es, desea concatenar un montón de valores de dirección juntos. Si un valor de dirección no está vacío, que desea poner un salto de línea (o un espacio coma +, para la ciudad) después de que el elemento en cuestión. Algo como esto:

LeftWords (
    Case (not IsEmpty(Customer::FullName) ; Customer::FullName & "¶" ) &
    Case (not IsEmpty(Address1) ; Address1 & "¶" ) &
    Case (not IsEmpty(Address2) ; Address2 & "¶" ) &
    Case (not IsEmpty(City) ; City & ", " ) &
    Case (not IsEmpty(State) ; Upper (State ) & " " ) &
    ZipCode
; 9999 )

La función LeftWords con una arg de 9999 (o algún otro valor adecuadamente grande) elimina cualquier salto de línea final o espacios en blanco, lo que podría suceder si la ciudad, estado y código postal están vacías.

Otros consejos

Let( [

   x1 = Customer::FullName;
   x2 = x1 & Case(not IsEmpty(Address1); Case(not IsEmpty(x1); "¶") & Address1);
   x3 = x2 & Case(not IsEmpty(Address2); Case(not IsEmpty(x2); "¶") & Address2);
   x4 = Case(not IsEmpty(City); City & ", ") & Case(not IsEmpty(State); Upper ( State ) & " ") & ZipCode;
   x5 = x3 & Case(not IsEmpty(x4); "¶") & x4 ];

x5

)

Utilice la función List():

List( 
 Address Line 1;
 Address Line 2;
 Substitute( List( Sity, Upper( State ); ZIP ); "¶"; " " );
 Country ) )

La idea aquí es que la función List() ignora los valores vacíos, por lo que no tiene que probar si están vacías o no. Con las líneas de dirección se ignorará automáticamente se vacía; sidad con la línea de estado-postal que le dará una lista válida y todo lo que tiene que hacer es sustituir el separador.

Si está utilizando FM avanzada, definir una función personalizada para unirse a una lista con un separador dado:

/* Join( separator; list *) */
Substitute( list; "¶"; separator )

Esto hará que sea más simple.

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