Page 1 sur 1

remplacement d'une partie d'un champ

MessagePublié: 12 Fév 2013 à 16:11
par cyberscooty
Dans l'optique de consulter des n° de téléphone utilisable partout dans le monde il faudrait via un simple agent remplacer le début de tous les n° de téléphone par la notation internationale

exemple : 03 55 55 55 55 deviendrait +33 3 55 55 55 55

j'ai déjà créé le début du script qui check si le champ OfficePhoneNumber commence par 01 02 03 04 05 06 ou 07 par contre comment lui dire de ne remplacer que le début 03 en +33
(sachant qu'il est possible d'avoir un n° du genre 03 55 55 03 55 et qu'il ne faut changer que le premier 03)

Code : Tout sélectionner
@If(@Begins(OfficePhoneNumber; "01":"02":"03":"04":"05":"06":"07"); si vrai faire modif; si faux faire rien);


Merci pour vos lumières....

Re: remplacement d'une partie d'un champ

MessagePublié: 12 Fév 2013 à 22:33
par roubech
tu es sur t'avoir un espace comme séparateur ?
si oui, en passsant par une liste, un truc du genre
Code : Tout sélectionner
tLst := @Explode( OfficePhoneNumber; " " );
tFirst := @Subset( tLst; 1 );
tLast := @Subset( tLst; 1-@Bound(tLst) );
tNewFirst := @Replace( tFirst; "01":"02":"03":"04":"05":"06":"07"; "+33 1":"+33 2":"+33 3":"+33 4":"+33 5":"+33 6":"+33 7" );
@Implode( tNewFirst : tLast; " " )


sinon, passer en LotusScript pour mieux gérer les différents cas ...

Re: remplacement d'une partie d'un champ

MessagePublié: 18 Fév 2013 à 09:46
par cyberscooty
uhm....ok je vois ce que tu fais. mais comme tu le dis il se peut qu'il n'y ai pas d'espace comme séparateur (le champ téléphone était libre aux utilisateurs via une application interne) il peut y avoir des points, des tirets, etc...ou même rien du tout.

Je te remercie quand même de ta réponse, et je vais voir du coté LotusScript avec le même principe d'éclater le début du champ (les 2 premiers)

Re: remplacement d'une partie d'un champ

MessagePublié: 18 Fév 2013 à 11:43
par Michael DELIQUE
salut

un début de réponse en LS

Code : Tout sélectionner
Public Function FormatTelephone(wTelephone As String, Byval wSeparator As String) As String
   Dim i As Long
   Dim J As Long
   Dim K As Long
   Dim Separator As String
   Dim Telephone As String
   Dim Char As String
   
   On Error Goto CatchError
   
   REM teste le téléphone passé en paramètre
   If Trim(wTelephone)="" Then
      FormatTelephone = ""
      Exit Function
   End If   
   REM teste le séparateur passé en paramètre
   If Trim(wSeparator)="" Then
      Separator= "-"
   Else
      Separator = wSeparator
   End If   
   REM élimine tous les espaces
   Telephone =  ""   
   For I=1 To Len(wTelephone)
      Char = Trim(Cstr(Mid(wTelephone,I,1)))
      If Char Like "[0-9]" Then
         Telephone = Telephone+Trim(Char)
      End If
      Char = ""
   Next   
   If Trim(Telephone)="" Then
      FormatTelephone = ""
      Exit Function
   End If   
   FormatTelephone = ""   
   J=0
   i=0   
   For I=Len(Telephone) To 1 Step -2      
      K =(Len(Telephone)-J)
      If  K < 4 Then
         Char = Trim(Left(Telephone, K))
         FormatTelephone = Char+FormatTelephone
         I= 0
      Else
         Char = Trim(Cstr(Mid(Telephone,(I-1),2)))
         FormatTelephone = Separator+Char+FormatTelephone
      End If
      J = J+2
      K = 0
      Char = ""
   Next   
   J=0
   i=0
   Telephone = ""   
   Exit Function
CatchError:
   MsgBox "("+Cstr(GetThreadInfo (1))+" Call by "+Cstr(GetThreadInfo(10))+")"+Chr(10)+"Error " + CStr(Err) + " : "+Chr(10) + CStr(Error)+". "+Chr(10)+"Line # "+Cstr(Erl),16," ERROR !"
   FormatTelephone  = ""
   Exit Function
End Function

Re: remplacement d'une partie d'un champ

MessagePublié: 18 Fév 2013 à 16:35
par cyberscooty
Voilà ce que j'ai mis en place et ça fonctionne!
j'ai commenté quasi chaque commande car j'ai vraiment avancé petit à petit pour y arriver (rappel je ne suis pas développeur à la base donc si c'est mal écrit c'est "normal")

L'agent fait ce que je voulais par contre il n'y a pas de mise en forme des numéro. je vais voir en détail le code de Michael DELIQUE qui me semble nettement plus abouti. :D

Je vous met le code ci dessous peut être que ça pourra aider quelqu'un du forum :wink:

Code : Tout sélectionner

Option Public


Sub Initialize
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim docCol As NotesDocumentCollection
   Dim personne As NotesDocument
   Dim nbmodif As Integer

      
   '=============================================================================='
   'INFORMATION SUR L'AGENT
   'Agent pour modifier un n° de téléphone 03 55 55 55 55 en +33 3 55 55 55 55
   'créé le 18 fév 2013 par Cyberscooty
   '=============================================================================='   
   Dim answer As Integer
   answer= Messagebox ("L'agent s’exécute uniquement pour les personnes sélectionnées dans l'annuaire Notes", 52, "Voulez vous continuer ?")
      
   If answer=7 Then
      Msgbox "Programme annulé"
      Goto fin
   End If
   
   'Compteur des modifications
   nbmodif=0
   

   
   
   
   
   '__________séléction du 1er document-----------------------
   
   Set db = session.CurrentDatabase
   Set docCol = db.UnprocessedDocuments
   Set personne = docCol.GetFirstDocument
   
      
   
   '---------- si erreur alors continue (ok je sais que c'est pas terrible)
   On Error Resume Next
   
         
   '---------- début boucle - continue tant qu'il y a des docs dans la collection
   
   While Not personne Is Nothing
      
      
      Print "Traitement en cours de : " & personne.FirstName(0) & " " & personne.LastName(0)
      
      

      
         
      
      'extraction donnée du champ de la fiche personne
      OfficePhoneNumber = personne.GetItemValue("OfficePhoneNumber")(0)
      OfficeFAXPhoneNumber = personne.GetItemValue("OfficeFAXPhoneNumber")(0)
      CellPhoneNumber = personne.GetItemValue("CellPhoneNumber")(0)
            
      'extraction des 2 premiers caractères du numéro
      debutnum=Left$(OfficePhoneNumber,2)
      debutnumfax=Left$(OfficeFAXPhoneNumber,2)
      debutnummobile=Left$(CellPhoneNumber,2)
      
      'calcul reste du n° (sans le 0 du début)
      finnum=Right$(OfficePhoneNumber,Len(OfficePhoneNumber)-1)
      finnumfax=Right$(OfficeFAXPhoneNumber,Len(OfficeFAXPhoneNumber)-1)
      finnummobile=Right$(CellPhoneNumber,Len(CellPhoneNumber)-1)
      
      
   
      
      
