我想在此自定义函数中添加第二个Address字段(即Apt。#101)。如果你想,你可以解释一下Case(不是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
)
答案 0 :(得分: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
)
答案 1 :(得分: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 )
argg为9999的LeftWords函数(或其他一些适当大的值)会删除任何尾随的换行符或空格,如果city,state和zip都为空,则可能会发生这种情况。
答案 2 :(得分: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 )
这样会更简单。