#Beginner

6 Followers · 535 Posts

Beginner tag unites articles and questions for those who are getting started with InterSystems Data Platform

Question Thembelani Mlalazi · Jun 22, 2018

I have a service that takes a file and pass it through to the production .While I am passing the file through I get the file stream and set it to a variable within my message and the variable is of type %Ens.StreamContainer. But after all processing and I need to write out my file to a pdf format The file gets written but is a corrupt file since I can not read it I have tried this with asimple pass through everything is fine .But here I do not know what I am doing wrong here is the operation code

 set pInput=pRequest.FileStream
     ;the variable to hold the status for the method
 #dim status as %Status=$$$OK
 ;clear the pResponse
  kill pResponse
     set pResponse=$$$NULLOREF
 ;set the file name to the sequence number
  set ..Filename=pRequest.NewFileName
 
  ;the filepath set on the settings of this OPERATION
   set origDirectory = ..Adapter.FilePath
  ;the file directory to drop the file
  set ..Adapter.FilePath = ..Adapter.FilePath_"\"_..StubDirectory
  
 ;start writing out file data to the file in filename
;this bit works fine
    set:$$$ISOK(status) status= ..Adapter.PutLine(..Filename_"."_..stubExtension,
  $CHAR(34)_ pRequest.ClientID_$CHAR(34)_$CHAR(44)_$CHAR(34)_pRequest.UserId_$CHAR(34)_$CHAR(44)_$CHAR(34)_
  pRequest.DocumentType _$CHAR(34)_$CHAR(44)_$CHAR(34)_pRequest.Title_$CHAR(34)_$CHAR(44)_$CHAR(34)_pRequest.Description_$CHAR(34)_$CHAR(44)_$CHAR(34)_pRequest.Author _$CHAR(34)_$CHAR(44)_$CHAR(34)_pRequest.DocumentDate_$CHAR(34)_$CHAR(44)_$CHAR(34)_pRequest.FinalRevision_$CHAR(34))
 
 if ($$$ISOK(status))
 {
  ;set back to the operation settings
  set ..Adapter.FilePath = origDirectory
    ;set the file name  to write out to
  set ..Filename=pRequest.NewFileName_"."_..DocExtension
  ;set the filepath on the production settings to this variable
  set origDirectory = ..Adapter.FilePath
  ;set the new filepath
  set ..Adapter.FilePath = ..Adapter.FilePath_"\"_..DocumentDirectory
     
 
  //here I turn to write out but file is corrupt
  
   Quit:'$IsObject(pInput.Stream) $$$ERROR($$$EnsErrGeneral,"No Stream contained in StreamContainer Request")
 Set tFilename=..Adapter.CreateTimestamp(##class(%File).GetFilename(pInput.OriginalFilename),..Filename)
 Set status=..Adapter.PutStream(..Filename, pInput.Stream)
 Do pInput.%Save() ; re-save in case PutStream() optimization changed the Stream filename
 
 
 
 
   set ..Adapter.FilePath = origDirectory
  
   if ($$$ISOK(status))
 {
  set pResponse=##class(BSMHFT.DocumentUpload.GenericRESP).%New()
  set pResponse.Process="RiOFileOPRN_files Written to their respective directories"
  set pResponse.Status=status
  set status=pResponse.%Save()
 }
  
 }
 
 return status
}
11
0 1028
Question Eduard Lebedyuk · Jun 25, 2018

I have this local, containing a list of books of arbitrary length:

set books=2
set books(1, "author") = "Alice"
set books(1, "title") = "Hello"
set books(1, "pages") = "123"
set books(2, "author") = "Bob"
set books(2, "title") = "World"
set books(2, "pages") = "456"

And I want to generate this PDF (there could be more than two tables), each book is a separate table:

The header is always the same (Author, Title, Page) but the number of tables would be different.

ZEN reports sounds relevant, but I'm not sure how to pass data from local there and how to draw a separate table for each result.

3
0 1003
Question Confused Developer · Aug 3, 2017

Hi,

While accessing Trakcare in IE 11 i am getting error:

The Trakcare Layout Editor is not functioning.Please check your browser security setting for scripts and ActiveX controls.You must have ensemble installed locally to use this application.

2
0 1558
Question Pilar Guerrero · Jun 18, 2018

Hello,

I need to access the value of a setting I created (ex: name_BO) within the logic of my BP.

Property name_BO As %String(MAXLEN = "");

/// Additional Settings 
Parameter SETTINGS = "name_BO:Basic:selector?context={Ens.ContextSearch/ProductionItems?targets=1&productionName=@productionId}";