'===============ICI CHANGEMENTS DES NUMEROS========================   

      
      '----------cas d'un n° bureau national
      If debutnum="01" Or debutnum="02" Or debutnum="03" Or debutnum="04" Or debutnum="05" Or debutnum="06" Or debutnum="07" Then
         'remplacement de la valeur du champ
         Call personne.Replaceitemvalue("OfficePhoneNumber", "+33 "+finnum)
         nbmodif=nbmodif+1
      End If
            
      
      '----------cas d'un n° fax national
      If debutnumfax="01" Or debutnumfax="02" Or debutnumfax="03" Or debutnumfax="04" Or debutnumfax="05" Or debutnumfax="06" Or debutnumfax="07" Then
         'remplacement de la valeur du champ
         Call personne.Replaceitemvalue("OfficeFAXPhoneNumber", "+33 "+finnumfax)
         nbmodif=nbmodif+1
      End If
      
      
      '----------cas d'un n° mobile national
      If debutnummobile="01" Or debutnummobile="02" Or debutnummobile="03" Or debutnummobile="04" Or debutnummobile="05" Or debutnummobile="06" Or debutnummobile="07" Then
         'remplacement de la valeur du champ
         Call personne.Replaceitemvalue("CellPhoneNumber", "+33 "+finnummobile)
         nbmodif=nbmodif+1
      End If      
      
      
      
      
      
      '---------sauvegarde du changement si changements
      If nbmodif>0 Then
         Call personne.Save( False, False )
      End If
      
      
      
'MsgBox modif      
         

      
      '-----------passage au document selectionné suivant
      Set personne = docCol.GetNextDocument(personne)
   Wend
   

   
fin:
      
End Sub