variables.logFilePrefix = 'ceRecordApi_lceRecord'; var retStruct = { 'error_msg': '', 'pageid': 0, 'controlid': arguments.controlid, 'templateid': arguments.templateid, 'status': false, 'contentUpdated': false, 'contentUpdateResponse': 'Success:0', 'pageCreateStatus': false, 'pageActiveStatus': false }; var pageResult = {}; var pageStatus = {}; var newPageID = 0; var newDataValues = {}; var fldKey = ''; var fldValStr = ''; var addRecord = true; var updFldsArr = []; var errFldsArr = []; var fldType = ''; var fldOptions = {}; var fldSetResult = {}; var fldError = ''; var addError = {}; var csVersion = server.ADF.csVersion; var requiredCSVersion = 11; // Note: ADF versionCompare: 0 OR Greater is True (-1 false) var requiredCSVersionCheck = application.ADF.utils.versionCompare(versionA=csVersion,versionB=requiredCSVersion); var errorPrefix = 'Local Custom Element Record Add Failed'; var loggingEnabled = getEnableLogging(); var logStruct = { 'msg': '', 'logFile': ''}; var logFileName = variables.logFilePrefix & "_addRecord.log"; var logErrorFileName = variables.logFilePrefix & "_addRecord_error.log"; var pageObj = Server.CommonSpot.ObjectFactory.getObject("Page"); var ceObj = CreateObject("component", "commonspot.components.lce.lce-recordset"); if ( requiredCSVersionCheck LT 0 ) throw "The ceRecordAPI requires CommonSpot 11 or higher! For previous versions please use the CS CCAPI or the ADF apiElement for adding data to custom elements."; // To ADD an LCE record... // 1) Create a page in provided subsiteid from the provided templateid (to get a new pageid) // 2) Switch to Edit Mode // 3) loadFormDefinition(lceName) // 4) enableImmediatePublication("Published by API at #Now()#"); // 5) loadExistingInstance(new_page_id, controlid); // 6) loop over setSimpleValue() // 7) commitInstance(); // 8) Switch back to read mode // Start the Record Add process try { if ( VAL(arguments.subsiteID) LTE 0 ) throw(message='#errorPrefix#. The provided subsiteid must be a valid value be greater than 0!'); if ( VAL(arguments.templateID) LTE 0 ) throw(message='#errorPrefix#. The provided templateid must be a valid value be greater than 0!'); if ( VAL(arguments.controlid) LTE 0 ) throw(message='#errorPrefix#. The provided controlid must be a valid value be greater than 0!'); arguments.pageValues.subsiteid = arguments.subsiteID; arguments.pageValues.templateID = arguments.templateID; // if remote pageCreate is needed (if this needed... does the ceRecordAPI lceRecord.addRecord() need a remote call) if ( arguments.useRemoteCreate ) pageResult = variables.apiPage.createRemote(pageData=arguments.pageValues,activatePage=arguments.activatePage); else pageResult = variables.apiPage.create(pageData=arguments.pageValues,activatePage=arguments.activatePage); if ( StructKeyExists(pageResult,'pageid') ) newPageID = VAL(pageResult.pageid); if ( StructKeyExists(pageResult,'ActiveState') ) retStruct['pageActiveStatus'] = pageResult.ActiveState; if ( newPageID GT 0 ) { retStruct['pageCreateStatus'] = true; // Switch to page edit mode // ADDED ABOVE: pageObj = Server.CommonSpot.ObjectFactory.getObject('Page'); pageStatus = pageObj.switchMode(newPageID, "edit"); Request.RenderState.RenderMode = pageStatus.pageMode; // Load the custom element form definition //----------------------------- ceObj.loadFormDefinition(arguments.ceName); // Enable and set a comment for immediate Publication //----------------------------- ceObj.enableImmediatePublication("Published by LCE Record API at #Now()#"); // Load new instance Record for the LCE //----------------------------- ceObj.loadExistingInstance(newPageID, arguments.controlid); // Prepare the dataValues for the LCE fields //----------------------------- arguments.dataValues = prepareFieldValues(ceObject=ceObj,fieldValues=arguments.dataValues,fieldSpecs=arguments.fieldSpecs); // Add the data to the LCE fields //----------------------------- for ( fldKey IN arguments.dataValues ) { fldValStr = arguments.dataValues[fldKey].fieldValueStr; fldType = arguments.dataValues[fldKey].fieldType; fldOptions = arguments.dataValues[fldKey].fieldOptions; fldError = arguments.dataValues[fldKey].error; // Handle field error if ( TRIM(fldError) NEQ '' ) { ArrayAppend(errFldsArr,fldKey); // Log the error message addError = {}; addError.msg = "#errorPrefix#: #ceObj['formtype']# [#arguments.ceName#]. Error [Message: #fldError#]"; addError.logFile = logErrorFileName; variables.log.logAppend(msg=addError.msg,logFile=addError.logFile); } else { // Set the value for the field fldSetResult = setFieldValue(ceObject=ceObj,fieldName=fldKey,fieldValue=fldValStr,fieldType=fldType,fieldOptions=fldOptions); // Track Updated fields ArrayAppend(updFldsArr,fldKey); } } // END: setSimpleValue() Fields Loop // If any field errors don't commit the instance // -- uncomment to NOT update the CE record on any field error if ( ArrayLen(errFldsArr) ) addRecord = false; if ( addRecord ) { ceObj.commitInstance(); newDataValues = ceObj.getCurrentValues(); if ( newPageID GT 0 ) { retStruct['status'] = true; // Legacy CCAPI content updated result keys // - RETURNS: CONTENTUPDATED : true/false & CONTENTUPDATERESPONSE: Success:1 retStruct['contentUpdated'] = true; retStruct['contentUpdateResponse'] = 'Success:1'; } } // switch back to read pageStatus = pageObj.switchMode(pageID=newPageID,requestedMode="read"); Request.RenderState.RenderMode = pageStatus.pageMode; } // END: pageid gt 0 check else { if ( StructKeyExists(pageResult,'cmderror') AND TRIM(pageResult.cmderror) NEQ '' ) errorPrefix = errorPrefix & ' - Page Create ' & pageResult.cmderror; } retStruct['pageid'] = newPageID; retStruct['subsiteid'] = arguments.subsiteid; retStruct['templateid'] = arguments.templateid; retStruct['controlid'] = arguments.controlid; retStruct['data'] = newDataValues; retStruct['errorfields'] = errFldsArr; retStruct['updatefields'] = updFldsArr; if ( retStruct['status'] EQ true ) { // Update Success Logging if ( loggingEnabled ) { logStruct.msg = "Local Custom Element Record Added: #ceObj['formtype']# [#arguments.ceName#]. PageID: #retStruct['pageid']#. ContentUpdateResponse: #retStruct['contentUpdateResponse']#."; if ( ArrayLen(errFldsArr) ) logStruct.msg = logStruct.msg & ' - With Custom Field Type errors. See Custom Field Type Error Log...'; logStruct.logFile = logFileName; } } else { // Error logging retStruct['error_msg'] = errorPrefix; // Log the error message logStruct.msg = "#retStruct.error_msg#: #ceObj['formtype']# [#arguments.ceName#]. PageID: #retStruct['pageid']#."; if ( ArrayLen(errFldsArr) ) { retStruct['error_msg'] = retStruct.error_msg & ' due to Custom Field Type errors. See the Custom Element Record AddRecord Error Log...'; } logStruct.logFile = logErrorFileName; } } catch ( any ex ) { retStruct['pageid'] = newPageID; retStruct['status'] = false; // Error logging retStruct['error_msg'] = ex.message; retStruct['error'] = ex; // Log the error message logStruct.msg = "#errorPrefix#: #ceObj['formtype']# [#arguments.ceName#]. Error [Message: #ex.message#]"; if ( StructKeyExists(ex,'detail') AND TRIM(ex.detail) NEQ '' ) logStruct.msg = logStruct.msg & " [Details: #ex.detail#]"; logStruct.logFile = logErrorFileName; // Add log entry to CommonSpot error logs variables.log.addLogEntry(message='Error occurred in command lceRecord_1_0.addRecord (#DateTimeFormat(Now(),"short")#): #ex.message# - #Server.CommonSpot.UDF.util.structToText(arguments)#',CFCatch=ex,forceStackTrace=true,useDatePrefix=true); } if ( TRIM(logStruct.msg) NEQ '' ) variables.log.logAppend(msg=logStruct.msg,logFile=logStruct.logFile); //,addTimeStamp,logDir,label,useUTC,addEntryTimeStampPrefix return retStruct; var retStruct = { 'error_msg': '', 'pageid': arguments.pageid, 'controlid': arguments.controlid, 'status': false, 'contentUpdated': false, 'contentUpdateResponse': 'Success:0' }; var pageStatus = {}; var updPageID = 0; var currValuesQry = ''; var updDataValues = {}; var fldKey = ''; var fldValStr = ''; var updRecord = true; var updFldsArr = []; var errFldsArr = []; var fldType = ''; var fieldOptions = {}; var fldSetResult = {}; var fldError = ''; var updError = {}; var csVersion = server.ADF.csVersion; var requiredCSVersion = 11; // Note: ADF versionCompare: 0 OR Greater is True (-1 false) var requiredCSVersionCheck = application.ADF.utils.versionCompare(versionA=csVersion,versionB=requiredCSVersion); var errorPrefix = 'Local Custom Element Record Update Failed'; var loggingEnabled = getEnableLogging(); var logStruct = { 'msg': '', 'logFile': ''}; var logFileName = variables.logFilePrefix & "_updateRecord.log"; var logErrorFileName = variables.logFilePrefix & "_updateRecord_error.log"; var pageObj = Server.CommonSpot.ObjectFactory.getObject('Page'); var ceObj = CreateObject("component", "commonspot.components.lce.lce-recordset"); if ( requiredCSVersionCheck LT 0 ) throw "The ceRecordAPI requires CommonSpot 11 or higher! For previous CS versions please use the CS CCAPI 'populateCustomElement' or the ADF apiElement for updating custom elements data."; // To UPDATE an LCE record on a page that already exists... // 1) From the provided PageID // 2) Switch to Edit Mode // 3) loadFormDefinition(lceName) // 4) enableImmediatePublication("Published by API at #Now()#"); // 5) loadExistingInstance(new_page_id, controlid); // 6) loop over setValue() // 7) commitInstance(); // 8) Switch back to read mode try { if ( VAL(arguments.pageid) LTE 0 ) throw(message='#errorPrefix#. The provided pageid must be a valid value be greater than 0!'); if ( VAL(arguments.controlid) LTE 0 ) throw(message='#errorPrefix#. The provided controlid must be a valid value be greater than 0!'); // Switch to page edit mode pageStatus = pageObj.switchMode(arguments.pageid, "edit"); Request.RenderState.RenderMode = pageStatus.pageMode; // Load the custom element form definition //----------------------------- ceObj.loadFormDefinition(arguments.ceName); // Enable and set a comment for immediate Publication //----------------------------- ceObj.enableImmediatePublication("Published by ceRecordAPI at #Now()#"); // Load the updater instance Record for the LCE //----------------------------- ceObj.loadExistingInstance(arguments.pageid, arguments.controlid); // Check if the pageid belongs to an Existing (prev) version if ( StructKeyExists(ceObj,'PrevVersionRecord') ) currValuesQry = ceObj.PrevVersionRecord; if ( NOT IsQuery(currValuesQry) OR currValuesQry.recordCount EQ 0 ) throw(message='#errorPrefix#. A record for the provided PageID (#arguments.pageid#) and ControlID (#arguments.controlid#) does not exist!'); retStruct['pageid'] = arguments.pageid; retStruct['controlid'] = arguments.controlid; // Prepare the dataVales for the LCE fields //----------------------------- arguments.dataValues = prepareFieldValues(ceObject=ceObj,fieldValues=arguments.dataValues,fieldSpecs=arguments.fieldSpecs); // Add the data to the LCE fields //----------------------------- for ( fldKey IN arguments.dataValues ) { fldValStr = arguments.dataValues[fldKey].fieldValueStr; fldType = arguments.dataValues[fldKey].fieldType; fldOptions = arguments.dataValues[fldKey].fieldOptions; fldError = arguments.dataValues[fldKey].error; // Handle field error if ( TRIM(fldError) NEQ '' ) { ArrayAppend(errFldsArr,fldKey); // Log the error message updError = {}; updError.msg = "#errorPrefix#: #ceObj['formtype']# [#arguments.ceName#]. Error [Message: #fldError#]"; updError.logFile = logErrorFileName; variables.log.logAppend(msg=updError.msg,logFile=updError.logFile); } else { // Set the value for the field fldSetResult = setFieldValue(ceObject=ceObj,fieldName=fldKey,fieldValue=fldValStr,fieldType=fldType,fieldOptions=fldOptions); // Track Updated fields ArrayAppend(updFldsArr,fldKey); } } // END: CMD setValue() Fields Loop // If any field errors don't commit the instance // -- uncomment to not update the record if any field errors occur if ( ArrayLen(errFldsArr) ) updRecord = false; if ( updRecord ) { ceObj.commitInstance(); updPageID = arguments.pageid; updDataValues = ceObj.getCurrentValues(); if ( updPageID GT 0 ) { retStruct['status'] = true; // Legacy CCAPI content updated result keys // - RETURNS: CONTENTUPDATED : true/false & CONTENTUPDATERESPONSE: Success:1 retStruct['contentUpdated'] = true; retStruct['contentUpdateResponse'] = 'Success:1'; } } // switch back to read pageStatus = pageObj.switchMode(pageID=arguments.pageid,requestedMode="read"); Request.RenderState.RenderMode = pageStatus.pageMode; retStruct['pageid'] = updPageID; retStruct['controlid'] = arguments.controlid; retStruct['data'] = updDataValues; retStruct['errorfields'] = errFldsArr; retStruct['updatefields'] = updFldsArr; if ( retStruct['status'] EQ true ) { // Update Success Logging if ( loggingEnabled ) { logStruct.msg = "Local Custom Element Record Updated: #ceObj['formtype']# [#arguments.ceName#]. PageID: #retStruct['pageid']#. ContentUpdateResponse: #retStruct['contentUpdateResponse']#."; if ( ArrayLen(errFldsArr) ) logStruct.msg = logStruct.msg & ' - With Custom Field Type errors. See Custom Field Type Error Log...'; logStruct.logFile = logFileName; } } else { // Error Message retStruct['error_msg'] = errorPrefix; // Log the error message logStruct.msg = "#retStruct.error_msg#: #ceObj['formtype']# [#arguments.ceName#]. PageID: #retStruct['pageid']#."; if ( ArrayLen(errFldsArr) ) { retStruct['error_msg'] = retStruct.error_msg & ' due to Custom Field Type errors. See the Custom Element Record UpdateData Error Log...'; } logStruct.logFile = logErrorFileName; } } catch ( any ex ) { retStruct['status'] = false; // Error logging retStruct['error_msg'] = ex.message; retStruct['error'] = ex; // Log the error message logStruct.msg = "#errorPrefix#: #ceObj['formtype']# [#arguments.ceName#]. Error [Message: #ex.message#]"; if ( StructKeyExists(ex,'detail') AND TRIM(ex.detail) NEQ '' ) logStruct.msg = logStruct.msg & " [Details: #ex.detail#]"; logStruct.logFile = logErrorFileName; // Add log entry to CommonSpot error logs variables.log.addLogEntry(message='Error occurred in command lceRecord_1_0.updateRecord (#DateTimeFormat(Now(),"short")#): #ex.message# - #Server.CommonSpot.UDF.util.structToText(arguments)#',CFCatch=ex,forceStackTrace=true,useDatePrefix=true); } if ( TRIM(logStruct.msg) NEQ '' ) variables.log.logAppend(msg=logStruct.msg,logFile=logStruct.logFile); //,addTimeStamp,logDir,label,useUTC,addEntryTimeStampPrefix return retStruct;