giovedì 10 luglio 2008

Comportamento dei testi in presenza di tabelle condivise in Baan

Supponiamo che una tabella di baan contenga un campo testo, e che si debba condividere la tabella tra la company 100 (che contiene la tabella fisica) e la 101 (che contiene invece la tabella logica). Supponiamo inoltre che i testi NON siano condivisi.

In questo caso, il modo che ha baan di gestire il testo si mostra più intelligente del previsto, anche se non completamente soddisfacente.

Infatti, se il campo testo non è valorizzato (cioè contiene il valore zero), se apro l'editor da sessione per crearne uno, il testo verrà creato sempre nella company 100, indipendentemente se lo apro dalla 100 o dalla 101: questo significa che, in presenza di tabelle condivise, il testo viene sempre e comunque aperto nella company che ospita la tabella fisica.

I problemi nascono però una volta che il campo testo è valorizzato: infatti, come è ben noto, esso contiene un numero che riferisce però alla tabella dei testi.
Se, ad esempio, sulla 101, cerco di fare una copia del record, il controllo referenziale sul record copia viene a fallire perché il testo è stato creato sulla 100, ed il sistema genera un errore di referenza.

C'è un fatto un po' curioso, almeno per BaanERP al livello di solution che aveva il sistema su cui stavo lavorando: sulla 101, il sistema permette, in ogni caso e senza generare errori, di modificare il record originario, purché non si vada a modificare il campo testo stesso e si modifichino al più gli altri campi.

Ma mi riserbo di fare altri controlli prima di confermare pubblicamente questo fatto, perché questo comportamento è abbastanza singolare e non vorrei che fosse dovuto a mancati reorganize delle tabelle.

venerdì 13 giugno 2008

Problema con TCP/IP

L'altro giorno mi sono imbattuto in un malfunzionamento abbastanza grave del mio computer.

Ho un windows XP, home edition, aggiornato a meno di un mese fa come livello di patch (non installo mai le ultimissime patch se non dopo qualche giorno dal il rilascio: è uno dei miei sacri principi).
Dopo aver digitato la password, sono entrato nel desktop e tutto sembrava regolare.....tranne il fatto che non si poteva in nessun modo accedere alla rete!

Si verificavano numerosi comportamenti anomali:

1) L'icona sul tray icon mostrava la presenza del cavo di rete, ma il computer, di fatto, non acquisiva nessun indirizzo IP (e pertanto non poteva accedere ad internet). Togliendo il cavo, alle volte l'icona sul tray icon segnalava il distacco, alle volte no.

2) Cercando di disattivare la scheda di rete (da Panello di controllo --> Sistema --> Gestione Periferiche) la finestra si bloccava, ed era necessario un kill del processo.

3) Cercando di disabilitare la connessione alla rete, stesso blocco. E se poi, dopo il kill, la connessione alla rete risultava effettivamente disabilitata, era impossibile riabilitarla: la finestra rimaneva sempre bloccata.

4) Idem se si cercava di disbilitare il protocollo TCP/IP dalle proprietà della connessione, togliendo il flag in corrispondenza di "Protocollo Internet (TCP/IP)": tutto bloccato!

5) Qualunque comando ipconfig (renew, all, release) aveva come risultato un laconico "Configurazione IP di windows" e nient'altro.

6) Tutte le schede, LAN o wireless, mostravano lo stesso comportamento.

7) La reinstallazione dei driver delle schede non portava a nessun miglioramento.

8) Facendo partire Win XP in modalità provvisoria non cambiava le cose.

Insomma, come se si fosse corrotto qualcosa legato alla gestione delle connessioni, e non alla singola scheda di rete: sembrava qualcosa di trasversale, più legato al protocollo o al winsock.

In realtà, anche se ora la faccio un po' facile, è stato necessario un po' di tempo per trovare la soluzione evitando così di reinstallare windows......

Dal momento che siamo di fronte ad un problema di connessione dove, dato il comportamento anomalo, si è corrotto qualcosa, la cosa migliore sarebbe poter re-installare solo il protocollo o in qualche modo resettare tutto ciò che è legato al winsock.

