高阶场景开发

1 可编程接口
类名:kd.bos.servicehelper.privacy.PrivacyCenterServiceHelper
方法名:isDesensitizeField
说明:根据属性元数据获取是否为脱敏字段
入参说明
| 参数 | 类型 | 说明 |
prop | kd.bos.dataentity.metadata.IDataEntityProperty | 属性元数据 |
localeId | java.lang.String | 多语言标识,需要脱敏的语种,如Lang.get().toString() |
operateType | java.lang.String | 操作类型,如PrivacyCenterServiceHelper.OPERATETYPE_EXPORT |
dynamicObject | kd.bos.dataentity.entity.DynamicObject | 单据对象 |
返回说明
类型 | 说明 |
| boolean | 是否脱敏字段 |
类名:kd.bos.servicehelper.privacy.PrivacyCenterServiceHelper
方法名:isDesensitizeField
说明:根据实体标识和属性标识获取是否为脱敏字段
入参说明
| 参数 | 类型 | 说明 |
entityNum | java.lang.String | 实体标识 |
fieldIdent | java.lang.String | 属性标识 基础资料支持层级,如currency.name |
localeId | java.lang.String | 多语言标识,需要脱敏的语种,如Lang.get().toString() |
operateType | java.lang.String | 操作类型,如PrivacyCenterServiceHelper.OPERATETYPE_EXPORT |
dynamicObject | kd.bos.dataentity.entity.DynamicObject | 单据对象 |
返回说明
| 类型 | 说明 |
| boolean | 是否脱敏字段 |
类名:kd.bos.servicehelper.privacy.PrivacyCenterServiceHelper
方法名:getDesensitizeValue
说明:根据属性元数据获取对应的脱敏值
入参说明
| 参数 | 类型 | 说明 |
prop | kd.bos.dataentity.metadata.IDataEntityProperty | 属性元数据 |
localeId | java.lang.String | 多语言标识,需要脱敏的语种,如Lang.get().toString() |
operateType | java.lang.String | 操作类型,如PrivacyCenterServiceHelper.OPERATETYPE_EXPORT |
dynamicObject | kd.bos.dataentity.entity.DynamicObject | 单据对象 |
value | java.lang.Object | 明文值 |
返回说明
| 类型 | 说明 |
java.lang.Object | 返回脱敏值,如果不是脱敏字段,返回原值。 |
类名:kd.bos.servicehelper.privacy.PrivacyCenterServiceHelper
方法名:getDesensitizeValue
说明:根据实体标识和属性标识获取对应的脱敏值
入参说明
| 参数 | 类型 | 说明 |
entityNum | java.lang.String | 实体标识 |
fieldIdent | java.lang.String | 属性标识 基础资料支持层级,如currency.name |
localeId | java.lang.String | 多语言标识,需要脱敏的语种,如Lang.get().toString() |
operateType | java.lang.String | 操作类型,如PrivacyCenterServiceHelper.OPERATETYPE_EXPORT |
dynamicObject | kd.bos.dataentity.entity.DynamicObject | 单据对象 |
value | java.lang.Object | 明文值 |
返回说明
| 类型 | 说明 |
java.lang.Object | 返回脱敏值,如果不是脱敏字段,返回原值。 |
类名:kd.bos.servicehelper.privacy.PrivacyCenterServiceHelper
方法名:isDesensitizeFieldWithoutPerm
说明:是否脱敏字段,忽略校验脱敏权限
入参说明
| 参数 | 类型 | 说明 |
prop | kd.bos.dataentity.metadata.IDataEntityProperty | 属性元数据 |
localeId | java.lang.String | 多语言标识,需要脱敏的语种,如Lang.get().toString() |
operateType | java.lang.String | 操作类型,如PrivacyCenterServiceHelper.OPERATETYPE_EXPORT |
dynamicObject | kd.bos.dataentity.entity.DynamicObject | 单据对象 |
返回说明
| 类型 | 说明 |
boolean | 是否脱敏字段 |
类名:kd.bos.servicehelper.privacy.PrivacyCenterServiceHelper
方法名:getDesensitizeValueWithoutPerm
说明:根据字段和明文值获取对应的脱敏值,忽略校验脱敏权限
入参说明
| 参数 | 类型 | 说明 |
prop | kd.bos.dataentity.metadata.IDataEntityProperty | 属性元数据 |
localeId | java.lang.String | 多语言标识,需要脱敏的语种,如Lang.get().toString() |
operateType | java.lang.String | 操作类型,如PrivacyCenterServiceHelper.OPERATETYPE_EXPORT |
dynamicObject | kd.bos.dataentity.entity.DynamicObject | 单据对象 |
value | java.lang.Object | 明文值 |
返回说明
| 类型 | 说明 |
java.lang.Object | 返回脱敏值,如果不是脱敏字段,返回原值。 |
类名:kd.bos.servicehelper.privacy.PrivacyCenterServiceHelper
方法名:isEncryptField
说明:是否隐私中心加密字段
入参说明
| 参数 | 类型 | 说明 |
prop | kd.bos.dataentity.metadata.IDataEntityProperty | 属性元数据 |
返回说明
| 类型 | 说明 |
boolean | 是否加密字段 |
2 典型场景范例
在实际脱敏场景中可能会遇到如下场景,在这个版本中我们需要通过可编程接口的调用配合完成下列场景的需求:
(1)动态表单脱敏处理
动态表单是由插件干预完成取数、存数逻辑,所以平台无法统一,动态表单一般会引用到单据与基础资料的数据,这时我们可以借助单据或基础资料上的脱敏配置规则结合接口编程完成脱敏处理。
在插件中对应的设置设置单据数据的地方,获取到明文值后,调用隐私脱敏接口,再设置到对应控件上。由隐私脱敏接口决定数据是否脱敏。
@Override
public void afterBindData(EventObject e) {
super.afterBindData(e);
String textField = this.getModel().getDataEntity().getString("textfield");
Label label = this.getControl("labelap");
Object val = PrivacyCenterServiceHelper.getDesensitizeValue(this.getModel().getDataEntityType().
getProperty("textfield"),
Lang.get().toString(),PrivacyDataConstant.OPERATETYPE_FORM,this.getModel().getDataEntity(),textField);
label.setText(String.valueOf(val));
}(2)字段明文显示
实现类似展示小眼睛-点击小眼睛展示明文的流程。
需要自己在设计器上实现展示小眼睛,是否显示小眼睛,则通过PrivacyCenterServiceHelper#isDesensitizeField 控制。
点击小眼睛触发后端事件时,由于在应用内存中都是明文,在后端插件事件中拿到明文数据重新赋值对应控件即可。
(3)整单明文显示
无论是移动端还是PC端,脱敏字段过多时,可能期望对于有权人整在点击某个按钮(或图标)后,整个单据都进行明文显示。
表单整单明文显示
/*
表单整单明文显示 this 为 formView
*/
public void getPlainTextAll() {
FormRoot rootControl = (FormRoot) this.getRootControl();
_getPlainTextAll(rootControl);
}
private void _getPlainTextAll(Container container) {
if (container == null) {
return;
}
List<Control> controls = container.getItems();
List<FieldEdit> fieldEdits = new ArrayList<>(8);
for (Control control : controls) {
if (control instanceof Container) {
_getPlainTextAll((Container) control);
} else if (control instanceof FieldEdit) {
fieldEdits.add((FieldEdit) control);
}
}
getPlainText(fieldEdits.toArray(new FieldEdit[fieldEdits.size()]));高阶场景开发
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