But the class is common and the production item names will change.

Example -> Class name: My.BP.Common

Items in the production:

Item 1:

  • name: My.BP.AA
  • use the class My.BP.Common
  • value of setting name_BO : My.BO.AA


Item 2:

  • name: My.BP.BB 
  • use the class My.BP.Common
  • value of setting name_BO : My.BO.BB

Where My.

1
1 622
Question Eduard Lebedyuk · May 22, 2018

The code I'm researching loosely follows this flow:

  1. My first callback
  2. Black box
  3. My second callback

I can modify 1 and 3 no problem but modifying 2 is difficult.

However I think that step 2 has some optimization problems, namely:

  • instantiates lots of objects
  • throws/catches lots of exceptions (not logged)

Is there a way to count these two metrics?

3
0 354
Question Minsu Kim · May 9, 2018

Hello Global masters.

I am junior developer about Intersystems cache in South Korea.

I want to develop process management program on server.

My code :

TESTPID(IP)    ;
    #include %syPidtab
    Set Rset = ##class(%ResultSet).%New("%SYS.ProcessQuery:ListPids")
    d Rset.Execute()
    &sql(SELECT ClientIPAddress, Pid INTO :ClientIPAddress, :Pid
    FROM %SYS.ProcessQuery 
    WHERE ClientIPAddress = :IP)
    While Rset.Next() 
    {
​    i SQLCODE'=0 w !,"SQL Error "_SQLCODE continue ; 100 means process does not exist (halted)
    I Rset.GetData(1) = Pid D
    . w !,Rset.GetData(1)," ",ClientIPAddress," ",Pid
            //Set rs=$SYSTEM.Process.Terminate(Pid)
            //If rs'=1 {
            //    Write "Terminate Fialure "_" Pid "_Pid,!
            //}
            //Else {
            //    W "Sucess",!
        //    }
    //    }
    }
    d Rset.Close()
    Q
5
0 452
Article Kurro Lopez · Jan 24, 2018 3m read

Sometimes, we need to copy part of the properties of an object into a different one. 
The simplest thing would be to do the following:

Set obj1.FirstName = obj2.FirstName

Set obj1.SecondName = obj2.SecondName

What happens if the object contains a large number of properties? or we just want to extract an important group of data, and complement the information in another object?

Having the following classes:

Class Kurro.PersonalInfo Extends %Library.SerialObject
{
 /// Code of personal
 Property Code As %String;
 
 /// First name of personal
 Property FirstName As %String;
 
 /// Second name of personal
 Property SecondName As %String;
 
 /// Date of birthday of personal
 Property DateOfBirthday As %DateTime;
 
 /// Passport ID number
 Property PassportId As %String;
  
}



Class Kurro.NameInfo Extends %Library.SerialObject
{

 /// First name of personal
 Property FirstName As %String;
 
 /// Second name of personal
 Property SecondName As %String;
 
 /// Date of birthday of personal
 Property DateOfBirthday As %DateTime;

 /// Relationship
 Property Relationship As %String;
 
}

6
0 1901
Question Thembelani Mlalazi · Apr 26, 2018

I am using the EnsLib.RecordMap.Operation.BatchFileOperation to write a batch to a file but for some reason this has been working fine as of yesterday I had a problem with the cache databases filling up running out of memory so had to compact my database and gain space now when I run the operation I get the above error  .Of course in my batch table there is no batch record with ID 1.The message is passed with the correct header information but still get this error any suggestions why?

3
0 1166
Question Stephen Wilson · Apr 19, 2018

Does developing a RESTful API in Caché remove the requirement to use the InterSystems.Data.CacheClient.dll and generate proxy classes using the Caché Object Binding Wizard for .NET web development? If anyone has links to sample applications using .NET with Caché and REST Services, I would be grateful if you could share them.

4
0 644
Question Kishan Ravindran · Oct 12, 2017
Set httprequest=##class(%Net.HttpRequest).%New()
	Set httprequest.Server="www.intersystems.com"
	Do httprequest.Get("/")
	Do httprequest.HttpResponse.OutputToDevice()
	Do httprequest.Get("/cache/")
	Do httprequest.HttpResponse.OutputToDevice()

The above is the code which i found in this link http://docs.intersystems.com/latest/csp/documatic/%25CSP.Documatic.cls?… 
How do the above code works and can i be able to run this?

Thanks in advance.

5
0 3627
Question Rafael Santos · Feb 26, 2018

