project QadFinancials > class BPosting > method GetPostingIDsForXLSIntegration

Description

GetPostingIDsForXLSIntegration:
This method returns a Posting_ID for every record in the input-output temp-table. For those postings that do not yet exists in the db and for those who are already in the db, based on the logical key of a posting.
These new values for PostingIDs are just retrieved from the persistence-layer and are not yet used to store anything in the database.
For the existing records, the returned Posting_ID is just the one as it is in the db.


Parameters


tPostingForXLSinput-outputtemp-tableTemp-table used for the Excel-integration so that at the moment an xls-sheet is loaded onto the grid, the Posting_ID gets set for the postings in the xls-sheet that do not yet exist in the FInancials-db or that already exist.
The temp-table returns a value in field NewPostingID for every record in the temp-table based on the logical key of a posting.
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


unused


program code (program6/bposting.p)

    
    /* ================================================================================================================================= */
    /* In case of Excel-integration activities we here retrun a list of Posting_IDs that will be used for the real Postings when saved   */
    /* The functional reason for this is that once the ExcelSheet has been uploaded in the UI, the UI calls this business-method that    */
    /* returns a list of Posting_IDs and then the UI replaces the Posting_IDs in the grid with the Posting_IDs that are returned by this */
    /* business-method.                                                                                                                  */
    /* The reason for this construction is that once the ExcelSheet has been loaded into the grid users can add attachments and the link */
    /* between the Posting in the grid and these attachements is the Posting_ID. As such, at that moment it is needed that the UI        */
    /* already has got the final Posting_ID that will also go into the database                                                          */
    /* Also for existing postings that are modified via the ExcelIntegration function, we will return the existing Posting_ID for them   */
    /* ================================================================================================================================= */
    
    /* Return in case nothing is needed */
    if not can-find (first tPostingForXLS)
    then return.
    
    /* Start persistence and keep the handle */
    <M-8 run StartPersistence
       (output vhPersistenceHandle (ohPersistence), 
        output viFcReturnSuper (oiReturnStatus)) in BPosting>
    if viFcReturnSuper < 0 or 
       (viFcReturnSuper <> 0 and oiReturnStatus = 0)
    then assign oiReturnStatus = viFcReturnSuper.
    if viFcReturnSuper < 0
    then return.
    if not valid-handle (vhPersistenceHandle)
    then do :
        assign vcMessage      = trim(substitute(#T-59'Internal error: Unable to access the persistence-layer from &1.':255(523751093)T-59#, "BPosting:GetRangeOfNewPostingIDs":U ))
               oiReturnStatus = -3.
        <M-51 run SetMessage
           (input  vcMessage (icMessage), 
            input  '':U (icArguments), 
            input  '':U (icFieldName), 
            input  '':U (icFieldValue), 
            input  'S':U (icType), 
            input  2 (iiSeverity), 
            input  '':U (icRowid), 
            input  'qadfin-890317':U (icFcMsgNumber), 
            input  '':U (icFcExplanation), 
            input  '':U (icFcIdentification), 
            input  '':U (icFcContext), 
            output viFcReturnSuper (oiReturnStatus)) in BPosting>
        return.
    end. /* if not valid-handle (vhPersistenceHandle) */
    
    /* Loop through the input-output temp-table */
    for each tPostingForXLS 
             on error undo, throw:
        
        /* Set the Company_ID and Journal_ID when empty */
        if tPostingForXLS.tiCompany_ID = 0 or 
           tPostingForXLS.tiCompany_ID = ?
        then assign tPostingForXLS.tiCompany_ID = viCompanyID.
        if tPostingForXLS.tcJournalCode <> "":U and 
           tPostingForXLS.tcJournalCode <> ?    and 
           (tPostingForXLS.tiJournal_ID = 0 or 
            tPostingForXLS.tiJournal_ID = ?)
        then do :
            <Q-20 run JournalPrim (all) (Read) (Cache)
               (input tPostingForXLS.tiCompany_ID, (CompanyId)
                input tPostingForXLS.tcJournalCode, (JournalCode)
                input ?, (JournalID)
                output dataset tqJournalPrim) in BJournal>
            Find tqJournalPrim where 
                 tqJournalPrim.tcJournalCode = tPostingForXLS.tcJournalCode
                 no-lock no-error.
            if available tqJournalPrim
            then assign tPostingForXLS.tiJournal_ID = tqJournalPrim.tiJournal_ID.
        end. /* if tPostingForXLS.tcJournalCode <> "":U and  */
        
        /* Try to read the posting from the db based on the logical key */
        if tPostingForXLS.tiPostingYear    <> 0 and 
           tPostingForXLS.tiPostingYear    <> ? and 
           tPostingForXLS.tiJournal_ID     <> 0 and  
           tPostingForXLS.tiJournal_ID     <> ? and 
           tPostingForXLS.tiPostingVoucher <> 0 and 
           tPostingForXLS.tiPostingVoucher <> ?
        then do :
            <Q-94 run PostingByUniqueKey (all) (Read) (NoCache)
               (input tPostingForXLS.tiCompany_ID, (CompanyId)
                input tPostingForXLS.tiPostingYear, (PostingYear)
                input tPostingForXLS.tiJournal_ID, (JournalID)
                input tPostingForXLS.tiPostingVoucher, (PostingVoucher)
                output dataset tqPostingByUniqueKey) in BPosting>
            Find tqPostingByUniqueKey where 
                 tqPostingByUniqueKey.tiCompany_ID     = tPostingForXLS.tiCompany_ID and 
                 tqPostingByUniqueKey.tiPostingYear    = tPostingForXLS.tiPostingYear and 
                 tqPostingByUniqueKey.tiJournal_ID     = tPostingForXLS.tiJournal_ID and 
                 tqPostingByUniqueKey.tiPostingVoucher = tPostingForXLS.tiPostingVoucher
                 no-lock no-error.
            /* Actions are only required for Postings that do not yet exist */
            if available tqPostingByUniqueKey
            then do :
                assign tPostingForXLS.tiNewPostingID = tqPostingByUniqueKey.tiPosting_ID.
                next. 
            end. /* if available tqPostingByUniqueKey */
        end. /* if tPostingForXLS.tiPostingYear    <> 0 and  */
        
        /* Get a new IDs and store it in the input-output temp-table */
        assign vhFcComponent                 = vhPersistenceHandle /* as GetNextValue is always executed in vhFcComponent */
               tPostingForXLS.tiNewPostingID = <M-91 GetNextValue  (input  'ObjectNumber':U (icSequence)) in persistence>.
        
    end. /* for each tPostingForXLS : */