What do you want to achieve?
- Log in to post comments
What do you want to achieve?
You need to convert private key into OpenSSH format using PuttyGen and use that key with Ensemble.
Process memory is allocated as required, so decreasing $ZSTORAGE would not decrease actual memory usage.
Compare Angular results with REST API debugger, such as Postman and debug proxy, i.e. Charles.
Add these lines at the beginning of your REST method if you're on older versions (pre 16.1 I think):
Set %response.CharSet = "utf-8" Set %response.ContentType="application/json"
If you're on a newer version add class params to your broker class:
Parameter CHARSET = "utf-8"; Parameter CONTENTTYPE = "application/json";
For HTML files:
see weird characters on a query to the DB
REST output or input REST params? What locale are you using for server?
Reports are a big, separate issue from modern web applications technologies. Unless you're writing a reports web application.
This can be slow/bad in applications with large data?
Sure. To avoid that make your REST service logically asynchronous (see DeepSee REST API for MDX execution):
Also, if you're using pure SQL, scrollable resultset can be used in a similar fashion.
It's better/recommended to use ZenReports even with ZenMojo applications?
It's just another approach to reports.
Or Zen Mojo, like any other applications based on HTML, JS and PHP can support this with any problem?
Reports can be done using ZEN Mojo, sure.
The preparation of the JSON is very fast because the use of %DynamicObject and %DynamicArray; ZenReport can be slower than it?
Time to render JSON is negligible compared to time time you need to generate a report. ZenReport calls other software to render report files, so it's slower, sure, but still I think the main timesink here is execution and not rendering.
To sum up, your requirements determine the necessarily approach.
Reenabled Demo user.
%occOID.inc defines macros to use for work with oid:
set id = $$$oidPrimary(oid) set class = $$$oidClassName(oid) set global = $$$oidSysAd1(oid) // streams only set oid = $$$idCurrent //get current object oid
Here's one.
Also ZEN reports can produce xlsx.
Please provide code sample.
Filename is appended to directory, so if you have a directory: /tmp/ you can call
set tSC = ..Adapter.PutString("old/plan.txt",output)
set tSC = ..Adapter.PutString("new/plan.txt",output)and it should produce two files /tmp/old/plan.txt and /tmp/new/plan.txt in two different subdirectories. of /tmp
The benefits of using list of %String over just %String are:
I actually had a use case for exactly this data. Requirements were:
List of %String was extremely useful in this case. First I wrote a temp table:
/// Store alerts (for current process and runtime-only)
Class Util.Alert Extends %Persistent
{
/// Alert topic
Property topic As %String(MAXLEN = 1000) [ Required ];
/// Alert text
Property text As %String(MAXLEN = "");
/// Recipients
Property emails As list Of %String(SQLPROJECTION = "table/column", STORAGEDEFAULT = "array");
/// Index
Index emailsIndex On emails(ELEMENTS);
/// Add one Alert
/// w ##class(Util.Alert).add("Error", $lb("1@1.com","2@2.com"), "text")
ClassMethod add(topic As %String, text As %String, emails As %List) As %Status
{
set obj = ..%New()
set obj.topic = topic
set obj.text = text
if $listvalid(emails) {
for i=1:1:$ll(emails){
do obj.emails.Insert($lg(emails,i))
}
}
return obj.%Save()
}
}Next I wrote a business service which searched for alerts and added them to this table (not relevant for this discussion). And then once all alerts for an hour are in the Util.Alert table, sendEmails method can easily send alerts in digest mode:
/// Generate emails from alerts and send them
ClassMethod sendEmails()
{
&sql(DECLARE C1 CURSOR FOR
SELECT DISTINCT emails
INTO :email
FROM Util.Alert
)
&sql(OPEN C1)
&sql(FETCH C1)
While (SQLCODE = 0) {
set text = ..generateEmailText(email)
do ..SendEmail(email, text)
&sql(FETCH C1)
}
&sql(CLOSE C1)
}
/// Create email with all alerts for user
ClassMethod generateEmailText(email As %String) As %String
{
set emailText = ""
&sql(DECLARE C2 CURSOR FOR
SELECT topic, text
INTO :topic, :text
FROM Util.Alert
WHERE FOR SOME %ELEMENT(emails) (%VALUE=:email)
)
&sql(OPEN C2)
&sql(FETCH C2)
While (SQLCODE = 0) {
set emailText = emailText _ topic _ ": " _ text _ $$$NL
&sql(FETCH C2)
}
&sql(CLOSE C2)
return emailText
}Without list of %String SQL here would be far harder to write or slower.
First run:
csession CACHE
Then:
w ##class(%SYS.System).InstanceGUID()
As %SYS is a % package it is available in every namespace.
See related discussion.
What's the problem with specifying default value for filter control?
Static files were edited outside of Studio.
Setting timeout to 0 and purging the cache once solved the problem.
Reading %CSP.StreamServer makes me think that I need to set "Set Files Timeout" to 0.
Testing that.
Add this parameter to class:
Parameter USECOMMONDIRECTORY = 1;
CSPSystem.
Have you read relevant documentation?
There is also free online course Setting Up Alerts.
You need EnsLib.EMail.OutboundAdapter for that.
What is a "Business Server"?
You shouldn't specify Dispatch Class -it's for REST only.
Maybe add ?CfgItem=Weather to URL.
EnsLib.SOAP.GenericService is a generic service and it does not implement actual services, such as weather but send the request to actual business host - "Weather BO" in your case.
Your original URL is correct as it references business host name instead of class name
Using JDBC you can call SQL procedures, which are Caché methods.
Additionally, you can access Caché objects and call methods via Caché Java binding.
Thank you! Fixed the link.