Peter Steiwer · Mar 10, 2020 go to post

After further testing, it looks like this isn't working as I originally thought. It looks like our only option at this point is to use Security.Applications sad

Peter Steiwer · Mar 10, 2020 go to post

 One thing to note: the final ELSEIF is not going to be true ever since the third parameter of $LISTGET is the default value if the requested list value is undefined. Since i will never be = "", this will never quit.

As Marc mentioned, it may just be easiest to build a new list out of segments that aren't [ or ]

Peter Steiwer · Mar 11, 2020 go to post

I seem to get an error when I do not specify Directory:

2020-03-11 08:29:03 0 PivotSubscriptions.Installer: ERROR #5001: - ERROR when creating Portal application: Application name, namespace and directory must not be null

Peter Steiwer · Mar 11, 2020 go to post

You can use GetOneStatusText:

USER>w $system.Status.GetErrorText(x)
ERROR #5002: ObjectScript error: <UNDEFINED> *yy
USER>w $system.Status.GetOneStatusText(x)
ObjectScript error: <UNDEFINED> *yy

Peter Steiwer · Mar 11, 2020 go to post

Even though it isn't throwing an error it is not creating the Web App correctly. If you view your Web App, the Dispatch class is not set

Peter Steiwer · Mar 12, 2020 go to post

Something like this may work:

SELECT parent FROM %Dictionary.CompiledProperty where name like 'Name' and NOT %ID %Startswith '%'

This will give you all tables that aren't % classes that have a "Name" property

Peter Steiwer · Mar 13, 2020 go to post

Hi Michel,

I am not exactly sure which type of stream you are using, but different types appear to override the Read methods.

For example:
%Stream.FileCharacter does not implement a Read method, but it extends %Stream.FileBinary. In %Stream.FileBinary, the Read method is defined as:

Method Read(ByRef len As %Integer = 32000, ByRef sc As %Status) As %RawString

Peter Steiwer · Mar 13, 2020 go to post

Have you tried using a JOIN to get the desired results?

If you have already tried using a JOIN, what are you seeing that is not expected?

Peter Steiwer · Mar 13, 2020 go to post

Based on the documentation, it seems like this may be expected since $GET is expecting a variable, not a value returned from a method call. The main purpose is to protect against undefined references which a method call should never return since an empty string is different than undefined. Since the documentation mentions it accepts multidimensional object properties, it seems like it is assuming this is what the passed in reference is.

Documentation on expected values here.

Peter Steiwer · Mar 13, 2020 go to post

To add a little more to this, I would say it is basically the same as using SET vs WRITE:

SAMPLES>set person=##class(Sample.Person).%OpenId(1)
 
SAMPLES>w person.CurrentAge($h-1000)
2
SAMPLES>set person.CurrentAge($h-1000)=1
 
SET person.CurrentAge($H-1000)=1
^
<PROPERTY DOES NOT EXIST> *CurrentAge,Sample.Person

Peter Steiwer · Mar 23, 2020 go to post

If you are using %INSTALLER, you can use GRANT to assign a role:

<CSPApplication
   Url="/api/pivotsubscriptionsunsubscribe"
   Directory="${CSPDIR}"
   DispatchClass="PivotSubscriptions.UI.Unsubscribe"
   Grant="PivotSubscriptionsUnsubscribe"
   AuthenticationMethods="64"
/>

I have tested and confirmed that this does add the Application Role.

Peter Steiwer · Apr 30, 2020 go to post

I believe it is 3 days. I think this is to confirm posts are real and not spam. Also to allow them to get some votes and confirm it has a positive rating.

Peter Steiwer · Jun 22, 2020 go to post

Hi Reid,

There is no current way to change the Axis Scale in a standard DeepSee chart. However, if you are using a third party charting library you are able to implement this. I added this capability to my Third Party Chart Library project.

For example you can turn your chart from:

into:


By just modifying one setting in the UI.

Peter Steiwer · Oct 20, 2020 go to post

It looks like you are able to fix this error. Just in case anyone else comes across this error in the future, it means that the data has not yet been built for the element that is being referred to. In this example, that element is [Measures].[AvgTime]. By running the task, the following line was executed:

settCubeRebuild = ##class(%DeepSee.Utils).%BuildCube("Operational Analytics")

This performed a full build of the cube, so the Measure that was referenced in the error and all other elements in the cube were built

Peter Steiwer · Jan 19, 2021 go to post

You might also need to add:
Set mgr.IQN=SchemaName_"."_$Translate(TableName,".",$c(2))

Peter Steiwer · Mar 15, 2021 go to post

You need to make sure "found" is being updated when the recursive call exits. This can either be done by reference (passing in .found) or simply as a return value (set found instead of do). It is always going through the full loop and never exiting early because once the value is found, it is never passed back up as being found. This means that the loop just continues on. Here are two examples of these solutions

if $isObject(value) {
             do ..JSONIterator(value,newPath,.SearchKey,.SearchVal,.found)
         }

if $isObject(value) {
             set found= ..JSONIterator(value,newPath,.SearchKey,.SearchVal,found)
         }

