Sap Business Objects ortamında universelerin metadata sına ilgili sdk (software development kit) ile erişilebilir. Unv universe lere .net sdk ile unx lere java sdk ile erişilebilir.
VBA (Visual Basic Application) Scripts ile ilgili .net kütüphanesi kurulu olan ortamda, yani bizim durumumuzda Sap Business Objects Client Tools kurulu olan bir bilgisayarda VBA kodu ile Universe Design Tool uygulaması kod ile yönetilebilir (toplu işlemler otomatize edilebilir). VBA kodu excel üzerinde yazılıp çalıştırılabilir.
Bu yazıdaki amaç Unv universe lerdeki objeleri toplu olarak güncellemek (gizlemek, bulk object hide in unv).
.net sdk ile yazılmış örnek kodlar için Business Objects Board (BOB) un 2. kaynaktaki sayfasına göz atılabilir.
Windows XP sonrası (Windows 7, 10, …) işletim sistemlerinde, benim durumumda Windows 8.1, Excel üzerindeki VBA kodu çalıştırabilmek için C:\Program Files (x86)\SAP BusinessObjects\SAP BusinessObjects Enterprise XI 4.0\win32_x86\designer.exe yi uyumluluk ayarlarından yönetici olarak çalıştır işaretlemek gerekliydi. (designer.exe right click compatibility “run this program as administrator”) Ayrıca UAC den (Kullanıcı Hesap Kontrolü Ayarlarından, User Account Control Settings) bildirim seviyesini en düşüğe çekmek gerekiyordu. Ve sonra da Excel uygulamasının da yönetici olarak çalıştırılması gerekiyordu. (Run Excel as Administrator) Kaynak 3
Universe design tool ile universe obje yapısına erişim için 1. kaynaktaki Business Objects Object Model Diagram (OMD) dokümanına başvurulabilir. Kaynak 4 ve 5 teki iki örnekte de universe objelerine (sınıflarına) erişim kodu yer alıyor.
' Objects named excel sheet must include "class name" and "object name" information at column 1 and column 2 without any header line ' Objects isimli excel sayfası "klasör ismi" ve "obje ismi" bilgisini 1. ve 2. kolonlarda tumalıdır ve başlık satırı kullanılmamalıdır Option Explicit 'require variables to be declared before being used Dim DesignerApp As Designer.Application Dim Univ As Designer.Universe Dim Cls As Designer.Class Dim Obj As Designer.Object Dim Pdc As Designer.PredefinedCondition Dim Wksht As Excel.Worksheet Dim Ssttrr As String Dim Rn As Integer Dim WorksheetRowCount As Integer Dim StatusChangeFlag As Boolean Dim CheckList(1 To 10000, 1 To 2) As String Sub GetData() Set DesignerApp = New Designer.Application DesignerApp.Visible = True Call DesignerApp.LogonDialog Set Univ = DesignerApp.Universes.Open 'Set Univ = DesignerApp.Universes.Import("/deneme_klasor", "deneme_unv") 'DesignerApp.Visible = False Set Wksht = ThisWorkbook.Worksheets("Objects") Wksht.Unprotect WorksheetRowCount = Wksht.UsedRange.Rows.Count For Rn = 1 To WorksheetRowCount CheckList(Rn, 1) = Wksht.Cells(Rn, 1).Value CheckList(Rn, 2) = Wksht.Cells(Rn, 2).Value Next Rn Call GoClasses(Univ.Classes) Wksht.Protect End Sub Sub GoClasses(Clss) For Each Cls In Clss For Each Obj In Cls.Objects StatusChangeFlag = False For Rn = 1 To WorksheetRowCount If (Cls.Name = CheckList(Rn, 1)) And (Obj.Name = CheckList(Rn, 2)) Then StatusChangeFlag = True Wksht.Cells(Rn, 3).Value = "done" End If Next Rn If (StatusChangeFlag = True) And (Obj.Show = True) Then Obj.Show = False Obj.Description = Obj.Description & " #hide_unused_object_201709#" End If Next Obj For Each Pdc In Cls.PredefinedConditions StatusChangeFlag = False For Rn = 1 To WorksheetRowCount If (Cls.Name = CheckList(Rn, 1)) And (Pdc.Name = CheckList(Rn, 2)) Then StatusChangeFlag = True Wksht.Cells(Rn, 3).Value = "done" End If Next Rn If (StatusChangeFlag = True) And (Pdc.Show = True) Then Pdc.Show = False Pdc.Description = Pdc.Description & " #hide_unused_object_201709#" End If Next Pdc If Cls.Classes.Count > 0 Then Call GoClasses(Cls.Classes) End If Next Cls End Sub
Kod indirme adresi:
unv_bulk_update_objects.xlsm.zip
Kaynaklar:
1) BO OMD (Object Model Diagram) dokümanı, alternatif adres
2) Business Objects Board SDK (VBA/ASP/JSP)
3) Excel VBA problems’ solutions
4) Document a universe using Excel and the Designer SDK
5) Mass update to object names / descriptions