Nouvelle publication

Rechercher

Résumé
· 30 min il y a

InterSystems Community Q&A Monthly Newsletter #49

Top new questions
Can you answer these questions?
#InterSystems IRIS
SQL Query returns with OFFSET
By Fabio Care
Take subroutines from the Deployed Mode Routine
By Ashok Kumar T
Create Python pages
By Nezla
Prompt Engineering for ollama-ai-iris
By Oliver Wilms
How can I configure InterSystems ObjectScript Source Control with a client-side workspace in VS Code?
By Ricardo Alves dos Santos
Error Handling Server to Client Side - Best Practices
By Michael Davidovich
Task manager in async mirror behavior
By Yaron Munz
%JSON.Adaptor compilation issues under array-of-streams and computed property types
By Geoffrey Lu
Duvidas sobre o uso de JWT
By Guilherme Silva
Production Validator - Case Study
By Satya Prasad Kalam
EnsLib.File.CSVService
By Saju Abraham
How to override the port used on a SOAP operation
By Ryan Hulslander
Cannot open file '/ensemble/TEST/iris.cpf_.... when trying to create a Database/Namespace
By Scott Roth
Multiselction Zen component
By Nezla
Question about database defragmentation (several TB database)
By Norman W. Freeman
Subscript indirection behaves differently in if statement
By Ashok Kumar T
%Stream files do not get purged from the /stream/ folder on the system disk
By Martin Nielsen
Poor database write performance
By Norman W. Freeman
Yet Another Performance Puzzle
By Alexey Maslov
Shared code execution speed
By Anna Golitsyna
Append a string in a update query
By Jude Mukkadayil
#Ensemble
#Health Connect
#InterSystems IRIS for Health
#HealthShare
#49Monthly Q&A fromInterSystems Developers
Discussion (0)1
Connectez-vous ou inscrivez-vous pour continuer
Annonce
· 2 hr il y a

[Video] SMART on FHIR: Application Setup

Hey Community,

Enjoy the new video on InterSystems Developers YouTube:

⏯ SMART on FHIR: Application Setup

From this video, you'll learn the final setup step for configuring an application by editing specific files in a code editor (e.g., VS Code) to align with the previously configured servers.

🗣  Presenter@Tani Frankel, Sales Engineer Manager, InterSystems

Enjoy watching, and look for more videos! 👍

Discussion (0)1
Connectez-vous ou inscrivez-vous pour continuer
Article
· 3 hr il y a 9m de lecture

Integrando com Google Forms

O Google Forms é a solução mais popular no mercado para a coleta de dados, respostas a questionários e quizzes. Por isso, é a ferramenta ideal para coletar dados e respostas de pacientes de forma prática, eliminando a necessidade de expandir ou desenvolver sistemas complexos.

Neste artigo, vou detalhar como criar uma conta no Google Cloud, registrar a aplicação que irá consumir a API do Google Forms, gerar o usuário de serviço necessário para consumir a API e, por fim, realizar ações para criar novos formulários e coletar os dados preenchidos neles de forma automatizada em Python e IRIS embutido.

Crie Sua Conta Google Cloud

Se você ainda não tem uma conta Google Cloud, siga estes passos. Caso contrário, vá para a próxima seção.
Para criar uma conta no Google Cloud Platform (GCP), você primeiro precisa de uma conta Google. Depois, você pode fazer login no console do Google Cloud e começar a usar o nível gratuito ou criar uma conta paga. Veja um guia passo a passo:

1.   Acesse o console do Google Cloud: Visite cloud.google.com.
2.    Faça login com sua conta Google: Se você não tiver uma, precisará criar uma.
3.    Aceite os termos e condições: Revise e aceite os termos e condições do Google Cloud.
4.    Comece Gratuitamente ou Crie uma Conta de Faturamento:
a.   Nível Gratuito: Você pode começar a usar o Google Cloud gratuitamente com o nível gratuito
b.   Conta Paga: Se precisar de mais recursos ou funcionalidades avançadas, você precisará criar uma conta de faturamento.
5.    Crie uma Conta de Faturamento (se necessário): Se você optar por criar uma conta paga, precisará configurar uma conta de faturamento, o que exige o fornecimento de detalhes de verificação de pagamento e informações sobre sua organização.
6.    Comece a Usar: Assim que sua conta estiver configurada, você poderá acessar o console do Google Cloud e começar a usar os serviços.

Criar um Projeto Google Cloud

É obrigatório criar um projeto para usar as APIs e SDKs do Google em seus programas.

