Como efetuar o deployment de uma extensão do ERP?
Este artigo irá demonstrar como efetuar o deployment de uma extensão do ERP usando a aplicação Inno Setup. Esta aplicação é de instalação livre e trata-se de um software que permite criar setups para instalar programas em ambiente Windows facilmente. Antes de se avançar para a criação de um setup para registo de extensões, é importante compreender como é realizado o registo das extensões e como é possível automatizar este registo: Passo 1 - Download da aplicação Comece por descarregar a aplicação disponível nesta localização. Passo 2 - Criar script para deployment Depois de instalada a aplicação, vamos iniciar o processo de criação de uma script para deployment de uma extensão. Este processo de criação pode ser feito através de um assistente disponibilizado pela própria aplicação. Passo 3 - Configurar secções da script Neste passo vamos começar a definir a script. Existem várias secções que podem ser configuradas, sendo importante consultar a documentação disponível. No exemplo apresentado apenas damos enfoque às secções indispensáveis para efetuar o deployment. Defines Esta secção permite definir algumas constantes que serão, posteriormente, usadas no código da script. Neste exemplo podemos definir cinco constantes: [Setup] Esta secção contém as definições globais que serão usadas pelo instalador. [Languages] Esta secção configura o idioma do próprio setup que, neste caso, será o português: [Files] Esta secção indica os ficheiros a fazer deployment, neste exemplo será apenas a própria extensão. Nota: Após a instalação da extensão, será invocada uma procedure que se encontra na secção seguinte. Este método será explicado mais à frente. [Code] No caso do deployment de uma extensão para o ERP não basta instalar a mesma localmente. É necessário também registá-la no ERP manualmente na área de backstage referente à extensibilidade, tal como explicado no primeiro artigo em referência. No entanto, importa também referir que este registo pode ser feito pelo próprio instalador, automatizando todo este processo tal como explicado nos passos seguintes. Passo 4 - Recolha de dados Para fazer o registo de uma extensão no ERP, é necessário recolher informações nomeadamente, as credenciais de acesso ao ERP e a empresa pretendida. Na secção [Code] iremos colocar uma procedure para configurar o instalador e mostrar determinadas páginas ao utilizador, de forma a recolher estes dados durante o processo de instalação. Esta procedure chama-se InitializeWizard e não é mais do que um evento que permite efetuar alterações no assistente ou nas páginas do assistente na inicialização. Credenciais para acesso ao ERP Nesta página, as credencias de acesso ao ERP e a empresa pretendida serão solicitadas ao utilizador. Linha do produto Para que seja possível efetuar a autenticação no ERP, é também necessário indicar a linha do produto, o que será feito numa nova página. Tipo de extensão Quando uma extensão é registada no ERP, esta pode estar disponível para todas as empresas ou apenas para uma. É nesta página que o utilizador deverá efetuar esta indicação. Passo 5 - Registo da extensão Tal como explicado anteriormente, após o processo de instalação terminar, a procedure RegisterExtraCloseApplicationsResources será invocada para que esta extensão seja, então, registada no ERP. O segundo artigo em referência fala de um processo de automatização no registo de extensões, sendo que o mecanismo aqui será em tudo idêntico. É necessário que na pasta Apl do ERP exista o aplicativo "RegisterExtension.exe". Este aplicativo fará o registo das extensões fora do ERP. A sua distribuição está a cargo das builds da PLT. Quando uma extensão é registada para todas as empresas, esta fica alojada na pasta "PRIMAVERASG100ConfigL[E][P]CommonExtensions". Quando está disponível apenas para uma empresa ficará na pasta "PRIMAVERASG100ConfigL[E][P]Extensions[Company]". A primeira instrução é saber qual a pasta Config do ERP. Esta informação é dada pela chave PERCURSOCONFIG no registry. De seguida é verificada a existência da respetiva pasta para alojamento da extensão, usando a informação indicada pelo utilizador. Para alcançarmos a aplicação que efetua o registo também é necessário obter a localização da pasta Apl, fornecida pela chave PERCURSOAPL do registry. A próxima instrução será a execução do registo da extenção. A aplicação recebe na linha de comandos os parâmetros necessários para efetuar o registo. Estes parâmetros são explicados no artigo em referência. Este é um exemplo de como o deployment de uma ou mais extensões para o ERP pode ser realizado, efetuando o seu registo automático. A script completa pode ser tranferida aqui. Nota: No caso de instalações Servidor/Posto, o deployment apenas necessita de ser feito no servidor.Efetuar o deployment

