--- title: WCMAPI source: https://tdn.totvs.com/display/fluig/WCMAPI path: \Plataforma Documentação técnica\Recurso de Páginas e Widgets (WCM)\WCMAPI.md --- - 1 [Visão Geral](#WCMAPI-VisãoGeral) - 1.1 [Como Começar](#WCMAPI-ComoComeçar) - 1.2 [Contexto de Dados (Tenant e Página)](#WCMAPI-ContextodeDados(TenantePágina)) - 1.3 [Contexto da Página](#WCMAPI-ContextodaPágina) - 1.4 [Usuário Atual](#WCMAPI-UsuárioAtual) - 1.5 [Contexto do Usuário](#WCMAPI-ContextodoUsuário) - 1.6 [Sessão e Autenticação](#WCMAPI-SessãoeAutenticação) - 1.7 [Ambiente](#WCMAPI-Ambiente) - 1.8 [Interface (UI)](#WCMAPI-Interface(UI)) - 1.9 [Carregamento de Recursos (CSS e JS)](#WCMAPI-CarregamentodeRecursos(CSSeJS)) - 1.10 [Renderização de Templates FTL](#WCMAPI-RenderizaçãodeTemplatesFTL) - 1.11 [Ciclo de Vida de Widgets](#WCMAPI-CiclodeVidadeWidgets) - 1.12 [Sistema de Eventos](#WCMAPI-SistemadeEventos) - 1.13 [Requisições AJAX](#WCMAPI-RequisiçõesAJAX) - 1.14 [OAuth](#WCMAPI-OAuth) - 1.15 [Atributos de Sessão no Servidor](#WCMAPI-AtributosdeSessãonoServidor) - 1.16 [Utilitários JavaScript](#WCMAPI-UtilitáriosJavaScript) - 1.17 [Utilitários de URL](#WCMAPI-UtilitáriosdeURL) - 1.18 [Configurações Globais jQuery](#WCMAPI-ConfiguraçõesGlobaisjQuery) - 1.19 [Namespace WCM](#WCMAPI-NamespaceWCM) - 1.20 [Boas Práticas](#WCMAPI-BoasPráticas) - 1.21 [Erros Comuns](#WCMAPI-ErrosComuns) - 1.22 [Dicas de Performance](#WCMAPI-DicasdePerformance) # Visão Geral --- O `WCMAPI` é a **API JavaScript central da plataforma Fluig WCM**. Ele expõe um objeto singleton global disponível em todos os widgets, temas e formulários da plataforma. Por meio do `WCMAPI` você consegue: - Saber quem é o usuário logado e qual é o tenant (empresa) ativo - Ler o contexto da página atual (código, tipo, layout) - Carregar dinamicamente arquivos CSS e JavaScript - Renderizar templates FreeMarker (`.ftl`) de forma síncrona ou assíncrona - Instanciar widgets via `loadWidgets()` - Publicar e assinar eventos entre widgets (pub/sub) - Realizar chamadas AJAX com autenticação JWT automática - Validar tokens OAuth de integrações externas - O objeto é acessível em **qualquer script carregado após este arquivo**: ``` // Sempre use o singleton - nunca instancie o WCMAPI diretamente const usuarioLogado = WCMAPI.getUserLogin(); const tenant        = WCMAPI.getTenantCode(); ``` ## Como Começar --- O `WCMAPI` já estará disponível como variável global no momento em que seu widget ou tema for executado. **Não é necessário importar, instanciar ou configurar nada.** ### Dentro de um widget Fluig ``` // Verificar se o usuário está logado antes de fazer qualquer operação if (WCMAPI.getUserIsLogged()) {     const login = WCMAPI.getUserLogin();     const nome  = `${WCMAPI.getUserFirstName()} ${WCMAPI.getUserLastName()}`;     console.log(`Bem-vindo, ${nome}!`); } ``` ### Renderizando um template FTL no widget ``` // Renderizar o template view.ftl do app "meuWidget" e injetar no elemento #conteudo WCMAPI.convertFtlAsync('meuWidget', 'view.ftl', { filtro: 'ativo' }, (html) => {     $('#conteudo').html(html);     WCMAPI.loadWidgets(); }); ``` ### Verificando feature flags ``` if (WCMAPI.isFeatureEnabled('NOVO_PAINEL')) {     carregarNovoPainel(); } else {     carregarPainelLegado(); } ``` ## Contexto de Dados (Tenant e Página) --- Estes valores são fornecidos automaticamente pela plataforma antes de qualquer widget ser inicializado. **Regra fundamental:** nunca acesse ou modifique propriedades do `WCMAPI` diretamente (ex.: `WCMAPI.tenantCode`). Utilize **sempre** os métodos getter/setter correspondentes. O acesso direto às propriedades é considerado legado e pode ser removido em versões futuras. ### getTenantCode() / setTenantCode(value) **Descrição:** Retorna ou define o código único que identifica o tenant (empresa) ativo. Preenchido automaticamente pela plataforma; raramente é necessário usar o setter em widgets. **Retorno de `getTenantCode()`:** `string` — ex.: `'minhaempresa'` **Parâmetros de `setTenantCode()`:** - `value` (`string`): novo código do tenant ``` const tenant = WCMAPI.getTenantCode(); const url = `/api/public/2.0/${tenant}/users`; ``` ### getTenantId() / getOrganizationId() / setOrganizationId(value) **Descrição:** Retorna ou define o identificador numérico do tenant. `getTenantId()` é um alias para `getOrganizationId()`. Use `setOrganizationId()` para definir o valor — não existe `setTenantId()`. **Retorno:** `number` — valor padrão `-1` quando não há tenant carregado. **Parâmetros de `setOrganizationId()`:** - `value` (`number`): identificador numérico do tenant ``` const idTenant = WCMAPI.getTenantId(); ``` ### getTenantURI() / setTenantURI(value) **Descrição:** Retorna ou define o segmento de URI do tenant usado nas URLs de páginas da plataforma. **Retorno de `getTenantURI()`:** `string` — ex.: `'/portal/p/minhaempresa'` ``` // Redirecionar para a home do tenant window.location.href = `${WCMAPI.getTenantURI()}/home`; ``` ### getTenantURL() / setTenantURL(value) **Descrição:** Retorna ou define a URL completa do tenant (esquema + host + caminho do tenant). **Retorno de `getTenantURL()`:** `string` — ex.: `'https://minhaempresa.fluig.com/minhaempresa'` ### getTenantPATH() / setTenantPATH(value) **Descrição:** Retorna ou define apenas o segmento de caminho do tenant (sem esquema e host). **Retorno de `getTenantPATH()`:** `string` — ex.: `'/minhaempresa'` ### getServerURL() / setServerURL(value) **Descrição:** Retorna ou define a URL base do servidor (esquema + host), sem nenhum caminho adicional. **Retorno de `getServerURL()`:** `string` — ex.: `'https://minhaempresa.fluig.com'` ### getServerContextURL() / setServerContextURL(value) **Descrição:** Retorna ou define a URL completa do contexto do servidor (esquema + host + context path do portal). **Retorno de `getServerContextURL()`:** `string` ### getContextPath() / setContextPath(value) **Descrição:** Retorna ou define o context path do portal no servidor de aplicação. **Retorno de `getContextPath()`:** `string` — ex.: `'/portal'` ### getHomePage() **Descrição:** Monta e retorna a URL completa da página inicial do tenant. **Retorno:** `string` — equivale a `getTenantURI() + '/' + getHomePageCode()` ``` // Redirecionar o usuário para a home window.location.href = WCMAPI.getHomePage(); ``` ### getPageCode() / setPageCode(code) / getPageId() / setPageId(id) / getPageType() / setPageType(type) / getPageLayout() / setPageLayout(layoutId) **Descrição:** Retornam ou definem informações sobre a página WCM atualmente renderizada. Os setters são utilizados internamente pela plataforma; em widgets, utilize apenas os getters. | | | | | | --- | --- | --- | --- | | Getter | Setter | Retorno | Exemplo | | `getPageCode()` | `setPageCode(code)` | `string|null` | `'home'` | | `getPageId()` | `setPageId(id)` | `number|null` | `42` | | `getPageType()` | `setPageType(type)` | `string|null` | `'public'` | | `getPageLayout()` | `setPageLayout(layoutId)` | `number|null` | `3` | | `getPageTitle()` | `setPageTitle(title)` | `string|null` | `'Início'` | | `getParentPageCode()` | `setParentPageCode(code)` | `string|null` | `'portal'` | | `getFriendlyURL()` | `setFriendlyURL(url)` | `string|null` | `'/inicio'` | ``` // Evitar exibir avisos na página de boas-vindas if (WCMAPI.getPageCode() !== 'welcome') {     mostrarAvisoImportante(); } ``` ### getSpaceAlias() / setSpaceAlias(value) **Descrição:** Retorna ou define o alias (identificador curto) do espaço Fluig atual. **Retorno de `getSpaceAlias()`:** `string` — ex.: `'default'` ``` const alias = WCMAPI.getSpaceAlias(); ``` ### getSpaceId() / setSpaceId(id) **Descrição:** Retorna ou define o identificador numérico do espaço Fluig atual. **Retorno de `getSpaceId()`:** `number|null` ``` const spaceId = WCMAPI.getSpaceId(); ``` ### getHomePageCode() / setHomePageCode(value) **Descrição:** Retorna ou define o código da página configurada como home/landing page do tenant. Usado por `getHomePage()` para montar a URL completa. **Retorno de `getHomePageCode()`:** `string` — padrão `'home'` ``` const homeCode = WCMAPI.getHomePageCode(); // 'home' window.location.href = WCMAPI.getHomePage(); ``` ### getUploadURL() / setUploadURL(value) **Descrição:** Retorna ou define a URL utilizada para operações de upload de arquivos na plataforma. **Retorno de `getUploadURL()`:** `string` ``` const uploadEndpoint = WCMAPI.getUploadURL(); ``` ### getProtectedContextPath() / setProtectedContextPath(value) **Descrição:** Retorna ou define o context path para recursos protegidos (que requerem autenticação). **Retorno de `getProtectedContextPath()`:** `string` ``` const protectedPath = WCMAPI.getProtectedContextPath(); ``` ### getDomainId() / setDomainId(value) / getDomainName() / setDomainName(value) **Descrição:** Retornam ou definem o identificador numérico e o nome legível do domínio atual, preenchidos pela plataforma no carregamento da página. | | | | | --- | --- | --- | | Getter | Setter | Retorno | | `getDomainId()` | `setDomainId(id)` | `number|null` | | `getDomainName()` | `setDomainName(name)` | `string|null` | ``` const domainId   = WCMAPI.getDomainId(); const domainName = WCMAPI.getDomainName(); ``` ### getDefaultDomainURL() / setDefaultDomainURL(value) **Descrição:** Retorna ou define a URL base padrão do domínio atual. **Retorno de `getDefaultDomainURL()`:** `string|null` ``` const domainUrl = WCMAPI.getDefaultDomainURL(); ``` ### getIsSAMLEnabled() / setIsSAMLEnabled(value) **Descrição:** Indica se a autenticação SAML/SSO está habilitada para o tenant. Quando `true`, o login é delegado ao Identity Provider configurado. Use `getIsSAMLEnabled()` no lugar do acesso à propriedade `isSAMLEnabled` diretamente. > Veja também `isIdentityEnabled()`, que é um alias para `getIsSAMLEnabled()`. > **Retorno de `getIsSAMLEnabled()`:** `boolean` ``` if (WCMAPI.getIsSAMLEnabled()) {     // exibir botão "Entrar com SSO" } ``` ### getIdpHomePageURL() / setIdpHomePageURL(value) **Descrição:** Retorna ou define a URL da página inicial do Identity Provider (IdP), usada nos fluxos de logout com SAML ativo. **Retorno de `getIdpHomePageURL()`:** `string` ``` const idpUrl = WCMAPI.getIdpHomePageURL(); ``` ### getFluigPaas() / setFluigPaas(value) **Descrição:** Indica se a plataforma está rodando em modo PaaS (Fluig em nuvem). Quando `true`, certos recursos e caminhos específicos de PaaS são ativados. **Retorno de `getFluigPaas()`:** `boolean` ``` if (WCMAPI.getFluigPaas()) {     usarRecursosDePaas(); } ``` ### getApplicationCode() / setApplicationCode(value) **Descrição:** Retorna ou define o código de aplicação usado para escopo de caminhos de recursos estáticos. Padrão: `'fluig'`. **Retorno de `getApplicationCode()`:** `string` ``` const appCode = WCMAPI.getApplicationCode(); // 'fluig' ``` ### getEnvType() / setEnvType(value) **Descrição:** Retorna ou define o identificador do ambiente de implantação, como `'production'` ou `'staging'`. **Retorno de `getEnvType()`:** `string` ``` if (WCMAPI.getEnvType() !== 'production') {     console.log('[DEV] Modo de diagnóstico ativo'); } ``` ### getTenantLocales() / setTenantLocales(value) **Descrição:** Retorna ou define a lista de códigos de idioma disponíveis para o tenant. Útil para renderizar seletores de idioma em widgets. **Retorno de `getTenantLocales()`:** `string[]` — ex.: `'pt_BR', 'en_US'.` ``` const locales = WCMAPI.getTenantLocales(); locales.forEach((locale) => adicionarOpcaoDeIdioma(locale)); ``` ### isFeatureEnabled(featureFlag) **Parâmetros:** - `featureFlag` (`string`): identificador da feature a verificar **Retorno:** `boolean` ``` if (WCMAPI.isFeatureEnabled('EXPORTAR_RELATORIO_PDF')) {     $('#btn-exportar-pdf').show(); } ``` ### getIsEditMode() / setIsEditMode(value) **Descrição:** Indica se a página está atualmente em modo de edição WCM. Quando `true`, a plataforma exibe controles de edição e a engrenagem dos widgets. **Não acesse `WCMAPI.isEditMode` diretamente.** Use `getIsEditMode()` para leitura e `setIsEditMode()` para escrita. **Retorno de `getIsEditMode()`:** `boolean` **Parâmetros de `setIsEditMode()`:** - `value` (`boolean`): `true` para ativar o modo de edição ``` if (WCMAPI.getIsEditMode()) {     mostrarControlesDeEdicao(); } // Ativar programaticamente (raramente necessário em widgets): WCMAPI.setIsEditMode(true); ``` ## Contexto da Página --- Essas informações são fornecidas automaticamente pela plataforma no carregamento da página e devem ser tratadas como somente leitura. O uso dos setters não tem efeito no comportamento da plataforma. ### getIsPreviewMode() / setIsPreviewMode(value) **Somente leitura** — fornecido automaticamente pela plataforma. **Descrição:** Indica se a página está sendo renderizada em modo de pré-visualização. Neste modo, as alterações ainda não foram publicadas e a URL geralmente contém o parâmetro `?preview=true`. **Retorno de `getIsPreviewMode()`:** `string` — `'true'` ou `'false'` (chega como string do FreeMarker, não como boolean nativo). ``` if (WCMAPI.getIsPreviewMode() === 'true') {     mostrarAvisoPreVisualizacao(); } ``` ### getPageAuthType() / setPageAuthType(value) **Somente leitura** — fornecido automaticamente pela plataforma. **Descrição:** Indica o tipo de autenticação exigido para acesso à página atual. **Retorno de `getPageAuthType()`:** `string` — ex.: `'PUBLIC'`, `'PRIVATE'` ``` if (WCMAPI.getPageAuthType() === 'PUBLIC') {     exibirConteudoPublico(); } ``` ### getIsResponsiveLayout() / setIsResponsiveLayout(value) **Somente leitura** — fornecido automaticamente pela plataforma. **Descrição:** Indica se o layout da página atual é responsivo (adapta-se a diferentes tamanhos de tela). **Retorno de `getIsResponsiveLayout()`:** `boolean` ``` if (WCMAPI.getIsResponsiveLayout()) {     aplicarEstilosResponsivos(); } ``` ### getIsNewBuilder() / setIsNewBuilder(value) **Somente leitura** — fornecido automaticamente pela plataforma. **Descrição:** Indica se a página foi construída com o editor New Builder da plataforma Fluig. Pode ser usado para ativar funcionalidades exclusivas do New Builder. **Retorno de `getIsNewBuilder()`:** `boolean` ``` if (WCMAPI.getIsNewBuilder()) {     habilitarRecursosNewBuilder(); } ``` ### getPageIsInternal() / setPageIsInternal(value) **Somente leitura** — fornecido automaticamente pela plataforma. **Descrição:** Indica se a página está marcada como interna, ou seja, visível apenas para usuários autenticados. Quando `true`, o acesso anônimo deve ser bloqueado. Padrão `false` quando a variável não está presente no modelo do servidor. **Retorno de `getPageIsInternal()`:** `boolean` ``` if (WCMAPI.getPageIsInternal() && !WCMAPI.getUserIsLogged()) {     window.location.href = WCMAPI.getContextPath() + '/login'; } ``` ## Usuário Atual --- ### getUserLogin() / setUserLogin(login) **Descrição:** Retorna ou define o login (identificador único) do usuário autenticado. **Retorno de `getUserLogin()`:** `string|null` — `null` se o usuário não estiver autenticado. ``` const login = WCMAPI.getUserLogin(); if (login) {     buscarPerfilUsuario(login); } ``` ### getUserId() / setUserId(id) **Descrição:** Retorna ou define o identificador numérico do usuário autenticado. **Retorno de `getUserId()`:** `number|null` ``` const idUsuario = WCMAPI.getUserId(); ``` ### getUserCode() / setUserCode(code) **Descrição:** Retorna ou define o código do usuário (equivalente ao login na maioria dos casos). **Retorno de `getUserCode()`:** `string` ### getUserFirstName() / setUserFirstName(value) / getUserLastName() / setUserLastName(value) / getUser() / setUser(value) **Descrição:** Retornam ou definem as partes do nome do usuário autenticado. | | | | --- | --- | | Getter | Setter | | `getUserFirstName()` | `setUserFirstName(value)` | | `getUserLastName()` | `setUserLastName(value)` | | `getUser()` | `setUser(value)` | ``` const nomeCompleto = `${WCMAPI.getUserFirstName()} ${WCMAPI.getUserLastName()}`; $('#saudacao').text(`Olá, ${nomeCompleto}!`); ``` ### getUserEmail() / setUserEmail(email) **Descrição:** Retorna ou define o e-mail do usuário autenticado. **Retorno de `getUserEmail()`:** `string` ### getUserLocationId() / setUserLocationId(id) / getUserLocationCode() / setUserLocationCode(code) / getUserLocationUrl() / setUserLocationUrl(url) **Descrição:** Retornam ou definem informações sobre a localização (unidade/empresa) associada ao usuário. ``` const codigoFilial = WCMAPI.getUserLocationCode(); const idFilial     = WCMAPI.getUserLocationId(); ``` ### getLocale() / setLocale(value) / getLocaleDisplayName() / setLocaleDisplayName(value) **Descrição:** Retornam ou definem informações sobre o idioma configurado para o usuário. | | | | | --- | --- | --- | | Getter | Setter | Exemplo | | `getLocale()` | `setLocale(value)` | `'pt_BR'` | | `getLocaleDisplayName()` | `setLocaleDisplayName(value)` | `'português (Brasil)'` | ``` const locale = WCMAPI.getLocale(); // 'pt_BR' ``` ### getTimezone() / setTimezone(value) **Descrição:** Retorna ou define o identificador de fuso horário IANA configurado para o usuário. **Retorno de `getTimezone()`:** `string|null` — ex.: `'America/Sao_Paulo'` ``` const tz = WCMAPI.getTimezone(); // 'America/Sao_Paulo' ``` ### isAdmin() **Descrição:** Verifica se o usuário atual possui privilégios de administrador da plataforma Fluig. **Retorno:** `boolean` > **Atenção:** Esta operação é **síncrona** e faz uma chamada ao servidor. Evite utilizá-la em loops ou em caminhos críticos de renderização. ``` if (WCMAPI.isAdmin()) {     $('#painel-admin').show(); } ``` ### isIdentityEnabled() **Descrição:** Indica se a autenticação SAML/SSO está habilitada para o tenant. **Retorno:** `boolean` ## Contexto do Usuário --- Essas informações são fornecidas automaticamente pela plataforma no carregamento da página e devem ser tratadas como somente leitura. > Disponíveis apenas quando `WCMAPI.getUserIsLogged()` retorna `true`. > Para os métodos completos de acesso aos dados do usuário (login, email, nome etc.), consulte a seção [Usuário Atual](https://tdn.totvs.com/pages/viewpage.action?pageId=1060213081#WCMAPIAtualiza%C3%A7%C3%A3odadocumenta%C3%A7%C3%A3o-usu%C3%A1rio-atual). ### getUserType() / setUserType(value) **Somente leitura** — fornecido automaticamente pela plataforma. **Descrição:** Retorna o tipo de conta do usuário autenticado, conforme cadastrado na plataforma. **Retorno de `getUserType()`:** `string` — ex.: `'interno'`, `'externo'` ``` const tipo = WCMAPI.getUserType(); if (tipo === 'externo') {     ocultarMenusInternos(); } ``` ### getIsMobileAppMode() **Somente leitura** — fornecido automaticamente pela plataforma. **Descrição:** Indica se a plataforma está sendo executada dentro de um aplicativo móvel Fluig. O valor é determinado em tempo de renderização pelo servidor e não muda após o carregamento da página. **Retorno:** `boolean` — `true` se executando dentro do app móvel ``` if (WCMAPI.getIsMobileAppMode()) {     ocultarFuncionalidadesDesktop();     ativarInterfaceMobile(); } ``` ## Sessão e Autenticação --- ### getUserIsLogged() / setUserIsLogged(value) **Descrição:** Retorna ou define se o usuário está autenticado na sessão atual. O setter aceita `boolean` ou as strings `'true'`/`'false'` para compatibilidade com valores vindos de templates JSP/FreeMarker. **Retorno de `getUserIsLogged()`:** `boolean` ``` if (!WCMAPI.getUserIsLogged()) {     window.location.href = `${WCMAPI.getContextPath()}/login`; } ``` ### getIsStateless() / setIsStateless(value) **Descrição:** Indica ou define se a plataforma está operando em modo stateless (sem sessão HTTP, apenas JWT). Nesse modo, as verificações de sessão e o ping de keep-alive são desativados automaticamente. **Retorno de `getIsStateless()`:** `boolean` ``` if (WCMAPI.getIsStateless()) {     // autenticação baseada apenas em JWT } ``` ### extendSession() **Descrição:** Reinicia os contadores de expiração da sessão. Deve ser chamado em resposta a interações do usuário para evitar logout por inatividade. Internamente, agenda: - Um aviso após **28 minutos** de inatividade - O logout forçado após **29 minutos** de inatividade - Não tem efeito no modo stateless ou quando cookies SAML estão presentes. ``` $(document).on('mousemove keydown click', () => {     WCMAPI.extendSession(); }); ``` ### login(user, password) **Descrição:** Autentica o usuário com login e senha. Em caso de sucesso, recarrega a página; em caso de falha, exibe um alerta nativo do navegador. **Parâmetros:** - `user` (`string`): login do usuário - `password` (`string`): senha em texto plano **Retorno:** `boolean|*` — `true` em caso de sucesso > A senha é transmitida em texto plano para o `WCMSpaceAPI`. Certifique-se de usar HTTPS. ``` var ok = WCMAPI.login('admin', 'minhasenha'); ``` ### logoff() **Descrição:** Encerra a sessão do usuário e redireciona para o endpoint de logout da plataforma. A operação é imediata e irrecuperável — o usuário será redirecionado para a tela de login. ``` $('#btn-sair').on('click', () => WCMAPI.logoff()); ``` ### hasPermissionToChangePermission(callback) **Descrição:** Verifica de forma assíncrona se o usuário logado tem o direito de gerenciar permissões na plataforma (recurso `PermissionsAdmin` com ação `execute`). **Parâmetros:** - `callback` (`Function`): chamado com `(err, result)` onde `result.content` é `boolean` **Retorno:** `jqXHR` — o objeto de deferred do jQuery ``` WCMAPI.hasPermissionToChangePermission((err, result) => {     if (result?.content) {         $('#btn-gerenciar-permissoes').show();     } }); ``` ## Ambiente --- Essas informações são fornecidas automaticamente pela plataforma no carregamento da página e devem ser tratadas como somente leitura. Elas refletem a configuração da instância no momento da renderização. ### getVersion() / setVersion(value) **Somente leitura** — fornecido automaticamente pela plataforma. **Descrição:** Retorna a versão da plataforma Fluig. Útil para lógica condicional baseada em versão ou para exibição em painéis de diagnóstico. **Retorno de `getVersion()`:** `string` — ex.: `'1.7.0'` ``` const versao = WCMAPI.getVersion(); // '1.7.0' ``` ### getFluigVersion() / setFluigVersion(value) / getFluigInstanceVersionName() / setFluigInstanceVersionName(value) / getFluigVersionBuild() / setFluigVersionBuild(value) / getFluigVersionStatus() / setFluigVersionStatus(value) / getFluigVersionStatusInfo() / setFluigVersionStatusInfo(value) **Somente leitura** — disponível apenas quando informações detalhadas de versão estiverem configuradas na plataforma. **Descrição:** Informações detalhadas da versão da instância WCM, mais granulares do que `getVersion()`. Se não estiverem configuradas, os métodos retornam string vazia. | | | | | --- | --- | --- | | Getter | Setter | Exemplo de retorno | | `getFluigVersion()` | `setFluigVersion(value)` | `'2.0.0-260417'` | | `getFluigInstanceVersionName()` | `setFluigInstanceVersionName(value)` | `'Voyager'` | | `getFluigVersionBuild()` | `setFluigVersionBuild(value)` | `'788'` | | `getFluigVersionStatus()` | `setFluigVersionStatus(value)` | `'0'`, `'1'` | | `getFluigVersionStatusInfo()` | `setFluigVersionStatusInfo(value)` | texto descritivo | ``` const ver    = WCMAPI.getFluigVersion();       // '2.0.0-260417' const build  = WCMAPI.getFluigVersionBuild();  // '6727' const status = WCMAPI.getFluigVersionStatus(); // '0' ``` ### getNocodeActive() / setNocodeActive(value) **Somente leitura** — fornecido automaticamente pela plataforma. **Descrição:** Indica se o módulo No-Code está ativo para o tenant atual. Quando `true`, funcionalidades de criação de aplicações sem código estão habilitadas. Padrão `false` quando a variável não estiver presente no modelo do servidor. **Retorno de `getNocodeActive()`:** `boolean` ``` if (WCMAPI.getNocodeActive()) {     habilitarMenuNoCode(); } ``` ### getGoogleAnalyticsEnabled() / setGoogleAnalyticsEnabled(value) / getGoogleAnalyticsAccount() / setGoogleAnalyticsAccount(value) **Somente leitura** — fornecidos automaticamente pela plataforma. **Descrição:** Indicam se o Google Analytics está ativo e qual é o ID da conta configurada para o tenant. Use em conjunto para inicializar o rastreamento. | | | | | --- | --- | --- | | Getter | Setter | Retorno | | `getGoogleAnalyticsEnabled()` | `setGoogleAnalyticsEnabled(value)` | `boolean` | | `getGoogleAnalyticsAccount()` | `setGoogleAnalyticsAccount(value)` | `string`, ex.: `'UA-XXXXX-Y'` | ``` if (WCMAPI.getGoogleAnalyticsEnabled()) {     inicializarGoogleAnalytics(WCMAPI.getGoogleAnalyticsAccount()); } ``` ## Interface (UI) --- Essas informações são fornecidas automaticamente pela plataforma no carregamento da página e devem ser tratadas como somente leitura. Refletem a configuração visual do tema ativo e as funcionalidades de edição de texto do tenant. ### getThemeId() / setThemeId(id) **Somente leitura** — fornecido automaticamente pela plataforma. **Descrição:** Retorna o identificador numérico do tema aplicado à página atual. Chega como string do FreeMarker; converta com `parseInt()` se necessário. **Retorno de `getThemeId()`:** `string` (número como string) — ex.: `'3'` ``` const themeId = parseInt(WCMAPI.getThemeId(), 10); ``` ### getColorMenu() / setColorMenu(value) / getColorBackground() / setColorBackground(value) **Somente leitura** — fornecidos automaticamente pela plataforma. **Descrição:** Retornam as cores definidas pelo tema ativo — a cor do menu de navegação e a cor de fundo da página, respectivamente. Úteis para personalização dinâmica de componentes que precisam combinar com o tema. | | | | | --- | --- | --- | | Getter | Setter | Descrição | | `getColorMenu()` | `setColorMenu(value)` | Cor do menu de navegação, ex.: `'#003366'` | | `getColorBackground()` | `setColorBackground(value)` | Cor de fundo da página, ex.: `'#f5f5f5'` | ``` const corMenu = WCMAPI.getColorMenu(); $('.meu-componente-header').css('background-color', corMenu); ``` ### getImageBackground() / setImageBackground(value) / getImageLogo() / setImageLogo(value) **Somente leitura** — fornecidos automaticamente pela plataforma. **Descrição:** Retornam as URLs das imagens configuradas no tema ativo — imagem de fundo da página e logotipo exibido no cabeçalho. Vazios quando não configurados. | | | | | --- | --- | --- | | Getter | Setter | Descrição | | `getImageBackground()` | `setImageBackground(value)` | URL da imagem de fundo da página | | `getImageLogo()` | `setImageLogo(value)` | URL do logotipo do cabeçalho | ``` const logo = WCMAPI.getImageLogo(); if (logo) {     $('#logo-customizado').attr('src', logo); } ``` ### getIsDisabledRichEditor() / setIsDisabledRichEditor(value) **Somente leitura** — fornecido automaticamente pela plataforma. **Descrição:** Indica se o editor de texto rico (rich editor) foi substituído pelo editor simples (simple editor) para o tenant. Quando `true`, o `loadJS` troca automaticamente caminhos contendo `'richeditor'` por `'simpleeditor'`. **Retorno de `getIsDisabledRichEditor()`:** `boolean` ``` if (WCMAPI.getIsDisabledRichEditor()) {     inicializarEditorSimples(); } else {     inicializarEditorRico(); } ``` ### getEnableRichEditorSanitizer() / setEnableRichEditorSanitizer(value) **Somente leitura** — fornecido automaticamente pela plataforma. **Descrição:** Indica se a sanitização XSS está ativa no editor de texto rico. Quando `true`, o conteúdo gerado pelo usuário passa por sanitização antes de ser salvo, prevenindo a injeção de scripts maliciosos. **Retorno de `getEnableRichEditorSanitizer()`:** `boolean` ``` if (WCMAPI.getEnableRichEditorSanitizer()) {     // sanitização XSS já está ativa no editor rico do tenant     console.log('XSS sanitizer habilitado'); } ``` ## Carregamento de Recursos (CSS e JS) ### loadCSS(path) **Descrição:** Injeta dinamicamente um arquivo CSS no `` da página, evitando duplicatas. **Quando usar:** sempre que um widget ou componente precisar de um arquivo CSS específico. **Parâmetros:** - `path` (`string`): URL ou caminho do arquivo CSS ``` WCMAPI.loadCSS('/wcm/resources/css/meu-widget.css'); ``` ### loadJS(path, callback) **Descrição:** Carrega dinamicamente um arquivo JavaScript com cache habilitado, evitando carregamentos duplicados. **Quando usar:** sempre que um widget precisar de um script externo. Prefira sempre `WCMAPI.loadJS()` em vez de `$.getScript()` dentro da plataforma — o WCMAPI garante controle de duplicatas e cache correto. **Parâmetros:** - `path` (`string`): URL ou caminho do arquivo JavaScript - `callback` (`Function`, opcional): executado após o carregamento ``` WCMAPI.loadJS('/my_custom_path/resources/js/meu-script.js', () => {    // faça algo }); ``` ### jsBasePath() **Descrição:** Retorna o diretório base da última tag `