Acesse este link e siga os passos:

https://developers.google.com/workspace/guides/create-project

 

Criar uma Conta de Serviço Google Cloud

É necessário criar uma conta de serviço (credenciais para aplicações) para que sua aplicação possa consumir a API do Google Forms.

1.    Acesse https://console.cloud.google.com/projectselector2/iam-admin/serviceaccounts , e selecione o projeto que você criou na seção anterior.
2.    Clique no botão + Criar conta de serviço, preencha os campos obrigatórios e clique em Criar e continuar.
3.    Selecione a função Proprietário e clique no botão Continuar.
4 .   Salve seu arquivo JSON de credenciais para usar posteriormente.
5.    Clique no botão Concluir (Done).
6.    Clique no botão de 3 pontos e selecione Gerenciar chaves.
 
7.    Clique no botão Adicionar chave > Criar nova chave.

8.    Selecione JSON e clique em Criar.
 
9.    As credenciais são salvas na sua página de downloads. SALVE ESTE ARQUIVO PORQUE IREI USÁ-LO MAIS TARDE.

Ativar as APIs do Google Forms e do Google Drive

Para que seu projeto possa consumir as APIs do Google Forms e do Google Drive (porque o Drive armazena as definições dos formulários do Google), você deve ativar o acesso:
1.    Vá para https://console.cloud.google.com/apis/dashboard
2.    Clique no botão "+ Ativar APIs e serviços".
3.    Pesquise por "Google Drive API" no campo superior "Pesquisar APIs e serviços", selecione "Google Drive API" e ative a API, se ainda não estiver ativada.
4.    Repita o passo 3 e pesquise por Google Forms API no campo superior "Pesquisar APIs e serviços", selecione Google Forms API e ative a API, se ainda não estiver ativada.


Obtenha e Execute o Projeto health-gforms 

