Infopath and Cascading Dropdowns - sharepoint

I have a question for you bright minded souls. I have an Infopath form for a Sharepoint List (meaning that this is considered an Infopath List Form) that I would like certain behavior for... and I'm not quite sure how to achieve it.
The gist is, I have two dropdowns on the form and I want the second dropdown to change its values based on the first dropdowns selection.
Both are pointing at the same list. The list looks like so:
ID, ModuleName, SystemName, PayCode, LineOfBusoness
1, Mod1, Sys1, O, LOB1
2, Mod2, Sys2, O, LOB2
3, Mod3, Sys3, C, LOB3
4, Mod3, Sys4, O, LOB3
The first dropdown contains just the paycodes, so basically "O", and "C".
Now the second dropdown is where it gets tricky.
The second drop down is to display all the Lines of Business (LOB) from that list based on the PayCode selected in the previous dropdown. If they select "O" then just display all the LOBs that has the paycode of "O".
BUT... if they select "C"... well then there are also dropdowns on the form where they have already selected System and Module... so it would then take those values that were selected and choose the value in the list that has the System they chose, the Module they chose, and the Paycode they chose.
How can I do that? My first thought was well, just use code... but it turns out Infopath does not allow custom code on a "list form" which this is... wtf? So then the next option is to use the "cascading dropdown" approach whereby you can also use rules and filters to try and achieve this behavior.
Can that be done? What are your thoughts as to how you would tackle this problem?
Thanks in advance, and please let me know if you need additional information!

One way to do this is in the code behind.
Take the first drop down, find the field it is associated with, right click and create a "Changed" event.
In the code behind event, a Changed event will be created for that field. There you can grab the value of the currently selected item of the first drop down. Depending on that value, you can then modify the contents of the second drop down.
Do this by grabbing the original list, and running an SPQuery that selects all the items that have a "O" or "C" or whatever selected value is. You can also run a linq or foreach statement on all the list's items, whichever you prefer :)
Note: Make sure the drop down list control properties has "Always" selected in the Browser Forms tab of the properties (right click on the drop down list to access these properties)
Hope this helps!

Related

VBA - MultiSelect in a DropDown

I have a Requirement Where a bundle of Items needs to be displayed in the Drop-Down List. The Problem for me is, because there are so many Items inside it, I need to Use Combobox over List-Box. The Reason for that is, if I know the name of the item, I can type in the search box of the drop-down and get my Item, Combo-Box allows you to do that. But the List Box doesn't allow the User Input.
Now, Because there are some which names cannot be remembered, I need to use the Scroll bar in the drop-down to pick up the time. This is hectic, to select a single Item. I would like to have the facility of Using a Multi-select in this case.
So the Requirements are below:
1) A Drop-Down that allows the user to type in part of the Input(Say Ref for Refreigerator)
2) A Drop-Down that allows the Multi-select.
Obviously, I don't want to have two drop-downs Splitting the data.
I am open to other Suggestions.
Please Share your thoughts.

Infopath Newbie - Populate field from lookup value

There are explanations for this all over the web, but none I have followed a) seem to work, b) explain how to achieve this in simple noob terms, c) show any sort of diagram, or d) make assumptions that you want to start jumping right into code...
I have a form for users to log training they have completed. I have a sharepoint list with the course name and the duration in hours.
When the user opens the infopath form, it populates a read-only field with their username, and populates a dropdown with the list of available training courses from my sharepoint list.
All I want to do is to populate another read-only field with the duration of the course... But I just cant find the right filter settings to do it.
Currently I have the default value of the duration field in my form set to the formula:
Duration(from SP list)[Course Title (from SP list) = Training Course (from form lookup field)]
But this is not returning any values...
This is using both SP 2010 and IP 2010
Ok, you use rules, not the default value, as pretty much every website I have looked for answer tells you...
Make sure the default value for the field you want to populate is blank, and then set a rule that when your lookup field value changes, it updates the value in your other field...
That was easier than I thought!
This is soemthing called a cascated drop down there are various examples of this on the web.
To do this you need to click on the drop down box that you want to filter.
This will be the duration. (The user would then select the course they went on)
In the duration drop down below you would ensure that you have connected it the correct data source.
Right click on the duraction drop down.
Drop down list properties
get choices from external data source
on the entries you would select the button to the right hand side
You would select 'course title now as this is what you want it to be filtered by' (drop down above)
When selected you would click filter data - (button on bottom right hand side)
You would then filter it so the formula is 'CourseTitle(above drop down) 'is equal to' CourseTitle(data source from the list)'
This then should only allow them to match select the time that matches that course.
If this doesnt work let me know.

Save Infopath form w. dynamicly created fields in Sharepoint 2010 Library

