SuiteScript 2.0 Suitelet Sublist with line-specific "Select" options - netsuite

I currently have a nice suitelet popup as a PDF Report selection. Everything so far works nicely.
However, some of the available PDF reports require individual options to be passed. ie. a date, or a class selction specific to ONLY 1 of the forms.
Currently I have created the sublist:
var documentList = form.addSublist({
id: 'documentlist',
label: 'Documents Available'+ (data.job ? ' for Job Number: '+data.job : ''),
type: serverWidget.SublistType.LIST
})
documentList.addField({ id: 'mark', type: 'CHECKBOX', label: 'Print'});
documentList.addField({ id: 'config', type: 'SELECT', label: 'Form', source: 'customrecord_advancedformconfig' }).updateDisplayType({displayType : 'INLINE'});
documentList.addField({ id: 'vardate', type: 'CHECKBOX', label: 'Variation Dates' }).updateDisplayType({displayType : 'INLINE'});
documentList.addField({ id: 'document', type: 'TEXT', label: 'Document', }).updateDisplayType({displayType : 'HIDDEN'});
documentList.addField({ id: 'primaryrecord', type: 'TEXT', label: 'Main Record'}).updateDisplayType({displayType : 'INLINE'});
documentList.addField({ id: 'storeincabinet', type: 'CHECKBOX', label: 'Save to Cabinet'}).updateDisplayType({displayType : 'INLINE'});
documentList.addField({ id: 'filename', type: 'TEXT', label: 'File Name to be Generated'}).updateDisplayType({displayType : 'NORMAL'});
var pdfOptions = documentList.addField({ id: 'formoption', type: 'SELECT', label: 'Option' }).updateDisplayType({displayType : 'NORMAL'});
The last line is the sublist field for the form options.
Lets assume the first line requires a couple of date options, while the second line requires a couple of size or colour options.
As there is only a "field" action to pdfOptions.addSelectOption(...) this adds options to ALL occurences of the field.
Is there a method for each LINE of the sublist, to set options for just a single line??
There is no pdfOptions.addSublistSelectOption(...) so I'm going to guess the answer is not, but thought I would ask anyway.
To illustrate, see below image... Only the last line should have a date dropdown.

The way I've accomplished having different select options for different lines is using a client script with the lineInit entry point that cleared out the existing options and added relevant ones for that line.
However you would need to change the sublist type from LIST to EDITOR or INLINEEDITOR for this to work, which probably wouldn't work well in your use case.

Related

Stripe - Don't collapse address element by default

When adding an address element to my stripe form, Only the 'Address Line 1' appears by default. Once the user starts typing in their address the rest of the fields are displayed. Is it possible to show all of the address element fields when the form is ready and not hide 'Address line 2', 'City', 'State', 'Zip', and 'Phone number' by default?
Looks like the only way to currently expand the address element fields is to set default values when creating the address element. It looks like passing default values for just state and country will render the remaining fields. The phone field will also be expanded as long as the 'always' value is specified in fields.phone.
You'd do something like this:
const addressElement = elements.create("address", {
mode: "shipping",
defaultValues: {
address: {
state: 'CA',
country: 'US',
},
},
fields: {
phone: 'always',
},
});

I want to make a custom form in NetSuite with a list of Status after enabling Inventory Status with no empty field option

`sublist.addField({
id: 'INV_STATUS',
label: 'INV_STATUS',
type: serverWidget.FieldType.SELECT,
source: 'inventorystatus'
});`
I am using this code to add a field to sublist but the sublist has first value as empty.
You have to populate the list manually to avoid an empty option.
var list = sublist.addField({
id: 'INV_STATUS',
label: 'INV_STATUS',
type: serverWidget.FieldType.SELECT
});
search.create({
type: search.Type.INVENTORY_STATUS,
columns: 'name'
}).run().each(function(result) {
list.addSelectOption({
value: result.id,
text: result.getValue('name')
});
});

How to insert the same line in multiple rows in a YAML file at once

