C4C 和 CRM系统里如何用代码获取当前登录用户分配的 Organization Unit 信息

举报
Jerry Wang 发表于 2021/10/16 22:11:32 2021/10/16
【摘要】 C4C如何查看某个用户分配的组织单元ID:在Employee的Organization Data区域内看到分配的组织名称,如下图红色下划线所示:现在的需求就是使用ABSL获取当前登录用户分配的Organization Unit信息,例如用WANGJERRY37登录,则取出下图显示的Department name PMLS:具体实现:新建一个custom BO,使用字段DepartmentN...

C4C

如何查看某个用户分配的组织单元ID:

在Employee的Organization Data区域内看到分配的组织名称,如下图红色下划线所示:

现在的需求就是使用ABSL获取当前登录用户分配的Organization Unit信息,例如用WANGJERRY37登录,则取出下图显示的Department name PMLS:

具体实现:新建一个custom BO,使用字段DepartmentName存储这个待取的值:

然后创建AfterLoading script file,使用如下代码:


import ABSL;
import AP.PC.IdentityManagement.Global;
import AP.FO.BusinessPartner.Global;

var queryByIdentityUUID = Identity.QueryByElements;
var queryByIdentityUUIDParameter = queryByIdentityUUID.CreateSelectionParams();
var queryByEmployeeBPUUID = Employee.QueryByIdentification;
var queryByEmployeeBPUUIDParameter = queryByEmployeeBPUUID.CreateSelectionParams();


if ( this.DepartmentName.IsInitial()){

	var id = Context.GetCurrentIdentityUUID().content;
	queryByIdentityUUIDParameter.Add( queryByIdentityUUID.UUID.content, "I", "EQ", id.ToString() );
	var result = queryByIdentityUUID.Execute(queryByIdentityUUIDParameter);
	var first = result.GetFirst(); // points to identity instance
	var person = first.Person;
	var bpUUId = person.UUID.content;
	queryByEmployeeBPUUIDParameter.Add( queryByEmployeeBPUUID.UUID.content, "I", "EQ", bpUUId.ToString());
	var employeeQueryResult = queryByEmployeeBPUUID.Execute(queryByEmployeeBPUUIDParameter);
	var EmployeeQueryResultCurrent = employeeQueryResult.GetFirst();
	var assignedOrg = EmployeeQueryResultCurrent.OrganisationalUnitAssignment.GetFirst();
	var org = assignedOrg.ToRoot;
	  // readOnly in AfterLoading event
	   this.DepartmentName  = org.NameAndAddress.AddressSnapshot.NameSuitableForLogonLanguage.GetFirst().Name.SecondLineName;
}

CRM

假设Jerry Wang分配的Organization Unit ID为50000732,使用下列report打印出这个ID:


PARAMETERS: id TYPE but000-partner OBLIGATORY DEFAULT '4031140'.
DATA: lo_core                TYPE REF TO cl_crm_bol_core,
      lo_collection          TYPE REF TO if_bol_entity_col,
      lo_root_entity         TYPE REF TO cl_crm_bol_entity,
      lv_query_name          TYPE crmt_ext_obj_name,
      lt_selection_parameter TYPE genilt_selection_parameter_tab,
      ls_selection_parameter TYPE genilt_selection_parameter,
      ls_query_parameters    TYPE genilt_query_parameters,
      lv_size                TYPE i.
START-OF-SELECTION.
  ls_selection_parameter-attr_name = 'PARTNER'.
  ls_selection_parameter-option =  'EQ'.
  ls_selection_parameter-sign = 'I'.
  ls_selection_parameter-low =  id.
  APPEND ls_selection_parameter TO lt_selection_parameter.
  ls_query_parameters-max_hits = 1.
  lo_core = cl_crm_bol_core=>get_instance( ).
  lo_core->load_component_set( 'PROD_ALL' ).
  lv_query_name = 'BuilEmpAdvancedSearch'.
  lo_collection = lo_core->dquery(
      iv_query_name               = lv_query_name
      it_selection_parameters            = lt_selection_parameter
      is_query_parameters                = ls_query_parameters ).
  DATA(lo_result) = lo_collection->get_first( ).
  ASSERT lo_result IS NOT INITIAL.
  WRITE: / 'Org unit id: ', lo_result->get_property_as_string( 'ORGEH' ) COLOR COL_NEGATIVE.

最终调用的是这个function module:

CRM WebClient UI里的文件是如何上传到Netweaver

使用Chrome开发者工具调试CRM WebClient UI里附件上传的功能: 从本地选择一个文件,断点触发:

前端取得用户选中上传的文件名: Jerry.txt

点Attach按钮后,触发ABAP后台的事件处理函数:

从Chrome开发者工具的network标签能观察到,UI向ABAP后台发送了一个http post请求:

后台依次处理所有的form parts:

从对应的form part里取出文件名称和文件类型:

以及实际的文件内容(由于security原因,该form part的内容无法在Chrome开发者工具的network标签里观察到)

但是在ABAP调试器里看到的上传的文件内容仍然和文件本地用UltraEdit打开观察到的一致。

动态控制SAP C4C UI元素的显示和隐藏

C4C UI上UI元素的显示和隐藏可以通过Key User在Adaptation模式里通过编辑一些简单的rule去控制,诸如这种格式:


if ( logic expression = true )

    then display the UI element

    else hide the UI element

endif

这样就不需要由Partner去做二次开发实现了。

这整套逻辑的工作原理在我的博客How to change UI element visibility dynamically via Rule Editor – and how it works under the hood里有介绍。

用一句话概括:在rule里将某个UI元素设为隐藏之后,UI5对应的渲染程序就会直接将其忽略——不会进入下图第78行的IF渲染分支里。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。