Sure.



Here's the script for the UI Action:


function openPopUp(){




      var dialogClass = window.GlideModal ? GlideModal : GlideDialogWindow;


      var dialog = new dialogClass("return_to_stock");


      dialog.setWidth("600");


      dialog.setTitle("Return Asset to Stock");


      dialog.setPreference("sysparm_sys_ids", g_form.getUniqueValue());


      dialog.render(); // Open the dialog box



}



And for the UI Page 'return_to_stock'...



HTML:


<g:ui_form>


<input type="hidden" id="cancelled" name="cancelled" value="false"/>


<input type="hidden" name="ci_sys_ids" id="ci_sys_ids" value="${sysparm_sys_ids}"/>


<!-- Set up form fields and labels -->


<table width="100%">


<tr>


<td>


<div class="form-group form-horizontal">


<div class="col-md-4 text-right">


<g:form_label> ${gs.getMessage('Stock room')} </g:form_label>


</div>


<div class="col-md-8">


<g:ui_reference name="stock_room" id="stock_room" table="alm_stockroom" query="type!=e2aa2b3f3763100044e0bfc8bcbe5dde^ORtypeISEMPTY" completer="AJAXReferenceCompleter" columns="name;location"/>


</div>


</div>


</td>


</tr>


<tr style="height: 4px"><td></td></tr>


<tr>


<td>


<div class="form-group form-horizontal">


<div class="col-md-4 text-right">


<g:form_label> ${gs.getMessage('Sub State')} </g:form_label>


</div>


<div class="col-md-8">


      <select name="sub_status" id="sub_status">


              <option value="">${gs.getMessage('-- None --')}</option>


              <g2:evaluate var="jvar_item" expression="


                var gr = new GlideRecord('sys_choice');


                gr.addQuery('element', 'substatus');


                gr.addQuery('dependent_value', '9');


                gr.addQuery('name', 'alm_asset');


gr.addQuery('value','!=', 'reserved');  


gr.addQuery('value','!=', 'pre_allocated');  


gr.addQuery('inactive', 'false');


                gr.addQuery('language', 'en');


                gr.orderBy('sequence');


                gr.query();


                "/>


              <j2:while test="$[gr.next()]">


                      <option value="$[gr.value]">$[gr.label]</option>


              </j2:while>


      </select>


</div>


</div>


</td>


</tr>


<tr id="dialogbuttons">


<td colspan="8" align="right">


<div class="modal-footer">


              <button class="btn btn-primary   action_context edit-close pull-right" type="submit" id="submit" onclick="return onSubmit();">${gs.getMessage('OK')}</button>


              <button class="btn btn-default   action_context edit-close pull-right" type="submit" id="cancel" onclick="return onCancel();">${gs.getMessage('Cancel')}</button>


</div>


</td>


</tr>


</table>


</g:ui_form>


Client Script:


function onCancel() {


var c = gel('cancelled');


c.value = "true";


GlideDialogWindow.get().destroy();


jslog('Return to stock - Cancelled');


}




function onSubmit() {


jslog('Return to stock - Submitted');


if (gel('sub_status').value == '') {


alert("${JS:gs.getMessage('Please select a Sub Status')}");


return false;


}


else if (gel('stock_room').value == '') {


alert("${JS:gs.getMessage('Please select a Stockroom')}");


return false;


}


else {


var c = gel('cancelled');


c.value = "false";


return true;


}


}



Processing Script:



if(cancelled == "false"){


updateAssets();


}


var urlOnStack = GlideSession.get().getStack().bottom();


response.sendRedirect(urlOnStack);




function updateAssets() {


try {


var gr = new GlideRecord('alm_hardware');


gr.addQuery('ci', 'IN', ci_sys_ids);


gr.query();


while (gr.next()) {


gr.install_status = 6;


gr.substatus = sub_status;


gr.stockroom = stock_room;


gr.u_place = '';


gr.install_date = '';


gr.assigned_to = '';


gr.location = gr.stockroom.location;


gr.update();


gs.addInfoMessage(gs.getMessage('Asset {0} returned to stock.', [gr.display_name]));


}


var update_ct = gr.getRowCount();


if (update_ct > 0) {


if (update_ct > 1) {


gs.addInfoMessage(gs.getMessage('{0} assets returned to stock.', [update_ct]));


}


}


else{


gs.addInfoMessage(gs.getMessage('No assets returned to stock.'));


}


}


catch(err){


gs.addInfoMessage('Exception: ' + err);


}


}



We also have a List Choice UI Action which uses the same UI Page but the script in the UI Action is slightly different:



function openListReturnToStockPopUp(){


var selSysIds = g_list.getChecked();


      var dialogClass = window.GlideModal ? GlideModal : GlideDialogWindow;


      var dialog = new dialogClass("return_to_stock");


      dialog.setWidth("600");


      dialog.setTitle("Return Asset to Stock");


dialog.setPreference('sysparm_sys_ids', selSysIds);


      dialog.render(); // Open the dialog box


}



Hope this helps.



Robin