I've got a search driving a map/reduce that return...
# suitescript
k
I've got a search driving a map/reduce that returns SO line items and their related IF lines (line.fulfillingTransaction). It seems like the SO lines count from one and the IF lines count from zero. Is that normal?
s
I like to use a custom field and create my own unique, monotonically increasing key for lines on the originating transaction. then have them flow to the downstream transactions. The result is a key that can be reliably used to match lines between different related transactions.
🤔 1
for example,
Line Auto-numbering This recipe assigns unique, permanent numeric values to each line on a transaction. It is suitable for correlating lines between different transaction types. For example, if you have 10 lines on a Sales Order and fulfill lines 1 3 and 5, you get an Item Fulfillment with three lines, numbered natively as 1,2,3. With this recipe the unique number for lines 1, 3 and 5 on the SO will remain the same unique identifier on the Item Fulfillment even though the native line numbers differ. For some transactions NS provides a lineuniquekey field, but for cases where that field is not available, this recipe can be handy. Setup Create a custom column field (named custcol_rsm_unique_line_number of type integer number and apply it to all the transaction types that you want autonumbered. note: todo: test more edge cases like deleting the first/last line. Example using uniquely numbered InterCompanyTransferOrder item sublist lines. export function beforeSubmit(context: EntryPoints.UserEvent.beforeSubmitContext) { if (context.type === context.UserEventType.EDIT || context.type === context.UserEventType.CREATE) { const newRecord = new InterCompanyTransferOrder(context.newRecord) // only consider lines without line numbers - on CREATE that will be ALL the lines, on EDIT only added // but we also need to consider deleted lines // Get the Current Line Count Max value, else default to zero if no lines are populated // note to handle deletions we get the max from the old record let max = _.max( _.map(context.oldRecord ? new InterCompanyTransferOrder(context.oldRecord).item : newRecord.item, 'custcol_rsm_unique_line_number')) || 0 // add numbers to lines without a value _(newRecord.item) .reject(i => i.custcol_rsm_unique_line_number) .forEach(line => line.custcol_rsm_unique_line_number = ++max) } } return 'Shazam, line numbers updated!' }