Found one option!

ClassMethod DivideByZeroPython() [ Language = python ]

{

import sample

import iris

try:

print("divide by zero=" + str(sample.dividezero(1)))

except ZeroDivisionError as e:

errobj=iris.cls("%Exception.General")._New(str(e),42)

a=errobj.Log()

print("Caught exception: " + str(e))

}

This stores the error in Apps Log, but no stack (of course):

Any ideas how I can store at least the class and line of code in parameters? I can provide the name and location to %Exception.General class that will be stored in the App Log.

Yes. 

It maybe a different thing: the format with <Export generator> is outdated and Studio together with LoadDir both support the outdated format and don't support the "new" one without the <Export> element, which is in Atelier API that VSCode is using (why do we still use this Atelier name? )

So, I'd better ask to support the new format, as the Export tag thing also has an annoying "feature" that it incudes date/time of export and this changes the file with every save/export even there were no changes.

Sounds like that.

Actually, I tried with another proejct and failed going with PKG approach, as DFI are being exported in a shorter form for me, .e.g.:

<?xml version="1.0"?>

<dashboard xmlns="http://www.intersystems.com/deepsee/library" name="AnnualPotatos" folderName="" title="Annual Potato Analytics" description="" keywords="" owner="" shared="true" public="true" locked="false" resource="" timeCreated="2025-08-26T23:29:13.2Z" createdBy="SuperUser" category="" bookCover="" scheme="" worklistCount="2" snapTo="true" snapGrid="true" gridRows="10" gridCols="10" canResize="true" canModify="true" showTitleBar="true" titleBarOpacity="" titleBarColor="" selectedTitleBarOpacity="" selectedTitleBarColor="" titleBarTextColor="" selectedTitleBarTextColor="" titleBarFont="" companyName="" companyLogo="" companyStyle="" backgroundColor="white" backgroundImage="none" backgroundRepeat="no-repeat" backgroundSize="100% 100%" backgroundOpacity="1" widgetBorders="1px solid #F0F0F0" widgetBordersSwitch="edit" widgetBordersColor="#F0F0F0" widgetBordersStyle="solid" widgetBordersWidth="1" widgetBordersToggle="true">

<widget name="Widget2" type="pivot" subtype="comboChart" subtypeClass="comboChart" title="Potato Sales and Import, Tonnes" dataSource="Potatos/Yearly.pivot" dataLink="" drillDownDataSource="" width="200" height="200" sidebarContent="" showSidebar="false" sidebarWidth="" maximized="false" homeRowL="0" homeColL="0" colSpanL="7" rowSpanL="7" showToolbar="true" showToolbarBottomBorder="true" showToolbarOnlyWhenMaximized="false" colorToolbar="#F0F0F0" opacityToolbar="1" backgroundColor="#F0F0F0" opacity="1" theme="" dataColorList="">

<control name="" action="applyFilter" target="" targetProperty="[Country].[H1].[Country]" location="widget" type="auto" controlClass="" label="Country" title="" value="" text="" readOnly="false" valueList="" displayList="" activeWhen="">

<valueRequired>false</valueRequired>

</control>

<override name="comboChart">{legendVisible:'false',xAxis:{_type:'axis'},yAxisList:[{_type:'axis'}],seriesTypes:',bar',_type:'comboChart'}</override>

</widget>

</dashboard>

In your case there is also an export tag:

<?xml version="1.0"?>

<Export generator="IRIS" version="26" zv="IRIS for Windows (x86-64) 2024.3 (Build 217U)" ts="2025-09-21 16:49:04">



<dashboard xmlns="http://www.intersystems.com/deepsee/library" name="AnnualPotatos" folderName="Potatos" title="Annual Potato Analytics" description="" keywords="" owner="" shared="true" public="true" locked="false" resource="" timeCreated="2025-08-26T23:29:13.2Z" createdBy="SuperUser" category="" bookCover="" scheme="" worklistCount="2" snapTo="true" snapGrid="true" gridRows="10" gridCols="10" canResize="true" canModify="true" showTitleBar="true" titleBarOpacity="" titleBarColor="" selectedTitleBarOpacity="" selectedTitleBarColor="" titleBarTextColor="" selectedTitleBarTextColor="" titleBarFont="" companyName="" companyLogo="" companyStyle="" backgroundColor="white" backgroundImage="none" backgroundRepeat="no-repeat" backgroundSize="100% 100%" backgroundOpacity="1" widgetBorders="1px solid #F0F0F0" widgetBordersSwitch="edit" widgetBordersColor="#F0F0F0" widgetBordersStyle="solid" widgetBordersWidth="1" widgetBordersToggle="true">

<widget name="Widget2" type="pivot" subtype="comboChart" subtypeClass="comboChart" title="Potato Sales and Import, Tonnes" dataSource="Potatos/Yearly.pivot" dataLink="" drillDownDataSource="" width="200" height="200" sidebarContent="" showSidebar="false" sidebarWidth="" maximized="false" homeRowL="0" homeColL="0" colSpanL="7" rowSpanL="7" showToolbar="true" showToolbarBottomBorder="true" showToolbarOnlyWhenMaximized="false" colorToolbar="#F0F0F0" opacityToolbar="1" backgroundColor="#F0F0F0" opacity="1" theme="" dataColorList="">

<control name="" action="applyFilter" target="" targetProperty="[Country].[H1].[Country]" location="widget" type="auto" controlClass="" label="Country" title="" value="" text="" readOnly="false" valueList="" displayList="" activeWhen="">

<valueRequired>false</valueRequired>

</control>

<override name="comboChart">{legendVisible:'false',xAxis:{_type:'axis'},yAxisList:[{_type:'axis'}],seriesTypes:',bar',_type:'comboChart'}</override>

</widget>

</dashboard></Export>

And zpm load imports the latter one, but not the first type.

Also, if I save it in VSCode, it removes <export> tag as a result of compiling. But the same doesn't let it be imported via PKG approach.

Next is editing and control versioning in VS-Code.

DFI changes in VS-Code are not propagating to connected IRIS automatically after saving. @Brett Saviano  - any hints how can this be set up?

In order to make changes in the Dashboard portal to be automatically reflected, one can use git-source-control. After the following lines:

USER> zpm "install git-source-control" 

USER> do ##class(%Studio.SourceControl.Interface).SourceControlClassSet("SourceControl.Git.Extension")

changes made in Dashboard Portal editor are being exported into VSCode (into a file), but the location is wrong - git-source-control has created cls/ZXFree folder and dashboard.dfi

But I expected src/ZXfree.dashboard.DFI, as there is no Folder in a dashboard, just title="ZXFree"

@Pravin Barton , @Timothy Leavitt  - could you please take a look?