ANS-1607 · DéVELOPPEMENT SUITESCRIPT
Comment extraire les détails des saisies de temps à partir des factures NetSuite à l’aide de SuiteScript 2.x
Découvrez comment accéder par programmation aux enregistrements de saisie de temps liés à une facture dans NetSuite, en utilisant SuiteScript 2.x pour l'extraction de données détaillées.
Solution courte
Pour récupérer les valeurs des saisies de temps à partir d’une facture dans NetSuite, utilisez SuiteScript 2.x pour charger l’enregistrement de la facture et parcourir sa sous-liste « timeitem ». Extrayez l’identifiant interne de chaque saisie de temps associée à partir du champ correspondant de la sous-liste. Une fois ces identifiants obtenus, vous pouvez charger ou rechercher les enregistrements individuels de saisies de temps afin d’accéder à toutes les informations requises.
Scénario
Les utilisateurs de NetSuite ont souvent besoin d’accéder par programmation aux informations détaillées des saisies de temps liées à une facture spécifique. Bien que la création directe de rapports via des recherches enregistrées puisse s’avérer complexe pour ce lien spécifique, la récupération de ces données est essentielle pour la création de rapports personnalisés, les intégrations ou la logique métier avancée. La difficulté réside dans l’identification des identifiants de sous-liste et de champ corrects permettant d’extraire les références des saisies de temps à partir de l’enregistrement de la facture.
Solution
L'accès aux valeurs des saisies de temps à partir d'un enregistrement de facture dans NetSuite implique principalement l'utilisation de SuiteScript 2.x pour interagir avec les sous-listes de l'enregistrement. Bien que l'accès direct via des recherches enregistrées pour ce lien spécifique puisse nécessiter des techniques avancées telles que SuiteQL ou des configurations spécifiques, la méthode la plus fiable consiste à utiliser des scripts.
Identification de la sous-liste et du champ des saisies de temps :
La sous-liste d’une facture contenant les saisies de temps associées est généralement
timeitem. L’identifiant du champ au sein de cette sous-liste qui contient l’identifiant interne de l’enregistrement de saisie de temps doit être vérifié à l’aide du navigateur d’enregistrements NetSuite ou en inspectant le code source de la page. Avec SuiteScript 1.0, il s’agissait souvent de GA_KEEP_0002, mais cela peut varier dans les implémentations de SuiteScript 2.x ou les configurations personnalisées.Récupérer les identifiants des saisies de temps à partir d’une facture :
Les identifiants des saisies de temps peuvent être récupérés soit en chargeant l’enregistrement de la facture, soit en accédant directement aux valeurs des lignes de commande dans un script côté serveur ou côté client.
- À l’aide de
record.getSublistValue()(par exemple, dans un script client ou un script d’événement utilisateur) :
- À l’aide de
javascript
/**
* @NApiVersion 2.x
* @NModuleScope SameAccount
*/
define(['N/record'], function(record) {
function exampleFunction() {
// Assuming 'currentRecord' is available in client scripts or loaded in user event scripts
// For a client script, use currentRecord.get()
// For a user event script, use scriptContext.newRecord
var invoiceRecord = currentRecord.get(); // Or record.load('invoice', invoiceId);
var lineCount = invoiceRecord.getLineCount({ sublistId: 'timeitem' });
var timeEntryIds = [];
for (var i = 0; i < lineCount; i++) {
var timeEntryId = invoiceRecord.getSublistValue({
sublistId: 'timeitem',
fieldId: 'linkedtimeentryid', // Placeholder: Verify actual field ID in Records Browser
line: i
});
if (timeEntryId) {
timeEntryIds.push(timeEntryId);
}
}
log.debug('Time Entry IDs', timeEntryIds);
}
return {
// Expose functions as needed
};
});- Chargement de l’enregistrement de facture avec
record.load():
javascript
/**
* @NApiVersion 2.x
* @NModuleScope SameAccount
*/
define(['N/record'], function(record) {
function loadInvoiceAndGetTimeEntries(invoiceId) {
var invoiceRecord = record.load({
type: record.Type.INVOICE,
id: invoiceId,
isDynamic: false
});
var lineCount = invoiceRecord.getLineCount({ sublistId: 'timeitem' });
var timeEntryIds = [];
for (var i = 0; i < lineCount; i++) {
var timeEntryId = invoiceRecord.getSublistValue({
sublistId: 'timeitem',
fieldId: 'linkedtimeentryid', // Placeholder: Verify actual field ID in Records Browser
line: i
});
if (timeEntryId) {
timeEntryIds.push(timeEntryId);
}
}
log.debug('Time Entry IDs for Invoice ' + invoiceId, timeEntryIds);
return timeEntryIds;
}
return {
// Expose functions as needed
};
});Accéder aux détails des saisies de temps :
Une fois les identifiants internes des enregistrements de temps obtenus, vous pouvez soit charger chaque enregistrement de temps individuel (type d’enregistrement
timebill) pour accéder à ses champs spécifiques, soit effectuer une recherche sur le type d’enregistrementtimebillà l’aide d’un tableau contenant ces identifiants internes afin de récupérer efficacement plusieurs valeurs.
javascript
/**
* @NApiVersion 2.x
* @NModuleScope SameAccount
*/
define(['N/record', 'N/search'], function(record, search) {
function getTimeEntryDetails(timeEntryIds) {
if (!timeEntryIds || timeEntryIds.length === 0) {
return [];
}
var timeEntrySearch = search.create({
type: record.Type.TIME_BILL, // 'timebill'
filters: [
['internalid', 'anyof', timeEntryIds]
],
columns: [
'employee',
'item',
'hours',
'memo'
// Add other desired columns from the time entry record
]
});
var results = [];
timeEntrySearch.run().each(function(result) {
results.push({
id: result.id,
employee: result.getText('employee'),
item: result.getText('item'),
hours: result.getValue('hours'),
memo: result.getValue('memo')
});
return true;
});
log.debug('Time Entry Details', results);
return results;
}
return {
// Expose functions as needed
};
});Support expert NetSuite
Besoin d’aide pour cet enjeu NetSuite ?
Accompagnement-conseil et configuration pour Développement SuiteScript
