我有一个工作流程,默认VB记录上的审批状态为"拒绝"如果PO amt与VB amt不匹配。
现在我只允许一个特定的角色来编辑审批状态并将其保存到他想要的任何内容中,我如何实现这一目标?我正在使用nlapisubmit来设置状态。
答案 0 :(得分:0)
为什么不在您的记录上写一个用户事件并检查用户的角色。一种可能的解决方案可能是禁用其他角色的字段。 基本上你可以做这样的事情
负载:
function clientPageInit(type){
if(nlapiGetRole() != 'your_desird_roleId') // check for the role
nlapiSetFieldDisabled('yourstaus_field_internalid',true); // disable the field edit for other roles
}
否则,如果角色与您想要的角色不匹配,您可能会在字段更改时抛出错误。
现场变更:
function clientFieldChanged(type, name, linenum){
if(name == 'yourstaus_field_internalid' && nlapiGetRole() == 'your_desird_roleId'){
// allow to edit the status
}else{
throw nlapiCreateError('INVALID_ACCESS','You don't have access to change this field.';
}
}
答案 1 :(得分:0)
我建议您从beforeload
用户事件脚本中删除其他角色的表单中的字段,因为您可以访问nlobjForm
//goes into before load function , additional condition, in case field is not there on the form,
if(nlapiGetRole() !== 'SPECIFIC_ROLE_ID' && form.getField('approvalstatus'))
form.getField('approvalstatus').setDisplayType('hidden');
这可确保该字段对您角色以外的所有用户隐藏。
此外,在提交之前的用户事件脚本中,如果角色不是所需的状态,则将状态设置为旧状态,或者抛出错误,这将确保入口点是否为非UI,如脚本,CSV,Wenservices等,该字段价值保持不变
//before submit to stop user from updating all together
if(nlapiGetRole !== 'SPECIFIC_ROLE_ID'){
throw new nlapiCreateError('You are not authorised');
}
//before submit reset it back to old field value without showing any error
if(nlapiGetRole !== 'SPECIFIC_ROLE_ID'){
nlapiSetFieldValue('approvalstatus, 'nlapiGetOldRecord().getFieldValue('approvalstatus'));
}
答案 2 :(得分:0)
不确定为什么第二部分会成为剧本。您已经提到过,您的第一部分是工作流程,这也可以在工作流程中完成。
只需使用设置字段显示类型 - 在具有条件角色的记录加载之前禁用/隐藏!=您要允许的角色。
根据您的要求,此操作可以满足您的需求。与上述答案相同的前提但不需要脚本