29 Jan

How to create a custom sequential number field in MOSS list?

I recently came across a requirement where in customer wanted to auto generate a custom sequential number with current date as a part of this sequential number on a SharePoint list.

Although SharePoint has an inbuilt “ID” field and Issue Tracker list can Issue ID. But they simply just provide running numbers like 1, 2, 3, 4.What if you need some prefix and also a choice from where the sequential numbers should start.

You can achieve this through different approaches, like using an event handler etc., but I think the following is the simplest of all.

Here is the step by step instructions on how to get this done.

There are two parts for this solution.

Part 1: Getting the desired sequential number

1. First of all we need to create a list which will help us in generating the numbers, let us call this list as “Unique Numbers”

2. Add one number field, “LastNumber” and one calculated field “NextNumber” to this list. The formula to be used for NextNumber is “[LastNumber]+1″(Note: The data type returned from this formula should be number)

3. Let us add a new Item to this list with the following information

Title : ORDERNO

LastNumber : 99

4. Now we need to create the second list I will call it “Orders”

5. Add a number field “OrderNo” to this new list, now we are ready to build the workflow to generate unique sequential numbers

6. Open your web site in SharePoint Designer (SPD) .Create a new workflow. In the File menu, select New->Workflow…

7. In the dialog that appears, give the workflow a name, e.g. “Assign Order Number”. In the drop-down list below, choose to connect the workflow to the list you want to assign auto sequential numbers to (In this case, this would be a list called Orders). Then check the middle option of the three check boxes below, “Start this workflow automatically when a new item is created”.

8. On the same dialog, there is a button at the bottom called “Variables”. Click it. Choose “Add”, name it “mNumber” and make it of type “Number”. Click OK, and OK again. Now, click “Next” in the dialog.

9. You can leave the step name as is (“Step 1″). Leave the “Condition” empty, and click the “Actions” button. In the menu that appears, select “Set workflow variable”. This will add an action to the list to the right of the Actions button. Now you need to set up this action. Click the link “Workflow variable”, this will open a small dropdown list. Select “Variable: mNumber”. Then click the next link, “value”. This will display a textbox and a small button in place of the link. Click the button (“Show databindings”). This will bring up a new dialog, where you will select the value to assign to the “mNumber” variable. In the “Data Source” drop down, select “Unique Numbers”. In the drop down just below (“Field:”) select “NextNumber”. Now, the dialog will be expanded with a “Find list object” section. In the drop down “Field”, select “Unique Numbers:Title”, and in the value box below, type ORDERNO. Click OK. SPD will now give a warning that the look up might return more than one value, just select “Yes” to continue here.

10. Now you add one more action. Click the “Actions” button and select “Set field in current object”. Click the “field” link in the new action, and in the list that appears, select the field in your list that is the target of the autonumber (e.g. “OrderNo”). Then click the “value” link, and once again click the little button that appears (“Show databindings”). This time, in the “Data Source” drop down, select “Workflow data”, and then in the next drop down, select the variable “mNumber”. Click OK.

11. Add yet another action, this time choose the “Update list item” action. Click the link in the new action, “update list object in this list”. This brings up another dialog, in the “List” drop down, select “Unique Numbers”. Click the “Add” button just below to the right, and in the new dialog’s first drop down (“Set this field:”), select “LastNumber” and to the right of the “To this value:” text box, click the formula button. Again, a new dialog appears, in the “Data Source” dropdown, select “Workflow data” and then in the “Field” drop down, select “Variable: mNumber”. Click OK twice to get back to the “Update list item” dialog. Now, once again in the “Find list object” section, select “Unique Numbers:Title”, and type in the value ORDERNO. SPD will give a warning again, click “Yes”.

12. That’s it. Click the “Finish” button, and if all is well, the workflow will be created.

13. Now when you create a new item in the Customers list you will see that a unique sequential “OrderNo” is generated

Now we have achieved our first goal of generating a desired sequential number. Now on to Part 2

Part 2: Adding a prefix to the sequential number, in this case current date in YYYYMMDD format

1. Create a field “Today’s Date” this should be of “Date and Time” type and default value should be today’s date.

2. Create another field “OrderID” of calculated type and use this formula

=TEXT(Today’s Date,”yyyymmdd”)&OrderNo

Now when you create a new item on Orders list you will see that a new OrderID is generated .

Note: The field names mentioned here for example purpose, you can use any name with the same logic to make it work.

3 Responses to “How to create a custom sequential number field in MOSS list?”

  1. 1
    Michelle Says:

    This solution worked MOST EXCELLENTLY for my needs. I needed an autonumber field in an issue tracker where the user could see the field when editing an issue. Calculated field for [ID] did not work but this did. Thanks!

  2. 2
    asp.net Says:

    programming…

    [...]Code For Future » Blog Archive » How to create a custom sequential number field in MOSS list? – By Jayvardhan Patil[...]…

  3. 3
    Michael McCloskey Says:

    This is great, but has the same problem that the OOTB SP sequential numbering has; when you delete an item, the numbering continues where it left off without taking that into account.

    In other words, if you have Order no. 101 & then create 102, and then delete 102, the next number generated will still be 103 as though 102 was still there.

    It would be better if there was a way to reset the ORDERNO – LastNumber so that 102 would be reassigned not leaving a gap in the numbering.

    Of course this should only happen if you delete the last created item ONLY. If you have 102 though 110, and delete 105, the next number should still be 111.

    I hope I was clear.

Leave a Reply