// CUSTOM ELEMENT INFO variables.CUSTOM_ELEMENT = ""; variables.CE_FIELD = ""; // Must have the matching case as the field name in the element. variables.SEARCH_FIELDS = ""; variables.ORDER_FIELD = ""; // Display Text for the Chooser Items ( Defaults to the ORDER_FIELD ) variables.DISPLAY_FIELD = ""; // Item Display Thumbnail Image Field (If specified will render 2 DIVs in each drag & drop Item) variables.SELECT_ITEM_IMAGE_FIELD = ""; // STYLES variables.MAIN_WIDTH = 530; variables.SECTION1_WIDTH = 270; variables.SECTION2_WIDTH = 270; variables.SECTION3_WIDTH = variables.MAIN_WIDTH; variables.SELECT_BOX_HEIGHT = 350; variables.SELECT_BOX_WIDTH = 240; variables.SELECT_ITEM_HEIGHT = 30; variables.SELECT_ITEM_WIDTH = 200; variables.SELECT_ITEM_LEFTCELL_WIDTH = 60; variables.SELECT_ITEM_CLASS = "ui-state-default"; // Only used if SELECT_ITEM_IMAGE_FIELD has been assigned variables.SELECT_ITEM_IMAGE_HEIGHT = 30; variables.SELECT_ITEM_IMAGE_WIDTH = variables.SELECT_ITEM_IMAGE_HEIGHT; // Deprecated Setting - MOVED to the CFT props //variables.JQUERY_UI_THEME = "ui-lightness"; // VARIABLES for v1.1 variables.SHOW_SEARCH = true; // Boolean variables.SHOW_ALL_LINK = true; // Boolean variables.SHOW_ADD_LINK = true; // Boolean variables.SHOW_EDIT_DELETE_LINKS = false; // Boolean - 'false' Disables both Edit and Delete options, 'true' Enables the SHOW_EDIT_LINKS and SHOW_DELETE_LINKS options // VARIABLES for v1.2 for ADF 1.6.2+ variables.AVAILABLE_LABEL = "Available Items"; variables.SELECTED_LABEL = "Selected Items"; variables.NEW_ITEM_LABEL = "Add New Item"; variables.SHOW_EDIT_LINKS = false; // Boolean - SHOW_EDIT_DELETE_LINKS must be true to enable this option variables.SHOW_DELETE_LINKS = false; // Boolean - SHOW_EDIT_DELETE_LINKS must be true to enable this option variables.SHOW_INSTRUCTIONS = true; // Boolean var itm = 1; var thisParam = ""; var argStr = ""; var reHTML = ""; var argsData = StructNew(); // Set the chooserApp if not passed in if ( !StructKeyExists(arguments,"chooserApp") OR LEN(TRIM(arguments.chooserApp)) EQ 0 ) arguments.chooserApp = "ADF"; // Set the bean name is not passed in if ( !StructKeyExists(arguments,"chooserBean") OR LEN(TRIM(arguments.chooserBean)) EQ 0 ) arguments.chooserBean = ListLast(getMetaData().name,"."); // loop through request.params parameters to get arguments for( itm=1; itm lte listLen(structKeyList(arguments)); itm=itm+1 ) { thisParam = listGetAt(structKeyList(arguments), itm); if( thisParam neq "method" and thisParam neq "bean" and thisParam neq "chooserMethod" and thisParam neq "appName" ) argsData[thisParam] = arguments[thisParam]; } // Call the chooser method with params to process the request reHTML = application.ADF.utils.runCommand(beanName=arguments.chooserBean, methodName=arguments.chooserMethod, args=argsData, appName=arguments.chooserApp); return reHTML; var initArgs = StructNew(); initArgs.fieldName = arguments.fieldName; initArgs.formname = arguments.formname; initArgs.currentValue = arguments.currentValue; initArgs.readOnly = arguments.readOnly; initArgs.rendertabindex = arguments.rendertabindex; initArgs.fieldID = arguments.fieldName; initArgs.csPageID = request.page.id; initArgs.dataPageID = structKeyExists(request.params, "dataPageID") ? request.params.dataPageID : structKeyExists(request.params, "pageID") ? request.params.pageID : request.page.id; initArgs.controlID = structKeyExists(request.params, "controlID") ? request.params.controlID : 0; initArgs.inputParameters = arguments.inputParameters; initArgs.gcCustomParams = getCustomGCparams(); return initArgs; var selectionArgs = StructNew(); selectionArgs.fieldName = arguments.fieldName; selectionArgs.formname = arguments.formname; selectionArgs.item = arguments.currentValue; selectionArgs.queryType = "selected"; // default initial selected GET selectionArgs.fieldID = arguments.fieldName; selectionArgs.readOnly = arguments.readOnly; selectionArgs.csPageID = request.page.id; selectionArgs.dataPageID = structKeyExists(request.params, "dataPageID") ? request.params.dataPageID : structKeyExists(request.params, "pageID") ? request.params.pageID : request.page.id; selectionArgs.controlID = structKeyExists(request.params, "controlID") ? request.params.controlID : 0; selectionArgs.inputParameters = arguments.inputParameters; selectionArgs.gcCustomParams = getCustomGCparams(); return selectionArgs; var custParams = StructNew(); // Custom Parameters // - Category ID Filter Default // -- Option 1: Just set the default // custParams.categoryID = ""; // -- Option 2: Allow the Category to be pre-selected by passing in the categoryID from calling page (?categoryID=) // custParams.categoryID = StructKeyExists(request.params,"categoryID") ? request.params.categoryID : ""; return custParams; var retInitHTML = ""; var itemCellRightHeight = ""; var gcCustomStyles = ""; if ( StructKeyExists(variables,"SELECT_ITEM_HEIGHT") AND IsNumeric(variables.SELECT_ITEM_HEIGHT) ) itemCellRightHeight = (variables.SELECT_ITEM_HEIGHT-4); // Backward Compatibility - if a SELECT_ITEM_IMAGE_FIELD value not given or is not defined if ( !StructKeyExists(variables,"SELECT_ITEM_IMAGE_FIELD") ) variables.SELECT_ITEM_IMAGE_FIELD = ""; // Backward Compatibility - if a SELECT_ITEM_LEFTCELL_WIDTH value not given or is not defined if ( !StructKeyExists(variables,"SELECT_ITEM_LEFTCELL_WIDTH") ) variables.SELECT_ITEM_LEFTCELL_WIDTH = 60; // Allow Space for the Edit and/or Delete links if ( variables.SHOW_EDIT_DELETE_LINKS AND (variables.SHOW_EDIT_LINKS OR variables.SHOW_DELETE_LINKS) AND IsNumeric(variables.SELECT_ITEM_HEIGHT) ) itemCellRightHeight = (variables.SELECT_ITEM_HEIGHT-20); var cftGCheaderCustomCSS = ''; var cftGeneralChooserFooterJS = ''; // Set inputParameters Default values if ( NOT StructKeyExists(arguments.inputParameters,"chooserCFCName") ) arguments.inputParameters.chooserCFCName = ListLast(getMetadata().name,"."); if ( NOT StructKeyExists(arguments.inputParameters,"chooserAppName") ) arguments.inputParameters.chooserAppName = "ADF"; if ( NOT StructKeyExists(arguments.inputParameters,"req") ) arguments.inputParameters.req = false; if ( NOT StructKeyExists(arguments.inputParameters,"loadAvailable") ) arguments.inputParameters.loadAvailable = 0; if( NOT StructKeyExists(arguments.inputParameters, "loadAvailableOption") ) arguments.inputParameters.loadAvailableOption = "useServerSide"; // useServerSide or useJavascript if ( NOT StructKeyExists(arguments.inputParameters,"minSelections") ) arguments.inputParameters.minSelections = ""; if ( NOT StructKeyExists(arguments.inputParameters,"maxSelections") ) arguments.inputParameters.maxSelections = ""; // Render the General Chooser Javascript functions savecontent variable="cftGeneralChooserFooterJS" { WriteOutput(''); } application.ADF.scripts.addFooterJS(cftGeneralChooserFooterJS,"SECONDARY"); var passthroughParamsStr = getPassthroughParamsString(arguments.inputParameters); var #arguments.fieldName#_ajaxProxyURL = "#application.ADF.ajaxProxy#?#passthroughParamsStr#"; var #arguments.fieldName#_currentValue = "#arguments.currentValue#"; var #arguments.fieldName#_searchValues = ""; jQuery(function(){ // Resize the window on the page load #arguments.fieldName#_checkResizeWindow(); // Load all the not-selected options #arguments.fieldName#_loadTopics('notselected'); // Click Event for Show all Items link jQuery('###arguments.fieldName#-showAllItems').click(function() { // Load all the not-selected options #arguments.fieldName#_loadTopics('notselected'); }); // Click event for search button jQuery('###arguments.fieldName#-searchBtn').click(function() { //load the search field into currentItems #arguments.fieldName#_searchValues = jQuery('input###arguments.fieldName#-searchFld').val(); #arguments.fieldName#_loadTopics('search'); }); // Load the effects and lightbox - this is b/c we are auto loading the selections #arguments.fieldName#_loadEffects(); // Re-init the ADF Lightbox initADFLB(); }); // Logging call if needed for debugging // application.ADF.utils.logAppend(msg=arguments, label='arguments', logfile="renderChooserJS_chooserItems.html"); // 2013-12-02 - GAC - Updated to allow 'ADD NEW' to be used multiple times before submit function #arguments.fieldName#_loadTopics(queryType) { // Update the currentValue Global variable #arguments.fieldName#_currentValue = jQuery('input###arguments.fieldName#').val(); // Put up the loading message if ( queryType == "selected" ) jQuery("###arguments.fieldName#-sortable2").html("Loading ... "); else jQuery("###arguments.fieldName#-sortable1").html("Loading ... "); // load the initial list items based on the top terms from the chosen facet jQuery.get( #arguments.fieldName#_ajaxProxyURL, { appName:'#arguments.inputParameters.chooserAppName#', bean:'#arguments.inputParameters.chooserCFCName#', method:'controller', chooserApp: '#arguments.inputParameters.chooserAppName#', chooserBean: '#arguments.inputParameters.chooserCFCName#', chooserMethod:'getSelections', item: #arguments.fieldName#_currentValue, queryType: queryType, searchValues:#arguments.fieldName#_searchValues, csPageID:'#arguments.csPageID#', fieldID:'#arguments.fieldName#', dataPageID:#request.params.dataPageID##request.params.pageID##request.page.id#, controlID:#request.params.controlID#0 }, function(msg) { if ( queryType == "selected" ) jQuery("###arguments.fieldName#-sortable2").html(jQuery.trim(msg)); else jQuery("###arguments.fieldName#-sortable1").html(jQuery.trim(msg)); #arguments.fieldName#_loadEffects(); // Re-init the ADF Lightbox initADFLB(); }); } function #arguments.fieldName#_loadEffects() { jQuery("###arguments.fieldName#-sortable1, ###arguments.fieldName#-sortable2").sortable({ connectWith: '.connectedSortable', stop: function(event, ui) { #arguments.fieldName#_serialize(); } }).disableSelection(); } // serialize the selections function #arguments.fieldName#_serialize() { // get the serialized list var serialList = jQuery('###arguments.fieldName#-sortable2').sortable( 'toArray' ); // Check if the serialList is Array if ( serialList.constructor==Array ) { serialList = serialList.join(","); } // load serial list into current values #arguments.fieldName#_currentValue = serialList; // load current values into the form field jQuery("input###arguments.fieldName#").val(#arguments.fieldName#_currentValue); } // A Utility function to checkResize the window function function #arguments.fieldName#_checkResizeWindow() { // Check if we are in a loader.cfm page if ( '#ListLast(cgi.SCRIPT_NAME,"/")#' == 'loader.cfm' ) { ResizeWindow(); } } // 2013-12-02 - GAC - Updated to allow 'ADD NEW' to be used multiple times before submit function #arguments.fieldName#_formCallback(formData) { formData = typeof formData !== 'undefined' ? formData : {}; var tempValue = ""; var cValue = jQuery("input###arguments.fieldName#").val(); // Call the utility function to make sure the JS object keys are all lowercase formData = #arguments.fieldName#_ConvertCaseOfDataObjKeys(formData,'lower'); js_#arguments.fieldName#_CE_FIELD = js_#arguments.fieldName#_CE_FIELD.toLowerCase(); // Load the newest item onto the selected values // 2012-07-31 - MFC - Replaced the CFJS function for "ListLen" and "ListFindNoCase". if ( cValue.length > 0 ) { // Check that the record does not exist in the list already tempValue = cValue.search(formData[js_#arguments.fieldName#_CE_FIELD]); if ( tempValue <= 0 ) cValue = #arguments.fieldName#_ListAppend(formData[js_#arguments.fieldName#_CE_FIELD], cValue); } else cValue = formData[js_#arguments.fieldName#_CE_FIELD]; // load current values into the form field jQuery("input###arguments.fieldName#").val(cValue); // Reload the selected Values #arguments.fieldName#_loadTopics("selected"); // Close the lightbox closeLB(); } // 2013-11-26 - Fix for duplicate items on edit issue function #arguments.fieldName#_formEditCallback() { // Reload the selected Values #arguments.fieldName#_loadTopics("selected"); // Reload the non-selected Values #arguments.fieldName#_loadTopics("notselected"); // Close the lightbox closeLB(); } function #arguments.fieldName#_validate() { //Get the list of selected items var selections = jQuery("###arguments.fieldName#").val(); var lengthOfSelections = 0; //.split will return an array with 1 item if there is an empty string. Get around that. if ( selections.length ) { var arraySelections = selections.split(","); lengthOfSelections = arraySelections.length; } // If the field is required, check that a select has been made. if (lengthOfSelections <= 0) { alert("Please make a selection from the available items list."); return false; } if(lengthOfSelections < #arguments.inputParameters.minSelections#) { alert("Minimum number of selections is #arguments.inputParameters.minSelections# you have only selected "+lengthOfSelections+" items"); return false; } if(lengthOfSelections > #arguments.inputParameters.maxSelections#) { alert("Maximum number of selections is #arguments.inputParameters.maxSelections# you have selected "+lengthOfSelections+" items"); return false; } return true; } // A Utility function convert the case of keys of a JS Data Object function #arguments.fieldName#_ConvertCaseOfDataObjKeys(dataobj,keycase) { dataobj = typeof dataobj !== 'undefined' ? dataobj : {}; keycase = typeof keycase !== 'undefined' ? keycase : "lower"; //lower OR upper var key, keys = Object.keys(dataobj); var n = keys.length; var newobj={}; while (n--) { key = keys[n]; if ( keycase == 'lower' ) newobj[key.toLowerCase()] = dataobj[key]; else if ( keycase == 'upper' ) newobj[key.toUpperCase()] = dataobj[key]; else newobj[key] = dataobj[key]; // NOT upper or lower... pass the data back with keys unchanged } return newobj; } // A utility function for appending values to a list function #arguments.fieldName#_ListAppend(a,b,e) { var c=""; a+=""; if(!e) e=","; if( #arguments.fieldName#_ListLen(a,e) ) c=a+e+b; else c=b; return c; } // A utility function for counting items in a list function #arguments.fieldName#_ListLen(a,b) { a+=""; if ( !b ) b=","; if ( a.length ) return a.split(b).length; return 0; } var retSearchBoxHTML = ""; // Backward compatibility to allow the variables from General Chooser v1.0 site and app override GC files to honored if ( StructKeyExists(variables,"SHOW_SECTION1") ) variables.SHOW_SEARCH = variables.SHOW_SECTION1; var retAddLinkHTML = ""; var ceFormID = 0; var passthroughParamsStr = getPassthroughParamsString(arguments.inputParameters); // Backward Compatibility to allow the variables from General Chooser v1.0 site and app override GC files to be honored // - if the section2 variable is used and set to false... not ADD button should be displayed if ( StructKeyExists(variables,"SHOW_SECTION2") AND variables.SHOW_SECTION2 EQ false ) variables.SHOW_ADD_LINK = false; // - if SHOW_ADD_LINK is still true (and SHOW_SECTION2 is true) then check for the ADD_NEW_FLAG variable if ( StructKeyExists(variables,"ADD_NEW_FLAG") AND variables.SHOW_ADD_LINK NEQ false ) variables.SHOW_ADD_LINK = variables.ADD_NEW_FLAG; var retItemLinksHTML = ""; var editMethod = "renderAddEditForm"; var deleteMethod = "renderDeleteForm"; var editButtonHTML = ""; var deleteButtonHTML = ""; if ( variables.SHOW_EDIT_DELETE_LINKS AND !arguments.readonly ) { retItemLinksHTML = ""; // Build the ITEM Edit button if ( variables.SHOW_EDIT_LINKS ) { editButtonHTML = loadEditItemLink(fieldName=arguments.fieldName,bean=arguments.bean,method=editMethod,formid=arguments.formid,csPageID=arguments.csPageID,readonly=arguments.readonly,displayText=arguments.displayText); if ( LEN(TRIM(editButtonHTML)) ) { retItemLinksHTML = retItemLinksHTML & ""; } } // Build the ITEM Delete button if ( variables.SHOW_DELETE_LINKS ) { deleteButtonHTML = loadDeleteItemLink(fieldName=arguments.fieldName,bean=arguments.bean,method=deleteMethod,formid=arguments.formid,csPageID=arguments.csPageID,readonly=arguments.readonly,displayText=arguments.displayText); if ( LEN(TRIM(deleteButtonHTML)) ) { retItemLinksHTML = retItemLinksHTML & ""; } } retItemLinksHTML = retItemLinksHTML & "
"; retItemLinksHTML = retItemLinksHTML & TRIM(editButtonHTML); retItemLinksHTML = retItemLinksHTML & ""; retItemLinksHTML = retItemLinksHTML & TRIM(deleteButtonHTML); retItemLinksHTML = retItemLinksHTML & "
"; } return retItemLinksHTML;
var retEditLinkHTML = ""; var retDeleteLinkHTML = ""; var retLabelHTML = ""; var aLabel = variables.AVAILABLE_LABEL; #aLabel#: (DISABLED) var retLabelHTML = ""; var sLabel = variables.SELECTED_LABEL; #sLabel#: (DISABLED) var retInstructionsHTML = ""; var aLabel = variables.AVAILABLE_LABEL; var sLabel = variables.SELECTED_LABEL; var renderInstructions = true; if ( StructKeyExists(variables,"SHOW_INSTRUCTIONS") AND variables.SHOW_INSTRUCTIONS ) variables.SHOW_INSTRUCTIONS = false; Select the records you want to include in the selections by dragging items into or out of the '#aLabel#' list. Order the columns within the datasheet by dragging items within the '#sLabel#' field. var retHTML = ""; var i = 1; var displayTextTrimSize = 26; var itemCls = ""; var editDeleteLinks = ""; var editDeleteButtonHTML = ""; var itemEditDeleteCls = "itemEditDelete"; var ceDataArray = ArrayNew(1); var displayText = ''; var imgURL = ""; var imgData = StructNew(); var retHTMLImg = ""; // Backward Compatibility - if SELECT_ITEM_IMAGE_FIELD and SELECT_ITEM_IMAGE_HEIGHT values are not given or not defined if ( !StructKeyExists(variables,"SELECT_ITEM_IMAGE_FIELD") ) variables.SELECT_ITEM_IMAGE_FIELD = ""; if ( !StructKeyExists(variables,"SELECT_ITEM_IMAGE_HEIGHT") ) variables.SELECT_ITEM_IMAGE_HEIGHT = (variables.SELECT_ITEM_HEIGHT - 4); // Look for additional arguments/values passed in that match the gcCustomParams for ( key IN arguments.gcCustomParams ) { if ( StructKeyExists(arguments,key) ) arguments.gcCustomParams[key] = arguments[key]; } // Get the Items to display ceDataArray = getChooserData(item=arguments.item, queryType=arguments.queryType, searchValues=arguments.searchValues, csPageID=arguments.csPageID, gcCustomParams=arguments.gcCustomParams); // Backward Compatibility - if a DISPLAY_TEXT variable not given or is not defined the ORDER_FIELD will still be used for the Item display text if ( NOT StructKeyExists(variables,"DISPLAY_FIELD") OR LEN(TRIM(variables.DISPLAY_FIELD)) EQ 0 ) variables.DISPLAY_FIELD = variables.ORDER_FIELD; // Loop over the data for ( i=1; i LTE ArrayLen(ceDataArray); i=i+1) { // Assemble the render HTML if ( StructKeyExists(ceDataArray[i].Values, "#variables.DISPLAY_FIELD#") AND LEN(ceDataArray[i].Values[variables.DISPLAY_FIELD]) AND StructKeyExists(ceDataArray[i].Values, "#variables.CE_FIELD#") AND LEN(ceDataArray[i].Values[variables.CE_FIELD]) ) { // Reset the item class on every loop iteration itemCls = variables.SELECT_ITEM_CLASS; // Build the Edit/Delete links if ( variables.SHOW_EDIT_DELETE_LINKS AND !arguments.readonly ) { // Render the Buttons HTML editDeleteButtonHTML = loadEditDeleteItemLinks(fieldName=arguments.fieldID,formid=ceDataArray[i].formID,csPageID=ceDataArray[i].pageID,readonly=arguments.readonly,displayText=ceDataArray[i].Values[variables.DISPLAY_FIELD]); if ( LEN(TRIM(editDeleteButtonHTML)) ) { editDeleteLinks = "
"; editDeleteLinks = editDeleteLinks & TRIM(editDeleteButtonHTML); editDeleteLinks = editDeleteLinks & "
"; // Set the item class to add the spacing for the edit/delete links itemCls = itemCls & " " & itemEditDeleteCls; } } // Update: Now trimmed with CSS overflow: hidden displayText = ceDataArray[i].Values[variables.DISPLAY_FIELD]; // Set the display text and determine if need "..." //displayText = LEFT(ceDataArray[i].Values[variables.DISPLAY_FIELD], displayTextTrimSize); //if ( LEN(displayText) GT displayTextTrimSize ) // displayText = displayText & "..."; if ( StructKeyExists(variables,"SELECT_ITEM_IMAGE_FIELD") AND LEN(TRIM(variables.SELECT_ITEM_IMAGE_FIELD)) AND StructKeyExists(ceDataArray[i].Values,variables.SELECT_ITEM_IMAGE_FIELD) ) { // Render a thumbnail image. use a blank 1x1 gif if the image field is not required and has no value. retHTMLImg = ""; imgURL = ""; imgData = StructNew(); if ( LEN(TRIM(ceDataArray[i].Values[variables.SELECT_ITEM_IMAGE_FIELD])) ) { imgData = application.ADF.csData.decipherCPIMAGE(ceDataArray[i].Values[variables.SELECT_ITEM_IMAGE_FIELD]); if ( IsStruct(imgData) AND structKeyExists(imgData,"resolvedURL") and structKeyExists(imgData.resolvedURL,"serverRelative") and len(imgData.resolvedURL.serverRelative) ) imgURL = imgData.resolvedURL.serverRelative; if ( LEN(TRIM(imgURL)) ) retHTMLImg = ""; } // Build the item, image, and add the Edit/Delete links displayText = "
#retHTMLImg#
#displayText#
"; } // Build the item, and add the Edit/Delete links retHTML = retHTML & "
  • "; retHTML = retHTML & displayText & editDeleteLinks; retHTML = retHTML & "
  • "; } } // Check if we had any values if ( LEN(TRIM(retHTML)) EQ 0 ) retHTML = "No records to display."; return retHTML;
    // Initialize the return variable var retHTML = ""; // Get the CE Data var dataArray = ArrayNew(1); // clean the search text if ( arguments.queryType eq "search" ) arguments.searchValues = cleanChooserSearchText(arguments.searchValues); // Get custom element data // Check if we are returning all the records when items is empty string and querytype is NOTselected if ( (arguments.queryType EQ "notselected") AND (LEN(arguments.item) LTE 0) ) dataArray = getCEData(variables.CUSTOM_ELEMENT); else dataArray = getCEData(variables.CUSTOM_ELEMENT, variables.CE_FIELD, arguments.item, arguments.queryType, arguments.searchValues, variables.SEARCH_FIELDS); // if are returning the selected items // sort the dataArray array order to match the passed in items ID order if ( arguments.queryType NEQ "selected" ) { // sort the dataArray dataArray = arrayOfCEDataSort(dataArray, variables.ORDER_FIELD); } return dataArray; var retText = arguments.inText; // remove the single quote // 12-16-2016 - GAC - This single "straight" quote filter is no longer needed //retText = Replace(retText,chr(39),"&##39;","all"); // remove the double quote // 12-16-2016 - GAC - This double "straight" quotes filter is no longer needed // retText = Replace(retText,chr(34),"&##34;","all"); // Escape all special characters // Not needed at this time //retText = server.commonspot.udf.html.escape(retText); return retText; function getPassthroughParamsString(inputParameters) { var passthroughParamsStr = ""; var aParams= ""; var i = 0; if (structKeyExists(arguments.inputParameters, "passthroughParams") && arguments.inputParameters.passthroughParams != "") { aParams = listToArray(arguments.inputParameters.passthroughParams); for (i = 1; i <= arrayLen(aParams); i++) { if (structKeyExists(request.params, aParams[i])) passthroughParamsStr = "#passthroughParamsStr#&#aParams[i]#=#request.params[aParams[i]]#"; } } return passthroughParamsStr; }