;Defines
#define MyAppName "My Extensibility Ext"
#define MyAppPath "{pf}MyExtensibilityExt"
#define MyExtention = "C:UsersDaniel.VieiraDocumentsVisual Studio 2017ProjectsC#V10ExtensibilityERPExtensibilityERPbinDebugExtensibilityERP.dll"
#define MyExtentionFileName = "ExtensibilityERP.dll"
#define MyOutputBaseFilename = "ExtensibilityExt_setup"MyAppName Nome atribuído à aplicação que estamos a instalar MyAppPath Esta constante será depois atribuída ao pasta de instalação por omissão MyExtension Localização da extensão a ser alvo de deployment MyExtentionFileName Nome do ficheiro que corresponde à extensão MyOutputBaseFilename Nome do setup a ser gerado [Setup]
AppName={#MyAppName}
AppVersion=1.0
OutputBaseFilename={#MyOutputBaseFilename}
WizardStyle=modern
DisableWelcomePage=no
DefaultDirName={#MyAppPath}
DisableDirPage = No
DisableProgramGroupPage=yes
UninstallDisplayIcon={app}setup.exe
PrivilegesRequired=adminAppName Nome da aplicação a instalar OutputBaseFilename Nome do setup a ser gerado DefaultDirName Pasta de instalação por omissão DisableDirPage Indica se a pasta de instalação será mostrada ou não PrivilegesRequired Indica os privilégios usados na instalação [Languages]
Name: "portuguese"; MessagesFile: "compiler:LanguagesPortuguese.isl"
[Files]
// Extensões a instalar
Source: {#MyExtention}; DestDir: "{app}"; Flags: ignoreversion; AfterInstall: RegisterExtraCloseApplicationsResources('{app}{#MyExtentionFileName}')// Acesso ao ERP.
UserPage := CreateInputQueryPage(wpWelcome,
'Informação de acesso ao ERP', '',
'Indique as suas credenciais de acesso e a empresa, depois clique em seguinte.');
UserPage.Add('Utilizador:', False);
UserPage.Add('Palavra Chave:', True);
UserPage.Add('Empresa:', False);// Linha de produto.
ProductType := CreateInputOptionPage(UserPage.ID,'Linha de produto', '',
'Indique qual a linha de produto, depois clique em seguinte.',True, False);
ProductType.Add('Executive');
ProductType.Add('Professional');
// Valor selecionado por defeito.
ProductType.Values[0] := True;// Tipo de extensão.
ExtensionTypePage := CreateInputOptionPage(UserPage.ID,
'Tipo de Extensão', '','Indique o tipo de extensão, depois clique em seguinte.',True, False);
ExtensionTypePage.Add('Extensão está disponivel para todas as empresas.');
ExtensionTypePage.Add('Extensão aplica-se apenas a uma empresa.');
// Valor selecionado por defeito.
ExtensionTypePage.Values[1] := True;RegQueryStringValue(HKLM, 'SOFTWAREWOW6432NodePRIMAVERA'+ platRegValue + 'DefaultADM', 'PERCURSOCONFIG', erpFolder)
// Qual o tipo de extensão?
if (communExtension = '1') then begin
communExtension := 'True';
if not(DirExists(erpFolder + 'Extensions' + company)) then
CreateDir(erpFolder + 'Extensions' + company);
end else begin
communExtension := 'False';
if not(DirExists(erpFolder + 'CommonExtensions')) then
CreateDir(erpFolder + 'CommonExtensions');
end;
RegQueryStringValue(HKLM, 'SOFTWAREWOW6432NodePRIMAVERA'+ platRegValue + 'DefaultADM', 'PERCURSOAPL', percursoAPL)
if FileExists(percursoAPL + 'RegisterExtension.exe') then begin
// Parâmetros para a linha de comando.
cmdLineParams:= company + ' ' + user + ' ' + password + ' ' + platformType + ' "' + strInstallPath + '" ' + communExtension;
// Registo da extensão no ERP
if Exec(ExpandConstant(percursoAPL + 'RegisterExtension.exe'), cmdLineParams, '', SW_SHOW, ewWaitUntilTerminated, ResultCode) then begin
if ResultCode = 0 then begin
MsgBox('Registo da extensão concluído com sucesso.', mbInformation, MB_OK);
end else begin
MsgBox('Erro ao registar a extensão no ERP, deve efectuar o registto manualmente [' + strInstallPath + '].', mbError, MB_OK);
end
end
end