0

我想在这个自定义函数中添加第二个地址字段(即 Apt.#101)。如果你愿意,你可以解释 Case(not IsEmpty 是如何工作的,我愿意尝试在自己中添加第二个地址字段......

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

)
4

3 回答 3

1
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

)
于 2009-12-16T02:38:48.747 回答
0

我建议取消 let 语句,这似乎使它更加混乱。最终目标是,您想将一堆地址值连接在一起。如果地址值不为空,则需要在相关元素之后放置换行符(或逗号 + 空格,表示城市)。像这样的东西:

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 )

arg 为 9999(或其他适当大的值)的 LeftWords 函数会删除任何尾随换行符或空格,如果 city、state 和 zip 都为空,则可能会发生这种情况。

于 2009-12-21T07:10:55.480 回答
0

使用List()功能:

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

这里的想法是该List()函数忽略空值,因此您不必测试它们是否为空。使用地址行,它会自动忽略空;使用 sity-state-ZIP 行,它会给你一个有效的列表,你所要做的就是替换分隔符。

如果您使用的是 FM Advanced,请定义一个自定义函数来加入具有给定分隔符的列表:

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

这将使它更简单。

于 2013-07-05T08:48:32.853 回答