我的销售订单上有一个自定义超链接字段,我想隐藏该字段,直到该订单具有已发货的项目履行记录。该字段仅在查看记录时需要显示。我不知道如何做到这两点:检查记录是否具有项目履行并设置字段的显示。
我认为 ClientScript 是正确的方法,因为这纯粹是一个 UI 问题,但是 根据文档,ClientScript 仅在创建或编辑记录时运行,而不是在查看记录时运行,因此这是行不通的.
然后我尝试了 UserEvents,但它们只有 3 个触发点:
beforeLoad
、beforeSubmit
和 afterSubmit
。我尝试使用beforeLoad
,虽然看起来确实可以在那里切换显示,但此时记录尚未加载,所以我认为我无法检查它是否有项目履行.
如何根据记录的属性更改查看模式下记录字段的显示?
我目前拥有的代码,
/**
* @NApiVersion 2.x
* @NScriptType ClientScript
*/
define(
['N/log', 'N/search', 'N/ui/serverWidget'],
/**
* @param {log} log The log SuiteScript module
* @param {search} search The search SuiteScript module
* @param {serverWidget} serverWidget The ui.serverWidget SuiteScript module
* @returns {Object} Our list of Client Script callbacks
*/
function (log, search, serverWidget) {
/**
* Function to be executed after page is initialized.
*
* @param {Object} scriptContext The context of the page when this function is called
* @param {Record} scriptContext.currentRecord - Current form record
* @param {string} scriptContext.mode - The mode in which the record is being accessed (create, copy, or edit)
*
* @since 2015.2
*/
function pageInit(scriptContext) {
const currRecord = scriptContext.currentRecord;
/** @type {search.Type[]} */
const shipmentRecords = search.create({
type: search.Type.ITEM_FULFILLMENT,
filters: [
["createdfrom", search.Operator.IS, currRecord.getValue("tranid")],
],
columns: ["internalid"],
}).run().getRange(0, 1);
if (shipmentRecords.length > 0) {
currRecord.getField({
fieldId: "custbody_my_dynamic_link",
}).updateDisplayType({
displayType: serverWidget.FieldDisplayType.NORMAL,
});
}
}
return {
pageInit: pageInit,
};
},
);
我建议根据之前的事件设置字段的值 - EG:创建项目履行,然后使用按
beforeLoad
作为上下文类型过滤的用户事件 VIEW
设置字段的显示类型。
具体细节取决于链接的确定方式;换句话说,需要什么数据才能生成
custbody_my_dynamic_link
字段中的链接。
您可能能够将其设为“动态字段” - 例如:取消选中自定义字段定义页面上的“存储值” - 并使用公式或保存的搜索设置默认值。这将消除在项目履行上创建单独的用户事件的需要。
如果您提供现场内容及其生成方式的确切详细信息,我们可能能够提供更多帮助。