jsegd-fluig-types 1.0.26 → 1.0.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,245 +1,190 @@
1
1
  # jsegd-fluig-types
2
2
 
3
- ![Version](https://img.shields.io/badge/version-1.0.23-blue.svg)
3
+ ![Version](https://img.shields.io/badge/version-1.0.28-blue.svg)
4
4
  ![License](https://img.shields.io/badge/license-CC--BY--NC--ND--4.0-green.svg)
5
5
 
6
- Pacote de tipos TypeScript para desenvolvimento com a plataforma Fluig. Este pacote fornece tipagens completas para APIs do Fluig, facilitando o desenvolvimento tanto no frontend quanto no backend, incluindo suporte para webservices e implementações duais de DatasetFactory.
6
+ Definições de tipos TypeScript (`.d.ts`) para desenvolvimento na plataforma **Fluig**, cobrindo APIs frontend, eventos de workflow, datasets, SDK Java, webservices e classes Java básicas usadas no runtime Rhino.
7
+
8
+ ## 🎯 Objetivo
9
+
10
+ Disponibilizar tipagem global para todos os identificadores expostos pelo Fluig em scripts de:
11
+
12
+ - **Frontend** (widgets, formulários, eventos): `FLUIGC`, `WCMAPI`, `Datatable`, `Modal`, `Toast`, `Autocomplete`, `formMode`, etc.
13
+ - **Backend / Workflow** (Rhino + Java): `hAPI`, `log`, `globalVars`, `getValue`, `ServiceManager`, `JSONUtil`, `FormController`, `customHTML`.
14
+ - **Datasets**: `DatasetFactory`, `DatasetBuilder`, `DefaultDataset`, `AddColumn`, `setKey`, `addIndex`, `defineStructure`, `onSync`, `onMobileSync`, `createDataset`, `ConstraintType`, `DatasetFieldType`.
15
+ - **SDK Java do Fluig**: namespaces `com.fluig.sdk.*` (services, VOs, OAuth).
16
+ - **Webservice ECM**: `com.totvs.technology.ecm.workflow.ws.ECMWorkflowEngineServiceService` e DTOs relacionados.
17
+ - **Java**: `java.util.*`, `java.lang.*`, `java.sql.*`, `javax.naming.*`, `javax.sql.*`.
18
+
19
+ Todos os símbolos são declarados em `declare global { ... }`, ficando disponíveis sem `import` em qualquer arquivo `.ts` do projeto consumidor.
7
20
 
8
21
  ## 📦 Instalação
9
22
 
10
23
  ```bash
11
- npm install jsegd-fluig-types
24
+ npm install -D jsegd-fluig-types
12
25
  ```
13
26
 
14
- ## 🚀 Uso
27
+ ou com yarn:
15
28
 
16
- ### Importação Global
29
+ ```bash
30
+ yarn add -D jsegd-fluig-types
31
+ ```
17
32
 
18
- ```typescript
19
- // Importa todos os tipos disponíveis
20
- import "jsegd-fluig-types";
33
+ ou com pnpm:
34
+
35
+ ```bash
36
+ pnpm add -D jsegd-fluig-types
21
37
  ```
22
38
 
23
- ### Uso em Projetos Fluig
39
+ ## 🚀 Uso
40
+
41
+ ### Carregamento global
42
+
43
+ Adicione uma única referência num arquivo de bootstrap (ex.: `src/types/global.d.ts`):
24
44
 
25
- #### Frontend (Widget/Portal)
26
45
  ```typescript
27
- // Os tipos estarão disponíveis globalmente
28
- // Exemplo: usando tipos de formulário
29
- const mode: FormMod = FormMod.ADD;
30
-
31
- // Exemplo: usando DatasetFactory no frontend (retorna DatasetWcmResult)
32
- DatasetFactory.getDataset(
33
- "colleague",
34
- ["colleagueId", "colleagueName"],
35
- constraints,
36
- ["colleagueName"]
37
- ).then(result => {
38
- // result é do tipo DatasetWcmResult
39
- console.log(result.columns); // string[]
40
- console.log(result.values); // unknown[]
41
- });
42
-
43
- // Exemplo: usando componentes de autocomplete
44
- const autocompleteConfig: AutocompleteOptions = {
45
- type: AutocompleteTypes.tag,
46
- // ... outras configurações
47
- };
46
+ import 'jsegd-fluig-types'
48
47
  ```
49
48
 
50
- #### Backend (Dataset/Evento de Workflow)
51
- ```typescript
52
- // Tipos para datasets (retorna DefaultDataset com tipos Java)
53
- function createDataset(fields: string[], constraints: SearchConstraint[]): DefaultDataset {
54
- const dataset = DatasetFactory.getDataset("myDataset", fields, constraints, []);
55
- // dataset é do tipo DefaultDataset com métodos Java tipados
56
- return dataset;
57
- }
49
+ Ou inclua nos `types` do `tsconfig.json`:
58
50
 
59
- // Criando constraints com tipos específicos para backend
60
- const constraint = DatasetFactory.createConstraint(
61
- "status",
62
- "active",
63
- "active",
64
- ConstraintType.MUST
65
- ); // Retorna SearchConstraint para backend
66
-
67
- // Tipos para eventos de workflow
68
- function beforeTaskSave(colleagueId: string, nextSequenceId: number, userTaskVO: UserTaskVO): void {
69
- // Implementação do evento
51
+ ```json
52
+ {
53
+ "compilerOptions": {
54
+ "types": ["jsegd-fluig-types"]
55
+ }
70
56
  }
71
57
  ```
72
58
 
73
- #### Webservices
74
- ```typescript
75
- // Exemplo: usando ECMWorkflowEngineService
76
- const serviceManager = new ServiceManager();
77
- const workflowService = serviceManager.instantiate("ECMWorkflowEngineService");
78
- // ou alternativamente:
79
- const workflowService2 = serviceManager.instantiate("WorkflowEngineService");
80
-
81
- // Acesso ao service port com tipagem completa
82
- const port = serviceManager.getWorkflowEngineServicePort();
83
- const processes = port.listMyRequestProcesses("usuario123", 0, 10);
84
- ```
59
+ ### Subpath imports (opcional)
85
60
 
86
- #### SDK do Fluig
87
- ```typescript
88
- // Acesso às APIs do Fluig com tipagem completa
89
- const fluigAPI = new com.fluig.sdk.api.FluigAPI();
90
- const documentService = fluigAPI.getDocumentService();
91
- const userService = fluigAPI.getUserService();
92
- ```
61
+ O pacote expõe entradas individuais em `package.json#exports` para uso seletivo:
93
62
 
94
- ## 📁 Estrutura do Pacote
95
-
96
- | Arquivo | Descrição |
97
- |---------|-----------|
98
- | **`fluig.sdk.d.ts`** | Tipos para SDK do Fluig - APIs Java disponíveis no servidor |
99
- | **`java.d.ts`** | Tipos para classes Java básicas (List, ArrayList, HashMap, etc.) |
100
- | **`fluig.frontend.d.ts`** | Tipos para desenvolvimento frontend (widgets, portais, DatasetFactory frontend) |
101
- | **`fluig.backend.d.ts`** | Tipos para desenvolvimento backend (datasets, eventos, ClassNameMap, ServiceManager) |
102
- | **`fluig.webservice.d.ts`** | Tipos para webservices (ECMWorkflowEngineService, WorkflowEngineService) |
103
- | **`fluig.dataset.d.ts`** | Tipos compartilhados para datasets (enums, interfaces, classes base) |
104
- | **`index.d.ts`** | Arquivo principal que exporta todos os tipos |
105
-
106
- ## 🎯 Funcionalidades
107
-
108
- ### ✅ Frontend
109
- - Tipos para componentes de formulário
110
- - Enums para modos de formulário (`FormMod`)
111
- - Tipos para autocomplete e widgets
112
- - Interfaces para eventos frontend
113
- - **DatasetFactory** com retorno otimizado para JavaScript (`DatasetWcmResult`)
114
-
115
- ### ✅ Backend
116
- - Tipos para datasets e constrangimentos
117
- - Interfaces para eventos de workflow
118
- - Tipos para respostas de APIs
119
- - Enums para status e tipos de dados
120
- - **ClassNameMap** para tipagem inteligente do método `instantiate()`
121
- - **ServiceManager** com suporte a webservices
122
- - **DatasetFactory** com retorno de tipos Java (`DefaultDataset`)
123
-
124
- ### ✅ Webservices
125
- - **ECMWorkflowEngineService** com tipagem completa baseada em WSDL
126
- - Mais de 40 métodos tipados para workflow engine
127
- - Interface **WorkflowEngineService** para operações de workflow
128
- - Suporte a mapeamento duplo de nomes de classe
129
-
130
- ### ✅ SDK
131
- - Tipagem completa para todas as APIs do Fluig
132
- - Serviços de documentos, usuários, workflow, etc.
133
- - Classes e interfaces para integração Java
134
-
135
- ## 💡 Exemplos Práticos
136
-
137
- ### DatasetFactory - Implementação Dual
138
-
139
- #### No Backend (Tipos Java)
140
- ```typescript
141
- // Retorna DefaultDataset com métodos Java tipados
142
- const dataset = DatasetFactory.getDataset(
143
- "colleague",
144
- ["colleagueId", "colleagueName"],
145
- constraints,
146
- ["colleagueName"]
147
- );
148
-
149
- // Métodos Java disponíveis
150
- const rowCount = dataset.getRowsCount(); // number
151
- const value = dataset.getValue(0, "colleagueId"); // java.lang.Object
152
- const resultSet = dataset.toResultSet(); // java.sql.ResultSet
153
- ```
63
+ | Subpath | Conteúdo |
64
+ | ------------------------------ | ----------------------------------------------------------------------------------------- |
65
+ | `jsegd-fluig-types` | Reexporta todos os módulos abaixo (recomendado). |
66
+ | `jsegd-fluig-types/frontend` | Tipos de widgets/portal: `FLUIGC`, `WCMAPI`, `Datatable`, `Toast`, `formMode`. |
67
+ | `jsegd-fluig-types/backend` | Tipos de Rhino/workflow: `hAPI`, `log`, `getValue`, `globalVars`, `ServiceManager`. |
68
+ | `jsegd-fluig-types/dataset` | Tipos de dataset: `DatasetFactory`, `DefaultDataset`, `ConstraintType`, `AddColumn`, etc. |
69
+ | `jsegd-fluig-types/sdk` | Namespaces `com.fluig.sdk.*` (FluigAPI e services). |
70
+ | `jsegd-fluig-types/webservice` | `ECMWorkflowEngineServiceService` e DTOs de workflow. |
71
+ | `jsegd-fluig-types/api` | Parâmetros das APIs REST do Fluig (`SearchDatasetValuesParams`). |
72
+ | `jsegd-fluig-types/java` | Tipos `java.*` e `javax.*` necessários no Rhino. |
154
73
 
155
- #### No Frontend (Tipos JavaScript)
156
74
  ```typescript
157
- // Retorna DatasetWcmResult otimizado para frontend
158
- const result = DatasetFactory.getDataset(
159
- "colleague",
160
- ["colleagueId", "colleagueName"],
161
- constraints,
162
- ["colleagueName"]
163
- );
164
-
165
- // Estrutura JavaScript simples
166
- console.log(result.columns); // string[]
167
- console.log(result.values); // unknown[]
75
+ import 'jsegd-fluig-types/backend'
76
+ import 'jsegd-fluig-types/dataset'
168
77
  ```
169
78
 
170
- ### ServiceManager e ClassNameMap
79
+ ## 🧩 Conteúdo
80
+
81
+ ### Frontend (widget/portal)
82
+
171
83
  ```typescript
172
- const serviceManager = new ServiceManager();
84
+ const opts: ModalSettings = {
85
+ title: 'Confirmação',
86
+ content: '<p>Deseja continuar?</p>',
87
+ id: 'modal-confirm',
88
+ showHeader: true,
89
+ showFooter: true,
90
+ actions: [],
91
+ headerActions: [],
92
+ headerContent: '',
93
+ size: 'small',
94
+ formModal: false,
95
+ }
96
+
97
+ FLUIGC.modal(opts)
173
98
 
174
- // Tipagem inteligente - ambas as formas funcionam
175
- const service1 = serviceManager.instantiate("ECMWorkflowEngineService");
176
- const service2 = serviceManager.instantiate("WorkflowEngineService");
99
+ if (formMode === FormMod.ADD) {
100
+ // formulário em modo de inclusão
101
+ }
177
102
 
178
- // IntelliSense completo para métodos do webservice
179
- const processes = service1.listMyRequestProcesses("usuario", 0, 10);
103
+ DatasetFactory.getDataset('colleague', ['colleagueId', 'colleagueName'], [], ['colleagueName'], {
104
+ success: function (result) {
105
+ // result: DatasetWcmResult<unknown>
106
+ console.log(result.columns, result.values)
107
+ },
108
+ })
180
109
  ```
181
110
 
182
- ### Criando Constraints Específicas por Contexto
111
+ ### Backend (Rhino / workflow)
112
+
183
113
  ```typescript
184
- // Backend - retorna SearchConstraint
185
- const backendConstraint = DatasetFactory.createConstraint(
186
- "field",
187
- "value1",
188
- "value2",
189
- ConstraintType.MUST
190
- );
191
-
192
- // Frontend - retorna Constraint
193
- const frontendConstraint = DatasetFactory.createConstraint(
194
- "field",
195
- "value1",
196
- "value2",
197
- ConstraintType.MUST
198
- );
114
+ function beforeTaskSave(colleagueId: string, nextSequenceId: number, userTaskVO: unknown): void {
115
+ const numProc = getValue('WKNumProces')
116
+ const card = hAPI.getCardData(parseInt(numProc))
117
+ log.info('Salvando tarefa de ' + colleagueId + ' no processo ' + numProc)
118
+ globalVars.put('ultimoUsuario', new java.lang.String(colleagueId))
119
+ }
199
120
  ```
200
121
 
201
- ### Evento de Workflow
122
+ ### Dataset
123
+
202
124
  ```typescript
203
- function beforeTaskSave(
204
- colleagueId: string,
205
- nextSequenceId: number,
206
- userTaskVO: UserTaskVO
207
- ): void {
208
- // Lógica do evento com tipos seguros
209
- if (userTaskVO.getColleagueId() === colleagueId) {
210
- // Processar tarefa
211
- }
125
+ function defineStructure(): void {
126
+ AddColumn(new java.lang.String('NOME'), DatasetFieldType.STRING)
127
+ AddColumn(new java.lang.String('IDADE'), DatasetFieldType.NUMBER)
128
+ setKey([new java.lang.String('NOME')])
129
+ addIndex([new java.lang.String('IDADE')])
130
+ }
131
+
132
+ function createDataset(fields: string[], constraints: SearchConstraint[], sortFields: string[]): DefaultDataset {
133
+ const ds = DatasetBuilder.newDataset()
134
+ ds.addColumn(new java.lang.String('NOME'))
135
+ ds.addRow([new java.lang.String('Maria')] as any)
136
+ return ds
212
137
  }
213
138
  ```
214
139
 
215
- ## 📋 Requisitos
140
+ ### SDK e webservice
216
141
 
217
- - TypeScript 3.0+
218
- - Ambiente Fluig (para execução)
142
+ ```typescript
143
+ const fluig = new com.fluig.sdk.api.FluigAPI()
144
+ const userService = fluig.getUserService()
219
145
 
220
- ## 📄 Licença
146
+ const wsService = ServiceManager.getService('ECMWorkflowEngineService')
147
+ const port = wsService.getBean().instantiate('com.totvs.technology.ecm.workflow.ws.ECMWorkflowEngineServiceService').getWorkflowEngineServicePort()
148
+
149
+ const cardData = new java.util.HashMap<java.lang.String, java.lang.String>()
150
+ const choosedUsers = new java.util.ArrayList<string>()
151
+ choosedUsers.add('admin')
152
+ port.startProcess('admin', 'secret', 1, 'ProcExemplo', 2, choosedUsers, 'ok', true, cardData, false)
153
+ ```
154
+
155
+ ## 🗂️ Estrutura
156
+
157
+ ```text
158
+ types/
159
+ ├── index.d.ts # reexporta todos os módulos
160
+ ├── fluig/
161
+ │ ├── fluig.api.d.ts # parâmetros das APIs REST do Fluig
162
+ │ ├── fluig.backend.d.ts # workflow, hAPI, log, ServiceManager, FormController
163
+ │ ├── fluig.dataset.d.ts # DatasetFactory, DefaultDataset, constraints
164
+ │ ├── fluig.frontend.d.ts # FLUIGC, WCMAPI, Datatable, Modal, Toast
165
+ │ ├── fluig.sdk.d.ts # com.fluig.sdk.* (FluigAPI, services, VOs)
166
+ │ └── fluig.webservice.d.ts # ECMWorkflowEngineServiceService e DTOs
167
+ └── java/
168
+ └── java.d.ts # java.util, java.lang, java.sql, javax.*
169
+ ```
221
170
 
222
- Este projeto está licenciado sob **CC-BY-NC-ND-4.0**.
171
+ ## 🔗 Integração com `jsegd-fluig-lint`
223
172
 
224
- **Termos de Uso:**
225
- - ✅ Uso permitido para fins **não comerciais**
226
- - ✅ Atribuição obrigatória ao autor
227
- - ❌ Modificações não permitidas
228
- - ❌ Uso comercial não permitido
173
+ O plugin [`jsegd-fluig-lint`](https://www.npmjs.com/package/jsegd-fluig-lint) extrai automaticamente os globais declarados aqui em tempo de carga, evitando duplicação de listas de identificadores. Mantenha as duas dependências sincronizadas:
229
174
 
230
- ## 👨‍💻 Autor
175
+ ```bash
176
+ npm install -D jsegd-fluig-lint jsegd-fluig-types eslint
177
+ ```
231
178
 
232
- **Elemar Deckmann**
233
- [EGD Tecnologia](https://www.egd.tec.br/)
179
+ ## 📋 Requisitos
234
180
 
235
- ## 🤝 Contribuições
181
+ - TypeScript **3.0+** (testado em 5.9 com `strict: true`).
182
+ - Ambiente Fluig em runtime (não há código emitido — somente tipagens).
183
+
184
+ ## 📄 Licença
236
185
 
237
- Este projeto segue a licença CC-BY-NC-ND-4.0, que não permite modificações. Para sugestões ou melhorias, entre em contato através do site da EGD Tecnologia.
186
+ Distribuído sob **CC-BY-NC-ND-4.0**. Consulte os termos antes de uso comercial ou redistribuição modificada.
238
187
 
239
188
  ---
240
189
 
241
- <div align="center">
242
-
243
- **[EGD Tecnologia](https://www.egd.tec.br/)** - Especialistas em Fluig
244
-
245
- </div>
190
+ Desenvolvido com ❤️ pela [**EGD Tecnologia**](https://www.egd.tec.br/)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jsegd-fluig-types",
3
- "version": "1.0.26",
3
+ "version": "1.0.28",
4
4
  "description": "Definições de tipos TypeScript para desenvolvimento na plataforma Fluig - Inclui APIs, SDK, datasets, workflows e webservices",
5
5
  "keywords": [
6
6
  "fluig",
@@ -1,11 +1,11 @@
1
- declare enum FormMod {
2
- 'ADD' = 'ADD',
3
- 'MOD' = 'MOD',
4
- 'VIEW' = 'VIEW',
5
- 'NONE' = 'NONE',
6
- }
7
-
8
1
  declare global {
2
+ enum FormMod {
3
+ ADD = 'ADD',
4
+ MOD = 'MOD',
5
+ VIEW = 'VIEW',
6
+ NONE = 'NONE',
7
+ }
8
+
9
9
  interface ServiceRequestOptions {
10
10
  companyId: string
11
11
  serviceCode: string
@@ -204,10 +204,10 @@ declare global {
204
204
  class customHTML {
205
205
  append(html: string): void
206
206
  }
207
- function displayFields(form: FormController, customHTML: customHTML): void
208
- function enableFields(form: FormController): void
209
- function inputFields(form: FormController): void
210
- function validateForm(form: FormController): void
207
+ export type DisplayFieldsHandler = (form: FormController, customHTML: customHTML) => void;
208
+ export type EnableFieldsHandler = (form: FormController) => void;
209
+ export type InputFieldsHandler = (form: FormController) => void;
210
+ export type ValidateFormHandler = (form: FormController) => void;
211
211
 
212
212
  // #########################################################################
213
213
  // ####################### Definição de Log ################################
@@ -1,12 +1,12 @@
1
- declare enum DatasetFieldType {
2
- NUMBER = "NUMBER",
3
- DATE = "DATE",
4
- BOOLEAN = "BOOLEAN",
5
- STRING = "STRING",
6
- TEXT = "TEXT",
7
- }
8
-
9
1
  declare global {
2
+ enum DatasetFieldType {
3
+ NUMBER = "NUMBER",
4
+ DATE = "DATE",
5
+ BOOLEAN = "BOOLEAN",
6
+ STRING = "STRING",
7
+ TEXT = "TEXT",
8
+ }
9
+
10
10
  enum ConstraintType {
11
11
  MUST = 1,
12
12
  SHOULD = 2,
@@ -46,7 +46,7 @@ declare global {
46
46
  message: string;
47
47
  data?: unknown;
48
48
  errors?: ErrorDetail[];
49
- timestamp: java.lang.System.currentTimeMillis;
49
+ timestamp: number;
50
50
  }
51
51
  interface DatasetResponse {
52
52
  response: DatasetResponseValues;
@@ -1,15 +1,3 @@
1
- // types.d.ts
2
- // =============================
3
- // ENUMS
4
- // =============================
5
-
6
- declare enum FormMod {
7
- 'ADD' = 'ADD',
8
- 'MOD' = 'MOD',
9
- 'VIEW' = 'VIEW',
10
- 'NONE' = 'NONE',
11
- }
12
-
13
1
  declare enum AutocompleteTypes {
14
2
  tag = 'tag',
15
3
  autocomplete = 'autocomplete',
@@ -171,9 +159,44 @@ declare global {
171
159
  message: message
172
160
  toast: (options: Toast) => void
173
161
  loading: (target: unknown, options?: object) => Loading
174
- modal: (option: ModalSettings, callback: (err: unknown, data: object) => void) => Modal
162
+ modal: (option: ModalSettings, callback?: (err: unknown, data: object) => void) => Modal
175
163
  datatable: <T>(target: string, options: DatatableOptions<T>) => Datatable
176
164
  autocomplete<T>(target: string | HTMLElement, options: object, callback?: (error: unknown, data: object) => void): Autocomplete<T>
165
+ ajax<T = any>(options: {
166
+ url: string
167
+ contentType?: string
168
+ dataType?: string
169
+ type?: HttpMethod
170
+ data?: any
171
+ async?: boolean
172
+ }, callback: (err: any, data: T) => void): void
173
+ rightbar(options: {
174
+ appendTo?: string
175
+ content: string
176
+ backdrop?: boolean
177
+ width?: string
178
+ height?: string | number
179
+ position?: string
180
+ }): void
181
+ sidebar(options: {
182
+ title: string
183
+ content: string
184
+ actions?: Array<{
185
+ label: string
186
+ bind?: string
187
+ classType?: string
188
+ autoClose?: boolean
189
+ btnLink?: boolean
190
+ hasIcon?: boolean
191
+ flaticon?: string
192
+ }>
193
+ }): void
194
+ calendar: {
195
+ formatDateTimeZone(date: number | string): string
196
+ }
197
+ utilities: {
198
+ ctrlIsPressed(event: Event): boolean
199
+ }
177
200
  }
178
201
  ECM: {
179
202
  workflowView: {
@@ -193,10 +216,12 @@ declare global {
193
216
  docFileOrigName: any
194
217
  nameFileToBeSigned: any
195
218
  counterSign: any
196
- tabView: {}
197
- availableStates: any
219
+ tabView: {
220
+ selectTab?: (tab: number) => void
221
+ }
222
+ availableStates: any[]
198
223
  forecastedEffortType: number
199
- appointments: any
224
+ appointments: any[]
200
225
  adHocTask: boolean
201
226
  userPermissions: string[]
202
227
  processDefinition: {
@@ -208,51 +233,41 @@ declare global {
208
233
  processInstanceId: number
209
234
  }
210
235
  sequence: number
236
+ selectOrderAttachment: number
237
+ attachments: Attachment[]
238
+ requesterId?: string
239
+ formId?: number
240
+ selectUserAutomatic?: any
241
+ resizeHeight?: () => void
242
+ }
243
+ attachmentTable: Datatable
244
+ newAttachmentsDocs: Attachment[]
245
+ documentPublisher: {
246
+ action?: string
247
+ doc?: {
248
+ documentType: string
249
+ principalFileName?: string
250
+ deleteUploadFiles?: boolean
251
+ companyId?: number
252
+ uploadFolder?: string
253
+ documentId?: number
254
+ version?: number
255
+ documentDescription?: string
256
+ }
257
+ panel?: any
258
+ createTabs?: () => void
211
259
  }
212
- attachmentTable: {
213
- getData(): { [key: string]: string }[]
214
- getRow(index: number): { [key: string]: string }
260
+ documentTypes: {
261
+ WORKFLOWATTACHMENT: string
215
262
  }
216
263
  restUrl: string
264
+ WKFViewAttachment?: WKFViewAttachment
217
265
  }
218
266
  WCMAPI: WCMAPI
219
267
  WKFViewAttachment: WKFViewAttachment
220
268
  formMode: FormMod
221
- ECM_WKFView: {
222
- load: any
223
- validateBeforeSend(arg0: null, arg1: null, isAutomatic: boolean, pass: string, isTransfer: boolean): unknown
224
- enableActionButtons(): unknown
225
- enableSendButton(): unknown
226
- getSelectedColleagues(): unknown
227
- getFormData(): unknown
228
- lastSelectedState: null
229
- conditionsAutomatic: any
230
- hideModals(): unknown
231
- createUserSelectionModal(): unknown
232
- createAdHoc(): unknown
233
- sendRequest: (isAutomatic: boolean, isTransfer: boolean, pass: string) => void
234
- load: any
235
- lastSelectedState: null
236
- conditionsAutomatic: any
237
- selectActivity(): string
238
- callFormFunction(functionName: string, args: any[]): Promise<boolean>
239
- disableActionButtons(): unknown
240
- movimentActivity(
241
- arg0: boolean,
242
- formData: any,
243
- selectedColleague: any,
244
- selectedState: any,
245
- arg4: boolean,
246
- isAutomatic: boolean,
247
- arg6: null,
248
- isReturn: any,
249
- passValue: string | number | string[],
250
- subProcessId: string,
251
- subProcessSequence: string,
252
- arg11: boolean,
253
- isTransfer: boolean
254
- ): unknown
255
- }
269
+ ECM_WKFView: ECM_WKFView
270
+
256
271
  }
257
272
 
258
273
  // Funções globais do Fluig
@@ -271,9 +286,12 @@ declare global {
271
286
  selectedIndex: number[]
272
287
  }
273
288
  class Datatable {
274
- reload<T>(data: DataRequest<T>): void
289
+ reload<T>(data: DataRequest<T> | DataRequest<T>[]): void
275
290
  on(event: string, callback: (data: DataCallback) => void): void
276
- getRow(index: number, isHtml: boolean): unknown
291
+ getRow(index: number, isHtml?: boolean): any
292
+ getData(): any[]
293
+ selectedRows(): number[]
294
+ updateRow(index: number, data: any): void
277
295
  showLoading(): void
278
296
  hideLoading(): void
279
297
  }
@@ -298,9 +316,44 @@ declare global {
298
316
  static message: message
299
317
  static toast: (options: Toast) => void
300
318
  static loading: (option: unknown) => Loading
301
- static modal: (option: ModalSettings, callback: (err: unknown, data: object) => void) => Modal
319
+ static modal: (option: ModalSettings, callback?: (err: unknown, data: object) => void) => Modal
302
320
  static datatable: <T>(target: string, options: DatatableOptions<T>) => Datatable
303
321
  static autocomplete<T>(target: string | HTMLElement, options: object, callback?: (error: unknown, data: object) => void): Autocomplete<T>
322
+ static ajax<T = any>(options: {
323
+ url: string
324
+ contentType?: string
325
+ dataType?: string
326
+ type?: HttpMethod
327
+ data?: any
328
+ async?: boolean
329
+ }, callback: (err: any, data: T) => void): void
330
+ static rightbar(options: {
331
+ appendTo?: string
332
+ content: string
333
+ backdrop?: boolean
334
+ width?: string
335
+ height?: string | number
336
+ position?: string
337
+ }): void
338
+ static sidebar(options: {
339
+ title: string
340
+ content: string
341
+ actions?: Array<{
342
+ label: string
343
+ bind?: string
344
+ classType?: string
345
+ autoClose?: boolean
346
+ btnLink?: boolean
347
+ hasIcon?: boolean
348
+ flaticon?: string
349
+ }>
350
+ }): void
351
+ static calendar: {
352
+ formatDateTimeZone(date: number | string): string
353
+ }
354
+ static utilities: {
355
+ ctrlIsPressed(event: Event): boolean
356
+ }
304
357
  static switcher: {
305
358
  onInitSendScope(element: any, scope: any, arg2: (element: any, event: any, scope: any) => void): unknown
306
359
  enable(arg0: string): unknown
@@ -355,15 +408,55 @@ declare global {
355
408
  // =============================
356
409
 
357
410
  class WKFViewAttachment {
411
+ // Propriedades
412
+ currentAttachmentSize: number
413
+ attachmentsDocs: Record<string, any>
414
+ jFileUpload: any
415
+ defFullPath: string
416
+ defHasApprovers: boolean
417
+ userPermissions: string[] | null
418
+ workflowDetail: any
419
+ parent: any
420
+ rowsSelected: number[]
421
+ filter: string | null
422
+ filterType: 'title' | 'user' | 'activity'
423
+ filterDateStart: string | null
424
+ filterDateEnd: string | null
425
+ keyTimer: number
426
+ datasUpload: any
427
+ progress: number
428
+ officeExtensions: string[]
429
+
430
+ // Métodos principais
358
431
  removeAttach(indexes: number[]): void
359
432
  getAllAttachments(): Attachment[]
433
+ getNewAttachments(): Attachment[]
434
+ getAttachment(documentId: number): Attachment | undefined
360
435
  openAttachmentView(colleagueId: string, docId: number, docVersion: number): void
361
436
  confirmRemoveAttach(index: number[]): void
362
437
  checkAllAttachments(): void
363
438
  desmarkAllCheckbox(): void
364
439
  selectedRowOpenAttachmentView(): void
365
440
  downloadAttach(indexes: number[]): void
441
+ downloadAttachments(attachments: string[]): void
442
+ deleteAttachments(attachments: any): void
366
443
  attachEdit(attach: { [key: string]: string }, index: number): void
444
+
445
+ // Métodos de controle
446
+ updateAttachmentStatus(): void
447
+ loadAttachments(): void
448
+ searchTable(el: any, ev: any): void
449
+ applyFilters(): void
450
+ closeFilters(): void
451
+ clearFilters(el: any): void
452
+ changeSearchField(el: any, ev: any): void
453
+ cleanNewAttachmentsDocs(): void
454
+ updateAttachment(attachment: any): void
455
+
456
+ // Métodos de publicação
457
+ publishFile(index: number): void
458
+ createFindDocumentModal(index: number): void
459
+ createPublishModal(index: number, selectedDocument: any): void
367
460
  }
368
461
 
369
462
  class Attachment {
@@ -375,8 +468,11 @@ declare global {
375
468
  newAttach: boolean
376
469
  description: string
377
470
  documentId: number
471
+ documentType?: string
378
472
  attachedUser: string
379
473
  attachedActivity: string
474
+ attachedDate: string
475
+ attachedDateNotFormated?: number
380
476
  attachments: Array<{
381
477
  attach: boolean
382
478
  principal: boolean
@@ -392,9 +488,9 @@ declare global {
392
488
  deleted: boolean
393
489
  iconClass: string
394
490
  iconUrl: boolean
491
+ iconPath?: string
395
492
  colleagueId: string
396
493
  version: number
397
- attachedDate: string
398
494
  }
399
495
 
400
496
  // =============================
@@ -406,69 +502,87 @@ declare global {
406
502
  // =============================
407
503
 
408
504
  class WCMAPI {
409
- getServerURL(): string
505
+ // Propriedades
410
506
  userCode: string
411
507
  tenantURL: string
412
- convertFtlAsync(): string
413
- generateId(): string
414
508
  userEmail: string
415
509
  userLogin: string
416
510
  user: string
511
+ organizationId: number
512
+ serverURL: string
513
+
514
+ // Métodos de servidor
515
+ getServerURL(): string
417
516
  getTenantCode(): string
418
517
  getProtectedContextPath(): string
419
- Create(arg0: {
518
+ getUploadURL(): string
519
+
520
+ // Métodos utilitários
521
+ convertFtlAsync(): string
522
+ generateId(): string
523
+ getUserCode(): string
524
+ isIe(): boolean
525
+ isIe9(): boolean
526
+
527
+ // Event listener
528
+ addListener(obj: any, eventName: string, callback: (eventName: string, data: any) => void): void
529
+
530
+ // Requisições AJAX
531
+ Create(options: {
420
532
  url: string
421
- async: boolean
422
- data: {
423
- processInstanceId: number
424
- processId: any
425
- version: any
426
- taskUserId: any
427
- completeTask: any
428
- currentMovto: any
429
- managerMode: boolean
430
- selectedDestinyAfterAutomatic: any
431
- conditionAfterAutomatic: any
432
- selectedColleague: any
433
- comments: string
434
- newObservations: any
435
- appointments: any
436
- attachments: any
437
- pass: any
438
- digitalSignature: any
439
- formData: any
440
- deleteUploadFiles: any
441
- isDigitalSigned: any
442
- isLinkReturn: any
443
- versionDoc: any
444
- selectedState: any
445
- internalFields: any
446
- subProcessId: any
447
- subProcessSequence: any
448
- transferTaskAfterSelection: any
449
- currentState: number
533
+ async?: boolean
534
+ data?: {
535
+ processInstanceId?: number
536
+ processId?: any
537
+ version?: any
538
+ taskUserId?: any
539
+ completeTask?: any
540
+ currentMovto?: any
541
+ managerMode?: boolean
542
+ selectedDestinyAfterAutomatic?: any
543
+ conditionAfterAutomatic?: any
544
+ selectedColleague?: any
545
+ comments?: string
546
+ newObservations?: any
547
+ appointments?: any
548
+ attachments?: any
549
+ pass?: any
550
+ digitalSignature?: any
551
+ formData?: any
552
+ deleteUploadFiles?: any
553
+ isDigitalSigned?: any
554
+ isLinkReturn?: any
555
+ versionDoc?: any
556
+ selectedState?: any
557
+ internalFields?: any
558
+ subProcessId?: any
559
+ subProcessSequence?: any
560
+ transferTaskAfterSelection?: any
561
+ currentState?: number
562
+ [key: string]: any
450
563
  }
451
- styleGuide: boolean
452
- success: (data: {
453
- content: any
454
- processLinkMessage: any
455
- processInstanceId: string | number
456
- currentMovto: any
457
- nrDoc: any
458
- versionDoc: any
459
- status: number
460
- selectedDestinyAfterAutomatic: any
461
- conditionAfterAutomatic: any
462
- availableUsers: { isCollectiveTask: any; users: any }
463
- availableStates: any
464
- sequence: any
465
- subProcessCreated: null
466
- nameFileToBeSigned: any
467
- docFileOrigName: any
468
- signPath: any
564
+ styleGuide?: boolean
565
+ success?: (data: {
566
+ content?: any
567
+ processLinkMessage?: any
568
+ processInstanceId?: string | number
569
+ currentMovto?: any
570
+ nrDoc?: any
571
+ versionDoc?: any
572
+ status?: number
573
+ selectedDestinyAfterAutomatic?: any
574
+ conditionAfterAutomatic?: any
575
+ availableUsers?: { isCollectiveTask: any; users: any }
576
+ availableStates?: any
577
+ sequence?: any
578
+ subProcessCreated?: null
579
+ nameFileToBeSigned?: any
580
+ docFileOrigName?: any
581
+ signPath?: any
582
+ [key: string]: any
469
583
  }) => void
470
- error: (err: { responseText: string }) => void
471
- complete: (xhr: any, status: any) => Promise<void>
584
+ error?: (err: { responseText: string }) => void
585
+ complete?: (xhr: any, status: any) => Promise<void> | void
472
586
  }): unknown
473
587
  }
474
588
 
@@ -480,5 +594,130 @@ declare global {
480
594
  static setMessage(message: string): void
481
595
  static setVisible(visible: boolean): void
482
596
  }
597
+
598
+ class ECM_WKFView {
599
+ // Propriedades de estado
600
+ workflowDetail: boolean
601
+ more: boolean
602
+ sendModal: any
603
+ needValidateUser: boolean
604
+ timeoutSearchColleague: any
605
+ colleaguesAutocomplete: Autocomplete<any> | null
606
+ showCancel: boolean
607
+ movimentWindow: boolean
608
+ reloadingCard: boolean
609
+ currentEvent: string
610
+ isCancelable: boolean
611
+ availableUsersInit: any[]
612
+
613
+ // Propriedades de widgets relacionados
614
+ wkfViewObservation: any
615
+ wkfViewProcess: any
616
+ wkfViewHistory: any
617
+ wkfViewAttachment: WKFViewAttachment | null
618
+ wkfViewAppointments: any
619
+
620
+ // Propriedades de processo
621
+ detailsProcessInstanceID: number
622
+ processId: string
623
+ processInstanceId: number
624
+ taskUserId: string
625
+ nrDoc: number
626
+ versionDoc: number
627
+ currentMovto: number
628
+ managerMode: boolean
629
+ afterRedirectMessage: string
630
+
631
+ // Propriedades de configuração
632
+ userSearch: string
633
+ initUser: number
634
+ urlHistory: string
635
+ allowComplements: boolean
636
+ complementsLevel: number
637
+ buttonTakeTask: boolean
638
+ newRequest: boolean
639
+ reloadSvg: boolean
640
+ messagePage: Record<string, any>
641
+
642
+ // Constantes e configurações
643
+ WorkflowActions: {
644
+ SAVE: number
645
+ MOVE: number
646
+ }
647
+ conditionsAutomatic: {
648
+ selectedDestinyAfterAutomatic: number
649
+ conditionAfterAutomatic: number
650
+ }
651
+ lastSelectedState: any
652
+
653
+ // Loading
654
+ load: {
655
+ loading?: Loading
656
+ show(): void
657
+ hide(): void
658
+ }
659
+
660
+ // Métodos de ação principais
661
+ save(): void
662
+ transfer(): void
663
+ send(): void
664
+ sendRequestEvent(): void
665
+ sendAutomaticRequest(): void
666
+ cancelAutomaticRequest(): void
667
+ sendTransferRequest(): void
668
+ sendRequest(isAutomatic: boolean, isTransfer: boolean, pass?: string): void
669
+
670
+ // Métodos de navegação
671
+ back(): void
672
+ backModal(): void
673
+ backBtn(): void
674
+
675
+ // Métodos de cancelamento
676
+ cancel(): void
677
+ cancelRequest(): void
678
+
679
+ // Métodos de controle de interface
680
+ enableSendButton(): void
681
+ disableSendButton(): void
682
+ enableActionButtons(): void
683
+ disableActionButtons(): void
684
+ hideModals(): void
685
+ closeModal(): void
686
+
687
+ // Métodos de modal
688
+ createUserSelectionModal(processInstanceId: any, isFormField: any, pass: any): void
689
+ createAdHoc(): void
690
+
691
+ // Métodos de formulário
692
+ callFormFunction(functionName: string, args: any[]): Promise<boolean>
693
+ getSelectedColleagues(): any
694
+ getFormData(): any
695
+
696
+ // Métodos de atividade
697
+ selectActivity(): string
698
+ movimentActivity(
699
+ completeTask: boolean,
700
+ formData: any,
701
+ selectedColleague: any,
702
+ selectedState: any,
703
+ showMessage: boolean,
704
+ isAutomatic: boolean,
705
+ onComplete: any,
706
+ isReturn: any,
707
+ passValue: string | number | string[],
708
+ subProcessId: string,
709
+ subProcessSequence: string,
710
+ hideModal: boolean,
711
+ transferTaskAfterSelection: boolean
712
+ ): void
713
+
714
+ // Métodos de validação
715
+ validateBeforeSend(activity: any, completeTask: any, isAutomatic: boolean, pass?: string, isTransfer?: boolean): any
716
+
717
+ // Métodos de atualização de status
718
+ updateAdHocStatus(qtt: number): void
719
+ updateComplementsStatus(qtt: number): void
720
+ updateAttachmentStatus(qtt: number): void
721
+ }
483
722
  }
484
723
  export {}
@@ -1,18 +1,10 @@
1
- // fluig.webservice.d.ts
2
- // Tipos para webservices do Fluig
3
-
4
1
  declare global {
5
- // #########################################################################
6
- // #################### ECM Workflow Engine Service Types ##################
7
- // #########################################################################
8
-
9
2
  namespace com {
10
3
  namespace totvs {
11
4
  namespace technology {
12
5
  namespace ecm {
13
6
  namespace workflow {
14
7
  namespace ws {
15
- // Classe principal do serviço ECM Workflow Engine
16
8
  class ECMWorkflowEngineServiceService {
17
9
  constructor();
18
10
 
@@ -250,95 +242,6 @@ declare global {
250
242
  }
251
243
  }
252
244
 
253
- // #########################################################################
254
- // ##################### WebService ServiceManager Types ###################
255
- // #########################################################################
256
-
257
- // A classe ECMWorkflowEngineServiceService já está mapeada no ClassNameMap do fluig.backend.d.ts
258
- // Este arquivo apenas define os tipos específicos para webservices
259
- }
260
-
261
- /*
262
- // ############################################################################
263
- // #################### Exemplos de uso do ECMWorkflowEngineService ##########
264
- // ############################################################################
265
-
266
- // Exemplo de uso básico do ECMWorkflowEngineService
267
- function exemploWorkflowService() {
268
- // Instanciando o serviço com tipagem completa
269
- const service = ServiceManager.getService("ECMWorkflowEngineServiceService");
270
- const workflowServiceClass = service.getBean().instantiate('com.totvs.technology.ecm.workflow.ws.ECMWorkflowEngineServiceService');
271
-
272
- // Obtendo o port/endpoint do webservice
273
- const workflowService = workflowServiceClass.getWorkflowEngineServicePort();
274
-
275
- // Exemplo 1: Iniciar um processo
276
- const cardData = new java.util.HashMap<string, string>();
277
- cardData.put("campo1", "valor1");
278
- cardData.put("campo2", "valor2");
279
-
280
- const choosedUsers = new java.util.ArrayList<string>();
281
- choosedUsers.add("usuario123");
282
-
283
- const result = workflowService.startProcess(
284
- "admin", // username
285
- "senha", // password
286
- 1, // companyId
287
- "ProcessoTeste", // processId
288
- 2, // nextState
289
- choosedUsers, // choosedUsers
290
- "Iniciando processo via webservice", // comments
291
- true, // completeTask
292
- cardData, // cardData
293
- false // managerMode
294
- );
295
-
296
- // Exemplo 2: Obter processos disponíveis
297
- const availableProcesses = workflowService.getAvailableProcess("admin", "senha", 1);
298
- for (const process of availableProcesses.item) {
299
- log.info(`Processo: ${process.processId} - Versão: ${process.version}`);
300
- }
301
-
302
- // Exemplo 3: Obter dados do cartão de uma instância
303
- const instanceCardData = workflowService.getInstanceCardData("admin", "senha", 1, 12345);
304
-
305
- // Exemplo 4: Avançar uma tarefa
306
- const nextCardData = new java.util.HashMap<string, string>();
307
- nextCardData.put("aprovacao", "APROVADO");
308
- nextCardData.put("observacoes", "Processo aprovado com sucesso");
309
-
310
- const taskResult = workflowService.saveAndSendTask(
311
- "admin", // username
312
- "senha", // password
313
- 1, // companyId
314
- 12345, // processInstanceId
315
- 3, // choosedState
316
- 1, // threadSequence
317
- "usuario123", // userId
318
- true, // completeTask
319
- "Aprovando processo", // comments
320
- nextCardData, // cardData
321
- false // managerMode
322
- );
323
-
324
- // Exemplo 5: Obter usuários disponíveis para uma atividade
325
- const availableUsers = workflowService.getAvailableUsers("admin", "senha", 1, 12345, 3, 1);
326
- for (const user of availableUsers.item) {
327
- log.info(`Usuário disponível: ${user.userId} - ${user.userName}`);
328
- }
329
-
330
- // Exemplo 6: Cancelar uma instância
331
- const cancelResult = workflowService.cancelInstance(
332
- "admin", // username
333
- "senha", // password
334
- 1, // companyId
335
- 12345, // processInstanceId
336
- "admin", // userId
337
- "Cancelamento solicitado pelo administrador" // cancelText
338
- );
339
-
340
- return result;
341
245
  }
342
- */
343
246
 
344
- export {};
247
+ export {};
@@ -198,7 +198,7 @@ declare global {
198
198
  namespace naming {
199
199
  class InitialContext {
200
200
  constructor()
201
- lookup(dataSource: java.lang.String): java.lang.Object<java.sql.DataSource>
201
+ lookup(dataSource: java.lang.String): javax.sql.DataSource
202
202
  }
203
203
  }
204
204
  namespace sql {
@@ -1,6 +0,0 @@
1
- declare global {
2
- interface loading {
3
- setMessage(message: string): void;
4
- }
5
- }
6
- export {};