Criei uma aplicação de exemplo (health-gforms em https://openexchange.intersystems.com/package/health-gforms) que cria um Google Form e coleta dados dele.


1.    Clone/faça um git pull do repositório em qualquer diretório local.
$ git clone https://github.com/yurimarx/health-gforms/health-gforms.git
2.    Abra o terminal neste diretório e execute:
$ docker-compose build
$ docker-compose up -d

 

Usando a API health-gforms via Postman


1.    Baixe (https://www.postman.com/downloads/) e instale o aplicativo Postman, se você ainda não o tiver.
2.    Baixe a coleção Postman em https://github.com/yurimarx/health-gforms/raw/refs/heads/master/health-g...
3.    Importe esta coleção para o seu Postman:
 
4.    Clique em "1. Post credentials" para carregar as credenciais da conta de serviço do Google Cloud para sua instância Docker:
 
5.    Abra "2. Post form definition" para salvar a definição do formulário (use um arquivo da pasta raiz do projeto, formpatient.json) em sua instância Docker
 
6.    Clique em "3. Create form from file definition" para criar um novo formulário Google no Google Cloud e coletar dados sobre um novo paciente: 
7.    Copie o valor para formId: 
8.    Abra os Formulários Google usando seu navegador (preste atenção ao valor de formId, eu o usei no caminho: https://docs.google.com/forms/d/1DtqV5edXVOjM-FAntPffRHqfVjMjOIJuiq5VXBc...
 
9.    Para preencher os Formulários Google como usuário final, vá até o botão "participant link" e cole em uma nova aba do navegador: 
10.    Preencha o formulário como usuário final:
 
11.    Cole as respostas do formulário.

12. Clique em "4. Get form content from template" e mude o valor de formId para o formId fornecido na etapa 7: 
13.    Clique no botão enviar e veja o conteúdo JSON FHIR para enviar ao seu servidor FHIR:

 

Nos Bastidores

Criando um Formulário nos Formulários Google:

ClassMethod CreateFormFromFile(formtitle As %String, filepath As %String) [ Language = python ]
{
    
    import httplib2
    import json
    from oauth2client.service_account import ServiceAccountCredentials
    from googleapiclient.discovery import build
    from mako.template import Template

    
    credentials = ServiceAccountCredentials.from_json_keyfile_name(
        "/opt/irisapp/credentials.json",
        scopes=["https://www.googleapis.com/auth/forms.body", 
                "https://www.googleapis.com/auth/forms", 
                "https://www.googleapis.com/auth/drive", 
                "https://www.googleapis.com/auth/drive.file"],
    )

    http = httplib2.Http()
    http = credentials.authorize(http)

    form_service = build("forms", "v1", http=http)

    new_form_template = Template('{"info": {"title": "${title}"}}')
    new_form_str = new_form_template.render(title=formtitle)
    NEW_FORM = json.loads(new_form_str)

    # Create the form
    try:
        result = form_service.forms().create(body=NEW_FORM).execute()
        formid = result["formId"]
        print(f'Form created: {result}')

        with open(filepath) as file:
            itemsjson = json.loads(file.read())
            # Adds form items
            items = (
                form_service.forms()
                .batchUpdate(formId=formid, body=itemsjson)
                .execute()
            )

        permission2 = {
            'type': 'anyone',
            'role': 'writer',
        }

        drive_service = build('drive', 'v3', credentials=credentials)

        drive_service.permissions().create(fileId=formid, body=permission2).execute()

        return formid
    except Exception as e:
        print(f'Error creating form: {e}')
}

1. Nós criamos as credenciais usando os dados da conta de serviço dentro de um arquivo JSON de credenciais para as APIs de formulários e drive.

2. Nós usamos essas credenciais para construir um form_service.

3. O form_service é usado para criar o Formulário Google apenas com o cabeçalho.

4. O form_service lê o arquivo formpatient.json para criar os itens do formulário (campos ou perguntas). Veja o conteúdo deste arquivo:

{
    "requests": [
        {
            "createItem": {
                "item": {
                    "title": "Given Name",
                    "questionItem": {
                        "question": {
                            "required": true,
                            "textQuestion": {}
                        }
                    }
                },
                "location": {"index": 0}
            }
        },
        {
            "createItem": {
                "item": {
                    "title": "Family Name",
                    "questionItem": {
                        "question": {
                            "required": true,
                            "textQuestion": {}
                        }
                    }
                },
                "location": {"index": 1}
            }
        },
        {
            "createItem": {
                "item": {
                    "title": "Gender",
                    "questionItem": {
                        "question": {
                            "required": true,
                            "choiceQuestion": {
                                "type": "RADIO",
                                "options": [
                                    {
                                        "value": "male"
                                    },
                                    {
                                        "value": "female"
                                    }
                                ]
                            }
                        }
                    }
                },
                "location": {"index": 2}
            }
        },
        {
            "createItem": {
                "item": {
                    "title": "Birth Date",
                    "questionItem": {
                        "question": {
                            "required": true,
                            "dateQuestion": {
                                "includeYear": true
                            }
                        }
                    }
                },
                "location": {"index": 3}
            }
        },
        {
            "createItem": {
                "item": {
                    "title": "Phone",
                    "questionItem": {
                        "question": {
                            "required": true,
                            "textQuestion": {}
                        }
                    }
                },
                "location": {"index": 4}
            }
        }
    ]   
}

5. Agora temos um novo formulário.

Colete respostas de dados do usuário de um Formulário Google:

ClassMethod GetResponsesFromFormId(formid As %String) [ Language = python ]
{
    import httplib2
    from oauth2client.service_account import ServiceAccountCredentials
    from googleapiclient.discovery import build

    credentials = ServiceAccountCredentials.from_json_keyfile_name(
        "/opt/irisapp/credentials.json",
        scopes="https://www.googleapis.com/auth/forms.responses.readonly",
    )

    # Create an httplib2.Http object to handle our HTTP requests and authorize
    # it with the Credentials.
    http = httplib2.Http()
    http = credentials.authorize(http)

    form_service = build("forms", "v1", http=http)

    # Prints the responses of your specified form:
    result = form_service.forms().responses().list(formId=formid).execute()
    return result
}

1. Um objeto de credencial é criado usando a conta de serviço definida em credentials.json com autorização para ler os Formulários Google.

2. Um form_service é criado a partir das credenciais.

3. O form_service é usado para obter todas as respostas de um formId.

1 nouveau commentaire
Discussion (1)1
Connectez-vous ou inscrivez-vous pour continuer
Question
· 3 hr il y a

Cannot open file '/ensemble/TEST/iris.cpf_.... when trying to create a Database/Namespace

I have created a New Database/Namespace within our TEST environment on both the Primary and Backup of the mirror. When I go to create the database/namespace on the DR node I am getting "Cannot open file '/ensemble/TEST/iris.cpf_...." while the cpf file that it references does not exist. Anyone have any clue to why this might be happening?

2 nouveaux commentaires
Discussion (4)2
Connectez-vous ou inscrivez-vous pour continuer