今天同事在HANA STUDIO中用属性视图开发时,遇到有某张表的权限且能正常查看,但是放到Projection中时再查看这个Projection时发现空数据,我一看,好家伙,这不是我好多年前踩过的坑吗,如果遇到相同的问题,那就可能就是你模型Default Client的配置问题了

什么是Session Client ,Cross Client

  • Session Client: 如果使用session client作为默认客户端值,那么在运行时,模型将根据用户配置文件中指定的session client值筛选表数据。
  • Cross Client:如果使用cross client作为默认客户端值,那么模型不会针对任何客户端过滤表数据,你会看到与所有客户端相关的值,也就是这个表的所有内容。

而在HANA Studio中,模型默认的client为Session Client,这样出现开头说的那种情况就很好理解了

Session Client的生效场景

在HANA中,只有极少数的表符合下列要求:

  • 字段名称为MANDTCLIENT

  • 字段类型为navchar (3).

  • 它是表中的第一个字段

  • 它是表的主键的一部分

如果在实际的环境中,你有一张表恰好满足了这些条件,那么恭喜你,你就会出现开头说的那种百思不得骑姐的问题。

要注意的是,只要表里有一个字段满足上述条件就会出发HANA的机制,无论你是否使用这个字段

查看用户的session client设定

点开HANA>Security>Users>你自己的用户,然后见下图最后一行,可以看到,我这边用户默认的Session Client为空

用户的session client

实际案例

数据准备

1
2
3
4
5
6
7
8
9
--创建一张满足Session Client会生效的表
CREATE COLUMN TABLE "SUSER"."TEMP_ADIL0317" (
"MANDT" NVARCHAR(3),
"NAME" NVARCHAR(5),
"SSEX" VARCHAR(5),
PRIMARY KEY ("MANDT")) UNLOAD PRIORITY 5 AUTO MERGE
;
--准备一条数据
insert into "SUSER"."TEMP_ADIL0317" values('100','Adil','男');

上模型

模型

就是这么朴实无华的一个模型,看结果

输出结果

我的数呢??????????????????

调整模型

在模型的S emantics>View Properties中,将Default Client调整为Cross Client

模型配置

激活查看结果

最终结果

总结与反思

​当你所用到的表刚刚刚刚好满足那些条件的时候,HANA模型会自动将MANDT或者CLENT作为一个过滤条件,去过滤你默认的seeion client,这时候当你的默认值与底表中的MANDT或者CLIENT不相同时,则会出现你啥也看不到的情况。

然而我感觉这可能是SAP官方为了解决不同用户在使用同一张表时,可以为用户做权限的一种方式吧。

如果你有什么更好的理解或见解,请在下方留言共同交流。