Hi, iam newbie on caché database.

Iam trying, export data from query.

I read in some article that is not so simple.

So I create a view then a execute a query insert into select statement.

I have problem to know the job progress. I execute an hour ago and nothing  happened.

Iam using intersystems web IDE.

Thanks for help!

6
0 534
Question Sarvan Ibishov · Jan 29, 2018

Hi. I am newby in Cache. My source code at below. I have problem in Relationship property. Could you please help?

 /// Class %Persistent
 Test.Chapter %Persistent

then in terminal I am running these commands:

USER>set c1 = ##class(Test.Chapter).%New()
USER>set c1.Name = "Introduction"
USER>set c1.Page = 10
USER>set c2 = ##class(Test.Chapter).%New()
USER>set c2.Name = "Development of DB"
USER>set c2.Page = 13
USER>set b = ##class(Test.Book).%OpenId(1)

USER>do b.Chapters.Insert(c1)
8
0 413
Question Eduard Lebedyuk · Feb 20, 2018

Several $System.OBJ methods have ByRef errorlog argument:

Compile(ByRef classes As %String = "", qspec As %String = "", ByRef errorlog As %String, recurse As %Boolean = 0)

ImportDir(dir As %String = "", wildcards As %String, qspec As %String = "", ByRef errorlog As %String, recurse As %Boolean = 0, ByRef imported As %String, listonly As %Boolean, ByRef selectedlist As %String)

What's the best approach of working with errorlog?

Do you convert it to status? If so - how? Manual iteration over local?

Is there some system method to convert it into %Status?

1
0 421
Article Kurro Lopez · Feb 21, 2018 1m read

Hi all,

I've created a method to calculate the age of a person, or the age of a process, contract or other stuff as you want.

/// Calculate the age from date of birth and other date (by default shoud be today).
/// <b>dateOfBird</b> Date of birth in cache format. ie. $ZDH("1972-01-01",3)
/// <b>day</b> Date to calculate to. ie: $H
ClassMethod AgeAt(dateOfBirth, day) As %Integer{
    quit:dateOfBirth=""
    quit:day=""
    
    set yeardob=$SYSTEM.SQL.DATEPART("year",dateOfBirth)
    set yearday=$SYSTEM.SQL.DATEPART("year",day)
    
    set years=yearday-yeardob
    kill yeardob, yearday
    
    set monthdob=$SYSTEM.SQL.DATEPART("month",dateOfBirth)
    set monthday=$SYSTEM.SQL.DATEPART("month",day)
    if (monthday-monthdob)<0 set years=years-1
    if (monthdob-monthday)=0
    {
        if ($SYSTEM.SQL.DATEPART("day",day) - $SYSTEM.SQL.DATEPART("day",dateOfBirth)) < 0
        {
            set years=years-1
        }
    }
    
    kill monthdob, monthday
    quit years
}
2
0 1951
Article Clark Matthews · Nov 3, 2016 4m read

Problem:

Caché prints to printers in a manner somewhat different from other Windows applications.  Caché sends the data directly to the GDI Printer, without the usual interface.  This is because the GUI interface can only be shown on a system desktop session and not in web browser and terminal sessions.  Some printer drivers have problems with this method of printing.

Is this the problem you are having?

  • If you are opening the printer as a Windows printer as described in the documentation (found here).
3
3 3175
Question George Hodder · Feb 2, 2018

Hi.. I have an issue where we are using OAuth2.0 with the ZAUTHENTICATE routine.  Once our token is validated we are using a users lan id (passed on the ID token) to find a software defined username in a Cache Global.

That is all working fine in ZAUTHENTICATE.. I am setting the software defined username in the Properties("Comment") array and wanting to reference it in the Rest Service Dispatch class.

6
0 1012
Question Ponnumani Gurusamy · Feb 11, 2018

I tried to learn DEEP SEE Analytics for our HealthShare "SAMPLES" Name Space. I followed our documentation and tried it. But my management portal analyzer and visual reporting fields are hidden. So Please help me for how do I use the deep see concepts and  provide some examples or demo.

Thanks ,

Ponnumani G.

1
0 306
Question Eduard Lebedyuk · Feb 5, 2018

Currently to check if the class  is mapped I call:

ClassMethod IsClassMapped(class) As %Boolean

{
  set sc = $system.OBJ.GetClassList(.classes,"/system=0 /percent=0 /mapped=0")
  quit $data(classes(class))
}

And it works, but I'm interested if there is a simpler approach out there?

2
0 462