import com.dvelop.d3.server.Document import com.dvelop.d3.server.DocumentType import com.dvelop.d3.server.User import com.dvelop.d3.server.ValueSet import com.dvelop.d3.server.Validation import com.dvelop.d3.server.core.D3 import com.dvelop.d3.server.core.D3Interface import com.dvelop.d3.server.exceptions.SQLException import com.dvelop.d3.server.exceptions.D3Exception import java.lang.annotation.* import java.sql.SQLWarning; import java.sql.Timestamp /* Script for updating documents */ // ################################################################################# // Configuration // ################################################################################# def documentTypes = "('DDRA2', 'XXXXX')" // Document types, syntax like sql "where in " def oldValue = "AVEVA" // Existing value in the defined categories def newValue = "AVEVA" // Value to update int dbPos = 33 // DB Position, TODO: Extend for mutli value fields, currently only for DB-Position 1 - 49 def updateCount = "1000" // Limit the number of documents to be updated - for testing def LogFilePath = "D:\\d3logs\\updateDocuments.log" def ErrorLogFilePath = "D:\\d3logs\\updateDocumentsError.log" def logOnly = "0" // 1 = Only write document ids to logfile def apiUser = "d3_hook" // User for api calls boolean noHooks = true // Enable / disable update hooks // ################################################################################# // End Configuration // ################################################################################# d3.log.info("Start to update documents " + documentTypes) d3.log.info("Old Value: " + oldValue) d3.log.info("New Value: " + newValue) def LogFile = new File(LogFilePath) def ErrorLogFile = new File(ErrorLogFilePath) LogFile.append("\n\rStart Update documents.") int countUpdated = 0 int countUpdateError = 0 // Define SQL Query def sqlQuery = "select top ${updateCount} doku_id from firmen_spezifisch where kue_dokuart in" + documentTypes + " and dok_dat_feld_$dbPos = '${oldValue}'" def resultset = d3.sql.executeAndGet(sqlQuery) if (resultset.size() > 0) { d3.log.info (resultset.size() + " documents found to update.") LogFile.append("\n\r" + resultset.size() + " documents found to update.") // Iterate through results resultset.each { if (logOnly == "1") { LogFile.append("\n" + it.get("doku_id")) countUpdated++ } else { try { Document currentDoc = d3.archive.getDocument(it.get("doku_id"), apiUser) currentDoc.field[dbPos] = newValue currentDoc.updateAttributes(apiUser, noHooks) LogFile.append("\n" + it.get("doku_id")) countUpdated++ } catch (Exception e) { d3.log.error ("Update documents: Error " + e + " in script!") ErrorLogFile.append("\n" + e) countUpdateError++ } } if (countUpdated % 100 == 0) { d3.log.info(countUpdated + " documents updated") } } d3.log.info(countUpdated + " documents updated") LogFile.append("\n\r" + countUpdated + " documents updated") d3.log.info(countUpdateError + " documents with error") LogFile.append("\n\r" + countUpdateError + " documents with error") }