Italian far funzionare app in background

udg

Expert
Licensed User
Longtime User
Bella idea. E semplice da realizzare?
Seguendo alla lettera le istruzione del tutorial impieghi tre/quattro minuti per un'app funzionante!
 

udg

Expert
Licensed User
Longtime User
Non è un'app che crea il file, ma una pagina php.
La pagina PHP potrebbe eseguire del codice molto simile a quello del modulo B4J, parte del tutorial. In pratica utilizzare le credenziali opportune per inviare un mesasggio su un certo topic/canale che poi sarà quello su cui sarà in ascolto l'app B4A
 

LucaMs

Expert
Licensed User
Longtime User
La pagina PHP potrebbe eseguire del codice molto simile a quello del modulo B4J, parte del tutorial. In pratica utilizzare le credenziali opportune per inviare un mesasggio su un certo topic/canale che poi sarà quello su cui sarà in ascolto l'app B4A
Yessa, ho appena sguardato (traduzione: dato uno sguardo :D) al sorgente B4J e non ha alcunché di particolare, ergo... se po fa' :)
 

fifiddu70

Well-Known Member
Licensed User
Longtime User
Rispiego meglio sperando di farmi capire bene: ho realizzato un eliminacode per tablet, come funziona, una app installata sul tablet che collegato con una stampantina termica usb ed un pulsante, alla pressione del pulsante la stampantina crea un numero sequenziale che il cliente userà quando sarà il suo turno, questo tablet è collegato anche in wifi, da un'altra app installata su uno smartphone che chiamiamo telecomando wifi si occupa di trasmettere il numero da chiamare al tablet attraverso il wifi con asyncstream, nel frattempo l'app che funge da telecomando invia il numero sia al tablet che ad un server nel mio sito web che contiene una pagina html con una stringa ed un pulsante ok + una pagina php, la pagina html riceve questo numero e in automatico la inserisce sulla stringa e sempre in automatico viene premuto il pulsante ok, questo genera un file di testo con il numero generato all'interno e lo salva sul server questo grazie alla pagina php, a questo punto entra la terza app in questione installata sul dispositivo che userà il cliente che ha preso il numero dalla stampantina, questa app chiamata ricevente attraverso il metodo get e con un timer interroga il server ricavando il numero dentro il file di testo che si trova in quel momento dentro il server nel documento di testo, questo numero verrà visualizzato poi da una label all'interno dell'app ricevente che il cliente ha scaricato dentro il suo smartphone, io ho tutto realizzato e funzionante, ma mi manca solo la possibilità di poter chiudere l'app ricevente del cliente mettendola in ascolto senza essere in primo piano, appena riceve il numero da lui preso dalla stampante questa app dovrebbe generare una notifica tipo facebook dicendo che stanno chiamando il numero suo, ovviamente fare in modo che inserendo il suo numero dentro l'app questà avviserà almeno 4 numeri prima che sta per essere chiamato, tutto quà, spero di essere stato chiaro di cosa mi serve e non sono ancora riuscito a farla, qualcuno mi può aiutare? poso inviare anche l'app ricevente per capire come è strutturata e capire cosa fare, anzi questa è la mia app ricevente alla quale necessità questa funzione:
B4X:
#Region  Project Attributes
    #ApplicationLabel: TurnApp
    #VersionCode: 2
    #VersionName: 2.0
    'SupportedOrientations possible values: unspecified, landscape or portrait.
    #SupportedOrientations: portrait
    #CanInstallToExternalStorage: True
    #LibraryVersion: 2.20
    #LibraryName: OkHttpUtils2
    #BridgeLogger: True
#End Region

#Region  Activity Attributes
    #FullScreen: False
    #IncludeTitle: True
#End Region

Sub Process_Globals
    'These global variables will be declared once when the application starts.
    'These variables can be accessed from all modules.
    Dim hc As     OkHttpClient
    Dim awake As PhoneWakeState
    Dim timer1 As Timer   
    Dim timer2 As Timer

    
End Sub

Sub Globals
    'These global variables will be redeclared each time the activity is created.
    'These variables can only be accessed from this module.
    
    Dim p As Phone
    Dim pnlmessage As Panel
    Dim lblmessage As Label
    Dim vr As VoiceRecognition
    Dim txtmessagerx As EditText
    Dim mp As MediaPlayer
    Dim mp2 As MediaPlayer
    Dim mp3 As MediaPlayer
    Dim mp4 As MediaPlayer
    Dim answ As Int

    Private lblmessage2 As Label
