ANS-1757 · DéVELOPPEMENT SUITESCRIPT
Comment déterminer l’identifiant correct de la sous-liste de colis dans les traitements de commandes NetSuite
Déterminez l'identifiant correct de la sous-liste de colis dans la section « Item Fulfillments » de NetSuite, qui varie en fonction du mode d'expédition, en particulier pour les solutions intégrées héritées.
Solution courte
L'identifiant de la sous-liste de colis dans la section « Item Fulfillments » (Exécution des commandes) de NetSuite dépend du mode d'expédition. Pour l'intégration FedEx héritée, il s'agit de « packagefedex » ; pour l'intégration UPS héritée, il s'agit de « packageups ». Dans les autres cas, il s’agit de « package ». Une logique de script est nécessaire pour identifier dynamiquement l’identifiant de sous-liste correct en vue de la gestion des colis, en particulier lorsque vous utilisez d’anciennes intégrations d’expédition.
Scénario
Lorsqu’ils utilisent la fonctionnalité « Item Fulfillments » de NetSuite, les développeurs et les administrateurs doivent souvent interagir par programmation avec la sous-liste « Packages ». Une difficulté courante survient du fait que l’identifiant interne de cette sous-liste n’est pas statique ; il varie en fonction du mode d’expédition sélectionné pour la gestion des commandes. Cette variabilité nécessite une identification dynamique de l’identifiant correct de la sous-liste afin de garantir que les scripts et les personnalisations fonctionnent de manière fiable dans différents scénarios d’expédition, en particulier ceux impliquant des modes d’expédition hérités intégrés.
Solution
L'identifiant interne de la sous-liste « Packages » dans la section « Item Fulfillments » de NetSuite est dynamique et varie en fonction du mode d'expédition choisi. Pour les implémentations utilisant des modes d’expédition intégrés hérités, l’identifiant de la sous-liste peut être « packagefedex » pour FedEx, « packageups » pour UPS ou simplement « package » pour les autres modes. Afin d’identifier correctement la sous-liste appropriée et d’interagir avec celle-ci, implémentez la logique SuiteScript 2.x suivante :
javascript
/**
* @NApiVersion 2.x
* @NModuleScope SameAccount
*/
define(['N/record', 'N/error'], function(record, error) {
function getPackageSublistId(itemFulfillmentRecord) {
var packageSublistSuffix = null;
// The "package" sublist ID changes depending on the shipping method
if (itemFulfillmentRecord.getLineCount({ sublistId: 'package' }) !== -1) {
packageSublistSuffix = '';
} else if (itemFulfillmentRecord.getLineCount({ sublistId: 'packagefedex' }) !== -1) {
packageSublistSuffix = 'fedex';
} else if (itemFulfillmentRecord.getLineCount({ sublistId: 'packageups' }) !== -1) {
packageSublistSuffix = 'ups';
} else {
throw error.create({
name: 'ERR_PACKAGE_SUBLIST_NOT_SUPPORTED',
message: 'Package sublist must be "package", "packagefedex", or "packageups" for this record.'
});
}
return 'package' + packageSublistSuffix;
}
function setTrackingNumberOnAllPackages(itemFulfillmentRecord) {
var packageSublistId = getPackageSublistId(itemFulfillmentRecord);
// Set the same tracking number on All packages on IF
var packagesCount = itemFulfillmentRecord.getLineCount({ sublistId: packageSublistId });
for (var lineIndex = 0; lineIndex < packagesCount - 1; lineIndex++) { // Loop iterates for lines 0 to packagesCount-2, skipping the last package as per original logic
var trackingNumber = g_currentScdRecord.getFieldValue("custrecord_track_number");
if (trackingNumber !== null && trackingNumber !== "") {
itemFulfillmentRecord.setSublistValue({
sublistId: packageSublistId,
fieldId: "packagetrackingnumber" + (packageSublistId.includes('fedex') || packageSublistId.includes('ups') ? packageSublistId.replace('package', '') : ''),
line: lineIndex,
value: trackingNumber
});
}
}
}
return {
getPackageSublistId: getPackageSublistId,
setTrackingNumberOnAllPackages: setTrackingNumberOnAllPackages
};
});Support expert NetSuite
Besoin d’aide pour cet enjeu NetSuite ?
Accompagnement-conseil et configuration pour Développement SuiteScript
