上一主题: 案例研究 10:基本自动转换

下一主题: 业务逻辑脚本示例

案例研究 11:资源模型更新

转换脚本的另一个用途是利用从外部数据源获取的值更新 CA Business Service Insight 资源模型。 此示例不再与转换严格相关,而是介绍了一种用于实现系统自动更新的非常有用的途径。

在关于自定义属性的上一节中介绍了这样一种情况:组织的硬件基础架构设备以及每个设备的预期可用性目标都存储在外部 CMDB 中。 需要将此信息复制到 CA Business Service Insight 资源模型中,以便使基础架构映射(和设备目标)保持最新。

在这种情况下,就需要通过脚本来执行以下任务:

脚本如下所示:

Option Explicit

'******************************************************************
'Global Variables and constants
'******************************************************************

Dim added
Dim updated
Dim ChangeSetName

added = 0
updated = 0

Const RESOURCE_TYPE = "Infrastructure Devices"
Const RESOURCE_GROUP = "InfraServers"
Const CHANGESET_NAME = "Infrastructure Devices"
Const CHANGESET_EFFECTIVE_DATE = "07-1-1"

'******************************************************************
'Sub OnLoad :
'Preparing the foundation infrustructure enteties
'******************************************************************

Sub OnLoad()
   Tools.log "Translation Script : In OnLoad procedure", "D"

   'Search for existing preliminary resource version
   Dim ChangeSetMap
   Set ChangeSetMap=Tools.SearchChangeSets(CHANGESET_EFFECTIVE_DATE, CHANGESET_NAME)

   'If no existing version create a new version
   If ChangeSetMap.EMPTY Then
      Tools.AddChangeSet CHANGESET_NAME, CHANGESET_EFFECTIVE_DATE, CHANGESET_NAME
      Tools.Log "Changes set '" & CHANGESET_NAME & "' added."
   End If

   Set ChangeSetMap = Nothing
End Sub

Sub OnTranslationEvent(EntryDetails)
End Sub

Sub Main()
   Dim conn, rs, resource, deviceTarget, resource_id, resMap, custAttrib, custAttribValue
   Set conn = CreateObject("ADODB.Connection")
   Set rs = CreateObject("ADODB.RecordSet")
   conn.open "DSN=HardwareDevices"
   rs.Open "select * from tblServers", conn

   Do While Not rs.EOF
      resource = rs("serverName")
      deviceTarget= rs("DeviceTarget")
      'Add resources to latest version if it doesnt exist already
      If Not Tools.IsResourceExists(resource) Then
         resource_id = Tools.AddResource(resource, CHANGESET_NAME, "Infrastructure Device", RESOURCE_TYPE, RESOURCE_GROUP, Null, Null)
         Tools.UpdateResourcesCustomAttribute resource, CHANGESET_NAME, "DeviceTarget", deviceTarget
         Tools.Log "AddingResource: " & resource & " with target: " & deviceTarget & " ; assigned ID= " & resource_id
         added = added + 1 
      Else
         Set resMap = Tools.GetResourceDetails(resource,CHANGESET_NAME, False)
         Set custAttrib = resMap("CustomAttributes")
         custAttribValue = CDbl(custAttrib("DeviceTarget")("CustomAttributeValue"))
         If CDbl(deviceTarget) <> custAttribValue Then
            Tools.UpdateResourcesCustomAttribute resource, CHANGESET_NAME, "DeviceTarget", deviceTarget
            Tools.Log "Updating Resource target for : " & resource & " from: " & deviceTarget & " to " & custAttribValue
            updated = updated + 1
         End If
      End If

      Tools.Commit
      rs.MoveNext
   Loop

   rs.Close
   conn.Close
   Set rs = Nothing
   Set conn = Nothing
End Sub

Function Result
   ' Commit the transaction
   Tools.CommitChangeSets CHANGESET_NAME
   Result = added & " resources added and " & updated & " resources updated."
End Function

'********************************************************************************