End Sub

Sub Activity_Create(FirstTime As Boolean)
    'Do not forget to load the layout file created with the visual designer. For example:
    If FirstTime Then
    Activity.LoadLayout("TurnApp")
    p.SetScreenOrientation(1)
    vr.Initialize("vr")
    
    mp.Initialize
    mp2.Initialize
    mp3.Initialize
        mp4.Initialize
        
        
        Dim job As HttpJob
        job.Initialize("j", Me)
        'job.Download("http://www.xxxxxx.xx/xxxxxx/xxxx/NumeroA.txt")
        'job.Download("http://www.xxxxxx.xx/xxxx/xxxxxx/NumeroB.txt")
    
    
    
        pnlmessage.Visible=True
        
        pnlmessage.SetLayout(0%x,0%y,100%x,100%y)
        lblmessage.SetLayout(1%x,2%y,98%x,48%y)
        lblmessage2.SetLayout(1%x,49%y,98%x,48%y)
    
     hc.Initialize("hc")

    timer1.Initialize("timer1",4000)
    timer2.Initialize("timer2",4000)
    
    
    timer1.Enabled=True
    timer2.Enabled=True
    Else
    
        Activity.LoadLayout("TurnApp")
    p.SetScreenOrientation(1)
    vr.Initialize("vr")
    mp.Initialize
        mp2.Initialize
        mp3.Initialize
    
        pnlmessage.Visible=True
        
        pnlmessage.SetLayout(0%x,0%y,100%x,100%y)
        lblmessage.SetLayout(1%x,2%y,98%x,48%y)
        lblmessage2.SetLayout(1%x,49%y,98%x,48%y)
                        
     hc.Initialize("hc")
    timer1.Initialize("timer1",4000)
    timer1.Enabled=True
    End If
    

    txtmessagerx.Color=Colors.White

    
    
End Sub

Sub Activity_KeyPress (KeyCode As Int)  As Boolean
    
    Dim answ As Int
    If KeyCode = KeyCodes.KEYCODE_BACK Then
        answ = Msgbox2("Sei sicuro di voler uscire da Boarding Pass? Are you sure to exit Boarding Pass?","AVVISO!!","YES","","NO",Null)
        If answ = DialogResponse.POSITIVE Then
            
            mp.Stop
            mp2.Stop
            mp3.Stop
        

            Return False
        Else
    
    
        End If
    
    End If
    Return True
End Sub
Sub dati_Click
    pnlmessage.Visible=False
    
End Sub

Sub timer1_Tick
  
    Dim job As HttpJob
    job.Initialize("Job", Me)
    job.Download("http://www.xxxxx.xx/xxxx/xxxxx/NumeroA.txt")
    'job.Download("http://www.xxxxx.xxx/xxxx/xxxx/NumeroB.txt")
    
    
End Sub

Sub timer2_Tick
    Log("sono sulla sub timer2")
    Dim job As HttpJob
    job.Initialize("Job", Me)
    'job.Download("http://www.xxxx.xx/xxx/xxx/NumeroA.txt")
    job.Download("http://www.xxxx.xx/xx/xxxxxxx/NumeroB.txt")
    
    
End Sub


Sub JobDone (job As HttpJob)
    Log("JobName = " & job.JobName & ", Success = " & job.Success)
    If job.Success = True Then
        Select job.JobName
            Case "Job" , "job2"
                'print the result to the logs
                txtmessagerx.Text=job.GetString
                Log(job.GetString)
                If txtmessagerx.Text.StartsWith("A") Then
                    lblmessage.Text=txtmessagerx.Text 
                    else if txtmessagerx.Text.StartsWith("B") Then
                    lblmessage2.Text=txtmessagerx.Text
                End If                
        
            Case "Job3"
                'show the downloaded image
                Activity.SetBackgroundImage(job.GetBitmap)
        End Select
    Else
        Log("Error: " & job.ErrorMessage)
        ToastMessageShow("Error: " & job.ErrorMessage, True)
    End If
    job.Release
    
End Sub


Sub txtmessagerx_TextChanged (Old As String, New As String)
    If txtmessagerx.Text = Old Then
        
    Else
        
        
    sound
    Log("vai sulla sub Creafile")
    End If
End Sub

Sub sound
    mp.Initialize
    mp.Load(File.DirAssets,"din2.wav")
    mp.Play
End Sub

Sub Activity_Resume
    awake.KeepAlive(True)
    
    
End Sub

