go to post Enrico Parisi · Mar 29 It the issue of this question/post the "?wsdl" not working or that the SOAP pass-through does not work? To get "?wsdl" to work you need an HTTP pass-through, technically it's not a SOAP call.In fact the "?wsdl" parameter is interpreted by IRIS and you get the "wsdl" returned by EnsLib.SOAP.GenericService. I created the production and tested the call to the SOAP service (I'm using 2024.1 but I don't thin is relevant) and it works.I'm using SOAP UI to call the service through the IRIS production and I get the correct result. Apart from the "?wsdl" call, have you tried calling the actual SOAP service? For simple cases I found that often using a HTTP pass-through instead of SOAP pass-through makes thing easier.
go to post Enrico Parisi · Mar 28 Never concatenate parameters to query text, use placeholders ("?"). What's the status (SC) returned by the called methods? In your code after each "SET SC=....:" add the line: $$$LOGSTATUS(SC) What's the status logged?
go to post Enrico Parisi · Mar 27 %ResultSet in deprecated, use %SQL.Statement instead.Never concatenate parameters to query text, use placeholders ("?"). Set sql = "SELECT COUNT(*) FROM "_tableName_" WHERE "_fieldName_">=? AND "_fieldName_"<=?" Set resultset = ##class(%SQL.Statement).%ExecDirect(,sql,fromDate,currentDate) Do tResult.%Display()
go to post Enrico Parisi · Mar 27 And in every method you call that returns a status code, check it!😊
go to post Enrico Parisi · Mar 27 I came across this old question and I was (almost) shocked by the answers because we are considering using System Default Settings for a project and one of the settings value we need to customize per system is Pool Size! Fortunately things have changed since this was posted an now Pool Size can be defined/configured in System Default Settings and this is also documented: Settings That Can Act As System Overrides I'm not sure when this has changed,I believe this has been implemented in 2024.1, the version I tested and it works. The behavior of this default setting a a little different then others (cannot be modified/overridden from within the production settings) but, IMHO, that's fine or even better! I'm writing this to warn anyone using a recent product version looking/reading this question that now, from 2024.1 Pool Size can indeed be configured in System Default Settings.
go to post Enrico Parisi · Mar 27 Hi @Aya Heshmat , please consider adding the host Pool Size in the Production Configuration page as it once was. For details on this topic see my post/discussion: Display Pool Size in Production Configuration page and related Idea: Add pool size in production configuration page For us is REALLY important, at the moment (where we can) we have hacked/changed the Prod. Config. Portal page, in the future with the new modernized page this change may be difficult to implement/hack.
go to post Enrico Parisi · Mar 26 It's difficult to tell if the bad value is in the passed parameter or in the returned value. Just as curiosity, what's the value of pRequest.Warehouse and what's the datatype of Warehouse column in the prod.stocks table?
go to post Enrico Parisi · Mar 25 In the code you posted that's not true for all SetValueAt(). Does any call returns an error? If so, what's the error?
go to post Enrico Parisi · Mar 25 You keep not checking the status returned by SetValueAt() calls, that would probably gives clues/hints on the problem. I suggest to change all calls with:Set tSC=xxxx.SetValueAt(...)$$$LOGSTATUS(tSC)
go to post Enrico Parisi · Mar 25 An idea, not sure if it fits in your case, if not...disregard it! 😊 1) Get the schema of your HL7 message (for example "2.5")2) Loop the segments contained in your HL7 message (this should be fairly easy)3) For each segment get all the fields defined for that segment on the schema it belongs to and check if contains data To get all the possible fields of a segment, example for 2.5:PID (demo version):Set rs = ##class(%ResultSet).%New("EnsLib.HL7.Message:EnumerateSegTypes")Do rs.Execute("2.5:PID", 4, 1)Do rs.%Display(",") This way you should get all virtual path for fields with values in your message. Repeating fields (like PatientIdentifierList()) of course require some extra coding to get/check them all. P.S.: I think/guess 4 levels (second param in Execute()) is the maximum, otherwise....increase it.
go to post Enrico Parisi · Mar 25 I doubt it can be done with a generic process for any VDOC type. For HL7 to get Virtual Property Path using names ("symbolic ones") you must know and use the "DocType" (that is the schema category and message structure) of the message. In HL7, for a given HL7 message, it's not clear to me what you need/want as output, you want to visit all nodes/fields....defined? All possible nodes/fields defined in the schema structure? All nodes/fields that contains values? If you need all possible nodes/fields for a given DocType, then you can get them from the Schema Definition.
go to post Enrico Parisi · Mar 23 For training and certification you get a corresponding Credly badge that you can add/share in your Developer Community profile or your Linkedin and other social accounts. When you take an InterSystems training course you get attendance badge, for example: Building and Managing HL7 Integrations Training Certification is separate from training, when you pass a certification exam (performed by a third party entity) you get the corresponding certification Credly badge, for example: InterSystems HL7® Interface Specialist
go to post Enrico Parisi · Mar 22 If the SetValueAt() method is not working I guess it's also returning an error, my suggestion is to check the returned error, so: Set sc=tOBXSegment.SetValueAt(tOBXText, 5)Do $system.OBJ.DisplayError(sc)
go to post Enrico Parisi · Mar 19 Status already includes stack-trace I know, that is the very reason why I'm curious to see how it's implemented there! My guess is that is using $ZU(41,-2).
go to post Enrico Parisi · Mar 18 I wish I could see the code in $$macroERROR^%occMsgXML() (used by $$$ERROR() macro and other) to store the stack in a Status.
go to post Enrico Parisi · Mar 13 Hi Scott, I don't consider 255 as larger than the typical string length and I'm surprised of your issue and I don't fully understand your code, probably because it's not complete (set tSC = rs.Insert(pInput) make no sense to me). Anyway, my suggestion is to find some more info that may give you some hint. For example I'd add the following lines in your OnProcessInput() method: Set colId=pInput.GetColumnID("ExternalName")$$$LOGINFO("ColumnType is "_pInput.GetColumnType(colId))$$$LOGINFO("ColumnSQLType is "_pInput.GetColumnSQLType(colId))$$$LOGINFO("ColumnSize is "_pInput.GetColumnSize(colId)) Please test this using a query that extract a few records to avoid flooding your event log. I'm curious to see what you get.
go to post Enrico Parisi · Mar 13 Can you please provide some more details on "columns that are larger than the typical string length"? How long (max) can be?What's the data type for these columns in the external database?What database are you connecting to? Using ODBC or JDBC?
go to post Enrico Parisi · Mar 11 InterSystems offers specific training course for Building and Managing HL7 integration periodically available in InterSystems offices, remote/online and on customer site. To get detailed info and take advantage of what it's available in InterSystem Learning, click the Learning link on left top of this page. There you can find plenty of material regarding HL7v2 and MUCH more. An excellent starting point would be to start with what's freely available for self learning, with a quick search I found couple of Learning Path on HL7v2: Building Basic HL7 V2 Integrations with InterSystems Building Advanced HL7 V2 Integrations with InterSystems In addition to these Learning Paths there are additional more specific resources for specific topics. In the Developer Community there are many HL7v2 articles you can learn from and maybe browsing HL7v2 related questions and provided answers can help learning. Last but not least, in Open Exchange (fourth link on top of this page) also contains many HL7v2 projects you can learn from. Regarding certification, please check InterSystems Certification Program, link on top of this page. Enjoy learning! 😊
go to post Enrico Parisi · Mar 10 Be careful, in some cases that method does not work correctly. I was testing this using a class where the package redefine the SQL schema name for the classes, in that case the ClassNameToTableName() returns a wrong result.
go to post Enrico Parisi · Mar 10 I know this is an old question, but in case someone will search for the same question, another option (better, IMHO) is to use: $$$ClassSQLTable("my.ClassName") In case you need it for current class: $$$ClassSQLTable($classname()) To use the $$$ClassSQLTable macro your class needs: Include Ensemble