Identify all applications installed in your BES environment
Posted 08-07-2009 at 04:00 AM by hdawg
The BlackBerry Configuration Database stores a wealth of information about your BlackBerry environment. If you're not tapping into it you're truly missing out (See my previous post on Identifying Users with Content Protection enabled). On set intervals (every 4 hours), handhelds are supposed to report back to the BES information about themselves. If for some reason you're not receiving information from a handheld for a specific user it could be a corrupted service book. Try having the user delete the Desktop[SYNC] service book from their handheld, wait 30 seconds, and then undelete the Desktop[SYNC] service book. Within a few minutes the information about the handheld should populate within the BlackBerry Manager / BAS console.
With the release of the BlackBerry App Store we're certainly going to see people installing more applications on their devices. While Apple has truly implemented this successfully with their iPhone, and BlackBerry definitely has some catching up to do ... there is certainly promise within the platform. Applications extend the functionality of a device and increase the users productivity (or in the case of a game provide some alternative positive value). Unfortunately, applications also can cause problems on devices making users less productive. Sure games can play a part in this ... but we need to be realistic. A game on a BlackBerry is more likely to hurt productivity due to low space available on flash memory than hurt productivity due to a user sitting at their desk playing a game instead of working. That said, games aren't the only culprit of eating valuable flash memory. Standard productivity applications take up memory, and with only 256MB of flash memory on the newest devices devices available there are still significant limitations with BlackBerry. My Bold only has 94.5MB of accessible and 22MB of free memory; imagine a user with an 8310 with less than 64MB of accessible memory ... they're going to run into even more limitations. One thing which I am happy to see is applications like Slacker Radio which while installed on the flash memory of my Bold (as is required for all applications ... we still can't install apps on a MicroSD card, or the additional 1GB of internal memory on the Bold), it creates a folder on my MicroSD card where it caches data. So I guess the key to success for applications that need to access lots of data is to do what Slacker does and store the data remotely. The only problem with this is what if you've implemented an IT Policy that blocks use of a MicroSD card. There isn't an easy solution even if those apps are really small no matter how you slice it.
Making sure that your device as available free space is critical to not only be able to run applications, but it is critical for overall device performance. If you constantly see your device hour-glassing, you might be low on memory. Check out John Clark's post on optimizing your device memory.
If you're like me and didn't block third party application installations and you want to be proactive with making sure your users don't experience LOW_MEMORY situations you should take a look and see what applications are installed within your BES environment; you'll probably be surprised. To get such a list, execute the following command from your SQL server:
bcp "SELECT '<application><name>' + U.Displayname + '</name>', S.Data FROM BESMgmt..UserConfig U INNER JOIN BESMgmt..SyncDeviceMgmt S ON U.Id = S.UserConfigId WHERE S.TableId = 2" queryout c:\AppData.xml -S localhost -c -T
bcp is the Bulk CoPy utility. The bcp utility bulk copies data between an instance of Microsoft SQL Server and a data file in a user-specified format. In our case we're going to copy out the data into a txt file with an XML extension as the data will be properly XML formatted.
When you get the output, try opening the XML file with Excel or an application that'll nicely format properly structured XML. Depending on your config you may need to do a little tweaking to get the data pretty, but a few minutes of work could provide you with some valuable data!
With the release of the BlackBerry App Store we're certainly going to see people installing more applications on their devices. While Apple has truly implemented this successfully with their iPhone, and BlackBerry definitely has some catching up to do ... there is certainly promise within the platform. Applications extend the functionality of a device and increase the users productivity (or in the case of a game provide some alternative positive value). Unfortunately, applications also can cause problems on devices making users less productive. Sure games can play a part in this ... but we need to be realistic. A game on a BlackBerry is more likely to hurt productivity due to low space available on flash memory than hurt productivity due to a user sitting at their desk playing a game instead of working. That said, games aren't the only culprit of eating valuable flash memory. Standard productivity applications take up memory, and with only 256MB of flash memory on the newest devices devices available there are still significant limitations with BlackBerry. My Bold only has 94.5MB of accessible and 22MB of free memory; imagine a user with an 8310 with less than 64MB of accessible memory ... they're going to run into even more limitations. One thing which I am happy to see is applications like Slacker Radio which while installed on the flash memory of my Bold (as is required for all applications ... we still can't install apps on a MicroSD card, or the additional 1GB of internal memory on the Bold), it creates a folder on my MicroSD card where it caches data. So I guess the key to success for applications that need to access lots of data is to do what Slacker does and store the data remotely. The only problem with this is what if you've implemented an IT Policy that blocks use of a MicroSD card. There isn't an easy solution even if those apps are really small no matter how you slice it.
Making sure that your device as available free space is critical to not only be able to run applications, but it is critical for overall device performance. If you constantly see your device hour-glassing, you might be low on memory. Check out John Clark's post on optimizing your device memory.
If you're like me and didn't block third party application installations and you want to be proactive with making sure your users don't experience LOW_MEMORY situations you should take a look and see what applications are installed within your BES environment; you'll probably be surprised. To get such a list, execute the following command from your SQL server:
bcp "SELECT '<application><name>' + U.Displayname + '</name>', S.Data FROM BESMgmt..UserConfig U INNER JOIN BESMgmt..SyncDeviceMgmt S ON U.Id = S.UserConfigId WHERE S.TableId = 2" queryout c:\AppData.xml -S localhost -c -T
bcp is the Bulk CoPy utility. The bcp utility bulk copies data between an instance of Microsoft SQL Server and a data file in a user-specified format. In our case we're going to copy out the data into a txt file with an XML extension as the data will be properly XML formatted.
When you get the output, try opening the XML file with Excel or an application that'll nicely format properly structured XML. Depending on your config you may need to do a little tweaking to get the data pretty, but a few minutes of work could provide you with some valuable data!
Total Comments 2
Comments
-
Perfect!
I searched quite long for that.
A small enhancement from me:
A SELECT statement directly parsing the XML and returning a normal table.
Select DisplayName,
[AppXML].value('(/R//t10/node())[1]', 'nvarchar(max)') as Modules,
[AppXML].value('(/R//t2/node())[1]', 'nvarchar(max)') as Unknown1,
[AppXML].value('(/R//t3/node())[1]', 'nvarchar(max)') as Unknown2,
[AppXML].value('(/R//t4/node())[1]', 'nvarchar(max)') as Name,
[AppXML].value('(/R//t5/node())[1]', 'nvarchar(max)') as Description,
[AppXML].value('(/R//t6/node())[1]', 'nvarchar(max)') as Version,
[AppXML].value('(/R//t7/node())[1]', 'nvarchar(max)') as Vendor,
[AppXML].value('(/R//t8/node())[1]', 'nvarchar(max)') as Copyright,
[AppXML].value('(/R//t9/node())[1]', 'nvarchar(max)') as Unknown3
FROM (Select U.DisplayName As DisplayName, CAST(S.Data as XML) As AppXML
From UserConfig U
Inner join SyncDeviceMgmt S
On U.Id=S.UserConfigId
Where S.TableId=2) As Apps
Attention: This only works on SQL Server 2005.
It would be fabulous, if someone could comment on my column interpretation and the still unknown columns.
Greetings,
Neo3000Posted 08-21-2009 at 06:01 AM by Neo3000
-
Posted 08-22-2009 at 11:56 AM by hdawg