Sub Activity_Pause (UserClosed As Boolean)
    awake.ReleaseKeepAlive
 

End Sub

ovviamente c'è la parte di servizio e la classe di httputils2 che posto qui sotto ma che questi non mi interessano, li metto solo se possono essere utili al mio scopo.
B4X:
#Region Module Attributes
    #StartAtBoot: False
#End Region

'HttpUtils2 version 2.10 (based on OkHttp library)
'Service module
Sub Process_Globals
    Private hc As OkHttpClient
    Private TaskIdToJob As Map
    Public TempFolder As String
    Private taskCounter As Int
End Sub

Sub Service_Create
    TempFolder = File.DirInternalCache
    hc.Initialize("hc")
    TaskIdToJob.Initialize
End Sub

Sub Service_Start (StartingIntent As Intent)
End Sub

Sub Service_Destroy

End Sub

Public Sub SubmitJob(job As HttpJob) As Int
    taskCounter = taskCounter + 1
    TaskIdToJob.Put(taskCounter, job)
    If job.Username <> "" And job.Password <> "" Then
        hc.ExecuteCredentials(job.GetRequest, taskCounter, job.Username, job.Password)
    Else
        hc.Execute(job.GetRequest, taskCounter)
    End If
    Return taskCounter
End Sub

Sub hc_ResponseSuccess (Response As OkHttpResponse, TaskId As Int)
    Response.GetAsynchronously("response", File.OpenOutput(TempFolder, TaskId, False), _
        True, TaskId)
End Sub

Sub Response_StreamFinish (Success As Boolean, TaskId As Int)
    If Success Then
        CompleteJob(TaskId, Success, "")
    Else
        CompleteJob(TaskId, Success, LastException.Message)
    End If
    
End Sub

Sub hc_ResponseError (Response As OkHttpResponse, Reason As String, StatusCode As Int, TaskId As Int)
    If Response <> Null Then
        Log(Response.ErrorResponse)
        Response.Release
    End If
    CompleteJob(TaskId, False, Reason)
End Sub

Sub CompleteJob(TaskId As Int, success As Boolean, errorMessage As String)
    Dim job As HttpJob = TaskIdToJob.Get(TaskId)
    TaskIdToJob.Remove(TaskId)
    job.success = success
    job.errorMessage = errorMessage
    job.Complete(TaskId)
End Sub
infine la parte classe di modulo httpjob :
B4X:
'HttpUtils2 version 2.01
'Class module
Sub Class_Globals
    Public JobName As String
    Public Success As Boolean
    Public Username, Password As String
    Public ErrorMessage As String
    Private target As Object
    Private taskId As String
    Private req As OkHttpRequest
    Public Tag As Object
    Type MultipartFileData (Dir As String, FileName As String, KeyName As String, ContentType As String)
End Sub

'Initializes the Job.
'Name - The job's name. Note that the name doesn't need to be unique.
'TargetModule - The activity or service that will handle the JobDone event.
Public Sub Initialize (Name As String, TargetModule As Object)
    JobName = Name
    target = TargetModule
End Sub
'Sends a POST request with the given data as the post data.
Public Sub PostString(Link As String, Text As String)
    PostBytes(Link, Text.GetBytes("UTF8"))
End Sub

'Sends a POST request with the given string as the post data
Public Sub PostBytes(Link As String, Data() As Byte)
    req.InitializePost2(Link, Data)
    CallSubDelayed2(HttpUtils2Service, "SubmitJob", Me)
End Sub

'Sends a PUT request with the given data as the post data.
Public Sub PutString(Link As String, Text As String)
    PutBytes(Link, Text.GetBytes("UTF8"))
End Sub

'Sends a POST request with the given string as the post data
Public Sub PutBytes(Link As String, Data() As Byte)
    req.InitializePut2(Link, Data)
    CallSubDelayed2(HttpUtils2Service, "SubmitJob", Me)
End Sub

'Sends a multipart POST request.
'NameValues - A map with the keys and values. Pass Null if not needed.
'Files - List of MultipartFileData items. Pass Null if not needed.
public Sub PostMultipart(Link As String, NameValues As Map, Files As List)
    Dim boundary As String = "---------------------------1461124740692"
    Dim stream As OutputStream
    stream.InitializeToBytesArray(0)
    Dim b() As Byte
    Dim eol As String = Chr(13) & Chr(10)
    If NameValues <> Null And NameValues.IsInitialized Then
        For Each key As String In NameValues.Keys
            Dim value As String = NameValues.Get(key)
            Dim s As String = _