Ebbene, in Win XP si possono fare entrambe le cose! Dal momento che non sono un esperto di amministrazione, per cui non entrerò troppo in dettaglio, ma almeno i passi eseguiti per risolvere il problema sono interessanti da far conoscere.

Per reinstallare e resettare il cosiddetto TCP/IP stack (i componenti software che definiscono il protocollo internet), esiste un comando, da lanciarsi da prompt:

netsh int ip reset log_file.txt

Con questo la configurazione TCP/IP torna ad essere quella presente in windows subito dopo l'installazione del sistema operativo.


E' possibile anche fare il reset del Winsock Catalog (cioè l'insieme dei cosiddetti Layered Service Provider: quei componenti che, utilizzati nelle applicazioni, possono intercettare e modificare il traffico di rete): per fare questo è sufficiente lanciare il comando

netsh winsock reset

In questo modo il catalogo viene azzerato e la configurazione diventa quella di un windows appena installato.

Eseguendo entrambe queste operazioni, il sistema chiede di fare un reboot, ed il problema si è risolto.....evitandomi una reinstallazione completa del sistema operativo!


Una referenza di cui consiglio la lettura a chi è interessato è:
http://www.mydigitallife.info/2007/06/19/reinstall-and-reset-
tcpip-internet-protocol-in-windows-vista-2003-and-xp/

venerdì 23 maggio 2008

Reportistica in Baan con Excel

Se è noto che esiste anche un modo per far uscire da Baan report in formato excel, è meno noto il fatto che si possono anche formattare i dati utilizzando macro specifiche da scrivere in VBA. L'ho visto implementato da un cliente (l'implementazione non è mia, è di Roberto Lano, che è doveroso citare) e ho deciso di riportarlo in questa sede, perché può essere interessante.

Ed è interessante perché si possono estrarre dati in un certo formato, magari semplice, e poi mostrarli, ad esempio, in una tabella pivot; oppure formattarli in modo più elegante.

Per far questo è sufficiente definire innanzitutto un file excel, da posizionare in una directory ben specifica risiedente sul server (la chiameremo server_directory).
Il file excel contiene in realtà una macro, che legge i dati di un file in formato csv e li formatta come vogliamo (ad esempio li inserisce dentro una tabella pivot, o li mette come si vuole).

Fatto questo, si può creare un device di stampa per excel secondo i soliti canoni:
Tipo dispositivo: Riscrivi File
Programma 4GL: ttstpconv
Argomento, ASCII:excel %s C:\directory\template.xls
Percorso: fileout.csv
Modifica Ammessa: Sì
Lunghezza Pagina: 9999

L'unica novità rispetto al solito è la presenza del path C:\directory\template.xls.

E' necessario poi che la sessione che lancia il report, prima di lanciarlo esegua un server.to.client in modo tale da portare il file template.xsl dalla directory del server alla directory utente locale C:\directory (oppure trovare qualche altro sistema, meno legato alla sessione specifica, magari legato al ttstplopen).

Così facendo, quando in locale viene aperto il file con il comando
excel %s C:\directory\template.xls, in automatico viene attivato il template VBA che elabora i dati del file fileout.csv.

Se il template contiene una subroutine "Sub Auto_open()", in automatico la macro parte all'avvio; e l'utente vede i dati formattarsi in modo automatico.

E' interessante, specialmente in ambito finance: una volta generato un report semplice, che scrive i dati in formato csv, è possibile poi trovarsi gli stessi formattati come si desidera.

martedì 6 maggio 2008

Traduzioni e nuove lingue in Baan

Avevo già, in passato, riallineato i componenti in lingua in Baan, soprattutto per gli ambienti di sviluppo, ma non mi era mai successo di farlo partendo dalla creazione di una nuova lingua.

L'ho fatto in questi giorni per un cliente: abbiamo creato la lingua turca e dovevamo aggiungere i componenti in lingua prendendo di volta in volta decisioni specifiche.

Mi sono trovato a lavorare con sessioni e funzionalità di cui non sospettavo l'esistenza, e che mi hanno fatto capire una serie di cose nuove.

Ne cito un paio.

