Great article! Nice and to the point.
- Log in to post comments
Great article! Nice and to the point.
Great overview of ADT messages!
I agree! We all have to do our part!
A multidimensional property is an array. You should use the "Merge" command to set it, instead of the "Set" command, like in Eduard's example.
I meant a custom utility function, not a custom process. It would be a class derived from Ens.Rule.FunctionSet.
An Ensemble rule expression must be constructed using + - * / Max Min etc. That does not include the ability to use a generic ObjectScript expression.
You can add your own custom function, and inside it, you can use any ObjectScript expression that does what you want. If you define a parameter in a class, you could make it a COSEXPRESSION; this parameter might be used by your custom function to obtain the value at run time and return it to your rule.
An alternative is to set a property in your BPL context object and simply use it in the rule.
Have you browsed the sample rules provided in ENSDEMO? There are some interesting examples of what you can do.
Heloisa
You can define a custom utility function to get the setting you want, and use it in your rule.
Link to the documentation of how to create a custom utility function:https://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KE…
Hope it helps,
Heloisa
You could invoke curl using $zf(-100), where you'd make the call redirecting the response to a file. After the call completes, you can read the contents of the file into a string or stream.
You can use the built-in classes %Net.SMTP and %Net.MailMessage.
Basically you need to instantiate an object of these classes, set properties for them, and invoke the Send() method of %Net.SMTP. Let us know if that is not what you are asking, or if you need more information.
I think that the reasoning for having two similar functions $next and $order is that $next returns -1 when no next subscript is found, preserving compatibility with the original applications, whereas $order returns "" when no next subscript is found, besides additional functionality of course.
Was the Production imported from another instance?
Hi. Without seeing the source code for your production, I would guess that there is an item in your Production for which the associated class does not exist. When the Production starts, Ens.Director obtains information from for the classes involved, in order to create the jobs and message queues, among other things.
If you can't spot the problematic item from the log, I suggest that you disable all items and begin re-enabling one at a time, and seeing which item is the source for the error.
Hope it helps,
Heloisa
Getting the value of a global node should not be a problem, but you need to figure out the proper quoting for the string values. You might as well create a class method in a location that makes sense, and reference the global from there, in case the syntax becomes easier to manage.
The O.S. process associated with the terminal was still running, in READ state, unaware that the terminal had disconnected. Once we found it and terminated it (we used the System Management Portal for that), the transaction was properly rolled back.
I have been using CPIPE and I feel it provides more flexibility than $zf. There is documentation at: https://cedocs.intersystems.com/ens201813/csp/docbook/DocBook.UI.Page.cls?KEY=GIOD_interproccomm
That is a great question. I haven't tried it, but I wonder if you could send it via email instead -- as described in https://www.efax.com/efax-help-center/sending-faxes/send-faxes-by-email
Heloisa
You might consider using
Hello.
Ens.Config.Production objects are created when you compile your Production.
Your Production must be in a class that extends Ens.Production and you must have imported it into your target namespace and compiled it there.
As others mentioned, if you export and deploy it, these steps should happen.
Hope this helps,
Heloisa
Hello.
Whilst your application would work with the Caché private web server, please be aware that it is not recommended for production, only for development and testing as well as serving the internal portal. It does not have all the features as a full apache web server; for instance, it does not support https.
Heloisa
Hello. Here is a suggestion of what you could do. Please note I did not actually try it, so this still needs extra work, but hopefully will help you move forward.
In your helper class, add code to your OnBankMsg() method to index messages:
{
If (pHeader.ClientBodyClassName="mypackage.mymessageclass") {
Set pStream = ##class(%Stream.GlobalCharacter).%OpenId(pHeader.MessageBodyId)
Do ##class(mypackage.mysearchtableclass).IndexDoc(pStream)
}
Quit $$$OK
}
}
Where your search table class mypackage.mysearchtableclass would look like:
{
Property myproperty As ...
ClassMethod OnIndexDoc(pDocObj As %Persistent, pSearchTable As mypackage.mysearchtableclass) As %Status
{
// Set the properties
Set pSearchTable.myproperty = ... // extract the information you want to index
Quit $$$OK
}
}
This is only a sketch, hope it helps,
Heloisa
It can be caused if there is an error. That would cause the job to terminate, if not intercepted. In case you haven't done so, you could try adding error interception and logging, so you can check the error logging when a dead job appears, to see if that was the cause.
Hope it helps,
Heloisa
Welcome! Glad to have you here, Robert!
Regards
Heloisa
Have you tried using the numeric form? They are ≤ and ≥ for these characters.
Let us know if it works.
Heloisa
Great!
This is probably a Windows security issue in the desktop interaction, blocking the Adobe executable.
You can try trouble-shooting on the Adobe side and on the Windows side. There are tips on these pages:
https://forums.adobe.com/thread/1042132
https://blogs.msdn.microsoft.com/patricka/2011/03/14/troubleshooting-in…
Hope it helps,
Heloisa
Hi Nagel,
You can add a timer to the page and when the timer fires, refresh the tablePane with
Heloisa
I have used %UnitTest.TestProduction to automate Ensemble testing. It can start a Production, adjust settings, etc. The class documentation contains explanations. Unfortunately I am not familiar with Selenium so cannot answer about that tool.
The way I see it working in 2017.1, %OverrideGuidAssignment only sets the in-memory value of the object's GUID to the value passed as the argument and returns the same value. It does not validate the value. If the object already has a GUID, it will not be changed. New objects for which the user did not provide a GUID will have one assigned with $system.Util.CreateGUID() unless the user invoked %OverrideGuidAssignment(userGUID) before saving.
In order to know if the intended assignment was successful, you must compare it with the object's GUID after save to see if the assignment was successful or not. If they are different, then it was not overridden, probably because it was not a new object.
Such a nice and clear article! Thank you.