$"--${boundary}
Content-Disposition: form-data; name="${key}"

${value}
"$
            b = s.Replace(CRLF, eol).GetBytes("UTF8")
            stream.WriteBytes(b, 0, b.Length)
        Next
    End If
    If Files <> Null And Files.IsInitialized Then
        For Each fd As MultipartFileData In Files
            Dim s As String = _
$"--${boundary}
Content-Disposition: form-data; name="${fd.KeyName}"; filename="${fd.FileName}"
Content-Type: ${fd.ContentType}

"$
            b = s.Replace(CRLF, eol).GetBytes("UTF8")
            stream.WriteBytes(b, 0, b.Length)
            Dim in As InputStream = File.OpenInput(fd.Dir, fd.FileName)
            File.Copy2(in, stream)
            stream.WriteBytes(eol.GetBytes("utf8"), 0, 2)
        Next
    End If
    s = _
$"
--${boundary}--
"$
    b = s.Replace(CRLF, eol).GetBytes("UTF8")
    stream.WriteBytes(b, 0, b.Length)
    PostBytes(Link, stream.ToBytesArray)
    req.SetContentType("multipart/form-data; boundary=" & boundary)
    req.SetContentEncoding("UTF8")
End Sub



'Sends a POST request with the given file as the post data.
'This method doesn't work with assets files.
Public Sub PostFile(Link As String, Dir As String, FileName As String)
    Dim length As Int
    If Dir = File.DirAssets Then
        Log("Cannot send files from the assets folder.")
        Return
    End If
    length = File.Size(Dir, FileName)
    Dim In As InputStream
    In = File.OpenInput(Dir, FileName)
    If length < 1000000 Then '1mb
        'There are advantages for sending the file as bytes array. It allows the Http library to resend the data
        'if it failed in the first time.
        Dim out As OutputStream
        out.InitializeToBytesArray(length)
        File.Copy2(In, out)
        PostBytes(Link, out.ToBytesArray)
    Else
        req.InitializePost(Link, In, length)
        CallSubDelayed2(HttpUtils2Service, "SubmitJob", Me)   
    End If
End Sub
'Submits a HTTP GET request.
'Consider using Download2 if the parameters should be escaped.
Public Sub Download(Link As String)
    req.InitializeGet(Link)
    CallSubDelayed2(HttpUtils2Service, "SubmitJob", Me)
End Sub

'Submits a HTTP GET request.
'Encodes illegal parameter characters.
'<code>Example:
'job.Download2("http://www.example.com", _
'    Array As String("key1", "value1", "key2", "value2"))</code>
Public Sub Download2(Link As String, Parameters() As String)
    Dim sb As StringBuilder
    sb.Initialize
    sb.Append(Link)
    If Parameters.Length > 0 Then sb.Append("?")
    Dim su As StringUtils
    For i = 0 To Parameters.Length - 1 Step 2
        If i > 0 Then sb.Append("&")
        sb.Append(su.EncodeUrl(Parameters(i), "UTF8")).Append("=")
        sb.Append(su.EncodeUrl(Parameters(i + 1), "UTF8"))
    Next
    req.InitializeGet(sb.ToString)
    CallSubDelayed2(HttpUtils2Service, "SubmitJob", Me)       
End Sub

'Called by the service to get the request
Public Sub GetRequest As OkHttpRequest
    Return req
End Sub

'Called by the service when job completes
Public Sub Complete (id As Int)
    taskId = id
    CallSubDelayed2(target, "JobDone", Me)
End Sub

'Should be called to free resources held by this job.
Public Sub Release
    File.Delete(HttpUtils2Service.TempFolder, taskId)
End Sub

'Returns the response as a string encoded with UTF8.
Public Sub GetString As String
    Return GetString2("UTF8")
End Sub

'Returns the response as a string.
Public Sub GetString2(Encoding As String) As String
    Dim tr As TextReader
    tr.Initialize2(File.OpenInput(HttpUtils2Service.TempFolder, taskId), Encoding)
    Dim res As String
    res = tr.ReadAll
    tr.Close
    Return res
End Sub

'Returns the response as a bitmap
Public Sub GetBitmap As Bitmap
    Dim b As Bitmap
    b = LoadBitmap(HttpUtils2Service.TempFolder, taskId)
    Return b
End Sub
'Returns the response as a bitmap loaded with LoadBitmapSample.
Public Sub GetBitmapSample(Width As Int, Height As Int) As Bitmap
    Return LoadBitmapSample(HttpUtils2Service.TempFolder, taskId, Width, Height)