Nel menu "Tools --> Application Development --> Master Data" ci sono tutti i formati (avete presente il famoso %D001 ? Bene, è specificato qui, nella sessione "Date Formats"), da convertire a runtime in presenza di una lingua nuova.

Sempre nello stesso menu, la sessione "Menu Bar Groups" permette di definire le voci che appaiono nella barra dei menu (sempre da convertire a runtime).

Insomma, giocando con le sessioni dei Master Data, si entra un po' di più nella definizione "tecnica" delle form, cosa che è molto istruttiva.

lunedì 28 aprile 2008

API in BaanERP

A seconda del livello di solution tools, le API in BaanERP possono necessitare di un controllo.
A dire la verità, molto spesso, almeno per la maggior parte delle installazioni, le API risultano essere stabili; ma prima di fare una specifica tecnica, o una stima di tempistiche, conviene sempre fare una semplice prova per verificarne l'effettivo funzionamento.

Una prova minima che ha senso può consistere in testare una modifica di un campo per una sessione di tipo 1/2/3, con un 3GL. In particolare:
1) Eseguire un stpapi.put e un stpapi.find
2) Controllare che il retrieve del record tramite find sia corretto (ret.val. = 0 e valori corretti).
3) Sostituire il valore di un campo, per esempio tramite stpapi.update.

In generale il punto critico è il numero 2: accade spesso che, se c'è un problema, questo sia nel find.

Non ho ancora identificato il livello di solution tools che garantisce la correttezza del funzionamento delle API. Ma se queste mostrano incertezze, esiste sempre una alternativa: non si deve dimenticare che, in BaanERP, esistono comunque le DAL. Anche se queste ultime non hanno il livello di dettaglio in termini di Hooks che si ritrova in LN, sono comunque valide. E non si deve dimenticare che permettono anche la gestione delle transazioni.

venerdì 18 aprile 2008

Invocazione di un metodo JAVA via XSLT

Talvolta, lavorando con il servizio di trasformazione XSLT di Progress, ho necessità di invocare funzioni esterne Java, ad esempio, per estrarre dati da un database da inserire nell'XML in output. Descrivo di seguito il metodo che ho trovato io.

1) Si definisce una nuova classe JAVA. L'ho chiamata classeProva, appartenente al package com.provaluke, e contiene il metodo statico metodoProva().

2) Si lega al servizio la jar che contiene la classe.

2) Nel file XSLT che definisce la trasformazione si definisce un nuovo namespace (nell'esempio successivo l'ho chiamato "luke") dove si dichiara la classe con il metodo che si vuole usare, anteponendo "java:".

Il file XSLT comincerà allora così.

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:docns="C:\Progetto\workingArea\SchemaCanonical.xsd" xmlns:luke="java:com.provaluke.classeProva">

Dopodiché, al momento opportuno, si invoca il metodo anteponendo il namespace nel seguente modo:

<xsl:value-of select="luke:metodoProva('1')"/>


Ovviamente si possono passare anche argomenti, etc. etc.

sabato 12 aprile 2008

W3 Schools

Come tutti quelli che fanno il mio mestiere (che è, a seconda dei casi, quello di progettare, disegnare o costruire soluzioni software) lavoro spesso con XML e tutto ciò che ne deriva: XPath, XSLT, namespace, XSL, WSDL, etc.

Vorrei segnalare un sito introduttivo a tutti questi concetti, che introduce tutto questo con chiarezza, e allo stesso tempo in modo semplice e veloce.

Il sito è http://www.w3schools.com/

E' un sito arricchito da molti corsi e tutorial, creato apposta per chi vuol imparare a fare sviluppo in ambito web, ma utilissimo anche a chi vuol apprendere tutto ciò che non è web, ma che può essere ad esso legato: WEB Service, XML, XSL e chi più ne ha più ne metta!

La filosofia che viene seguita è quella del "Quick and Easy Learning": apprendimento per passi , con esempi molto chiari. Una volta affrontati i tutorial, che servono come introduzione all'argomento, nel sito si trovano anche referenze dettagliate.

Insomma, qualcosa che veramente vale la pena: farci un giro non è davvero tempo perso.