Programmatically Changing a SharePoint Barcode

One of the limitations in the current version of SharePoint is auto-assignment of barcode information when a SPListItem is added to a container, contrary to consuming user input, such as a value from a generic reader to generate the barcode. Honestly, I find it a monster limitation since this situation is the most conventional implementation of Barcode ID strategies.

While by default it will work like this when using ListFormWebPart pages, it is feasible to override this default behavior from your own custom code to generate new barcodes, set to your ID, inclusive of preview and ID association for things like tooltips on hover over.

Firstly, there are some namespaces that people don’t work with very much that have to be used. These are Microsoft.Office.RecordsManagement.PolicyFeatures and Microsoft.Office.RecordsManagement.InformationPolicy. Once you have these references established, since the barcoding is inherent with imaging, it is helpful to set an Image global qualifier to the System.Image namespace as well ala Image=System.Drawing.Image.

Secondly, you actually have to employ the barcode fields themselves. Unfortunatly, the SPBuiltInFieldId enumeration doesn’t have a reference to any of the ID’s that are required which is kind of a bummer since we have to make SPField objects to represent those fields and turn off their readonly properties (SPField.ReadOnlyField). There are three fields that are a concern, the barcode value, the barcode image, and the barcode preview. Once you have those toggled off, the code is unsophisticated to get a new image and associated value. You simply have to use the Barcode.ProvisionBarcodeWithValue() and Barcode.SetBarcodePreview() methods, then call the SPListItem.Update() method, where the fieldValue variable is some arbitrary string representing the new ID.

Image img;
Barcode.ProvisionBarcodeWithValue(item, true, ref fieldValue, out img);

That’s it!