Peter Steiwer · Mar 15, 2021 go to post

Hi Evgeny,

I have previously played around with this concept of a custom action manager that would allow mapping classes/methods in an easier way without needing to manually create new action classes and modify your cube. This is still in an Alpha version, but if you want to give it a test and offer any suggestions before it goes into Beta or OpenExchange, I would be glad to hear any thoughts

https://github.com/psteiwer/CustomCubeActions

Peter Steiwer · Mar 17, 2021 go to post

This InterSystems IRIS connector will look at the Tables and BI Cubes that are defined on the system. I believe you can use the ODBC connector if you want to write your own SQL. Another option could be to define a view inside of IRIS and use the view with this connector

Peter Steiwer · Apr 16, 2021 go to post

By default, changing the display of the Week members is not available. However, you can create a custom time level by extending %DeepSee.Time.WeekYear and overriding a couple methods. Then you can change your timeFunction value in your cube definition. Here is a sample I put together that was MINIMALLY tested on a newer version than the version you noted here:

Class CustomTime.WeekRange Extends %DeepSee.Time.WeekYear{/// Return the user-visible name of this level.ClassMethod %GetName() As %String{Quit "WeekRange"}/// Convert a level key value to a display value.ClassMethod %KeyToValue(pKey As %Integer, pFormat As %String = "", pOffset As %String = "") As %String{Set tValue = ""Set tSC=..%KeyToBaseRange(pKey,.tStart,.tEnd,pOffset)Set tValue=$zd(tStart)_"-"_$zd(tEnd-1)Quit tValue}/// Convert a $H value to the logical value used for this level./// This is used within the computed field logic for properties/// within a fact table based on this level.<br/>./// In this case, we convert $H to an ISO Week: YYYYWnnClassMethod %Convert(pTime As %DeepSee.Datatype.dateTime, pTimeOffset As %String = "") As %Integer [ CodeMode = expression ]{$S(pTime="":"",pTime=$$$DeepSeeNullTimeMarker:$$$DeepSeeNullTimeMarker,1:##class(%DeepSee.Time.WeekYear).ISOWEEK(pTime))}}
Peter Steiwer · Apr 16, 2021 go to post

I looked into these suggestions, but I still can't make it work. I see that when I am editing a file and I hover over the name on the tab at the top, it says "C:\Users\....\PivotSubscriptions\Subscription.cls". After using "Go To Definition", the new class opens with the path of "/PivotSubscriptions/EventLog.cls"

Peter Steiwer · Apr 20, 2021 go to post

Hi Evgenii,

I noticed this question has not been answered yet, is there a specific reason why you are looking into using a Data Connector? Typically before recommending a Data Connector, we would recommend that a new class is created and populated from a similar query that your Data Connector would have used. This allows for a lot more standard cube usage. Standard options like synchronization and detail listings would be available without needing to implement custom code to modify the SQL and they wouldn't require you to worry about using $$$RESTRICT

Peter Steiwer · Apr 30, 2021 go to post

We also have a sample that uses %InjectFact() inside of the %OnBuildCube() Method. Documentation here.

This injects the cities "Cambridge", "Chelsea", and "Somerville" into the HoleFoods cube. These city members will exist in the dimension table, but there is no associated data (there could be, but in this example there isn't). When using the City level on rows and the default NONEMPTY, we see the following:

When we turn "Show Empty" on:

We now see these members with no data:

Peter Steiwer · May 26, 2021 go to post

When using 1.1.6 and 1.0.11, I am still getting a read only copy when I use Go to Definition. Are there any settings that need to be configured in a specific way?

Peter Steiwer · May 26, 2021 go to post

Yes, the second class is in the same project as the first and both exist locally on the file system

Peter Steiwer · May 26, 2021 go to post

This now works after modifying my objectscript.export "folder" setting. It was previously "src" and is now "".

Peter Steiwer · May 27, 2021 go to post

I just tested and it worked OK for me. I used the following:

Class:

Class DC.TestImport Extends %Persistent{Property TS As %TimeStamp;Property Bool As %Boolean;}

CSV:

2021-05-27 17:43:15,0
2021-05-27 17:51:13,0
2021-05-27 17:53:11,1

Import Settings:

File Name:
C:\Users\psteiwer\Documents\DC\testimport.csv
Charset:
<Device Default>
Schema:
DC
Table:
TestImport
Columns are delimited by:
Special Character: ,
First row contains column headers?
No
String quote:
double
Date format:
YYYY-MM-DD
Time format:
hh:mm:ss
TimeStamp format:
ODBC Format
Disable validation?
No
Defer Index Building with %SortBegin/%SortEnd:
No
Peter Steiwer · Jun 11, 2021 go to post

What database is in /hs/nehi/ ? These protect errors suggest the user may not have permissions on this database

Peter Steiwer · Jun 15, 2021 go to post

When executing a query, DeepSee will store intermediate and final results in the cache globals. As the engine was trying to create a new session, it looks like it could not access the database in e:\hs-db\tfoms\. Either this database is mounted read only (in this case you will need to create some DeepSee mappings) or the user executing the query does not have r/w permissions on this database.