Além de oferecer 100% de ferramentas e serviços personalizados, nossa equipe tem o foco na alavancagem do seu negócio, informando e auxiliando sua expansão.
Esta nota pode ser considerada altamente técnica por
alguns usuários do BF AICS.
Tanto pelo módulo Comercial quanto pelo módulo Assistência
Ténica, existe o atalho para geração de NFs. A NF gerada já
disparava o evento associado à gravação da NOTA. Esta
chamada facilita e integra as regras fiscais.
Nesta atualização do sistema, o evento Após Gravar também
está sendo disparado. Com isso, a integração das regras pela
tela do Fiscal e pela geração automática ficam ainda maiores.
Esta nota pode ser considerada altamente técnica por alguns
usuários.
O BF AICS dispõe de uma rotina simples para geração de OPs,
cuja sintaxe é:
Function GeraOP(Cod_Res,Netcod:String;Quant:Double):Double
Entretanto, com o novo recurso de Engenharia integrada ao Comercial,
a possibilidade de se gerar uma OP sobre as novas tabelas da
Engenharia editada precisou ser criada. Portanto, a nova rotina
para criação mais aberta de OPs passou a ser:
Function GeraOPAdv(Cod_Res,Netcod:String;Quant:Double;TabProc,TabMat:String):Double
Onde, TabProc e TabMat são os nomes dos cursores que contém a
"receita" que deverá ser produzida. TabProc é equivalente à tabela
ESTPROCOP e TabMat à tabela ESTELABOP. Quando esta
rotina for utilizada para gerar OPs das Engenharias específicas dos
pedidos, basta chamá-la já com os dados selecionados relacionados
às tabelas PEDESTELABOP e PEDESTPROCOP, que contém,
para fins de geração de OPs, as mesmas colunas das tabelas anteriores.
Esta alteração visa corrigir um possível problema de
colunas duplicadas em servidores que sejam case
sensitive para texto (SAPdb e PostgreSQL, por exemplo).
Agora, quando uma vista ou tabela for criada, o AICS irá
forçar que o nome da coluna seja gravada em letras maiúsculas,
logo, não importando qual o destino da vista ou tabela
exportada, não ocorrerá mais o problema de colunas iguais
podendo gerar mensagens de erro de chave.
Esta nota é considerada de caráter de desenvolvimento e pode
não ser compreendida por todos os usuários.
Um DFM é uma descrição de objetos de formulário que permite
livre criação de estruturas de tela e mesmo de relatórios. O AICS
processa a descrição da mesma forma que um ambiente Delphi
faria. Inclusive, pode-se copiar e colar estruturas DFMs no próprio
AICS diretamente nos scripts (clique com o botão direito em
um script para ver as opções disponíveis).
Entretanto, o AICS não associava o nome aos objetos criados.
Isso não causa nenhum problema para executar as rotinas, entretanto,
o nome associado facilita muito a análise das telas criadas com o
uso deste recurso.
Nesta atualização do sistema, os objetos receberão o seu nome
diretamente pela propriedade "name". O único comportamento que
se altera com isso é o processamento desta associação pelos
próprios objetos. Isso pode requerer que algum campo text ou
caption seja limpo explicitamente (pode ser no próprio DFM).
Por exemplo, um TEdit passa a receber o nome em seu text,
coloque Text = '' dentro da cláusula object deste objeto. O
mesmo vale para TPanel e outros objetos que possuem captions
ou texts. Se já houver associação do valor, isso não altera em
nada o comportamente atual, somente na ausência da informação
esta mudança ocorre.
Esta nota técnica é avançada.
O processador do AICS possuía a função SetString para associar
textos, memos e blobs aos cursores SQLs. Entretanto, pode
ocorrer a necessidade de especificar ao servidor de que uma dada
coluna é do tipo Blob e não do tipo Memo (ou long).
Para alcançar este objetivo, criamos a função SetBlob com a mesma
sintaxe da SetString, porém, irá indicar ao servidor de que o dado é
um Blob.
Portanto, a sintaxe é:
SetBlob(Tabela,Coluna,Conteudo:String);
Sendo que Conteudo pode ser um string binário de até 2GB.
Esta nota pode ser considerada técnica e avançada.
O AICS expõe a função "random" que retorna um número
aleatório entre 0 e 1, o número é em ponto flutuante. Entretanto,
o algoritmo nativo do compilador não apresenta uma distribuição
aleatória uniforme para aplicações críticas. Seguindo o trabalho
de Makoto Matsumoto and Takuji Nishimura, que desenvolveram
o algorimo Mersenne Twister (mais informações podem ser
obtidas em en.wikipedia.org/wiki/Mersenne_twister), a Byte
Factory substituiu, para a função Random dos usuários, para
seguir esta implementação mais moderna. Logo, a mesma declaração
terá resultados mais uniformes:
Function Random:double;
Nem é necessário inicializar as sementes, pois o AICS o faz logo
na inicialização do sistema.
Esta nota é considerada técnica para desenvolvimento.
O AICS possui a função ObtemTag (veja no help do editor
sua declaração completa) que permite obter o conteúdo dentro
dos comandos de início e fim da Tag (semelhante a códigos
html). Na versão mais recente do AICS, este comando obtém
os dados mesmo que o tag seja com atributos dentro da abertura.
Os atributos na abertura do Tag são muito comuns em arquivos
XML mais complexos. Da mesma forma, agora visando estes
atributos, a BF criou uma nova função específica para a extração
deles com a seguinte sintaxe:
function ObtemParTag(Tag, Param, Texto:string):string
Muito semelhante à ObtemTag, com a chamada adicional
indicando qual o parâmetro que deseja retornar. Esta função
e a ObtemTag expandida foram incorporadas ao AICS e todas
as suas vertentes em Web e CGIs. Além da expansão, foram
otimizadas para ficarem mais rápidas. O impacto do ganho de
velocidade pode ser sentido em ganhos de frações de segundo
na montagem de relatórios editados pelos usuários, por exemplo.
O AICS está cada vez mais sendo utilizado como ferramenta central
na gestão de informações pela internet. A principal vantagem é sua
fantástica integração com uniformidade nas regras de negócios e
desenvolvimento integrado com o sistema desktop.
Visando melhorar os sites que utilizam Ajax + AICS, publicamos
2 funções bem úteis que permitem transpassar qualquer problema de
código de página entre o navegador e o servidor:
function UrlEncode(DecodedStr: String; SinasDeMais: Boolean): String;
function UrlDecode(EncodedStr: String): String;
Além disso, no ServAICS, foi criada a função alert_aics que, antes de
mostrar uma mensagem, a decodifica e deixa sem o possível marcador
de erro NOK. O objetivo é deixá-la mais amigável apenas. Esta função
pode ser utilizada no lugar da alert convencional do JavScript.
Nota técnica avançada.
Com esta função, será possível preparar dados para envio por
meio eletrônico, armazenagem com posterior aplicação e o que
mais a realidade necessitar.
Sintaxe:
function CursorToTags(CursorName:string):String
Onde, CursorName é o nome do cursor que deve ser exportado
O resultado será o conteúdo formatado como tags XML ou HTML.
Esta nota pode ser considerada puramente técnica por alguns
usuários do sistema. Além disso, é importante para usuários
que utilizem scripts em rotinas "web".
Quando ocorre um post sobre o serviço web, dependendo da
ação, os parâmetros já são transferidos para a tabela indicada.
Por exemplo, uma ação "tabsave" transfere os dados para a
tabela indicada no parâmetro "tab".
Entretanto, se a rotina precisar transferir os parâmetros para
outros comandos SQL (indo desde comandos de seleção a de
atualização), isso teria que ser feito linha a linha.
Visando ganhar tempo e velocidade, publicamos uma função
que irá passar os parâmetros do formulário para um cursor
qualquer, sua declaração é:
Procedure SetContentFromWebFields(NomeCursor:String)
Onde NomeCursor é o nome que foi dado numa declaração
de comando do tipo TablePrepareSql. Após este comando,
você ainda poderá manipular livremente os atributos antes
de enviá-lo ao servidor.