# Referencia: Datasets Internos e hAPI

## hAPI — API de Workflow (Server-side)

Disponivel em eventos de processo (afterProcessCreate, afterTaskComplete, etc.)

### Metodos Principais

| Metodo | Descricao |
|---|---|
| `hAPI.getCardValue("campo")` | Valor de campo do formulario |
| `hAPI.setCardValue("campo", "valor")` | Definir valor de campo |
| `hAPI.startProcess(processId, activity, users, cardData, complete, managerMode)` | Iniciar sub-processo |
| `hAPI.setAutomaticDecision(activity, users, comment)` | Decisao automatica de atividade |
| `hAPI.setDueDate(processId, activity, userId, date, time)` | Definir prazo |

### hAPI.startProcess — Parametros

```javascript
hAPI.startProcess(
    "CODIGO_PROCESSO",   // String: codigo do processo
    0,                   // int: atividade destino (0 = automatico)
    userList,            // ArrayList<String>: lista de responsaveis
    cardData,            // HashMap<String, String>: dados do formulario
    false,               // boolean: completar automaticamente?
    false                // boolean: modo gestor?
);
```

### Exemplo Completo

```javascript
var userList = new java.util.ArrayList();
userList.add("usuario.login");

var cardData = new java.util.HashMap();
cardData.put("campo_nome", "Valor");
cardData.put("campo_numero", "123");

hAPI.startProcess("MeuProcesso", 0, userList, cardData, false, false);
```

## Variaveis de Contexto WK (getValue)

| Variavel | Descricao | Exemplo |
|---|---|---|
| `WKNumProces` | Numero do processo | "12345" |
| `WKNumState` | Numero da atividade atual | "5" |
| `WKCurrentState` | Estado atual | "5" |
| `WKNextState` | Proximo estado | "9" |
| `WKUser` | Login do usuario atual | "joao.silva" |
| `WKCompany` | Codigo da empresa | "1" |
| `WKCardId` | ID do card (formulario) | "67890" |
| `WKDef` | Codigo do processo | "MeuProcesso" |
| `WKVersDef` | Versao do processo | "24" |
| `WKFormId` | ID do formulario | "517899" |
| `WKManagerMode` | Modo gestor ativo | "true"/"false" |
| `WKIsTransfer` | E transferencia? | "true"/"false" |
| `WKReplacement` | Login do substituto | "maria.santos" |

### Uso

```javascript
var numProcesso = getValue("WKNumProces");
var numState = getValue("WKNumState");
var usuario = getValue("WKUser");
```

## Datasets Internos do Fluig

### processAttachment — Anexos do Processo

```javascript
var dsAnexos = DatasetFactory.getDataset(
    "processAttachment",
    null,
    [DatasetFactory.createConstraint("processInstanceId", numProcesso, numProcesso, ConstraintType.MUST)],
    null
);

// Colunas disponiveis
// attachmentSequence, fileName, fileSize, createDate, colleagueId,
// documentId, documentVersion, attachmentDescription
```

### colleagueGroup — Membros de Grupo

```javascript
var dsGrupo = DatasetFactory.getDataset(
    "colleagueGroup",
    null,
    [DatasetFactory.createConstraint("groupId", "NomeGrupo", "NomeGrupo", ConstraintType.MUST)],
    null
);

// Colunas: colleagueId, colleagueName, groupId
```

### colleague — Dados do Colaborador

```javascript
var dsColaborador = DatasetFactory.getDataset(
    "colleague",
    null,
    [DatasetFactory.createConstraint("colleagueId", login, login, ConstraintType.MUST)],
    null
);

// Colunas: colleagueId, colleagueName, mail, login, active
```

### workflowProcess — Processos

```javascript
var dsProcesso = DatasetFactory.getDataset(
    "workflowProcess",
    null,
    [DatasetFactory.createConstraint("processInstanceId", numProc, numProc, ConstraintType.MUST)],
    null
);
```

## notifier.notify — Envio de E-mail

```javascript
var parametros = new java.util.HashMap();
parametros.put("subject", "Assunto do E-mail");
parametros.put("NAME_PROCESS", "Nome do Processo");
parametros.put("WDK_REQUESTER", loginRemetente);
parametros.put("NUMERO_PROCESSO", numProcesso);
parametros.put("MENSAGEM", "Corpo do e-mail em HTML");

var destinatarios = new java.util.ArrayList();
destinatarios.add("login.destinatario");

notifier.notify(
    loginRemetente,    // String: login do remetente
    "template_email",  // String: template de e-mail (cadastrado no Fluig)
    parametros,        // HashMap: parametros do template
    destinatarios,     // ArrayList: lista de logins dos destinatarios
    "text/html"        // String: content type
);
```

### Enviar para E-mail Externo

```javascript
// Buscar login pelo e-mail
var dsColleague = DatasetFactory.getDataset(
    "colleague",
    ["login"],
    [DatasetFactory.createConstraint("mail", email, email, ConstraintType.MUST)],
    null
);

if (dsColleague.rowsCount > 0) {
    destinatarios.add(dsColleague.getValue(0, "login"));
}
```

## Document WebService — Operacoes GED

### Obter Servico

```javascript
var serviceHelper = ServiceManager.getService("ECMDocumentService");
var servicePort = serviceHelper.getRealServicePort();
```

### Metodos Principais

| Metodo | Descricao |
|---|---|
| `getDocumentById(companyId, userId, password, documentId)` | Buscar documento por ID |
| `createDocument(companyId, userId, password, docDTO, attachments, cardData)` | Criar documento |
| `updateDocument(companyId, userId, password, docDTO, attachments, cardData)` | Atualizar documento |
| `moveDocument(companyId, userId, password, documentIds, folderId)` | Mover documento |
| `getRelatedDocuments(companyId, userId, password, documentId)` | Documentos relacionados |
