Henrique Dias · Nov. 16, 2020 ir ao artigo

Fala @Arian Botine beleza?

Eu não encontrei um método "Get" para retornar o valor Selectivity como menciona na questão acima.

No pacote %SYSTEM.SQL, tem o ClassMethod GetMapSelectability

Mas ele vai te retornar apenas 0 ou 1, conforme descrito aqui na documentação:

https://docs.intersystems.com/latest/csp/documatic/%25CSP.Documatic.cls?&LIBRARY=%25SYS&CLASSNAME=%25SYSTEM.SQL#METHOD_GetMapSelectability 

Returns: The method returns 1 if the map is selectable. If the map is not selectable, 0 is returned. If the Selectability of the map cannot be determined, a message string will be returned.

Se você analisar um outro pacote %Dictionary, vai se deparar com a classe persistente %Dictionary.StoragePropertyDefinition 

https://cedocs.intersystems.com/latest/csp/documatic/%25CSP.Documatic.cls?&LIBRARY=SAMPLES&CLASSNAME=%25Dictionary.StoragePropertyDefinition

Essa tabela tem uma coluna chamada Selectivity. 
Veja se com essas informações você consegue chegar na sua solução. 

Depois compartilha conosco.

Abraços

Henrique Dias · Nov. 25, 2020 ir ao artigo

Parabéns a todos os participantes! 

Agradeço a todos pelos votos de confiança e pelo incentivo para meus aplicativos. 

Espero conseguir retribuir com boas ideias e projetos para uma comunidade tão unida e onde sempre encontrei apoio nesses longos anos de jornada.

Abraços e até a próxima laugh

Henrique Dias · Dez. 28, 2020 ir ao artigo

Oi Juliana, tudo bem?

Você já viu aplicação do @Yuri Marx no OpenExchange?

https://openexchange.intersystems.com/package/OCR-Service

Na descrição da aplicação você tem a seguinte informação:
InterSystems IRIS Interoperability OCR Service
This is an InterSystems IRIS Interoperability OCR Service to extract text from images and pdfs from a file into a multipart request from form or http request.

What The the service does
This application receive a http multipart request with a file, extract text using OCR from Tesseract and returns the result

Também tem um video que ele fez demonstrando um pouco mais. 

https://www.youtube.com/watch?v=E8MHJ0kAdbk

Espero que possa ajudar.

Abraços

Henrique Dias · Fev. 5, 2021 ir ao artigo

Fala @Fernando Beira tudo bem?

Cara, não sei te dizer o real motivo dessa mudança. Mas a InterSystems andou fazendo algumas enquetes sobre IDEs utilizadas no começo de 2020. Em Abril de 2020, o Raj Singh - Product Manager, Developer Experience anunciou que a InterSystems se juntaria ao time que tocava a extensão do VSCode. 

https://community.intersystems.com/post/intersystems-joins-open-source-objectscript-vs-code-effort 

Durante a Global Summit 2020, foi lançada a versão 1.0 da extensão
https://community.intersystems.com/post/objectscript-extension-vs-code-reaches-10

Assim como você mencionou, o VSCode ainda não oferece suporte para aos wizards de criação de adapters, BPL, etc.

Essas funcionalidades parecem estar já nos planos da equipe. Aqui um link para o SOAP Wizard e como fazer um "workaround" até a funcionalidade não sair. 

https://github.com/intersystems-community/vscode-objectscript/issues/325

Esse é o que eu tenho conhecimento a respeito dos esforços do VSCode. 

Mas, como experiência/opinião pessoal, fiquei muito feliz com a aposta no VSCode ao invés do Atelier. 
Sempre achei o Atelier/Eclipse uma IDE super pesada para o que oferece. laugh

Abraços e espero ter ajudado 

Henrique Dias · Abr. 26, 2021 ir ao artigo

Parabéns a todos os desenvolvedores que dedicaram um tempo de suas vidas para criarem aplicações, artigos, videos. 

