go to post David Hockenbroch · Jul 25 Also note that if you do it this way, your tag for the custom component will be RC:imageclickbutton with the XML namespace and a colon on the front.
go to post David Hockenbroch · Jul 24 There isn't a consistent mapping for everything, but if you're in the %SYS namespace, you can query the tables %SYS.Task and %SYS_Task.History to find these specific things. Some of the security related things are in the Security scheme, like Security.Roles and Security.Users. When you're in the SQL part of the system management portal, if you check the box to show system tables on the left, you can see a lot of these then under tables, and you'll be able to guess what a lot of them are just based on the names.
go to post David Hockenbroch · Jul 17 You haven't added your hgroup to your page anywhere. You'll need to figure out what its parent element should be and use the %AddChild method of that Zen component to add the hgroup somewhere, just like you added your maxData to the hgroup.
go to post David Hockenbroch · Jul 11 And it's not only on the development end. It's also when you're educating and training. With Zen, it was all about ObjectScript and defining a class, plus a little javascript here and there. You didn't have to devote extra training and learning to the second system.
go to post David Hockenbroch · Jul 11 Rich, I understand all of that. Why, though, do answers to those of us who like Zen always including language like: ". . . could never hope to reach feature parity with more broadly accepted frame works like Angular and the others listed above . . ." ". . . that could never achieve feature parity with those mass market offerings . . ." I know I'm newer than a lot of people here, but I have yet to see anyone asking about Zen asking for feature parity with any of those other front ends. Meanwhile, the part that actually matters gets discounted: ". . . could only beat them in providing faster, more efficient access to the data layer." There doesn't seem to be a very good understanding of why some of us are still as attached to Zen as we are (other than momentum). That fast, efficient access to the data layer is extremely important, and we like being able to handle the front end and back end together, seemlessly writing the code it takes to do whatever we need to do on both at once. Zen also allowed us to do all of this using the same skill set that we used for everything else in our projects instead of having to learn two entirely different things for the front and back. Absolutely none of this has anything to do with a desire for something Zen-like with all the bells and whistles of something like Angular.
go to post David Hockenbroch · Jul 11 As Robert said, the data and indexes are both stored in global trees. The structure of the trees for indices and the trees for general data storage are different, though, and that's where the efficiency comes from. The data will be stored in the ^EMPLOYEED global. You'll see a bunch of data in that global like: ^EMPLOYEED(1) = $lb("001","ABC",20) ^EMPLOYEED(2) = $ib("002","AAA",21) Those are lists of every property of that class, indexed by the ID column. The indexes, on the other hand, will look more like: ^EMPLOYEEI("IDX_EMPID","001",1) ^EMPLOYEEI("IDX_EMPID","002",2) This allows for a much more efficient search to find the ID of the records that match your search criteria, similar to if you opened a terminal and put in: write $ORDER(^EMPLOYEEI("IDX_EMPID","001","")) Which would give you row 1, then it could more easily look up row 1 in the original without having to go through every record in the table in order searching for it. In your system management portal, you can run your query and check the query plan, then run it again telling it to ignore indexes like this: SELECT * FROM %IGNOREINDEX * EMPLOYEE WHERE EMPID="005" This will tell it to ignore all indexes on the table. You can check that query plan and compare it to the original to see the differences in how the query finds data and how well it performs.
go to post David Hockenbroch · Jul 11 We have an ERP system that runs on hundreds of ZEN pages, and we still love it. We just recognize that at some point, we're probably going to have to do some things to maintain it ourselves. I'd love to see it come back if that was an option.
go to post David Hockenbroch · Jul 9 These are stored as a relationship to %Dictionary.PropertyDefinition, so you can access them like this: select * from %dictionary.propertydefinition where parent = 'Your class name here'
go to post David Hockenbroch · Jun 27 ObjectScript doesn't allow you to overload method definitions. If the method name is the same, the arguments and return types have to match too. You can define methods that have a variable number of arguments, but you'd have to name yours something else, like New instead of %New.
go to post David Hockenbroch · Jun 19 I'm a big fan of try/catch, but I'm an even bigger fan of "if it ain't broke, don't fix it." This is one of those things that will sound simple, but you'll end up finding out that there are multiple different ztraps at different stack levels and an occasional etrap here and there, and then you end up rewriting way more code than you thought.
go to post David Hockenbroch · Jun 18 If you are accessing them through IIS now (i.e. using port 80) then you just need to get the SSL certificate set up in IIS and you'll be able to access those URLs using HTTPS. Keep in mind that HTTPS by default uses port 443, so you may have to make a firewall change accordingly. You may also want to consider setting up a URL rewrite so that requests that come in as HTTP are redirected to their new HTTPS versions.
go to post David Hockenbroch · Jun 3 Are you using a CSP or a Zen page? In one of your comments you mentioned Zen. That's also not the correct syntax for calling a class method. It would be: #server(##class(MyOrders.WO).retGetWO(wo))#; That's assuming this is all in the class MyOrders.WO.
go to post David Hockenbroch · May 14 If you download the MongoDB JDBC driver, you can use it to set up an SQL Gateway connection in your system management portal. Once you've done that, you can use that to do your query, or you can link the tables in MongoDB so you can query them more directly.
go to post David Hockenbroch · Apr 29 I don't think there is a really good way to do exactly this through JDBC, but you can handle this using the JDBC URL if you do a little setup beforehand. First, in the SMP, System Administration, Configuration, System Configuration, Namespaces, click on Create New Namespace. Give it a name - let's say "SAMPLE" and have it copy from your original namespace (probably USER). Second, go into a terminal, switch to the new namespace and use the command: w $SYSTEM.SQL.Schema.SetDefault("SAMPLE",.oldval,1) You should get a 1 confirming that the change was made successfully. At this point, when you make your JDBC connection, connecting to either namespace will work on the same database, but connecting to the SAMPLE namespace will use the sample schema, and the USER namespace will use the SQLUser schema.
go to post David Hockenbroch · Apr 24 @Cristiano Silva, Rochdi is using Ensemble 2018. Does that version automatically configure IIS if you install it after IIS? I could be wrong, but I thought that automatic configuration was only in more recent versions of IRIS.
go to post David Hockenbroch · Apr 19 I've never actually used Open Exchange before. I'm going to learn how to do that, and then I will do that.
go to post David Hockenbroch · Apr 19 If you instead use: do attachObj.%Set("contentType","application/pdf") Does that give you the result you expect?
go to post David Hockenbroch · Apr 16 If that's the issue, you could also try the following, and it will post to that location using the parameters you specified with InsertFormData: set AuthToken = "/B2C_1A_client_credentials_signIn/oauth2/v2.0/token" set tSc = AuthToken.Post()
go to post David Hockenbroch · Apr 9 You can use the if $i to do some stuff within loops too. For example, if you enter the following to commands in a terminal: set a = 5 for{if $i(a,-1){w a,!}else{quit}} This will subtract 1 from a and write its value until it reaches 0, then quit the loop. Of course you could just as easily use for a=4:-1:1 {w a,!} to produce the same output a little more nicely, so you don't see that as much.
go to post David Hockenbroch · Apr 9 You will have to initially set it to something, yes. Once you set the value in the onchange, if you want it to also run the query again, I believe you have to tell it to do that. You could make that part of your method too, though.