go to post Ashok Kumar · Sep 2, 2023 You're absolutely right.It's crucial, We really need to build it for IRIS.
go to post Ashok Kumar · Aug 31, 2023 You need to call. If it's was declared as method. I tried the below and it works. <script language=cache method="montaDDList" arguments=""> Set listaPropriedades=$SYSTEM.SQL.Execute("SELECT * from Sample.Person") </script> #(..montaDDList())#
go to post Ashok Kumar · Aug 31, 2023 The reason behind the conversion is Cache identifies/assume from 1900 - 1999 year if you send two digit for year. So, You should send four digit year. attached the documentation "Two or four digits may be specified for years in the range 1900 to 1999. Four digits must be specified for years before 1900 or after 1999."
go to post Ashok Kumar · Aug 29, 2023 As per your code. Couple of things. Firstly, the item is list of object so you should use Insert method. You're inserting item.ItemName instead item object. Property Item As list Of AllItems; expects object. Not a string. Do AllItem.Item.Insert(Item)
go to post Ashok Kumar · Aug 29, 2023 %JSON.Adaptor default manner is rid out the null value properties when %JSONExport method invokes. There is some default parameter are used to achieve this while exporting. You need to enable parameter in your class definition. The %JSONNULL parameter is used to export all the field and display even the property has null values. Once you have added the parameter and try export the itemdetails object Parameter %JSONNULL As BOOLEAN = 1; Class Samples.AllItems Extends (%JSON.Adaptor, Ens.Response) { Parameter %JSONNULL As BOOLEAN = 1; Property ItemtId As %String; Property itemName As %String(MAXLEN = 100); Property itemStockNumber As %String(MAXLEN = 150); Property itemType As %String; Property itemPriority As %String; Property itemDetailData As %String(MAXLEN = 10000); } { "ItemId": "test", "Item": [ { "ItemtId": null, "itemName": null, "itemStockNumber": 123, "itemType": "test", "itemPriority": "High", "itemDetailData": null } ]}
go to post Ashok Kumar · Aug 28, 2023 Thank you @Dan Pasco. It's a wonderful detailed clarification for the property and member type class
go to post Ashok Kumar · Aug 24, 2023 Hello @Hannah Sullivan If you need to delete the list of object while deleting the parent object. You can override the %OnDelete method and add the delete implementation refer below code logic. Once you call the ##Class(package.class).%DeleteId(id). It will trigger the %OnDelete Method and delete the list of persistent object as well. ClassMethod %OnDelete(oid As %ObjectIdentity) As %Status [ Private, ServerOnly = 1 ] { set object = ..%Open(oid,,.status) If $$$ISERR(status) quit status If $IsObject(object.Organizations) { set org= object.OrganizationsGetSwizzled() while org.GetNext(.key){ do object.Organizations.GetAt(key).%DeleteId(key) } } Quit $$$OK } You can create these object with Parent-child relationship as well.
go to post Ashok Kumar · Aug 24, 2023 I'm not sure why the request class CSVtoHL7.Inputfile.Record inherits from right. All the request and response are required persistent object. This will be used to display the entire flow in the visual trace section. I have attached some sample below. You can add a property setter method for property DOB and modify the value from MM/DD/YYYY to +$H value. This will keep the internal date format in database. Class CSVtoHL7.Inputfile.Record Extends (Ens.Request, %XML.Adaptor, EnsLib.RecordMap.Base) [ ProcedureBlock ] { Property ID As %Integer; Property LastName As %String; Property FirstName As %String; Property MiddleName As %String; Property DOB As %Date; Method DOBSet(pDate) As %Status { Set i%DOB= $ZDH(pDate) Quit $$$OK } Property Gender As %String; ClassMethod createObj() As CSVtoHL7.Inputfile.Record { Set obj = ##class(CSVtoHL7.Inputfile.Record).%New() Set obj.DOB="12/30/2001" Set obj.FirstName="Test" Set obj.ID=12345 Set obj.MiddleName = "middle" Set obj.Gender="M" return obj } } Create a object for the request class and send to Transformation. you can use the logic $translate($ZDT(source.DOB_",0",3)," ","T")_"Z" in DTL to convert the internal date format to required output 2023-08-24T00:00:00Z. You can refer the DTL sample below Class CSVtoHL7.DTL.Record Extends Ens.DataTransformDTL [ DependsOn = (CSVtoHL7.Inputfile.Record, EnsLib.HL7.Message) ] { Parameter IGNOREMISSINGSOURCE = 1; Parameter REPORTERRORS = 1; Parameter TREATEMPTYREPEATINGFIELDASNULL = 0; XData DTL [ XMLNamespace = "http://www.intersystems.com/dtl" ] { <transform sourceClass='CSVtoHL7.Inputfile.Record' targetClass='EnsLib.HL7.Message' targetDocType='2.5:ADT_A01' create='new' language='objectscript' > <assign value='source.ID' property='target.{PID:SetIDPID}' action='set' /> <assign value='source.FirstName' property='target.{PID:PatientName().FamilyName}' action='set' /> <assign value='source.MiddleName' property='target.{PID:PatientName().GivenName}' action='set' /> <assign value='source.Gender' property='target.{PID:AdministrativeSex}' action='set' /> <assign value='$translate($ZDT(source.DOB_",0",3)," ","T")_"Z"' property='target.{PID:DateTimeofBirth.Time}' action='set' /> </transform> } } output
go to post Ashok Kumar · Aug 24, 2023 Exactly. Thanks for the samples. This will helps to figure out the property is modified or not.
go to post Ashok Kumar · Aug 24, 2023 As we mentioned above the DOB should have +$H value instead of MM/DD/YYYY. However you can try the below If DOB is date format IRISMYDEV>set dob="12/01/1993" IRISMYDEV>write $translate($ZDT($ZDTH(dob),3)," ","T")_"Z" 1993-12-01T00:00:00Z If DOB is +$H value IRISMYDEV>set dob=+$H IRISMYDEV>write $translate($ZDT(d_",00000",3)," ","T")_"Z" 2023-08-24T00:00:00Z
go to post Ashok Kumar · Aug 23, 2023 Hello Scott, I had created ZAUTHENTICATE.mac in %SYS namespace. Implemented the GetCredentials and validated the authentication for delegated user. It works for me without any issues.
go to post Ashok Kumar · Aug 23, 2023 Hello @Joel Solon The %ValidateObject() method is used to validate the property. Not to find out the property is modified in the opened object IRISMYDEV>set obj = ##Class(Samples.NewClass2).%OpenId(1) IRISMYDEV>write obj.Name Test IRISMYDEV>zwrite obj.%ValidateObject() 1 IRISMYDEV>set obj.Name="newname" IRISMYDEV>zwrite obj.%ValidateObject() 1 m%_Property is used to verify whether the property is modified before save. Incase If we need to verify Class Samples.NewClass2 Extends %Persistent { Property Name As %String; Method modified() { write "Property modifed : ",$Property(,"m%Name") } } IRISMYDEV>set obj = ##Class(Samples.NewClass2).%OpenId(1) IRISMYDEV>do obj.modified() Property modifed : 0 IRISMYDEV>set obj.Name="test" IRISMYDEV>do obj.modified() Property modifed : 1 IRISMYDEV> I hope, we don't have any built in method like "propertyIsModified" to verify the property is modified
go to post Ashok Kumar · Aug 23, 2023 Hello Smythe, I agree with @Robert Cemper points. The %Date datatype is for +$H which means numeric date value. Not an string. You should modify the datatype of the property or use string functions. IRISMYDEV>s obj = ##Class(CSVtoHL7.Inputfile.Record).%New() IRISMYDEV>s obj.DOB="12/12/1993" IRISMYDEV>zw ##Class(%Date).IsValid(obj.DOB) "0 "_$lb($lb(7207,"12/12/1993",,,,,,,,$lb(,"IRISMYDEV",$lb("e^IsValid+1^%Library.Date.1^1","e^^^0"))))/* ERROR #7207: Datatype value '12/12/1993' is not a valid number */ IRISMYDEV>w $SYSTEM.OBJ.DisplayError() ERROR #7207: Datatype value '12/12/1993' is not a valid number1 IRISMYDEV>s obj = ##Class(CSVtoHL7.Inputfile.Record).%New() IRISMYDEV>s obj.DOB=$ZDateH("12/12/1993") IRISMYDEV>zw ##Class(%Date).IsValid(obj.DOB) 1
go to post Ashok Kumar · Aug 21, 2023 Hello Pierre, No problem. You can use the merge command(sorry not a string function) to take a copy of entire global node and subtree merge queryparam = %request.Data zwrite queryparam ;print the entire node and subtree
go to post Ashok Kumar · Aug 20, 2023 Nice article. However, there is a minor problem while setting the trailing zero values in %Set() of dynamicobject. But, It's not happening in literal constructor {} syntax. Due to objectscript not keep the trailing zeros. But json number do. set json = { "decimal": 12.000} zw json set json1= ##Class(%DynamicObject).%New() do json1.%Set("decimal", 12.000) ; this is consider as string do json1.%Set("decimal1", $FN(12,,2), "number") zw json1 #;output json={"decimal":12.000} ; <DYNAMIC OBJECT> json1={"decimal":12,"decimal1":12} ; <DYNAMIC OBJECT>
go to post Ashok Kumar · Aug 20, 2023 Hello Pierre, You have two options to get query parameters You can merge the entire %request.Data into local array and use string function. User %request.Next(data) method to loop the %request.Data one by one and get query parameter values ClassMethod GetQueryParams() { set data="" For { set data = %request.Next(data) quit:data="" write data,! } } OUTPUT Bottom Name Top For cgiEnvs. You can follow same merge option to get all values. Otherwise use %request.NextCgiEnv(cgi) to get the list of available values. ClassMethod GetcgiEnvs() { set cgi="" for { set cgi = %request.NextCgiEnv(cgi) quit:cgi="" write cgi,! } }
go to post Ashok Kumar · Aug 18, 2023 Hello @ARTHUR L A SILVA You create a your custom task and schedule this task in task manager if it's required. Follow the below steps to schedule the task. Create a new class definition with extends of %SYS.Task.Definition. Override the OnTask() method and necessary logic inside the method Goto System Management portal > System Operation>Task Manager>NewTask Add unique task name Select namespace Assign the task type ( which is your class definition) Select output file when task running Provide your ouputfile.csv in the output file schedule the execution date and time. Finish the task Class Samples.TaskMgr.SQLExportTask Extends %SYS.Task.Definition { Parameter TaskName As STRING = "ExportQueryToCSV"; Method OnTask() As %Status { set statement = ##class(%SQL.Statement).%New() /// Place your sql query set sql = "Select Name,dob,Phone From Samples_DB.Person" set tSC = statement.%Prepare(sql) if $$$ISERR(tSC) Q $$$OK set result = statement.%Execute() #dim meta As %SQL.StatementMetadata= result.%GetMetadata() for i=1:1:meta.columnCount { if i>1 w "," write meta.columns.GetAt(i).colName } write $$$NL while result.%Next() { write result.Name,",",result.dob,",",result.Phone,$$$NL } return $$$OK } } Task scheduler
go to post Ashok Kumar · Aug 16, 2023 Hi @Sakthivel Perumal Can you try the below sample to download file from the directory Class Samples.CSPFileDownload Extends %CSP.Page { Parameter CONTENTTYPE As STRING = "application/text"; ClassMethod OnPage() As %Status { do %stream.OutputToDevice() return $$$OK } ClassMethod OnPreHTTP() As %Boolean { #; your directory and file set file="C:\Users\readmyfile.txt" set stream=##class(%Stream.FileCharacter).%New() set sc=stream.LinkToFile(file) set %stream = stream set %response.ContentType = ..#CONTENTTYPE set %fileName = file set %response.ContentLength=stream.Size return $$$OK } }