The buildspec.yaml is just to check what git source has compile errors.

version: 0.2

env:
  variables:
      RESULT: 0
phases:
  build:
    commands:
      # Make Directory for compile check.
      - mkdir -p /user/local/work
      # Copy files what get from CodeCommit.
      - cd ..
      - cp -r * /user/local/work
      - chmod -R 777 /user/local/work
      # Start container's IRIS.
      - su - irisowner -c "iris start IRIS"
      # Import check.
      - su - irisowner -c "iris terminal IRIS \"##CLASS(%SYSTEM.OBJ).ImportDir(\\\"/user/local/work\\\",\\\"*.cls;*.mac;*.int;*.inc;*.dfi\\\",\\\"k\\\",,1)\" " | tee result.txt
      - sh ./chk_err.sh
      # Compile check.
      - su - irisowner -c "iris terminal IRIS \"##CLASS(%SYSTEM.OBJ).CompileAll(\\\"ck\\\")\" " | tee result.txt
      - sh ./chk_err.sh
      - su - irisowner -c "iris terminal IRIS \"##CLASS(%Library.MessageDictionary).ImportDir(\\\"/user/local/work/01/res\\\")\" " | tee result.txt
      - sh ./chk_err_md.sh
      # These sh is check result.txt that has errors.
      -
  post_build:
    commands:
      - cd $CODEBUILD_SRC_DIR_main_out
      - mv make_flg_file.bat ../
      - mv appspec.yml ../
      - cd ..
      - mv 00 base
      - mv 01 main
      - ls -al

And appspec.yaml is to store sources to any directory.

version: 0.0
os: windows
files:
  - source: /
    destination: E:\deploy\base

After that, Importing to iris is done by creating an interoperability job and using the file detection mechanism.

Import program.

ClassMethod ImportDir(path As %String, flag As %String = "k") As %Status
{
    Do ..Log("ImportDir Start:"_path_" / "_flag)
    Set errorLog = ""
    Set imported = ""
    Set selectedlist = ""
    Set count = 0
    If (##class(%File).DirectoryExists(path)) {
        Set status = $SYSTEM.OBJ.ImportDir(path, "*.cls;*.mac;*.int;*.inc;*.dfi", flag, .errorLog , 1, .imported, , .selectedlist)
        Set prg = ""
        For {
            Set prg = $ORDER(imported(prg))
            If (prg = "") {
                Quit
            }
            Set count = count + 1
        }
    } Else {
        Set status = $$$ERROR($$$GeneralError, "パスが存在しません。"_path)
    }
    Do ..Log("ImportDir End:"_count)
    Return status
}

Hi,

You need use Persistent class.
https://docs.intersystems.com/irislatest/csp/documatic/%25CSP.Documatic....

Community article.
https://community.intersystems.com/post/art-mapping-globals-classes-1-3

Like this.(Display ^Hban global on Dbeaver what used SQL.)

Class Gbl.Hban Extends %Persistent [ SqlRowIdPrivate, StorageStrategy = MyGlobalStorage ]
{

/// Index
Index KeyIndex On (year, key) [ IdKey, Unique ];

/// first key
Property year As %Integer [ Required, SqlColumnNumber = 2 ];

/// second key
Property key As %String [ Required, SqlColumnNumber = 3 ];

/// third key
Property data As %String;

Storage MyGlobalStorage
{
<Description>
<![CDATA[]]></Description>
<SQLMap name="GblMap">
<Data name="data">
<Delimiter>"^"</Delimiter>
<Piece>1</Piece>
</Data>
<Global>^Hban</Global>
<RowIdSpec name="1">
<Expression>{L1}</Expression>
<Field>year</Field>
</RowIdSpec>
<RowIdSpec name="2">
<Expression>{L2}</Expression>
<Field>key</Field>
</RowIdSpec>
<Subscript name="1">
<Expression>{year}</Expression>
</Subscript>
<Subscript name="2">
<Expression>{key}</Expression>
</Subscript>
<Type>data</Type>
</SQLMap>
<StreamLocation>^Gbl.TestS</StreamLocation>
<Type>%Storage.SQL</Type>
}

}

Hi.

I implement CI/CD pipeline of IRIS in AWS without container!
I use CodeCommit what is git service and CodeDeploy what is deploy service.

When source code(cls files) was pushed to CodeCommit, CodeDeploy executes to pull source files from CodeCommit, and deploy to application server.
Application server is installed IRIS, and use Interoperability for monitor deploy files.

When Interoperability detects files, executes $SYSTEM.OBJ.DeletePackage(path) and $SYSTEM.OBJ.ImportDir(path, "*.cls;*.mac;*.int;*.inc;*.dfi", flag).

I think same issue as https://githubmemory.com/repo/intersystems/language-server/issues/186?pa... .

@pvdmm Thanks for the log, I think that your problem is due to a couple of missing DLLs: msvcp120.dll and msvcr120.dll

These can be installed using the Visual C++ 2013 redistributable package available from https://support.microsoft.com/en-us/topic/update-for-visual-c-2013-redistributable-package-d8ccd6a5-4e26-c290-517b-8da6cfdf4f10

This is a link to an page talking about a bugfix update but it is the latest version (5) of these tools, linked from a Microsoft page titled "The latest supported Visual C++ downloads".

Please install this and then try running VSCode again.

If this fixes your problem the Language Server team can work out the best way to fix this issue for future installations of the extension.

Hi!

I use ScrollableResultSet class in this case.
This class is enable to use Previous() method, and it's able to reset Cursor by using repeatedly.
Like this.

Set query = "YOUR SQL"
Set result = ##class(%ScrollableResultSet).%New("%DynamicQuery:SQL")
Set sts = result.Prepare(query)
If ($$$ISERR(sts)) {
    // ERROR
}

Do result.Execute()

If (result.%SQLCODE < 0) {
    // ERROR
}

// Show get column data.
While (result.%Next()) {
  Wrtie result.%GetData(1)
}

// Reset cursor index.
While (result.%Previous() > 0) {
  // Do nothing.
}

// Show get column data again.
While (result.%Next()) {
  Wrtie result.%GetData(1)
}