Software Delivery Solution and the Notification Server ItemReference Table
How does Notification Server know what systems to assign a Task to? How does the Notification Server know what Program, and thus command-line, should be executed within a Task? Furthermore, how does it know what Package is associated with the Task? These questions and more are explored by focusing on the Notification Server core table ItemReference and how Software Delivery Solution utilizes it.
Introduction
This technical article can assist when troubleshooting Software Delivery Solutions issues, especially as they relate to the Altiris database table ItemReference. The ItemReference table contains links between object types such as Tasks and the assigned collections. Knowing how this table works, and what types of ItemReference objects Software Delivery creates and uses, will help in understanding the database structure of Software Delivery, including the standard Notification Server items.
Database Architecture
The table consists of six columns. None of the columns are marked as key since an item can exists as a parent or a child multiple times. Despite the dynamic nature of this table, it is vital to hold all Policy or Task-based objects together so a client will execute it. This is true for any solutions rolling components out via the Altiris Agent.
Database Table Schema
The following details describe the schema of the ItemReference Table. The table name is generally dbo.ItemReference.
- ParentItemGuid - In the hierarchal structure this Guid represents the Parent item within the relationship.
- ChildItemGuid - In the hierarchal structure this Guid represents the Child item within the relationship to the Guid in the ParentItemGuid column.
- Hint - While this column appears to be someone descriptive in the label, this establishes what type of relationship is being held by the Parent and Child Items via their GUID.
- ReferenceType - Unknown
- CreatedDate - This holds the date the relationship was initially created (when the row was created within the table).
- ModifiedDate - This column contains the last time this relationship was modified (when the row was updated within the table).
The Parent and Child columns contain Guids of objects, whether they be Collections, Tasks, Packages, Programs, etc. These Guids correspond to the Item Guid of the object being referenced. Coupled with the Hint, we now have a link between the two guids of the type specified in the Hint column. A common one, for instance, is folderchilditem.
ItemReference Hints
The following list comprises the different Hints used by Software Delivery Solution within the table. These hints represent relationship types, and are often identifiable by value alone. For example the folderchilditem means the ChildItemGuid is an object that resides in the folder represented by the ParentItemGuid. Some of the below hints are global for the Notification Server infrastructure, while others are created specifically by Software Delivery. Any solution can add hints to create unique links within the environment.
- folderchilditem - The ParentItemGuid is the Folder the ChildItemGuid object resides in, whether hidden or shown in the Altiris Console. Some objects, such as Programs, are considered part of a Package, so that actual "folder" they reside in is hidden and has no reference point in the Altiris Console. This is done to preserve the hierarchal structure of security and objects in Notification Server.
- installercontainsapplication - Used with Application Inventory. Not to be confused with Inventory Solution, or Inventory Rule Management, Application Inventory was a less-known process provided by Software Delivery for integration into PC Transplant Solution.
- notification policy uses report - One option when configuring a Notification Policy is to link that policy to a specific report. This ItemReference hint creates the link between the two. This is true for any solution, including Software Delivery.
- npmessagefilter - This option also links a known filter to be used with Notification Policies, specifically with the emails that are sent when the policy fires.
- npmessagesubscriber - Links the destination email addresses with a specific Notification Policy, if applicable.
- packagecontainsprogram - All Programs are linked to their Parent Package. In the UI the Programs appears as a sub-component of a Package since in the UI the two show up under the same node. In reality Programs are separate items just as Collections and Tasks are separate items. This hint represents the relationship between a package and all programs that have been created for it.
- policyappliestocollection - All enabled Tasks have a collection linked to them. When you pick one or more collections to apply to a specific Task, this hint type is created, representing the relationship. There can be multiple collections linked to a single Task.
- sequentialswditem uses active synchronization item - If a secondary Sequential Task is created where an included item already exists in another Sequential Task, this item links the new task with the existing item, avoiding duplication of data. This lowers the footprint for Sequential Tasks on the database.
- shortcut - In the standard Altiris Console, version 6.0, shortcut links can be created. When you create a shortcut, this hint type is created to link the shortcut with its parent item within the console. This makes links relatively small and easily scalable.
- softwarerequestcreatedswdtask - This signifies a Software Portal Request and links the Request table to the actual Task that is automatically created when a portal request is made.
- softwarerequestforprogram - This is also a relationship link for Portal requests, from the request table to the Program requested.
- swdadvertisement uses swdpackage - This entry links a Task to a Package. This is only one-half of the necessary components to form a correct Package-Program relationship.
- swdadvertisement uses swdprogram - As mentioned previously, though a Program appears to be part of a Package based on the UI, a Program is a separate item. This hint, coupled with the hint "swdadvertisement uses swdpackage", links a Task to a Program.
- swditem uses powermanagerscheduler item - This item is created if a Software Delivery Task has the option 'Power up the computer (Wake on LAN)' checked. This link connects the Task to a Scheduled Task created on the Notification Server for Wake on LAN execution.
- swritem uses advertisement item - This option connects the hidden Task within a Software Portal Settings Task to the parent Task. In way of explanation the Software Portal Settings Task actually contains several subtasks, including a check to see if the Software Delivery Solution Agent is installed.
- swritem uses program item - This hint is the same as the above except it's the connection between the hidden Program used by the Software Portal Settings Task to the Task.
There may be other Reference hints in Software Delivery that were not captured at the time this article was produced. The above are typical options for standard Software Delivery uses, with core items detailed as needed.
Use Cases
You may be asking the question, why does this matter? For everyday use this information is only enlightening on how Software Delivery and Notification Server work internally. When troubleshooting an issue, or tracing a task back to its source, this information can be handy.
The following list show use cases for using the data stored in the ItemReference table:
- Checking what collections are actually assigned to a task.
- Using the folderchilditem reference to trace an unknown object back to its location in the Altiris Console.
- To see in what package a faulty or error-prone program belongs to.
- Validating the correct links in a sequential or standard Task.
- To know which folder's security permissions need to be changed on for dependency errors when deleting objects in the Altiris Console.
- To trace permission issues when Software Delivery Data Purging fails to remove expected objects due to security issues.
- Software Portal task troubleshooting, since all items are hidden in the Altiris Console.
Examples
The following examples show what relationships exist for the sample items.
Item Type: Software Delivery Package
Description: I choose the Sample Package that contains the 'Hello World' EXE supplies as a sample when Software Delivery is installed.
Guid: 8661D7F2-039B-4418-9A0A-70A9C7445F9C
The following query supplies the Guid of the Package specifying in the ChildItemGuid column:
Query:
SELECT * FROM ItemReference WHERE ChildItemGuid = '8661D7F2-039B-4418-9A0A-70A9C7445F9C'
Results:
| ParentItemGuid | ChildItemGuid | Hint |
| 73032B0A-2047-42DB-82BB-34FF24910911 | 8661D7F2-039B-4418-9A0A-70A9C7445F9C | folderchilditem |
| ReferenceType | CreatedDate | ModifiedDate |
| 1 | 10/13/2006 | 10/13/2006 |
- This object represents what 'Folder' this Package Resides in for the Notification Server. By querying the ParentItemGuid we find that this is the console location: Resources tab, Resources, Software Management, Software Delivery, Windows.
The following query supplies the Guid of the Package specifying the ParentItemGuid column:
Query:
SELECT * FROM ItemReference WHERE ParentItemGuid = '8661D7F2-039B-4418-9A0A-70A9C7445F9C'
Results:
| ParentItemGuid | ChildItemGuid | Hint |
| 8661D7F2-039B-4418-9A0A-70A9C7445F9C | C72920C8-5EE6-436C-87AC-6BFF3FED31B7 | packagecontainsprogram |
| ReferenceType | CreatedDate | ModifiedDate |
| 1 | 19:32.6 | 19:32.6 |
| ParentItemGuid | ChildItemGuid | Hint |
| 8661D7F2-039B-4418-9A0A-70A9C7445F9C | FBA61621-EBEC-4522-AC62-B481CD07FBF3 | packagecontainsprogram |
| ReferenceType | CreatedDate | ModifiedDate |
| 1 | 19:32.6 | 19:32.6 |
- This object represents the Package's relationship to a corresponding ProgramS. Normally this Package only has one Program associated with it, but I have added another program to show how the results would look.
Item Type: Software Delivery Task
Description: This is a custom Task that launches the supplied "hello world" sample.
Guid: F8664B82-EB28-4201-B773-82BBDB9E4AB8
The following query utilizes the Guid of the Task in the ChildItemGuid column:
Query:
SELECT * FROM ItemReference WHERE ChildItemGuid = 'f8664b82-eb28-4201-b773-82bbdb9e4ab8'
Results:
| ParentItemGuid | ChildItemGuid | Hint |
| 7868A66C-59D9-40F5-B188-8BE1B72EE240 | F8664B82-EB28-4201-B773-82BBDB9E4AB8 | folderchilditem |
| ReferenceType | CreatedDate | ModifiedDate |
| 1 | 57:17.4 | 57:17.4 |
- This object represents the Folder this Task resides in within Notification Server and the Altiris Console.
The following query uses the Guid of the Task in the ParentItemGuid column:
Query:
SELECT * FROM ItemReference WHERE ParentItemGuid = 'f8664b82-eb28-4201-b773-82bbdb9e4ab8'
Results:
| ParentItemGuid | ChildItemGuid | Hint |
| F8664B82-EB28-4201-B773-82BBDB9E4AB8 | 7BF5378B-6306-4FEA-91F9-59F4488CD60F | delegatemessagestoitems |
| F8664B82-EB28-4201-B773-82BBDB9E4AB8 | C72920C8-5EE6-436C-87AC-6BFF3FED31B7 | swdadvertisement uses swdprogram |
| F8664B82-EB28-4201-B773-82BBDB9E4AB8 | EB3A1A12-E1C7-4431-B060-F0333E4E488C | policyappliestocollection |
| ReferenceType | CreatedDate | ModifiedDate |
| 2 | 10/12/2006 | 10/12/2006 |
| 0 | 10/12/2006 | 10/12/2006 |
| 0 | 10/13/2006 | 10/13/2006 |
- The first row is used internally by Notification Server
- The second item connects the Program to this Task. Note that no link to the Package is shown in this case, as the relationship is implied through the Program.
- The last row shows what collection is assigned to the Task.
Conclusion
Many other examples could be shown, but this gives you the basic concepts. Normal operation and even standard troubleshooting does not require any direct interaction with this table, but understanding where the links are made for what you see in the UI will help you understand how it works, and hopefully give you more information when troubleshooting Software Delivery issues.
- Login or register to post comments
- 524 reads
- Printer-friendly version















