go to post Rich Taylor · Apr 17, 2016 Status codes still have a place along side of Try/Catch in my opinion. They really only serve to indicate the ending state of the method called. This is not necessarily an error. I agree that throwing an exception for truly fatal errors is the best and most efficient error handling method. The issues is what does "truly fatal" mean? There can be a lot of grey area to contend with. There are methods where the calling program needs to determine the correct response. For example take a method that calculates commission on a sale. Clearly this is a serious problem on a Sales order. However, it is less of an issue on a quotation. In the case of the latter the process may simply desire to return an empty commissions structure.Placement of try/catch blocks is a separate conversation. Personally I find using try/catch blocks for error handling to be clean and efficient. The programs are easier to read and any recovery can be consolidated in one place, either in or right after the catch. I have found that any performance cost is unnoticeable in a typical transactional process. It surely beats adding IF statements to handle to handle the flow. For readability and maintainability I also dislike QUITing from a method or program in multiple places. So where is the "right" place for a try/catch? If I had to pick one general rule I would say you should put the try/catch in anyplace where a meaningful recovery from the error/exception can be done and as close to the point where the error occurred as possible. I the above example of a Commission calculation method I would not put a try/catch in the method itself since the method can not perform any real recovery. However I would put one in the Sales order and Quotation code.There are many methods to manage program flow under error/exception situations; Try/Catch, Quit and Continue in loops are a couple off the top of my head. Used appropriately they can create code that is robust, readable and maintainable with little cost in performance.
go to post Rich Taylor · Apr 1, 2016 I think this would be useful to show in the project explorer too or at least in the properties of the project.
go to post Rich Taylor · Feb 24, 2016 Two suggestions: try returning a different error message. One that might indicate an authentication error such as $SYSTEM.Status.Error($$$UserInvalidPassword). I have not tried it myself, but this may work. However, as someone else said this is really not the intended purpose of delegated authentication. I am not sure about the nature of your additional checks. However perhaps you can use the Login tag in %Zstart.These are just suggestions as I have not had the chance to try either yet.
go to post Rich Taylor · Feb 17, 2016 No reponse yet. I am really in need of a real world LDAP schema that if more complex (has been customized) than the provided schema. If anyone has the ability to share something like this it would be greatly appreciated. Note that this is for a Global Summit presentation. I want to use an actual use case rather than attempting to invent something that would look and be contrived.Thanks in advance,Rich
go to post Rich Taylor · Feb 8, 2016 Timur, Thanks for the feedback. I have used process private globals in the past. Unfortunatey this and CACHETEMP will probably not work as the save needs to survive at least an application failure. If the customer can accept that a full system failure, either Cache or the server itself completely shutdown, the CACHETEMP may work. They would have to make changes to the application however as some of the objects involved are non-persistent. Rich
go to post Rich Taylor · Feb 5, 2016 One thing I am unclear on is whether the worker jobs have access to the in-memory objects of the process initiating the workers? I have a potential use case for this that I am investigating. Are there any practical examples of using this?
go to post Rich Taylor · Feb 5, 2016 The work queues do actually sound pretty close to what is being looked for. The question would be if the worker jobs have access to the in-memory objects of the process initiating the workers? Are there any practical examples of using this?
go to post Rich Taylor · Dec 14, 2015 Found the solution. The following MDX gives the values that I want.SELECT {MEASURES.[Avg Test Score],%LIST(NONEMPTYCROSSJOIN([BirthD].[H1].[Decade].Members,{[Measures].[Avg Test Score]}))} ON 0,NON EMPTY homed.city.MEMBERS ON 1FROM patientsI think the key was to enclose the measure in the NONEMPTYCROSSJOIN function in curly braces. I had not done this in a previous attempt at getting this to work.