注册用户的程序逻辑如下:
1、在NewCustomer.groovy中根据productStore中读取相关数据。
2、SetDependentDropdownValuesJs.ftl中定义了联动的下拉框.
其中getDependentDropdownValues为一个通用的下拉框级联函数,定义在miscAjaxFunctions.js中
3、渲染ecommerce/template/customer/NewCustomer.ftl页面。
页面上的邮箱、密码等控件的显示受ProductStore中设置的影响。当设为不需要密码时,此页面渲染有BUG,有个DIV的位置不对,所有版本都有,好奇怪一直未被修正。
4、注册信息填写完成后,表单提交至ecommerce/control/createcustomer
5、执行ecommerce/minilang/customer/CustomerEvents.xml中的createCustomer
根据Session或WebContext中读取productStoreId,从Store中读取密码的配置,若允许设置密码,则让注册用户时指定密码,否则设置默认密码为ungssblepswd。新建用户的默认角色为CUSTOMER。Store中设置是否将邮箱作为用户名,若邮箱设为用户名,则新建时不用输入用户名,只须输入邮箱,系统将自动发送一封邮件用于确认。org.apache.ofbiz.common.login.LoginServices.checkNewPassword检查密码是否合规。调用Party模块中的服务。
调用createPersonAndUserLogin创建用户名和登录名。
用createPartyRole建立Party和Role的关联。
用createProductStoreRole建立Party、Role和ProductStore的关系。
用addUserLoginToSecurityGroup将新建的用户增加进组ECOMMERCE_CUSTOMER中。