Parabéns a toda a equipe que mantém a Community, trabalhando para que cada vez mais e mais desenvolvedores se interessem pela Comunidade, competições, ajudando assim todos nós.

Até uma próxima oportunidade

Henrique Dias · Maio 2, 2021 ir ao artigo

Opa, tudo bem?

Eu tenho utilizado Docker e seu uso tem se mostrado muito mais simples e prático. 
Nesse link, tem o passo a passo de como subir o ambiente utilizando essa estrutura. No começo pode parecer meio "estranho", mas você logo se acostuma com a praticidade.
 

Henrique Dias · Maio 21, 2021 ir ao artigo

Talvez passando o ID do objeto em algo parecido com isso:

Query GetInfo(refId As %String) As %SQLQuery(CONTAINID = 1, ROWSPEC = "IdList:%String,IdProcess:%String,Duration:%String")
{
    SELECT list.IdList, list.IdProcess, list.Duration
    FROM Kurro.MyClass list
    JOIN Kurro.MyClass ref on ref.ID = :refId
    AND ref.KeyProcess = list.KeyProcess
    AND ref.CodeSpecialist = list.CodeSpecialist
    AND ref.CodeProvider = list.CodeProvider
    AND ref.CodeCenter = list.CodeCenter
    AND ref.Date = list.Date
}

resposta por @Timothy Leavitt 

Henrique Dias · Maio 21, 2021 ir ao artigo

É uma boa ideia, mas eu não tem o ID da linha.

Minha ideia era usar o objeto como um parâmetro e passar um monte de valores, e a query leria estes valores, ao invés de passá-los uma a um nos parâmetros.

Eu mudei minha query com todos os parâmetros que eu preciso para executá-la

Query GetInfo(pKeyProcess As %String, pCodeSpecialist As %String, pCodeProvider As %String, pCodeCenter As %String, pDate as %TimeStamp) As %SQLQuery(CONTAINID = 1, ROWSPEC = "IdList:%String,IdProcess:%String,Duration:%String")
{
    SELECT IdList, IdProcess, Duration
    FROM Kurro.MyClass
    WHERE KeyProcess = :pKeyProcess
    AND CodeSpecialist = :pCodeSpecialist
    AND CodeProvider = :pCodeProvider
    AND CodeCenter = :pCodeCenter
    AND Date = :pDate
}

Funciona, mas ainda preciso passar todos os parâmetros. Eu queria criar uma classe para passar todos os parâmetros, tipo um método em c#, e tentar usa-lo.

Valeu galera.

resposta por @Kurro Lopez 

Henrique Dias · Maio 21, 2021 ir ao artigo

É um assunto interessante.
#2) Seu segundo exemplo não vai funcionar, porque não está passando um parâmetro de chamada.
#1) Não está previsto o uso de propriedades de objetos como variáveis de host em SQL

O código dá erro no método Execute gerado.

set tResult tStatement.%Execute($g(pObject.KeyProcess),$g(pObject.CodeSpecialist),$g(pObject.CodeProvider),$g(pObject.CodeCenter),$g(pObject.Date))

$GET para propriedades de objeto não está implementado. É definido pela classe e está sempre lá. 

Mas é necessário e faz sentido para propriedades multidimensionais!  