Is there any way to insert the same line in multiple rows of a YAML file. For example the YAML:
fields:
id:
label: ID
disabled: true
full_name:
label: Full Name
shipping_address:
label: Shipping Address
should become:
fields:
id:
label: ID
disabled: true
span: auto
full_name:
label: Full Name
span: auto
shipping_address:
label: Shipping Address
span: auto
Give this a try:
:g/\v^(\s{4})\S+:/exe "norm! YpAfoo: bar\<esc>^df:>>>>"
You should change the {4} to the right indentation, it depends on the new item goes under which level.
This will insert the new entry in the first position.
With your example:
Something almost perfect:
g/label:/ put=' span: auto'
The only problem happens on the ID block, or how to get the final line as a pattern to use in the global command.

Adding Radio Button on Suitelet SS2.0

I am adding the radio button on Suitlet page but it is throwing an error while loading the page. I am not sure where I am going wrong.
var custType1 = form.addField({
id: 'custpage_customertype',
name: 'retail_customer',
type: serverWidget.FieldType.RADIO,
label: 'Retail Customer',
container: 'companygroup'
});
var custType2 = form.addField({
id: 'custpage_customertype',
name: 'corporate_customer',
type: serverWidget.FieldType.RADIO,
label: 'Corporate Customer',
container: 'companygroup'
});
var custType3 = form.addField({
id: 'custpage_customertype',
name: 'external_customer',
type: serverWidget.FieldType.RADIO,
label: 'External Customer',
container: 'companygroup'
});
While running the code, I am getting error on this line saying SSS_MISSING_REQD_ARGUMENT. Following is the error code -
{"type":"error.SuiteScriptError","name":"SSS_MISSING_REQD_ARGUMENT","message":"nlobjField: Missing a required argument: radiobuttons: sSource","stack":["addField(N/serverWidget)","(/SuiteScripts/sdr_sw_suitelet_test.js:123)"],"cause":{"type":"internal error","code":"SSS_MISSING_REQD_ARGUMENT","details":"nlobjField: Missing a required argument: radiobuttons: sSource","userEvent":null,"stackTrace":["addField(N/serverWidget)","(/SuiteScripts/sdr_sw_suitelet_test.js:123)"],"notifyOff":false},"id":"","notifyOff":false,"userFacing":false}
You need a source property which will be like the id of the radio button. This will be the value used by the script to know which radio button was selected. Something like
var custType1 = form.addField({
id: 'custpage_customertype',
name: 'retail_customer',
type: serverWidget.FieldType.RADIO,
label: 'Retail Customer',
source:'retail',
container: 'companygroup'
});

How to select custom layout to use in Apache POI

I have a pptx with following slide layouts:
System.out.println("Available slide layouts:");
for(XSLFSlideMaster master : ppt.getSlideMasters()){
for(XSLFSlideLayout layout : master.getSlideLayouts()){
System.out.println("Name: "+layout.getName()+" Type: "+layout.getType());
Available slide layouts:
Name: Content Type: OBJ_ONLY
Name: Title and 4 Content Type: FOUR_OBJ
Name: Title Only Type: TITLE_ONLY
Name: DETAIL_SCORECARD Type: CUST
Name: Scorecard Type: CUST
Name: CSCLayout1 Type: CUST
Name: 1_Blank Type: BLANK
Name: Title, Content, and 2 Content Type: OBJ_AND_TWO_OBJ
Name: Title and Content Type: TITLE_AND_CONTENT
Name: Title, Text, and Content Type: TX_AND_OBJ
Name: Two Content Type: TWO_OBJ
Name: Main Type: TITLE
How do I go about selecting 2nd or 3rd CUST layout option
Current implementation works fine with 1st CUST slide layout
FileInputStream input = null;
input = new FileInputStream(filename);
slideshow = new XMLSlideShow(input);
XSLFSlideMaster defaultMaster = slideshow.getSlideMasters()[0];
XSLFSlideLayout detailedscorecard = defaultMaster.getLayout(SlideLayout.CUST);
I've tried renaming the slide name within slide master, but it doesn't seem to have any affect on the above list. is there a way to use layout.getName() to find the actual name of the slide layout,
XSLFSlideLayout detailedscorecard = defaultMaster.getLayout(SlideLayout.CUST);
ok.. got an answer from a friend and got it resolved...
XSLFSlideLayout detailedscorecard = null;
for (XSLFSlideMaster master : slideshow.getSlideMasters()){
for (XSLFSlideLayout layout1 : master.getSlideLayouts()){
if (layout1.getName().equals("Scorecard")) {
detailedscorecard=layout1;
}
}
}

Resources