End Sub

Public Sub GetInputStream As InputStream
    Dim In As InputStream
    In = File.OpenInput(HttpUtils2Service.TempFolder, taskId)
    Return In
End Sub

poi se uso un metodo sbagliato nell'app ricevente perchè consuma troppa batteria, ormai lo fatta con questo sistema e poi penso che non tutti giorni verrà utilizzata l'app perchè si deve andare a prendere quel ticket per fare la fila.
 

fifiddu70

Well-Known Member
Licensed User
Longtime User
Al momento sono riuscito a far funzionare in background il funzionamento dell'app, manca solo che mi avvisi alla ricezione del numero prefissato, appena finisco posto cosa ho fatto, nel frattempo se qualcuno ha un'idea diversa o vuole sempre aiutarmi fate finta che non ho ancora risolto questa prima parte, grazie in anticipo.
 

fifiddu70

Well-Known Member
Licensed User
Longtime User
MMMM ho ricevuto questo errore dopo circa 15 minuti che era in background: ERROR occurred
An error has occurred in sub: main_vvvvvvv1 ( java line: 586)
java.io.IOException: Prepare failed.: status= 0x1
Continue?

cosa può essere?
 

udg

Expert
Licensed User
Longtime User
Finché sei in fase di sviluppo e test potresti evitare la compilazione Obfuscated.
Oppure dovresti aprire il file java indicato e vedere cosa trovi alla linea indicata.

Una remota possibilità è legata all'uso di un MediaPlayer, ma è un "tirare ad indovinare" da pare mia e quindi non tenerne conto.
 

fifiddu70

Well-Known Member
Licensed User
Longtime User
Si esatto, erano i mediaplayer che avevo inserito e molti non usati, li ho eliminati e risolto, ora sono riuscito a creare un modulo di servizio e adesso funziona in background, con i log visualizzo i numeri che se cambiano si vedono anche cambiare nell'app, il problema ora è per me ancora difficile da risolvere, all'apertura dell'app ora ho creato una panel dove l'utente è invitato ad inserire il numero che ha preso e poi con il pulsante di conferma l'app va in background, come faccio a passare il valore di questo numero nella edittext e fare in modo che nel modulo di servizio possa fare un confronto tra il numero che sta ricevendo dal server ed il numero della edittext stessa? spero di essere stato chiaro.
 

udg

Expert
Licensed User
Longtime User
Non è sufficiente assegnare il valore di edittext ad una variabile globale?
Se temi possa essere "dimenticato" puoi sempre registrarlo su un file locale
 

fifiddu70

Well-Known Member
Licensed User
Longtime User
questo il modulo di servizio che ho creato e che funziona in background:
B4X:
Region  Service Attributes
    #StartAtBoot: False
    
#End Region

Sub Process_Globals
    'These global variables will be declared once when the application starts.
    'These variables can be accessed from all modules.
    Dim N As Notification
    Dim hc As     OkHttpClient
    Dim testo As String
    Dim timer1 As Timer
    Dim timer2 As Timer
    
    
End Sub

Sub Service_Create
    n.Initialize
    n.Icon = "icon"
    n.Sound = False
    n.Vibrate = False
    n.Light = False
    n.OnGoingEvent=True
  '  n.SetInfo("NUMERO", "txtmessagerx.text",Main)
    
    'Change Main (above) to "" if this code is in the main module.
    n.Notify(1)
    
    hc.Initialize("hc")
    timer1.Initialize("timer1",4000)
    timer2.Initialize("timer2",4000)
    
    
    timer1.Enabled=True
    timer2.Enabled=True
End Sub

Sub Service_Start (StartingIntent As Intent)
    
    n.Notify(1)
    Service.StopAutomaticForeground 'Call this when the background task completes (if there is one)
    
End Sub
Sub timer1_Tick
    Log("sono sulla sub timer1 di Starter")
    Dim job As HttpJob
    job.Initialize("Job", Me)
    job.Download("http://www.xxxxx.xxx/xxxxx/xxxx/NumeroA.txt")
    'job.Download("http://www.xxx.xxx/xxx/xxx/NumeroB.txt")
    
    
End Sub

Sub timer2_Tick
    Log("sono sulla sub timer2 di Starter")
    Dim job As HttpJob
    job.Initialize("Job", Me)
    'job.Download("http://www.xxx.xx/xxxx/xxxx/NumeroA.txt")
    job.Download("http://www.xxx.xx/xxx/xxxxx/NumeroB.txt")
    
    
