BOXI Purge Inbox création le 11/05/2014 par MD BOXI Purge

Transcription

BOXI Purge Inbox création le 11/05/2014 par MD BOXI Purge
NO - BOXI Purge Inbox
création le 11/05/2014 par MD
Note
BOXI Purge Inbox
NO - BOXI Purge Inbox
1/7
NO - BOXI Purge Inbox
création le 11/05/2014 par MD
But
Purger certaines boites de réceptions BO (username) et certain message
Contexte
Une publication envoie le résultat dans les boites de réceptions BO on souhaite ne conserver
que le dernier message.
Il n’existe pas de fonction dans BO pour piloter ce processus.
La seule solution est donc avant publication de lancer une purge sélective des boites de
réceptions
Environnement
Le fichier liée à une note SAP en VBS ne fonctionne pas
Le traitement JSP lié à un note 1367065 SAP est en mode interactif
Le CG35 a donc développé un autre JSP lancé en batch (explorer “URL du jsp” ) juste avant
la diffusion, ensuite il faut tuer la fenêtre “explorer” avec un taskkill
Processus
La solution VBS ne fonctionne pas (impossible de trouver les ressources pour corriger cette
source);
' ************************************************************************
' Deletes old Inbox records for any user with more than 2 items in
' their inbox. Each time this is run, it will delete up to 10 documents.
' ************************************************************************
Option Explicit
Const CMS = "asus:6400"
Const UserID = "Administrator"
Const Pwd = "BOADMIN35"
Const Auth = "secEnterprise"
' procedure trace
sub mess(txt)
MsgBox txt
End Sub
Dim oSessionManager
Dim oEnterpriseSession
Dim oSess
Dim OldSIName
Dim txt
OldSIName = " "
'For the logon, Authenticate as Following
Set oSessionManager = WScript.CreateObject("CrystalEnterprise.SessionMgr")
Set oSess = oSessionManager.Logon(UserID, Pwd, CMS, Auth)
if ( err ) Then
wscript.echo "KO Connexion" & " " & CMS
else
wscript.echo "OK Connexion" & " " & CMS
End I
'Query the iStore and get up to 10 inbox items to delete
On Error Resume Next
'Create a new Variable for the login token
Set iStore = oSess.Service("", "InfoStore")
'Call mess(txt)
queryString = "select TOP 100 * from CI_INFOOBJECTS Where CHILDREN(""SI_NAME='Folder
Hierarchy'"",""SI_KIND='Inbox' and SI_CHILDREN>2"") and SI_UPDATE_TS < '"
queryString = queryString & Year(DateAdd("d", -10, Date)) & "."
queryString = queryString & Right("00" & Month(DateAdd("d", -10, Date)), 2) & "."
queryString = queryString & Right("00" & Day(DateAdd("d", -10, Date)), 2)
queryString = queryString & "' order by SI_UPDATE_TS"
if ( err ) Then
wscript.echo "KO Requete"
else
2/7
NO - BOXI Purge Inbox
création le 11/05/2014 par MD
wscript.echo "Query : "
End If
Set objFSO = CreateObject("scripting.filesystemobject")
Set logStream = objFSO.OpenTextFile("c:\inboxdeletelog.txt", 8, 1)
logStream.writeline "Server - DateTime: " & APS & " - " & FormatDateTime(Now,0)
logStream.writeline "Query: " & queryString
Set inboxRecords = iStore.Query(queryString)
if ( err ) Then
wscript.echo "Requete : " & inboxRecords
else
wscript.echo "Query : "
End If
MsgBox "Enter Boucle"
for x = 1 to inboxRecords.Count
Set inboxRecord = inboxRecords.Item(x)
If inboxRecord.Properties.Item("SI_NAME").Value <> OldSIName Then
logStream.writeline "SI_OWNER-SI_KIND-SI_UPDATE_TS-SI_NAME-SIZE: " &
inboxRecord.Properties.Item("SI_OWNER").Value & _
" - " & inboxRecord.Properties.Item("SI_KIND").Value & _
" - " & inboxRecord.Properties.Item("SI_UPDATE_TS").Value & _
" - " & inboxRecord.Properties.Item("SI_NAME").Value & _
" - " & inboxRecord.Properties.Item("SI_FILES").Properties.Item("SI_VALUE1").Value
inboxRecords.Delete(inboxRecord)
MsgBox "Un Message supprimé"
End If
OldSIName = inboxRecord.Properties.Item("SI_NAME").Value
Next
IStore.Commit(inboxRecords)
MsgBox "Sortie Boucle"
oSessionManager.logoff
logStream.Close
Autre solution “Manuelle” l’utilisation des programme de la fiche SAP N°1367065
Télécharger le fichier d’installation
3/7
NO - BOXI Purge Inbox
création le 11/05/2014 par MD
Déplacer les JSP dans %rep_bo%\Tomcat7\webapps\InfoViewApp (attention aux droits de
lecture seule sur ce dossier et l’enregistrement des modifications en mode superuser)
On peut maintenant se connecter à l’outils avec
http://Asus:8085/InfoViewApp/delete_inbox_logon
On accède alors à la liste des users ayant des message
4/7
NO - BOXI Purge Inbox
création le 11/05/2014 par MD
et on peut lister les message de chaque boite de réception
Si on fait Delete on obtient
Le 17/5/14
Transformé les processus en un seul ayant pour but de supprimer les boite au lettre d’un
ensemble de user ayant des message correspondant à un certain masque avant de lancer un
diffusion de ce message à destination des dit user (en fait faire une purge avant
régénération).
Ainsi on s'exonère du N° de Version.
Suivant ce scripts
<% /* * This page will Purge INBOX where more than 0 Message form a mask LIKE Allocataire Cjts% for CMS in Parameter. */ %> Import des Class BusinessObjects
<%@ page import = "com.crystaldecisions.sdk.framework.CrystalEnterprise"%> <%@ page import = "com.crystaldecisions.sdk.framework.ISessionMgr"%> <%@ page import = "com.crystaldecisions.sdk.framework.IEnterpriseSession"%> <%@ page import = "com.crystaldecisions.sdk.exception.SDKException"%> <%@ page import = "com.crystaldecisions.sdk.occa.infostore.IInfoStore"%> <%@ page import = "com.crystaldecisions.sdk.occa.infostore.IInfoObject"%> <%@ page import = "com.crystaldecisions.sdk.occa.infostore.IInfoObjects"%> Mise en place des variables dédiées au Maque ‘Fichier’ & ‘Connexion’
5/7
NO - BOXI Purge Inbox
création le 11/05/2014 par MD
<% String sDocumentName = "Allocataire Cjts%"; String users="'vchevalier','bomaster','agrandin'"; IInfoStore oInfoStore; try { // ================= parametre de connexion String username ="Administrator";
String password="BOADMIN35";
String cmsname="REN­BOXI­P:6400"; Sring authType="secEnterprise"; // ================== session //Retrieve the ISessionMgr object to perform the logon ISessionMgr oSessionMgr = CrystalEnterprise.getSessionMgr(); //Logon to Enterprise IEnterpriseSession oEnterpriseSession = oSessionMgr.logon(username,password,cmsname,authType); //Retrieve the InfoStore object from the Enterprise Session oInfoStore = (IInfoStore)oEnterpriseSession.getService("", "InfoStore"); } Traitement des exception lors de la connection
catch (SDKException sdkEx) { out.println(sdkEx.getMessage()); oInfoStore = null; } Traitement du résultat de connection
if (oInfoStore == null) { out.println("Erreur lors de la connexion"); return; } else Si Connection OK recherche des ID d’User ayant des message dans leurs boite de reception
correspondant au masque { IInfoObjects oInfoObjects; //Create the query to retrieve the all the inboxes String query = "SELECT SI_ID, SI_NAME, SI_DESCRIPTION " + "FROM CI_INFOOBJECTS " + "WHERE SI_KIND = 'Inbox' “ + “and si_children > 0 “ = “and si_name in ("+ users +") " + "ORDER BY SI_NAME"; Exécution de la Requête et test si des enregistrements sont trouvés try {
//Execute the query oInfoObjects = oInfoStore.query(query); } catch (SDKException sdkEx) { out.println(sdkEx.getMessage()); oInfoObjects = null; } if (oInfoObjects == null || oInfoObjects.isEmpty()) { out.println("Aucune boite à traiter"); return; } A partir de l’ensemble des ID trouvés fait une boucle ‘X’ de lecture de ces ID jusqu’à la fin de
6/7
NO - BOXI Purge Inbox
création le 11/05/2014 par MD
la liste else { for (int x = 0; x < oInfoObjects.size(); x++) { //Retrieve the current inbox object IInfoObject oInfoObjectInbox = (IInfoObject)oInfoObjects.get(x); out.println(oInfoObjectInbox.getID()); String queryDoc = "SELECT SI_ID, SI_NAME “ + “FROM CI_INFOOBJECTS “ + “WHERE SI_PARENTID = '" + oInfoObjectInbox.getID() + "' “ + “and si_name like ' "+sDocumentName+” ‘ "; Exécuter la requête précédemment préparée ayant pour but de ramener les ID & NAME des
messages des Inbox des User
try { //Execute the query and retrieve the object name IInfoObjects oInfoObjectsDoc = oInfoStore.query(queryDoc); Boucle de lecture des message d’un user = SI_PANID
// ========================= boucle lecture des USER ======================== //Go through each Message returned and delete it to the table for (int y = 0; y < oInfoObjectsDoc.size(); y++) { IInfoObject oInfoObjectObject = (IInfoObject)oInfoObjectsDoc.get(y); //Delete the object from the InfoObjects collection oInfoObjectsDoc.delete(oInfoObjectObject);
}
// ==================== commit en fin de boucle =========================== //Commit the changes to the CMS using the commit method. This deletes the object. oInfoStore.commit(oInfoObjectsDoc); } Traitement des exception de DELETE et fermeture de toutes les procédures // ========================= exception =================== catch (SDKException sdkEx) { out.println(sdkEx.getMessage()); } } } } Message de Fin de traitement
out.println("Succès"); %> il reste quelques amélioration a effectuer quant à la portabilité avec un
get.systemproperties(“%computername%”) pour le nom dynamique de la machine,
éventuellement passer en paramètre le masque du fichier et la liste des users
Enfin loger les actions effectué avec un un get.writedocument
7/7

Documents pareils