I am very new to Infopath, and need some architechtual guideslines. My scenario is as follows:
I have a Sharepoint list, let's say it contains beer, and three items of it: "Kronenbourg", "Corona", "Tuborg". "Beer" is a content type, derived from Item.
What I need to do :
I need to create a "dynamic" Infopath form, that presents the user with a CheckBox for each beer. If a new beer is added to the Beer list, a new Checkbox should show up on the form without intervention, even on saved instances of the form. I have not decided what should happen upon deletions.
I then need to save this infopath form, including the selections, in a sharepoint form library, so that the users can go back to one of maybe many beer-forms that they have saved, and maybe change the selections.
I also need to build a string from the selections at some point in time, and present this string in a visible column in the form library, but thats beyond the scope of this post.
What I managed to throw together so far:
I have a kind of working Infopath form. I have added a sharepoint dataconnection to the Beer list, and dragged a repeating table to the design area. This "works", i get a list of my list items. I then added dummy Y/N field to my beer content type, selected it in the fields, and now i get a neat checkbox next to my records.
Obviously this does not seem right. I do not need to save anything back to the Beer table, I only need to use the beer table for lookup, and keep the selected choices in the saved instance of the form.
Ok, thanks for staying with me so far. What do I do here, can Infopath be persuaded to support a scenario like this, or am I better off building custom webparts? I think my main questions are:
Can I maybe attach an "input-only" CheckBox to a repeating list/section ? (and how do I refer to such dynamically created control)
How do I make Infopath load the choices dynamicly from db, but save the data in the instance of the form?
Should, and can I maybe attach a content type to the form library, representing the choices and somehow attach that to the form?
Thanks for any input
If I understand your requirements, I think the thing to do here is to use a Multi-Selection list box (MSLB). This can have its values populated from a secondary data source (i.e. a list), and it would be bound to a repeating field that would automatically have values added and removed as values are selected and deselected.
As far as getting the selections into a single string, if you just want this value for a column of the form library that the forms will be submitted to, you can just use this repeating field as a promoted property, and use the "Aggregate" option to combine the values into one.
The other option would be to create a separate field to hold the string and use the "double eval trick" (please Google that) to combine the values into one. One gotcha here is that if you use double eval trick with a MSLB, you have to put the formula both in a rule on the MSLB's field, and in the default value formula for the target field.

Sharepoint re-order item order in the list

In the list, I set-up "ID" column and "Title" column.
I added 10 items in the list, and I'm trying to put the 10th item between 1 and 2.
After my research, many people said I can't manually change ID number...
Is there a way to re-order the item?
deleting every items is the only answer?
Please help!
The ID column is an internal identity-like column. You cannot change the value. If you need a column that you can order by (and change), just create a new column called SortOrder or something. Then sort by that column.
I know this is an old post, but I thought this might help someone who might be looking for an OOB answer.
Go into your links list so that you see your List Tools, Items and List at the top.
Select Items.
There is a Change Item Order Icon in the Ribbon. This will allow you to renumber the Links in your list and change the order.
You can manually change the items order if you create your list based on a link list definition. This kind of list allows you to re-order items as you require through a ribbon button. I use this workaround often.
The ID Column is SharePoint inbuilt and you can not change the value of it.
for your solution either you need to delete all item and insert it again or as #Nigel Whatling say you have to add SortColumn
Column Setting will only change the order in the SharePoint List. To change the view order Use the Modify View Selector to adjust the way the fields are sorted. Modify View is found on the ... next to Find and Item Box or If your in the site setting it is under View on the lower 3rd of the page
I also got stuck with this and couldn't use the previous answers as I couldn't see the buttons they spoke of in the ribbon.
I went to List > List Settings in the ribbon. At the bottom of the list settings page I click on a View to edit it (or create new view). Unser the heading Sort you can change the column you wish to sort by and change from descending to ascending etc.
Actually, if I understand the question, it was just what I was trying to accomplish and spent most of my morning working on.
Select the List.
From toolbar, select List under List Tools.
Click List Settings.
Below the listed columns, see Column Ordering
Modify "Position from Top" number and click OK at bottom.
Updated steps:
Select the List.
From toolbar, select List under List Tools.
Click List Settings.
Above the Column list click on the "Item" link
At the bottom of the page select "Column Ordering"
Modify "Position from Top" number and click OK at bottom.

How do I create a pager for a view that shows the alphabet instead of numbers?

I have a need to have an alphabetical pager for a view. I didn't see any of the samples or the custom pager that addresses this. I would think that this would be a pretty common thing.
MJ
I'm not quite sure what you really mean by an "alphabetical pager", but I assume you might be looking for some kind of alphabetical navigator like we have it in the personal NAB inside the Notes client, right?
If so you're not really looking for a pager but for an alphabetical view filter. Here's one way to get there:
create a panel, give it a distinctive ID like "viewContainer" or
something. Put your view panel into the panel; of course the view's main sorting order must be alphabetical
create a 2nd panel above "viewContainer", no ID necessary here
put a repeat inside this new panel and bind it to a new JavaScript array, like that:
new Array("a", "b", "c", ... , "x", "y", "z");
enter a collection name for the repeat, like "letter"
put a link control inside the repeat. The link's label will be
computed to the repeat's collection name, i.e. "letter".
assign an onclick event to the link setting a sessionScope variable to the current collection name's value, like that:
sessionScope.filter = letter;
set the event's refresh mode to partial so that it refreshes your viewContainer panel
highlight your view control inside the viewContainer. In its data properties look for the property field labelled "Filter by column value" and make it computed. Enter this code:
sessionScope.filter;
That's it.
Edit:
of course you can build the repeat's datasource array dynamically from the view itself. So, instead of building that static a-to-z array you could also use something like this:
#Unique(#Left(#DbColumn(#DbName(), "yourLookupView", viewColNumber), 1));
That should return an array only containing those letters that really are in your view.
Also you could another static link control outside the repeat resetting the filter to show all entries. It would be built like the repeated link with the onclick event calling this code:
sessionScope.filter=null;
Enjoy!
I would go for this: make a view categorized by formula #Left( value; 1). Then render result of #DbColumn as pager by repeat or some ExtLib component (links list, navigator, menu). Each link will either limit shown view to "single category" or jumps to "starts with" character.

Resources