NetSuite,如果潜在客户分配给客户,则阻止对销售订单的报价(通过销售订单按钮)
NetSuite, prevent Quote to Sales Order (via Sales Order button) if prospect assigned vs customer
我们允许销售人员将潜在客户附加到机会和报价中,一旦信用合格,他们就会将潜在客户推销给客户。我们需要做的是隐藏报价上的 "Sales Order" 按钮,或者不允许将报价推进到销售订单。
我对这个问题犹豫不决 - 看起来应该很直观。我查看了 NetSuite 帮助中的标准 NetSuite 按钮 ID,但没有 "Sales Order"。我查看了验证逻辑,但这不是验证,因为当记录未处于编辑模式时会显示销售订单按钮。如果可能的话,我希望解决方案独立于形式。
我很乐意隐藏该按钮或让用户单击该按钮并阻止他们创建销售订单。后者可能对用户更友好,因为如果按钮被隐藏,销售人员会打电话询问为什么按钮不存在。
为清楚起见,这里有一张图片:
隐藏选项:
如果您指的是下拉列表,您可以为上下文 view/edit 创建一个脚本来执行以下操作:
setFieldAndLabelVisibility("nl13", false);
否则,将 nl13 替换为检查所需销售订单 link/icon 上的元素时显示的 table 或 td 元素的值 link/icon。
--上面例子中的ID是table,当你inspect element
时显示的按钮或标签ID
我假设当您谈论 "the Sales Order button" 时,您指的是这个:
我不确定这是否是最好的用户体验,或者您是否有可用的 NetSuite 开发资源,但这是一种选择:
创建一个新的用户事件脚本,部署到销售订单(以及您可能希望此预防措施的任何其他交易记录)。使用 BeforeLoad
事件,您可以检查交易中的实体是否处于前景阶段。如果是,那么脚本将抛出一个错误,阻止事务的创建。完成此操作的代码:
function onBeforeLoad(type) {
var entityId = nlapiGetFieldValue('entity');
if ((type != 'create') || !entityId) { return; }
if(nlapiLookupField('customer', nlapiGetFieldValue('entity'), 'stage') === 'PROSPECT') {
throw nlapiCreateError('INVALID_REQUEST', 'You cannot create a Sales Order from a Quote placed for a Prospect');
}
}
我在 TSTDRV 帐户中测试了这段代码,它按预期工作。您也可以构建一个工作流来完成同样的事情,而无需您编写代码,但我没有尝试这样做。
通过使用用户事件脚本,此代码将独立于表单和入口点,这意味着如果销售订单是通过 UI 通过其他脚本创建的,则此代码将执行、通过 Web 服务集成(取决于您的 Web 服务配置)或通过 CSV 导入(取决于您的 CSV 导入配置)。
我们允许销售人员将潜在客户附加到机会和报价中,一旦信用合格,他们就会将潜在客户推销给客户。我们需要做的是隐藏报价上的 "Sales Order" 按钮,或者不允许将报价推进到销售订单。
我对这个问题犹豫不决 - 看起来应该很直观。我查看了 NetSuite 帮助中的标准 NetSuite 按钮 ID,但没有 "Sales Order"。我查看了验证逻辑,但这不是验证,因为当记录未处于编辑模式时会显示销售订单按钮。如果可能的话,我希望解决方案独立于形式。
我很乐意隐藏该按钮或让用户单击该按钮并阻止他们创建销售订单。后者可能对用户更友好,因为如果按钮被隐藏,销售人员会打电话询问为什么按钮不存在。
为清楚起见,这里有一张图片:
隐藏选项: 如果您指的是下拉列表,您可以为上下文 view/edit 创建一个脚本来执行以下操作:
setFieldAndLabelVisibility("nl13", false);
否则,将 nl13 替换为检查所需销售订单 link/icon 上的元素时显示的 table 或 td 元素的值 link/icon。
--上面例子中的ID是table,当你inspect element
时显示的按钮或标签ID我假设当您谈论 "the Sales Order button" 时,您指的是这个:
我不确定这是否是最好的用户体验,或者您是否有可用的 NetSuite 开发资源,但这是一种选择:
创建一个新的用户事件脚本,部署到销售订单(以及您可能希望此预防措施的任何其他交易记录)。使用 BeforeLoad
事件,您可以检查交易中的实体是否处于前景阶段。如果是,那么脚本将抛出一个错误,阻止事务的创建。完成此操作的代码:
function onBeforeLoad(type) {
var entityId = nlapiGetFieldValue('entity');
if ((type != 'create') || !entityId) { return; }
if(nlapiLookupField('customer', nlapiGetFieldValue('entity'), 'stage') === 'PROSPECT') {
throw nlapiCreateError('INVALID_REQUEST', 'You cannot create a Sales Order from a Quote placed for a Prospect');
}
}
我在 TSTDRV 帐户中测试了这段代码,它按预期工作。您也可以构建一个工作流来完成同样的事情,而无需您编写代码,但我没有尝试这样做。
通过使用用户事件脚本,此代码将独立于表单和入口点,这意味着如果销售订单是通过 UI 通过其他脚本创建的,则此代码将执行、通过 Web 服务集成(取决于您的 Web 服务配置)或通过 CSV 导入(取决于您的 CSV 导入配置)。