Isto é válido para ObjectScript e não está relacionado a SQL.
Mas, escrevendo o código na mão, você pode usar $g(NOTHING,pObject.KeyProcess
O gerador simplesmente não faz isso.
 

Workaround #1: Mexer diretamente no código gerado. Não recomendado.
Workaround #2:  Mova suas propriedades com uma função auxiliar para variáveis locais e ajuste sua query a essas variáveis


example helper (with obj or id):
ClassMethod FillProp(pObject As Kurro.MyClassAs %Boolean SqlName FILLPSqlProc ]
{
if '$isObject(pObjectset obj=##class(Kurro.MyClass).%OpenId(pObject)
else  set obj=pObject
set %Kurro("kp")=obj.KeyProcess
     ,%Kurro("sp")= obj.CodeSpecialist
     ,%Kurro("pr")= obj.CodeProvider
     ,%Kurro("cs")= obj.CodeCenter
    ,%Kurro("dt")= obj.Date
quit 1
}

 

Query exemplo:

Query GetInfoRcc(objid As %IntegerAs %SQLQuery(CONTAINID 0ROWSPEC "IdList:%String,IdProcess:%String,Duration:%String")
{
    SELECT IdListIdProcessDuration
    FROM Kurro.MyClass
    WHERE KeyProcess :%Kurro("kp")
    AND CodeSpecialist :%Kurro("sp")
    AND CodeProvider :%Kurro("pr")
    AND CodeCenter :%Kurro("cs")
    AND "Date" :%Kurro("dt")
   AND FILLP(:objid) = 1
}

Funciona como esperado.

resposta by @Robert Cemper 

Henrique Dias · Maio 21, 2021 ir ao artigo

Você está implicitamente utilizando o método %Library.SqlQuery:Func(), no qual, como corretamente @Robert Cemper apontou, $get() é usado.

Você pode fazer dessa outra maneira:

Query GetInfo(pObject AS Kurro.MyClassAs %SQLQuery(CONTAINID 1ROWSPEC "IdList:%String,IdProcess:%String,Duration:%String") [ SqlProc ]
{
    SELECT IdListIdProcessDuration
    FROM Kurro.MyClass
    WHERE KeyProcess :pObject.KeyProcess
    AND CodeSpecialist :pObject.CodeSpecialist
    AND CodeProvider :pObject.CodeProvider
    AND CodeCenter :pObject.CodeCenter
    AND "Date" :pObject.Date
}set obj=##class(Kurro.MyClass).%New()
set obj.KeyProcess="1033004-1#"
set obj.CodeSpecialist "surgery"
set obj.CodeProvider "PR002"
set obj.CodeCenter "CENTER-01"
set obj.Date $ZDATETIME($ZDATETIMEH("2021-04-30 15:45:00",3,1),3,1)

set st=##class(%SQL.Statement).%New()
set sc=st.%PrepareClassQuery("Kurro.MyClass","GetInfo")
  if $$$ISERR(sc{write "%PrepareClassQuery failed:" do $System.Status.DisplayError(scquit}
set result=st.%Execute(obj)
do result.%Display()

resposta por @Vitaliy Serdtsev

Henrique Dias · Dez. 6, 2021 ir ao artigo

Excelente! Acredito que vai ser de muita utilidade, em especial para ambientes de homologação, onde você pode trazer dados da produção para ajudar nos testes.

Henrique Dias · Jun. 12, 2023 ir ao artigo

Oi @Davi Massaru Teixeira Muta 

Traduzir artigos ajuda muito a comunidade (além de ganhar pontos)

Mas, para traduzir artigos tem um procedimento a ser feito. Dentro do artigo original, selecione o idioma para o qual quer traduzir: 

 

Ao selecionar o idioma desejado, aparecerá as seguintes opções

 
A forma como você fez a tradução não deixa vinculado o seu texto ao texto original, você criou um novo artigo e colocou uma nota no final do seu texto. O autor original não tem conhecimento quando essa forma é utilizada. 

Fazendo a tradução da forma correta, você deixa os créditos para o autor do texto original, ele tem ciência e tudo fica vinculado na comunidade. 

Espero ter conseguido transmitir a forma correta para isso. 

Henrique Dias · Jun. 15, 2023 ir ao artigo

@Felipe Carvalho  muito obrigado! 😃 

Acho que todos nós que trabalhamos com tecnologia InterSystems temos esse desafio. Mostrar que não é um bicho de 7 cabeças, que não tem nada de alienígena numa global e que um $order não mata ninguém hahaha

E acho que o maior desafio de todos é provar que diferente do COBOL, a plataforma veio continuamente evoluindo