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="RENBOXIP: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