Skip to main content
Member
Jul 27, 2023 5:39 AM UTC
Solved

Copy Annotations across scenario

Hi,

While we copy from Scenario S#Bud1 to S#Bud2, Annotations are not getting copied.

Understand from related posts, it can be achieved using api.Data.SetDataAttachmentText(). Any tried approach using this syntax.

Any leads would be appreciated.

Thanks

HenningAnswer
Employee - Advisor
Jul 28, 2023 6:27 AM UTC

As a short summary to do this:

1. Create a data table (in memory) using SQL as a source, pulling the existing comments from the table where annotations are stored (make sure to filter by time, scenario and whatever else you can narrow it down)

2. Loop through the filtered records in your data table, and write the annotations back using the SetDataAttachmentText() function for each row in the data table, using the POV from the looped through row adjusted by scenario

 

The code you need is briefly described in this post, which you are probably already aware of: https://community.onestream.com/topic/show?tid=3041&fid=8 

 

Make sure to test this on a low scale first and see if your code works. If you have no experience with code such as this, your implementation partner or the OneStream Remote Consulting team can likely help you (billable) to set this up. To get in touch with the OS Remote Consulting team, just open a ticket with mailto:support@onestream.com 

3 replies

Employee - Advisor
Jul 27, 2023 12:03 PM UTC

Hi,

Please give this post a Kudo so that this might get addressed in a future release 🙂

https://community.onestream.com/ideas/6166

 

HenningEmployee - AdvisorAnswer
Employee - Advisor
Jul 28, 2023 6:27 AM UTC

As a short summary to do this:

1. Create a data table (in memory) using SQL as a source, pulling the existing comments from the table where annotations are stored (make sure to filter by time, scenario and whatever else you can narrow it down)

2. Loop through the filtered records in your data table, and write the annotations back using the SetDataAttachmentText() function for each row in the data table, using the POV from the looped through row adjusted by scenario

 

The code you need is briefly described in this post, which you are probably already aware of: https://community.onestream.com/topic/show?tid=3041&fid=8 

 

Make sure to test this on a low scale first and see if your code works. If you have no experience with code such as this, your implementation partner or the OneStream Remote Consulting team can likely help you (billable) to set this up. To get in touch with the OS Remote Consulting team, just open a ticket with mailto:support@onestream.com 

Contributor
Oct 25, 2024 6:37 PM UTC

Here is an example I used to copy VarianceExplantions from one scenario to another.  I am only copying the text values not files.  I also run it from a DM Step using Custom Calculate.

#Region "Seed Prior Fcst VarianceExplanations to current Fcst"
Else If args.CustomCalculateArgs.FunctionName.XFEqualsIgnoreCase("Seed_VarExp_to_Curr_LE") Then
'Query DataAttachment table for VarianceExplanation values for the sourceScenario
'Write those values to a datatable (in-memory)
'Loop through the rows in the datatable and use api.Data.SetDataAttachmentText to assign the values to the WFScenario
Dim sourceScenario As String = args.CustomCalculateArgs.NameValuePairs("sourceScenario")
Dim povEntity As String = api.Pov.Entity.Name
'AttachmentType = View|200 = Annotation|220 = Assumptions|221 = AuditComment|222 = Footnote|223 = VarianceExplanation
Dim sql As New Text.StringBuilder()
sql.AppendLine("SELECT *")
sql.AppendLine("FROM DataAttachment ")
sql.AppendLine("WITH (NOLOCK) ")
sql.AppendLine("WHERE Time = '"& povYear & "M12" & "' ")
sql.AppendLine("AND ")
sql.AppendLine("Scenario = '" & sourceScenario & "' ")
sql.AppendLine("AND ")
sql.AppendLine("Cube = 'XXXX' ")
sql.AppendLine("AND ")
sql.AppendLine("Entity = '" & povEntity & "' ")
sql.AppendLine("AND ")
sql.AppendLine("Cons = 'USD' ")
sql.AppendLine("AND ")
sql.AppendLine("AttachmentType = '223' ") 'View Dimension
 
Using dbConnApp As DBConnInfo = BRApi.Database.CreateApplicationDbConnInfo(si)
   Using dt As DataTable = BRAPi.Database.ExecuteSql(dbConnApp, sql.ToString,False)
      If dt.Rows.Count > 0 Then
        For Each dr As DataRow In dt.Rows
        api.Data.SetDataAttachmentText("A#" & dr.Item("Account") & ":V#VarianceExplanation:F#EndBalLoad:O#BeforeAdj:I#None:U1#" & dr.Item("UD1") & ":U2#No_BU:U3#No_Loc:U4#None:U5#None:U6#None:U7#Plan:U8#None", dr.Item("Text"), True)
        Next
      End If
   End Using
 End Using
#End Region