Skip to main content
Newcomer
May 17, 2023

How to set automatic export of metadata with separate files for every dimension?

  • May 17, 2023
  • 3 replies
  • 26 views

Hello All,

I found two very instructive discussion on the forum:

Extender: Export Metadata via Extender - OneStream Community (onestreamsoftware.com)

Solved: Automatic back up of security - OneStream Community (onestreamsoftware.com)

But still, if I export all dimensions in one file, the file is very heavy and hard to use. Can anyone tell me how can I make it with business rule?

KeithBerry kudos for great solution you provided in another topic

Kind regards
Jarek

    3 replies

    Mike_Sabourin
    Contributor
    May 18, 2023

    I can tell you one thing we do for our clients. We created a whole bunch of UD8 members that pull in all the metadata settings for each type of dimension in individual member formulas. We then make these into Cube Views that can be run at any time to show all the settings for each member (name, description, formula, text fields, etc). I've added these to a book for our clients that runs all the cube views and puts each dimension in its own tab. It's a little laborious to set up the first time (we have a standard set of custom items we've created we upload to every client's application), but it can then be run via a task scheduler of you like to pull whenever you like. 

    Member
    June 9, 2023

    You could use the exportxml functions to do this in a rule. However, you'll need to create rules to parse the XML to make them readable, or download to EXCEL as tables. Shameless Plug, the company I work for, has put out 11 utilities in PartnerPlace (one is Metadata Manager). Also, there is a free one by MindStream

    Member
    September 30, 2026
    Imports System
    Imports System.Data
    Imports System.Data.Common
    Imports System.IO
    Imports System.Collections.Generic
    Imports System.Globalization
    Imports System.Linq
    Imports Microsoft.VisualBasic
    Imports System.Windows.Forms
    Imports OneStream.Shared.Common
    Imports OneStream.Shared.Wcf
    Imports OneStream.Shared.Engine
    Imports OneStream.Shared.Database
    Imports OneStream.Stage.Engine
    Imports OneStream.Stage.Database
    Imports OneStream.Finance.Engine
    Imports OneStream.Finance.Database

    Namespace OneStream.BusinessRule.Extender.ExportAppTypes

    Public Class MainClass

    '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    'Reference Code: XFR_ExportAppTypes
    '
    'Description: Executes application extracts and produces XML file with a date stamp.
    ' This run for Metadata now, looking into CubeViews
    ' The file is written to the application Groups/Admin/MetaDataCopy folder in the file share directory.
    '
    'Usage: Can be executed from Business Rule editor or run as part of a Data Management sequence.
    '
    'Created By: DWang
    '
    'Date Created: 09-22-2026
    '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    Public Function Main(ByVal si As SessionInfo, ByVal globals As BRGlobals, ByVal api As Object, ByVal args As ExtenderArgs) As Object
    Try
    Select Case args.FunctionType
    Case Is = ExtenderFunctionType.ExecuteDataMgmtBusinessRuleStep
    'Get Configuration Settings
    Dim configSettings As AppServerConfigSettings = AppServerConfig.GetSettings(si)
    'Data Management extract location
    Dim folderPath As String = BRAPi.Utilities.GetFileShareFolder(si, FileShareFolderTypes.ApplicationIncoming, Nothing)
    folderPath = folderPath.Replace("Incoming", $"Groups/Administrators/MetaDataCopy/")

    If Not Directory.Exists(folderPath) Then Directory.CreateDirectory(folderPath)
    'Full path and file name for extract
    Dim filePath As String = folderPath & "\MetadataEntity_" & DateTime.UtcNow.ToString("yyyyMMdd") & ".xml"
    'If file already exist
    If File.Exists(filePath) Then File.Delete(filePath)
    'Extract Options
    Dim xmlOptions As New XmlExtractOptions
    xmlOptions.ExtractAllItems = False
    'Extract dimensions
    Dim extractDict As New Dictionary(Of XmlExtractItemPk, Boolean)

    extractDict.Add(New XmlExtractItemPk(XmlExtractItemType.Dimensions), True)
    'Extract Entities Dims
    Dim dimList = BRApi.Finance.Dim.GetDims(si, dimtype.Entity.Id)
    Dim dimID As Integer
    For Each dimName In dimList
    dimID = BRApi.Finance.Dim.GetDimPk(si, dimName.Name).DimId
    extractDict.Add(New XmlExtractItemPk(XmlExtractItemType.Dimension, dimID), True)
    Next
    'Execute the Metadata Extract
    Using dbConnFW As DbConnInfo = BRApi.Database.CreateFrameworkDbConnInfo(si)
    Using dbConnApp As DbConnInfo = BRApi.Database.CreateApplicationDbConnInfo(si)
    'Extract XML metadata to target location
    File.WriteAllText(filePath, MetadataExtract.ExtractXml(dbConnFW, dbConnApp, xmlOptions, extractDict))
    End Using
    End Using
    extractDict.Clear

    filePath = folderPath & "\MetadataAccount_" & DateTime.UtcNow.ToString("yyyyMMdd") & ".xml"
    'Extract dimensions
    extractDict.Add(New XmlExtractItemPk(XmlExtractItemType.Dimensions), True)
    'Extract Account Dims
    dimList = BRApi.Finance.Dim.GetDims(si, dimtype.Account.Id)
    For Each dimName In dimList
    dimID = BRApi.Finance.Dim.GetDimPk(si, dimName.Name).DimId
    extractDict.Add(New XmlExtractItemPk(XmlExtractItemType.Dimension, dimID), True)
    Next
    'Execute the Metadata Extract
    Using dbConnFW As DbConnInfo = BRApi.Database.CreateFrameworkDbConnInfo(si)
    Using dbConnApp As DbConnInfo = BRApi.Database.CreateApplicationDbConnInfo(si)
    'Extract XML metadata to target location
    File.WriteAllText(filePath, MetadataExtract.ExtractXml(dbConnFW, dbConnApp, xmlOptions, extractDict))
    End Using
    End Using
    extractDict.Clear

    filePath = folderPath & "\MetadataFlow_" & DateTime.UtcNow.ToString("yyyyMMdd") & ".xml"
    'Extract dimensions
    extractDict.Add(New XmlExtractItemPk(XmlExtractItemType.Dimensions), True)
    'Extract Account Dims
    dimList = BRApi.Finance.Dim.GetDims(si, dimtype.Flow.Id)
    For Each dimName In dimList
    dimID = BRApi.Finance.Dim.GetDimPk(si, dimName.Name).DimId
    extractDict.Add(New XmlExtractItemPk(XmlExtractItemType.Dimension, dimID), True)
    Next
    'Execute the Metadata Extract
    Using dbConnFW As DbConnInfo = BRApi.Database.CreateFrameworkDbConnInfo(si)
    Using dbConnApp As DbConnInfo = BRApi.Database.CreateApplicationDbConnInfo(si)
    'Extract XML metadata to target location
    File.WriteAllText(filePath, MetadataExtract.ExtractXml(dbConnFW, dbConnApp, xmlOptions, extractDict))
    End Using
    End Using
    extractDict.Clear

    filePath = folderPath & "\MetadataUD1_" & DateTime.UtcNow.ToString("yyyyMMdd") & ".xml"
    'Extract dimensions
    extractDict.Add(New XmlExtractItemPk(XmlExtractItemType.Dimensions), True)
    'Extract Account Dims
    dimList = BRApi.Finance.Dim.GetDims(si, dimtype.UD1.Id)
    For Each dimName In dimList
    dimID = BRApi.Finance.Dim.GetDimPk(si, dimName.Name).DimId
    extractDict.Add(New XmlExtractItemPk(XmlExtractItemType.Dimension, dimID), True)
    Next
    'Execute the Metadata Extract
    Using dbConnFW As DbConnInfo = BRApi.Database.CreateFrameworkDbConnInfo(si)
    Using dbConnApp As DbConnInfo = BRApi.Database.CreateApplicationDbConnInfo(si)
    'Extract XML metadata to target location
    File.WriteAllText(filePath, MetadataExtract.ExtractXml(dbConnFW, dbConnApp, xmlOptions, extractDict))
    End Using
    End Using
    extractDict.Clear

    filePath = folderPath & "\MetadataUD2_" & DateTime.UtcNow.ToString("yyyyMMdd") & ".xml"
    'Extract dimensions
    extractDict.Add(New XmlExtractItemPk(XmlExtractItemType.Dimensions), True)
    'Extract Account Dims
    dimList = BRApi.Finance.Dim.GetDims(si, dimtype.UD2.Id)
    For Each dimName In dimList
    dimID = BRApi.Finance.Dim.GetDimPk(si, dimName.Name).DimId
    extractDict.Add(New XmlExtractItemPk(XmlExtractItemType.Dimension, dimID), True)
    Next
    'Execute the Metadata Extract
    Using dbConnFW As DbConnInfo = BRApi.Database.CreateFrameworkDbConnInfo(si)
    Using dbConnApp As DbConnInfo = BRApi.Database.CreateApplicationDbConnInfo(si)
    'Extract XML metadata to target location
    File.WriteAllText(filePath, MetadataExtract.ExtractXml(dbConnFW, dbConnApp, xmlOptions, extractDict))
    End Using
    End Using
    extractDict.Clear

    filePath = folderPath & "\MetadataUD3_" & DateTime.UtcNow.ToString("yyyyMMdd") & ".xml"
    'Extract dimensions
    extractDict.Add(New XmlExtractItemPk(XmlExtractItemType.Dimensions), True)
    'Extract Account Dims
    dimList = BRApi.Finance.Dim.GetDims(si, dimtype.UD3.Id)
    For Each dimName In dimList
    dimID = BRApi.Finance.Dim.GetDimPk(si, dimName.Name).DimId
    extractDict.Add(New XmlExtractItemPk(XmlExtractItemType.Dimension, dimID), True)
    Next
    'Execute the Metadata Extract
    Using dbConnFW As DbConnInfo = BRApi.Database.CreateFrameworkDbConnInfo(si)
    Using dbConnApp As DbConnInfo = BRApi.Database.CreateApplicationDbConnInfo(si)
    'Extract XML metadata to target location
    File.WriteAllText(filePath, MetadataExtract.ExtractXml(dbConnFW, dbConnApp, xmlOptions, extractDict))
    End Using
    End Using
    extractDict.Clear

    filePath = folderPath & "\MetadataUD4_" & DateTime.UtcNow.ToString("yyyyMMdd") & ".xml"
    'Extract dimensions
    extractDict.Add(New XmlExtractItemPk(XmlExtractItemType.Dimensions), True)
    'Extract Account Dims
    dimList = BRApi.Finance.Dim.GetDims(si, dimtype.UD4.Id)
    For Each dimName In dimList
    dimID = BRApi.Finance.Dim.GetDimPk(si, dimName.Name).DimId
    extractDict.Add(New XmlExtractItemPk(XmlExtractItemType.Dimension, dimID), True)
    Next
    'Execute the Metadata Extract
    Using dbConnFW As DbConnInfo = BRApi.Database.CreateFrameworkDbConnInfo(si)
    Using dbConnApp As DbConnInfo = BRApi.Database.CreateApplicationDbConnInfo(si)
    'Extract XML metadata to target location
    File.WriteAllText(filePath, MetadataExtract.ExtractXml(dbConnFW, dbConnApp, xmlOptions, extractDict))
    End Using
    End Using
    extractDict.Clear

    filePath = folderPath & "\MetadataUD5_" & DateTime.UtcNow.ToString("yyyyMMdd") & ".xml"
    'Extract dimensions
    extractDict.Add(New XmlExtractItemPk(XmlExtractItemType.Dimensions), True)
    'Extract Account Dims
    dimList = BRApi.Finance.Dim.GetDims(si, dimtype.UD5.Id)
    For Each dimName In dimList
    dimID = BRApi.Finance.Dim.GetDimPk(si, dimName.Name).DimId
    extractDict.Add(New XmlExtractItemPk(XmlExtractItemType.Dimension, dimID), True)
    Next
    'Execute the Metadata Extract
    Using dbConnFW As DbConnInfo = BRApi.Database.CreateFrameworkDbConnInfo(si)
    Using dbConnApp As DbConnInfo = BRApi.Database.CreateApplicationDbConnInfo(si)
    'Extract XML metadata to target location
    File.WriteAllText(filePath, MetadataExtract.ExtractXml(dbConnFW, dbConnApp, xmlOptions, extractDict))
    End Using
    End Using
    extractDict.Clear

    filePath = folderPath & "\MetadataUD6_" & DateTime.UtcNow.ToString("yyyyMMdd") & ".xml"
    'Extract dimensions
    extractDict.Add(New XmlExtractItemPk(XmlExtractItemType.Dimensions), True)
    'Extract Account Dims
    dimList = BRApi.Finance.Dim.GetDims(si, dimtype.UD6.Id)
    For Each dimName In dimList
    dimID = BRApi.Finance.Dim.GetDimPk(si, dimName.Name).DimId
    extractDict.Add(New XmlExtractItemPk(XmlExtractItemType.Dimension, dimID), True)
    Next
    'Execute the Metadata Extract
    Using dbConnFW As DbConnInfo = BRApi.Database.CreateFrameworkDbConnInfo(si)
    Using dbConnApp As DbConnInfo = BRApi.Database.CreateApplicationDbConnInfo(si)
    'Extract XML metadata to target location
    File.WriteAllText(filePath, MetadataExtract.ExtractXml(dbConnFW, dbConnApp, xmlOptions, extractDict))
    End Using
    End Using
    extractDict.Clear

    filePath = folderPath & "\MetadataUD7_" & DateTime.UtcNow.ToString("yyyyMMdd") & ".xml"
    'Extract dimensions
    extractDict.Add(New XmlExtractItemPk(XmlExtractItemType.Dimensions), True)
    'Extract Account Dims
    dimList = BRApi.Finance.Dim.GetDims(si, dimtype.UD7.Id)
    For Each dimName In dimList
    dimID = BRApi.Finance.Dim.GetDimPk(si, dimName.Name).DimId
    extractDict.Add(New XmlExtractItemPk(XmlExtractItemType.Dimension, dimID), True)
    Next
    'Execute the Metadata Extract
    Using dbConnFW As DbConnInfo = BRApi.Database.CreateFrameworkDbConnInfo(si)
    Using dbConnApp As DbConnInfo = BRApi.Database.CreateApplicationDbConnInfo(si)
    'Extract XML metadata to target location
    File.WriteAllText(filePath, MetadataExtract.ExtractXml(dbConnFW, dbConnApp, xmlOptions, extractDict))
    End Using
    End Using
    extractDict.Clear

    filePath = folderPath & "\MetadataUD8_" & DateTime.UtcNow.ToString("yyyyMMdd") & ".xml"
    'Extract dimensions
    extractDict.Add(New XmlExtractItemPk(XmlExtractItemType.Dimensions), True)
    'Extract Account Dims
    dimList = BRApi.Finance.Dim.GetDims(si, dimtype.UD8.Id)
    For Each dimName In dimList
    dimID = BRApi.Finance.Dim.GetDimPk(si, dimName.Name).DimId
    extractDict.Add(New XmlExtractItemPk(XmlExtractItemType.Dimension, dimID), True)
    Next
    'Execute the Metadata Extract
    Using dbConnFW As DbConnInfo = BRApi.Database.CreateFrameworkDbConnInfo(si)
    Using dbConnApp As DbConnInfo = BRApi.Database.CreateApplicationDbConnInfo(si)
    'Extract XML metadata to target location
    File.WriteAllText(filePath, MetadataExtract.ExtractXml(dbConnFW, dbConnApp, xmlOptions, extractDict))
    End Using
    End Using
    extractDict.Clear

    filePath = folderPath & "\MetadataScenario_" & DateTime.UtcNow.ToString("yyyyMMdd") & ".xml"
    'Extract dimensions
    extractDict.Add(New XmlExtractItemPk(XmlExtractItemType.Dimensions), True)
    'Extract Account Dims
    dimList = BRApi.Finance.Dim.GetDims(si, dimtype.Scenario.Id)
    For Each dimName In dimList
    dimID = BRApi.Finance.Dim.GetDimPk(si, dimName.Name).DimId
    extractDict.Add(New XmlExtractItemPk(XmlExtractItemType.Dimension, dimID), True)
    Next
    'Execute the Metadata Extract
    Using dbConnFW As DbConnInfo = BRApi.Database.CreateFrameworkDbConnInfo(si)
    Using dbConnApp As DbConnInfo = BRApi.Database.CreateApplicationDbConnInfo(si)
    'Extract XML metadata to target location
    File.WriteAllText(filePath, MetadataExtract.ExtractXml(dbConnFW, dbConnApp, xmlOptions, extractDict))
    End Using
    End Using
    extractDict.Clear

    End Select

    Return Nothing
    Catch ex As Exception
    Throw ErrorHandler.LogWrite(si, New XFException(si, ex))
    End Try
    End Function
    End Class
    End Namespace

    The above was my adaptation of work done by ​@PeterFu , it should create snapshots with date-time stamp of each dimension on its own, except for Cube, Consol, Time, View,  Origin and IC, all of which are system defined. The snapshots will be saved in File Share \ Applications \ $appname \ Groups \ Administrators \ MetaDataCopy.

    I’d set up a DM then set a task scheduler job.