Configurator pages have a property “Skip if all inputs are disabled or invisible.” That sounds like exactly what I want. But when I change it to True, the WYSIWYG editor flickers and the property changes back to False. Maybe it can only be set to True under certain circumstances, but there’s no error message saying “Hey dummy, you can’t use that because…”
Maybe you have to have all the page’s controls default as disabled or invisible in the initial design. Then if you don’t want the page skipped, set the required controls to enabled/visible. Like if page 2 is only needed if certain choices were selected on page 1. Those controls on page one word have code to enable/visible controls on page 2
To skip a page using the page property to skip all inputs you do have to make all controls read only before you click the next page button. Are you attempting to set "“Skip if all inputs are disabled or invisible.” programmatically or via the property on the page? Not all properties can be changed programmatically. If you are setting in on the property page and it isn’t cooperating that may be a bug in the version you are on. That would be a new one as I have used the property regularly and just recently. You can also use the PageLeaveFunctions.SetNextInputPage(3); to take you to a specific page in this case page 3
I’m trying to set “skip” via the properties window in the Designer. The read-only properties of some of the inputs are set by read-only expressions that use inputs bound to globals. So what is read-only is established when the page loads, not interactive. I wonder if @ckrusen is right that I need to set everything read only by default and use read only expressions to conditionally make inputs not read only. Time for more experiments…
Oh… there’s something I didn’t mention, and it might be the reason I can’t change the setting. This is a configurator for a subassembly that can either be sold as part of a complete product or by itself as a replacement part. If it’s sold as a replacement, then it requires inputs. But if it’s sold as part of a complete product, all the inputs are set by the parent via globals. In that case, I want the entire subassembly configurator to be skipped. Maybe it won’t let me set “skip” on the only page of the subassembly configurator.
Edit: at the same time I was thinking of this, support got back with the same answer. You can’t skip page 1. That’s really unfortunate. I’d think subassembly configurators should be skippable when their inputs are provided by their parent.
if there is only one page it makes sense that you can’t mark that one as skip. For the subassembly one approach you might try is using a no-inputs configurator for the subassemblies. A no inputs configurator has no screen but uses method and documents rules to determine what to do. I have only dabbled with using a no-inputs configurator on a subassembly so don’t have a lot to say about how it might work or if it might work for you. The no-inputs configurator wouldn’t be able to refer to globals as there are no inputs to store them in. But you could store the values needed in a UD table and the no-inputs configurator would pull what it needs from there.
I think it makes perfect sense when the part may be sold separately or as part of a larger assembly. You can’t point two configurators at the same revision, so a no inputs configurator isn’t an option.
I expected to be able to skip the first page because of the scope of inputs. It seems weird to me that you create inputs by adding them to the view, since they don’t behave like a view model, but exist in a broader configuration session model. So it should be possible to run the server-side page load expression, then evaluate read only expressions on individual inputs, then evaluate the skip condition, before actually rendering the page. That’s how I would’ve done it, anyway.
The sales people will just have to live with clicking through a read only page.
What I have done in the past is put two subassemblies on the BOM, one that I had a configurator version and one that was a stock part. Using keep when rules I keep one of them. If I keep the configurator version it comes up (or if a no-inputs configurator nothing visually happens). For your purposes you might have a standard configurator version and a no-inputs version. From a part MOM perspective they would be exact copies of each other, the only difference would be the configurator attached to the part.
I faced the same issue when I was designing a configurator within a sequence of other configurators. I passed the config for one of the later ones in the sequence from one of the preceding one, so I wanted to skip that later one, but it has only one page, and you cannot skip page 1.
What we did is used this code on the Page Loaded event to automatically press the button and go to next page. It still appears on screen for a second, but automatically skips to the next:
// Set whatever default configs here
// Skip to next page
Nice trick. So you’re sending Alt-F (or Alt-Shift-F) which opens the File menu. This makes sense as F is the underlined hotkey on the File menu. But I don’t understand the next line. Shift-S does nothing when I try it manually. There are menu items for pages and the Previous/Next Configuration, but they don’t have hotkeys. I tried the old convention of putting an ampersand in my page name to identify the hotkey, but the ampersand comes through literally. Same with an underscore. And even if that worked, you can’t control what the Previous/Next menu item is called.
Then I thought maybe down-down-down-enter would work, but the menu item that is initially selected and the number and order of the page and Previous/Next menu items seem to be indeterminate.
I’m back to using product configurators that I want to skip because no-input configurators sometimes don’t run when expected. From the tech ref:
The No Inputs Configurator allows you to define method rules that execute at Get Details in the Job Entry and Quote Entry programs without having to enter input values.
A is a part with a product configurator, B is a subassembly of A and has a NIC, and C is a subassembly of B and has a PC.
When you configure an A on a quote, you see the config pages for A and C in sequence as expected. But when do the method rules of the NIC run? I hoped the answer would be between A and C. I feared the answer would be after save. The actual answer is, they don’t run at all.
If I quote a B and run get details, the NIC runs. I can see its side effects in a UD table. But then the PC for C is not shown.
So apparently you just can’t mix configurator types in the same configuration session. I don’t think this is mentioned in the docs. (You can mix config types in a MoM where the subassemblies with NICs are Plan As Assembly. Then the NIC runs in its own configuration session on the job.)
That makes sense. So I definitely need to stick with product configurators for intermediate levels of the MoM. Worst case scenario, the user has to skip a single-page configurator with all the inputs invisible or read-only.
Save is only available when you’re looking at the last configurator in the sequence. Earlier in the sequence, sometimes Save is disabled and sometimes it’s not there at all. “Next” is always present but has no hotkey.
The tech ref says you can complete and skip the entire configurator from On Load, but it doesn’t say how. There’s nothing listed in the code editor. The application help claims that you can do this from On Loaded rather than On Load, but also doesn’t say how. I’ve run into situations where things are available in code but not listed in the editor or vice versa. I’m holding out hope that completing from On Load or On Loaded was implemented and just not documented.
The application help contradicts the tech ref. Application help says you can skip configurators from On Loaded, not On Load, but also says nothing about how to actually do it. Support can’t help and recommends we engage professional services to tell us how to use a feature that the docs claim already exists. Unbelievable!
A tidbit from support, though it still doesn’t solve my problem: On Page Leave has an undocumented feature Args.CompleteConfiguration. Setting this to true completes the current configuration, but any sub-configurators will still run. Since it’s in On Page Leave, it can’t be used to complete before the first page. And contrary to the docs, it’s not available in On Load, On Loaded, On Page Load, or On Page Loaded.
I found more examples of the configurator tech ref saying “you can do X” but explaining absolutely nothing about how to do it. I also found something interesting. In a single code snippet, the tech ref mentions OnLoadedArgs. This is not mentioned anywhere else in the tech ref, and it’s not suggested in the code editor. Turns out there’s also an OnCompleteArgs, which is completely undocumented. The configurator code editors don’t support code completion, so I don’t know how to discover what the properties of these objects might be. Maybe this is the key to everything the tech ref mysteriously says you can do.