End Sub
Sub JobDone (job As HttpJob)
    
    Log("JobName = " & job.JobName & ", Success = " & job.Success)
    If job.Success = True Then
        Select job.JobName
            Case "Job" , "job2"
                'print the result to the logs
                
                testo =job.GetString
                Log(job.GetString)
                If testo.StartsWith("A") Then
                   ' qui secondo me dovrebbe fare il confronto per la lettera A
                
                else if testo.StartsWith("B") Then
                 ' qui secondo me dovrebbe fare il confronto per la lettera B
                    
                End If
                
                
                
                
        
            Case "Job3"
                'show the downloaded image
                'Activity.SetBackgroundImage(job.GetBitmap)
        End Select
    Else
        Log("Error: " & job.ErrorMessage)
        ToastMessageShow("Error: " & job.ErrorMessage, True)
    End If
    job.Release
    
End Sub
Sub testo_TextChanged (Old As String, New As String)
    If testo = Old Then
        
    Else
        
        
        ToastMessageShow(testo,True)
        Log("vai sulla sub Creafile")
    End If
End Sub
Sub Service_Destroy

End Sub

pensavo di fare una variabile testo come stringa ma come faccio a fare il confronto con una edittext nella main che ha il numero inserito dal cliente?
 

LucaMs

Expert
Licensed User
Longtime User
pensavo di fare una variabile testo come stringa ma come faccio a fare il confronto con una edittext nella main che ha il numero inserito dal cliente?
A parte che non credo (spero di no) che sia il cliente a dover inserire il numero e quindi si dovrebbe usare una Label, se è una EditText nell'evento TextChanged metti:

Sub EditText1_TextChanged(Old As String, New As String)
VariabileGlobale = New
End Sub

Ovviamente dichiarando la VariabileGlobale nella Process_Globals.
 

udg

Expert
Licensed User
Longtime User
Come ti dicevo, se in Sub Process_Globals metti una variabile stringa (es. mionumero) e nel Main assegni a questa il valore della edittext, hai risolto.
mionumero = edInputNumero.Text
 

udg

Expert
Licensed User
Longtime User
eheh, vero. Però in qualità di vecchio potrei ricordare a voi giovinastri (se fa' pe dì visto che sei giurassico quanto me) un vecchio adagio:
Chi va piano va sano e va lontano
 

fifiddu70

Well-Known Member
Licensed User
Longtime User
udg se creo una variabile stringa nel modulo di servizio e sulla sub process global, questa nella main non viene vista, quindi come mai ? non potreste farmi un esempio o magari illustrarmi perchè mi dice che la variabile non risulta assegnata ? insomma chi spacchiu a fari?
 

LucaMs

Expert
Licensed User
Longtime User
udg se creo una variabile stringa nel modulo di servizio e sulla sub process global, questa nella main non viene vista, quindi come mai ? non potreste farmi un esempio o magari illustrarmi perchè mi dice che la variabile non risulta assegnata ? insomma chi spacchiu a fari?
Dato che la domanda è rivolta ad una specifica persona... non si risponde :D
 

udg

Expert
Licensed User
Longtime User
Dato che la domanda è rivolta ad una specifica persona... non si risponde :D
Non essere cattivo..

Per la variabile, se la metti nelle Process globals del modulo e la devi richiamare nel main, basta farla precedere da "nomemodulo."
Ad esempio: Starter.miavariabile

Starter.mionumero = edInputNumero.Text
Mioservice.mionumero = edInputNumero.Text
 

fifiddu70

Well-Known Member
Licensed User
Longtime User
udg scusami non voglio essere cattivo, la mia era una battuta anche se non lo tradotta in italiano ( chi spacchiu a fari? ) una frase tipica catanese che significa: che cosa devo fare?
comunque adesso devo uscire a fare la mia terapia per le cervicali, appena rientro stasera provo a fare come dici tu, comunque sempre grazie, speriamo di risolverlo entro domani, devo consegnare questo prodotto entro sabato e sono un po preoccupato per la mancata consegna, ciao udg e un ciao a tutti quanti a più tardi.
 

udg

Expert
Licensed User
Longtime User
udg scusami non voglio essere cattivo
Ciao, mi riferivo a Luca/Mario. Il "cattivone" era lui. Ma è tutto uno scherzo tra amici. A noi piace scherzare e prenderci simpaticamente in giro.
Tranquillo che ce la fai a consegnare; ormai ha finito e stai solo testando..
 
Top